4 ms·
When I was 5 or 6, my parents got me a Commodore 64. It had some games, including some written in BASIC. I was always curious how things worked, and I wanted to
by silentbicycle 17y ago
When I was 5 or 6, my parents got me a Commodore 64. It had some games, including some written in BASIC. I was always curious how things worked, and I wanted to make games, too. The library had a couple books about BASIC, and I learned enough to write text-adventure-ish games. Understanding the concept of variables at an early age gave me a big head start on algebra, too.
In my early teens (early 90s), I saved and got a C++ compiler, Borland Turbo C++. Digging into real memory with a debugger was so cool. I wish I'd had a Forth to play with, at that age! Later, I dug into Linux, and all the stuff that came with them. For free! (I'd suggest Python as a first language, nowadays.)
A couple things I wish I'd learned earlier:
1) Learning how to work on codebases with other people takes different skills than solitary stuff. Since I started by working alone as a little kid, I didn't really learn consistent variable naming conventions, how to define interfaces between components, etc. until I was in my late teens and digging into open-source stuff. You may not ever learn these things doing projects that are only a couple pages long. (_The Practice of Programming_ by Kernighan and Pike is a short, lucid book that covers this well, IMHO.)
2) Complexity kills projects. Most things don't need to be large systems, and if you structure a system as a group of communicating components, you can get a prototype (rough draft) of the whole system, see design mistakes early, and then cleanly replace the parts that need it. (I don't think conventional OO works that well for this - as Joe Armstrong observed, everything carries along too much context.) Start simple and don't worry about efficiency until you have to. Brainstorm on paper, if that helps.
3) Write programs for something you're interested in, not just another blog engine or what-have-you. The added motivation in making something to make music, cool 3D animations, etc. will keep you going through the hard parts. Your social science background will give you an angle for interesting projects beyond the ken of most CS students.