January 8th, 2008


In which Ben counter-punches the Java haters.


Because of its popularity in the context of Web applications and the ease with which beginners can produce graphical programs, Java has become the most widely used language in introductory programming courses. We consider this to be a misguided attempt to make programming more fun, perhaps in reaction to the drop in CS enrollments that followed the dot-com bust.

God forbid programming should ever be fun. Can't have that! We don't want just anyone being able to slap together programs to do what they need, whenever they need it. People should have to suffer for working programs! Yes!

What we observed at New York University is that the Java programming courses did not prepare our students for the first course in systems, much less for more advanced ones. Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging.

If they don't know pointers, it's because YOU DIDN'T TEACH THEM. My Java student got an overview of pointers when I taught her, because it was necessary to explain objects and new. You are blaming the student for your own failings as a teacher.

Let us propose the following principle: The irresistible beauty of programming consists in the reduction of complex formal processes to a very small set of primitive operations. Java, instead of exposing this beauty, encourages the programmer to approach problem-solving like a plumber in a hardware store: by rummaging through a multitude of drawers (i.e. packages) we will end up finding some gadget (i.e. class) that does roughly what we want. How it does it is not interesting! The result is a student who knows how to put a simple program together, but does not know how to program.

Bullshit. Knowing how stuff works on the inside is not necessary to programming, any more than knowing the difference between pine and spruce is necessary to build a house.

I'm not saying that people shouldn't know how stuff works inside. They most certainly should. But to say, for example, that a Perl programmer "does not know how to program" simply because the Perl interpreter insulates them from certain realities... it's not just insulting, it's flat out wrong.

A further pitfall of the early use of Java libraries and frameworks is that it is impossible for the student to develop a sense of the run-time cost of what is written because it is extremely hard to know what any method call will eventually execute.

And this makes it different than libraries in any other programming language... how? Are you suggesting that students who use sscanf() in first-year classes already have an intuitive grasp of text parsing and have a feel for and how many cycles any particular set of input is going to take to parse? That they are psychic and somehow know what subroutines sscanf() is going to call?

Besides, not having the first clue what code is actually going to execute when they call a function is perfect preperation for C++! Ha!

I can't believe you bash on Java as being "too high level" and then go on later in the article to sing the praises of Lisp! I don't have a problem with teaching people assembley, C, Lisp OR Java. A lot of great engineers started their lives learning BASIC as their first language. I suppose you think they're all horrible coders now too, eh?

In short, you're an annoying old fart, and the rest of us aren't going to get off your lawn. Your chicken-little esque "sky is falling" hysteria about Java is as boring as it is tiresome, and says far more about you than it says about modern CS students. If we let people like you rule the roost, everyone would still be programming everything in assembley language, and the best programs ever made would never have gotten coded! You sorry old ivory tower dwelling Ada-lover.

Ada is the language of software engineering par excellence.

Congratulations, you've just made parody obselete. No amount of hyperbole I can summon will make you look as outmoded and out of touch as that single sentence. Like any other language, Ada has it strengths and weaknesses. If I was writing software for the mars rover or a nuclear power plant, I might consider Ada. But to hold it up as the ne plus ultra of all programming? To say it is the best programming language out there? My god man, you're out of your mind...
  • Current Mood
    sick & cranky
  • Tags