Software development / Using high-level languages and abstractions
From WhyNotWiki
Coda Hale (2005-12-30). Joel's Old: Get Off My Lawn (http://blog.codahale.com/2005/12/30/joels-old-get-the-hell-off-my-lawn). [C (category)][Java (category)]
...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 [the] 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. [...] 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 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!”
http://blog.codahale.com/2005/12/30/joels-old-get-the-hell-off-my-lawn#comment-424,Coda,April 24th, 2006 at 11:19pm
...
My point [...] is that a fine theoretical grasp of the low-level workings of von Neumann machines is becoming less and less relevant to the general practice of software development, and therefore, less and less relevant to the teaching of software development. (Mind you, software development != computer science.) It doesn’t hurt, but a pedagogy based around the requirements of langauges like C definitely can [hurt]. Joel obviously has a different opinion on this.
Software development / Using high-level languages and abstractions edit (Category edit) Category:Software development / Using high-level languages and abstractions
