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. 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.
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.