To see why this matters, let's go back to Gabriel's Worse is Better argument. What Gabriel
showed was that Lisp was simpler, allowed the programmer more flexibility, was surrounded
by a better set of programming tools, and was better for rapid development of code. What
he didn't point out is that C, at the time, was available on much cheaper hardware, and code
written in the language ran much faster (on the cheap hardware) than code written in Lisp.
The fact that C won the language battle didn't so much show that something worse was val-
ued more than something that was better, but that the people making the decisions valued the
places where C was better more than they valued the places that Lisp was better.
What Gabriel presupposed in his argument was that the factor that made a programming lan-
guage good was the productivity of the individual programmer using that language. Even if
we buy all of his arguments, the best we could conclude is that Lisp was a better programming
language for an individual programmer. But that aspect of the language had to be balanced
against the cost of the environment, where the C language was better. It wasn't that C was
worse; it was that it was worse for some things and better in others. The reason that C won the
programming language war was that running fast on cheap hardware was more important to
those making the decisions (who, generally, were not programmers) than increased individual
The relevance of all this to the current book is that, before I can launch into talking about the
good parts of Java, I need to spend a little time talking about what Java is good for. I'm not go-
ing to claim that the parts of Java I'm going to talk about in what follows are always the good
parts, no matter what you are trying to do with the language. Nor am I going to try to claim
that Java itself is the language you should use for any and all of your programming needs.
with some jobs. Perhaps everything you do is the kind of thing where Java is the appropriate
tool. But if you have a programming task where some other language is more appropriate than
Java (and there are lots of such tasks), then citing that task as something that Java does badly
does not mean that Java is not a good language. It just means that Java isn't good for that task.
What Is Java Good For?
So what is the Java language good for? Or, more precisely, what are the situations in which I
find myself reaching for the tool that is Java?
First, I find Java a useful tool when I'm working on a project that is either so large, so com-
plex, or on such a short schedule that I need to be working with other programmers to get it
done. Java has a number of characteristics that allow you to break the work up into smaller,