There are lots of languages which are better than Java, some of which have been around for decades. One of these is similar in many ways, and influenced Java's design: Smalltalk. Smalltalk, and in particular the Squeak dialect, is so obviously better than Java in every way that even a child would realize it. But don't expect to use Squeak in your job. Your boss doesn't pay you to have fun.
There's no need to take my word for it that Java is inferior to Smalltalk. Ask Java's inventor, Tom Stambaugh, which language he prefers. You read that right -- Tom Stambaugh invented Java not Gosling.
I originally had planned to list and discuss Java's technical deficiencies here, of which the first five are in my opinion serious design flaws:
However, I cannot ignore Java, for reasons which go beyond its lack of technical merit. These reasons are:
During the 1990s, things got out of hand, with people claiming that the very nature of economics had changed, and that people could make lots of money sustainably by investing in and using the World Wide Web. Java was a major part of this hype -- it was marketed as the internet language, to run on the client's machine as applets, and then when people got tired of applets, on the server as Java Server Pages or servlets.
As soon as people realized there was nothing in the hype, The IT Winter begain, companies went belly-up and lots of people were out of work.
This cycle of boom and bust has happened before, in the late 1980s with AI and Expert Systems. But at least then, alongside the hype and the greed, there was the much nobler aim of making computers more intelligent, and an attempt to manage customers' expectations. Not this time.
During the internet boom phase, companies couldn't hire programmers fast enough. Even inexperienced programmers could command high salaries. There was pressure on university computer science departments to dumb down courses (see Claiming back the meaning of computer science), and to introduce or popularize an MSc in Information Technology (a one year conversion course) so that graduates from other departments could acquire plausible qualifications. The result of this is that, rather than only those students who were actually interested in computing, and /motivated/ to study the more difficult modules, computer science courses were flooded with people who were in it for the money.
Naturally, the quality of the average graduate plummeted, and consequently the quality of the average programmer.
Many of Java's technical deficiencies, and some of its good points (e.g. garbage collection) are a deliberate attempt to make the language suitable for even mediocre programmers. These programmers regularly shoot themselves in the foot with C, because of its weak typing, lack of array bounds checking, and explicit pointers. These programmers are scared of weird looking languages like Lisp (because of its parentheses). Java seems about right for them, so it was chosen for them.
Because there are so many of them, Pointy Haired Bosses think it's easy to replace one Java programmer with another. They are Commodity Programmers.
To my mind, the hallmark of the interchangeable component model of software engineers is Java. Without going into too many details, I'll just say that having programmed in Lisp the shortcomings of Java are glaringly obvious, and programming in Java means a life of continual and unremitting pain. So I vowed I would never be a Java programmer, which pretty much shut me out of 90% of all software engineering jobs in the late 90's. -- Erann Gat, from Lisping at JPL
Java isn't just for dummies. Some of the smartest people I know have had to program in it. Working systems have had to be rewritten in it. New systems have been developed in it which could have been up and running in a fraction of the time in had they been written instead in Lisp, Smalltalk or Python. But of course, we can't use those languages because we can't find programmers with experience in those languages because they're all busy programming in Java because it's hard to find jobs in Lisp, Smalltalk or Python. Think what these people would have achieved had they not been thus diverted.
It is my hope, now a somewhat forlorn one, that computers will one day approach human intelligence. For that, a language needs the right features on top of which to build intelligence: symbols (not just variables), singly linked lists, ability to treat code as data and vice versa. Java lacks both symbols and the ability to treat code as data (any more than C can). It has classes for Doubly Linked Lists. (Of course, you can always greenspun your own singly linked lists.)
Unlike some languages such as Lisp and Prolog, Java was never designed with the intention of making computers smarter. It was designed to have as wide an appeal as possible, with the intention of taking on Microsoft. But if you dumb down the programmers, the programs that get written get dumbed down, too.
Java would have been an exciting language 30 years ago. Eight years ago, we deserved something better.
Your head doesn't damage walls. Java damages walls. -- Nathan Myers
Interviewer : There is some progress? There are new programming langugages that make everything easier, even ordinary internet users have heard of Java.
Dijkstra : It's embarrassing. Because it is so bad. The only reason Java has been accepted is because it is a product of a company, SUN, that has made enormous advertisement for it. Beautiful programming languages exist, and a good language, like a tool, is just a joy. But industry doesn't want that. Probably because decisions are made by technically incompetent people.
I came to Java from a different world of programming, the Smalltalk world. For people who program in Smalltalk, Java is a 30-year step back.
Java and C++ make you think that the new ideas are like the old ones. Java is the most distressing thing to hit computing since MS-DOS.
I get secret satisfaction when bad ideas take hold and suck a lot of people in ... like Java (Just teasing.)
Other high level languages are similar one-liners. Even Intercal, a language developed as an elaborate joke, is more succinct: Hello World in Intercal. Of course, Java apologists will point out that EJBs were never intended for anything that simple. Heaven knows how long anything complicated will be in them.
This page was linked to from
and was last updated on 2006-03-11 at 23:17.
© Copyright Donald Fisk 2006