Saturday, June 11, 2005

So you wanna be a programmer?

Hazygrin links to Joel saying he agrees that you should start learning programming at a level as close to the metal as possible, i.e., C. I disagree, and I suspect that generally the people who are in this camp are the people who learned C first. (I'm not one of those; I learned Pascal before C, although a one-credit course in college in C might have been the most valuable class I ever took, practically speaking.)

Joel's alternate suggestion is a straw man, of course. No, obviously learning HTML or copy-and-pasting Javascripts is not quite the ideal learning experience. But I see absolutely nothing holy about C as being just exactly the right level to learn at, and I firmly disagree that learning the technical details about why strings are hard to manage is important for a beginner. That may be the single reason that more people aren't interested in programming, which is a shame considering the myriad of good string implementations that are out there.

But if you must get fairly close to the machine, why not start with a managed language? Being able to move from Java or C# to byte code is going to get you a long way to understanding how your source code is translated to something the machine understands, without having to really bury yourself under a load of machine code manuals.

I would replace this recommendation with Stroustrup's The C++ Programming Language, 3rd edition, which replaces all the stuff about byte copying with good object-oriented design. Going all the way back to C is, to my mind, no more necessary to a programmer starting out today than a recipe for bread has to start with "Grind down enough wheat to produce three cups of flour..."