This is about computer programming, but the issues it raises are more general:
Sunday, February 05, 2006 :::
Years of whinging by lazy CS undergrads like me, combined with complaints from industry about how few CS majors are graduating from American universities, have taken a toll, and in the last decade a large number of otherwise perfectly good schools have gone 100% Java. It's hip, the recruiters who use "grep" to evaluate resumes seem to like it, and, best of all, there's nothing hard enough about Java to really weed out the programmers without the part of the brain that does pointers or recursion, so the drop-out rates are lower, and the computer science departments have more students, and bigger budgets, and all is well.Of course, the benefit of high-level programming languages is that they make it comparatively easy to dispatch the tasks that they do handle well; they can remove a lot of tedium from essentially simple tasks and allow you to attend to more essentially difficult tasks. To the extent that such tasks can be lumped together and given to programmers who couldn't handle other things, but can do these things well, I have no real problem with doing so. A lot of the time, though, such encapsulation is less clean than it superficially appears; it's just the nature of things that more than 10% of programmers are going to have to work on tasks that aren't in the 90% of things that most avoid hard implementation details.
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. They'll never have to get their head around how, in a purely functional program, the value of a variable never changes, and yet, it changes all the time!
...Now, I freely admit that programming with pointers is not needed in 90% of the code written today, and in fact, it's downright dangerous in production code. OK. That's fine. And functional programming is just not used much in practice. Agreed.
But it's still important for some of the most exciting programming jobs. Without pointers, for example, you'd never be able to work on the Linux kernel. You can't understand a line of code in Linux, or, indeed, any operating system, without really understanding pointers.
Without understanding functional programming, you can't invent MapReduce, the algorithm that makes Google so massively scalable. The terms Map and Reduce come from Lisp and functional programming. MapReduce is, in retrospect, obvious to anyone who remembers from their 6.001-equivalent programming class that purely functional programs have no side effects and are thus trivially parallelizable.
I used to be able to tell the smart kids because they could rip through a recursive algorithm in seconds, or implement linked-list manipulation functions using pointers as fast as they could write on the whiteboard. But with a JavaSchool Grad, I can't tell if they're struggling with these problems because they are undereducated or if they're struggling with these problems because they don't actually have that special part of the brain that they're going to need to do great programming work.The problem isn't that the language isn't useful; it's just not comprehensive, and certain kinds of problems simply aren't really expressible in it.
::: posted by dWj at 12:52 PM