Java = Insufficient Suffering
I like Joel Spolsky. He has some pretty unconventional ideas about how to develop software, but he also has the courage of his convictions and the ability to set them down on paper in a pleasing manner. Really, I’m a sucker for any geek who writes well. They’re so far and few between.
But there are some opinions that, no matter how skillfully rendered, just go beyond the pale. His latest article is a case in point. Its thesis: that university computer science programs across the country are making a terrible mistake in using Java as a teaching language, because it’s not hard enough to understand.
He puts a slightly more delicate spin on this, of course: he thinks that Java is insufficient because it doesn’t force its practitioners to worry about pointers and recursion. He then departs on a long journey into the past, when men were men and compilers were compilers and computer science curricula were vicious murderous psyche-flattening exercises in institutional sadism, when the coursework was so ridiculously hard that it routinely reduced young fresh-faced freshmen into weeping piles of geek goo. He pines for this. He argues that the people who made it through the agony of those terrestrial hellfires are by definition good programmers. Good Lord! Universities these days are turning out unbroken less-than-geniuses! Fie! Fie on all of these fey gutless pampered mental deficients!
Where to begin? I’ll dispense with the obvious first: while it’s true that Java doesn’t have explicit pointers, it’s not in any way true that it doesn’t support recursion. I’m not sure where Spolsky is getting this from, but you can recurse in Java as well as you can in any language. I know. I’ve blown out many a stack in my time. You can send your code down endless recursive rabbit holes quite effectively in Java, thank you very much.
And I would argue that Java does have pointers, because pretty much everything is a pointer. Granted, you don’t have to worry about mallocs and frees and any of those other horrors, but you still need to understand that you’re manipulating references to objects. Yes, it’s no longer necessary to maintain linked lists on your own, but if anyone in even the C world is still writing those basic data structures, then they’ve got serious problems.
But beyond all that, what I really take exception to is his underlying point: that you need to kick the shit out of young computer science hopefuls if they’re ever going to be anything, you need to weed out the chaff and let the cream rise to the top and all that, you need to murder the ambitions of all of those innocent geeks whose computer aptitude doesn’t extend to complex proofs and the insane complexities of binary floating point number theory.
I still remember my first computer science class. Or, rather: my first computer science class is still branded deeply in my mind, an ugly red radioactive gash clearly visible on the surface of my brain. It pulsates. It wakes me in the middle of the night, screaming. It sends cold shivers down my spine and propels me into long sobbing lamentations in the middle of meetings with important clients. I remember sitting down on the first day of class and watching the professor, a lean gangly middle-aged man with a friendly smile, throw a bunch of arcane symbols up on the board and launch into a long explanation of formal proofs and what they meant and how to write them and np complete and theta gamma epsilon and Big O and Little O and Medium Sized O and O squared and O god I want my Mommy. I want my Mommy! But it kept coming, class after class, and I kept squinting at the gobbledegook on the board and writing it down while at the same time refining a suicide note in the margins on my notebook (I love you all I just couldn’t take it anymore please bury me with my Atari 800XL) and looking over at my classmates and seeing my own terror and incomprehension and nascent suicidal impulses mirrored in their faces. I remember getting back my first exam, and looking at the grade, and nearly fainting before I realized that, no no, it’s normal to get only 40% of the answers right, that’s actually a pretty respectable score. Not bad at all! I mean, horrible, but passing. Better than passing!
I ask you: what’s the point of all this? Yes, you have to challenge your students. Yes, you even have to make their lives difficult, because you need to tear muscle to build it up and all that, fine, whatever, but why is it necessary to fillet them and draw and quarter them and pull out their entrails and force them to eat them? Hyperbole, you say? No sir! Not hyperbole! We were forced to perform the spiritual and mental equivalent of tearing out and eating our own intestines every single day of that first semester. So that by the end of it, we were hollowed out shells of our former selves, beaten burned husks of the happy idealistic children who had first filed tentatively into that classroom.
So, yes, we made it through, most of us, and things got better after that: there was no longer this insane need to destroy the weak: chaff had been successfully excised. But, really, I don’t believe I learned anything in that class. I survived it, but I don’t count base animal survival as an indicator of computer science skill. It was raw instinct, the same brute impulse that drives an animal to gnaw off its own leg when it’s caught in a trap. Those paragons of academe, those keepers of the ivory tower, they smiled and ushered us in through the door and sat us down at our desks and then took out their flamethrowers and doused us in fire for three months straight.
I repeat: I don’t know how this says anything about my abilities as a software engineer. Maybe it proves that I can survive generalized academic adversity, but I’m not exactly sure where to list that on my resume. Maybe under the skills section: “Able to do the mental equivalent of walking barefoot across a nail-studded bed of hot coals while wearing an overcoat made entirely of hungry mosquitoes.” I tried that. It just doesn’t fly. They never ask you about the bed of coals.
Anyway. Here’s my point: these kinds of classes probably do turn out very good programmers, but they also destroy potentially very good programmers who didn’t know they were signing up for boot camp when they signed up for college.
4 Comments