I guess someone put a baseball through one of Old Man Spolsky’s windows, because he’s down on the sidewalk shaking his fist at those damn kids:
The lucky kids of JavaSchools are never going to get weird segfaults trying to implement pointer-based hash tables. They’re never going to go stark, raving mad trying to pack things into bits.
Now I realize that Joel’s a total ninja when it comes to software, and I can respect that. But when Grandpa’s out on the porch yelling at the neighborhood toughs wearing only a dress shirt, my sense of filial duty does not override my desire to get him to put some pants on.
Here’s why I think Joel’s call for an Asperger’s Revival is a bit daft.
I agree with him that recursion is an important skill to use. Without recursion, tree structures are ineffable creatures. Nuff said. I also agree with him that functional programming broadens the mind, and I’ve been meaning to pry mine open a bit more by learning Haskell.
That said, I think he’s drunk when he says that learning how to write a linked list using pointers is useful.
To start CS undergrads off with C as a learning language is like tying a brick to the right leg of everyone on the track team: after four years, they’re gonna limp. C constrains the mind; having to micromanage your own memory doesn’t produce great programmers, it produces several decades of buffer overflow vulnerabilities. Keeping function declarations in a separate file from the actual functions is catering to a preprocessor written before I was born. That’s just stupid. Is C useful? Sure. It’s great for low-level stuff, like operating systems and compilers and such. But how much of your day do you spend actually working on that? I don’t write drivers, and trying to implement database-drive intranet applications in C would be like trying to fix a modern F1 race car with a spanner wrench and a jug of greasy moonshine. Somewhere, somehow, someone scary could pull it off, but it’s not something to be done. For me, C is as useless as a buggy whip.
I also think Joel’s a bit quick to dismiss object-oriented programming as spending “countless hours rewriting your code to rejiggle your object hierarchy.” Writing orthagonal, extensible objects is hard work, and reason you do it isn’t to make the code compile any different, for the most part. Yes, yes, you could re-implement anything I do in Ruby or Object Pascal in C or even Assembly (or hell–machine code), but the point isn’t always the compiled binaries. The point should be about writing software which is understandable by other humans and not some sort of horrific train-wreck of curly brackets and semicolons. Lord knows I’ve spent enough time with fools weaned on procedural languages who stuff everything in a class named MyClass. Check out the difference in code between WordPress and any other PHP application and then try to tell me that “rejiggling your object hierarchy” isn’t difficult but worthwhile.
I dunno, maybe Joel just got through managing a small herd of idiots who spent 2 years writing linked lists in Java and he’s a bit fed up with programmers who don’t know what they’re doing. Fair enough. But for each line of code he writes to get around a limitation of his chosen language, there’s another guy writing one that actually does something. Software is a human phenomenon, and the reason we like high-level languages is because we shouldn’t have to “think of things at multiple levels of abstraction simultaneously” when we’re dealing with a goddamned linked list. Low-level hackers have a place of prestige in the world–and rightly so–but to assume that a programmer is the worse for not having been hamstrung by an archaic language directly responsible for decades of truly crap code is just silly. Joel should have reached farther back and chided today’s youth for not keeping track of which registers their code uses. “Kids these days don’t know their cx from their bx!”
C’mon, Grandpa… it’s cold out; come back inside and put some pants on.