Glass Maze Every jumbled pile of person

Posted
31 December 2005

Tagged
Uncategorized

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

Posted by
Z
1 January 2006 @ 11am

Amen. I love to read Joel as well, but on this one I think he crossed the line into disbelief. Kind of like the natural ability for women to forget the pain and uncomfortable affects of childbirth, and their willingness to concive again because of it.

Clearly, Joel either had a very different experience in college, or he has forgotten the horror of Data Structure 204 and Operating Systems 409.


Posted by
lapsed cannibal
1 January 2006 @ 11am

Z – Yeah, I think that’s exactly right: our minds just aren’t equipped to remember pain. A good defensive mechanism, I guess, but it inevitably leads to articles like this.


Posted by
bob
2 February 2006 @ 11pm

I could be convinced that teaching students the gory details of C does not make people good programmers. I can also accept that one can learn to be a good Java programmer without learning C. But, learning several languages teaches one a lot about computer science, which does have value. If you only have Java under your belt, you have no idea of what underlying knowledge you may be missing. Consider human language: people who speak multiple languages gain a better understanding of even their own native language, when they have studied others.

As far as putting programmers through the ringer before setting them free, I am more concerned. I have worked with a great many programmers who could not design a performant and maintainable system that meets the requirements to save their lives. Many can not diagnose the simplest of problems – this leaves others of us having to do their work. Lets say a customer calls in with a critical problem. Johnny-Slept-through-All-CS-Classes gets assigned the issue. He takes forever studying the code and sends a few fixes that don’t work. Finally skilled labor has to come in, after the customer has gone critical and try to save the day.

I am not saying that the CS people have to be killed as part of the curriculum, but lets face it – programming is becoming a very competitive field. Once the US salaries bottom out and become equivalent with those in India and China (AND THEY WILL), we are going to be competing on raw skill. Not understanding CS fundamentals could really count against one in that market.


Posted by
lapsed cannibal
3 February 2006 @ 6am

bob – I can’t argue with anything you’re saying. I wholeheartedly agree that the more languages you learn, the better, and that you need to challenge people in order to unlock their full potential. What I object to is the half ascetic / half sadistic nature of some of the classes I took in college: where they seemed to fetishize the act of inflicting intellectual agony for it’s own sake. This inevitably made getting through these courses an act of survival, rather than one of education, enlightenment, or edification.


Leave a Comment