sethkojo
That's where computer science comes in. CS deals mostly with abstract concepts -- algorithms, data structures, parsing...that type of stuff. If you train your mind to think in these terms, then you start seeing programs as the sum of their parts (state machines, stacks, trees, grammars) and complex programs become less of a black-box. In effect you're transforming And because you can now picture how someone else has built their program, you just put those same pieces together and with a bit of thinking and googling, you can glue them up into something similar. Eventually you'll be able to picture your own solutions from scratch.
The thing, though, is that computer science is math. A different type of math, but math all the same. It's something you have to work at your own pace, patiently. Deliberate practice is not just a catchy phrasing. It's a very important concept. I stress this because I made the mistake of rushing through a lot of this stuff. I only half got it, but it's worth taking the time to fully understand even seemingly simple concepts because it opens up so many possibilities!
So in order to solve your tutorial problem ("what you need to learn, in what order, to get started"), I would suggest you pick a problem that's interesting to you, find out what sorts of concepts it depends on (what data structures are involved, what fundamental algorithms, ... that sort of thing) and work your way from those concepts to the solution (a working program). For example, if you were interested in building databases, you might want to learn more about b-trees, but in order to learn about b-trees you might need background in simpler data structures and work your way up. You might also want to learn about how to build a query engine, so you might want to learn more about lexing, parsing, and all that. From there you just learn how to implement those things (or find a decent library) in your language of choice and go from there.
The linear model is much easier to parse since the stories are sorted. The grid model is not inherently worse, but they would need a better understanding of color to make it work. Maybe a bit less saturation to give prominence to the headlines?
Dates can also help when someone is talking about a technology which might have iterated past the point that their article is even relevant.
Language is very much context-dependent. Providing less context usually only helps misunderstandings.
All the details might not be filled in, and there are surely things I overlook from the high-up view, but for the most part I already envision the solution.
The design part of TDD is just the expectations. So if you were to test an add function for example, you might write something like
assertEqual(add(5,2), 7)
assertEqual(add(-5,2), -3)
assertEqual(add(5,-2), 3)
before actually implementing the function. So here the design is that the add function takes 2 arguments. That's it.For other things like classes, your expectations will also drive the design of the class -- what fields and methods are exposed, what the fields might default to, what kinds of things the methods return, etc. Your expectations are the things you saw in your head before you start coding. So it's pretty much the same as what you do already. The benefit of TDD is in knowing that you have a correct implementation and you can move on once things are green.
One thing that's easy to misinterpret is that TDD doesn't mean writing a bunch of tests before writing any code...That's pretty much waterfall development. TDD tends to work best with a real tight test-code loop at the function level.
There's no need for a mature standard library. Things move faster nowadays and you can't wait for things to get standardized. Node embraces the open-source spirit and trusts that the best libraries will rise to the top eventually.
And then you do all of it in JavaScript.
JavaScript is actually a top notch language. Cream of the crop. Lambdas, higher-order functions, apply/call, and OO. What more could you ask for from a dynamic language?
I doubt passion for business has much to do with morality. Simply being mature and having a bit of empathy is enough.
I organize my journals by keeping each month in its own file <month yyyy> (e.g., "jan 2013", "aug 2011"). And in each file I write the date (mm/dd) as the outer most indentation, then write the entry (indented) underneath it. So a typical file might look like:
09/27
Some notes here.
An idea here.
A particularly good idea here.
So I flesh it out here.
And add more details as I go.
Some things I learned..
09/28
Today's entry...
I use software over paper for two reasons -- it's much faster to get my thoughts down and I can easily search through my thoughts later (a simple matter of Ctrl+Shift+F). Getting your thoughts down quicker helps with brain dumps which tend to be more useful than refined sentences later on as they capture more of the state that you happened to be in.