Java Schools

Joel Spolsky argues that, now that more and more universities switch to teaching Java instead of Lisp/Haskell/C, it becomes harder for him and his “generation” of computer scientists to find the talent.

In “his years” computer science was still a hard study where most people dropped out, simply because it was too hard. They learned pointer arithmetic, recursion and lambda calculus, these days, as there’s a lack of well-educated computer scientists, colleges are somewhat pressured to lower standards. One of the ways to do that is by switching to simpler languages like Java. There’s no pointer arithmetic there, it’s all a lot simpler.

The difficulty of these courses is astonishing. In the first lecture you’ve learned pretty much all of Scheme, and you’re already being introduced to a fixed-point function that takes another function as its input. When I struggled through such a course, CSE121 at Penn, I watched as many if not most of the students just didn’t make it. The material was too hard. I wrote a long sob email to the professor saying It Just Wasn’t Fair. Somebody at Penn must have listened to me (or one of the other complainers), because that course is now taught in Java.

I wish they hadn’t listened.

Therein lies the debate. 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.

However, he argues, if people don’t learn functional programming anymore, how can one come up with MapReduce, the one thing that made Google so massively scalable. It’s a (fairly) straight forward principle, coming from functional programming.

So do I agree with Joel? For the most part I do, the most controversial part of the article, arguably, is:

Instead what I’d like to claim is that Java is not, generally, a hard enough programming language that it can be used to discriminate between great programmers and mediocre programmers.

All I that comes up in my mind is: I don’t give a shit. Since when have programming languages become a recruiting tool?

I suppose I’m “old-school” myself, even though I graduated this (depending on when you read this) year only. My university still taught functional programming, recursions, we did do some pointer arithmetic and stuff and I’m quite happy that they did.

Be sure to read Joel’s essay. And the responses that showed up in my (Google Reader) aggregator (sometimes in feeds where I hadn’t expected it):
* Language Log: Old School
* ongoing: Recursive Spolsky
* Frans Bouma: Teaching only Java is bad?