; Date: Mon Dec 17 2007
I've got a few minutes before heading off to a meeting, and see a few blog postings on approximately the same topic. Should Java (the language) strive to be the perfect be-all-end-all language? Or should it simply strive to be good enough?
On the #openjdk IRC channel one day last week we had an impromptu debate along these lines. One or more people were claiming Java (the language) sucks, that it should have several different uber-features, and basically that since it's not Haskell or some such it's a complete failure. As a language, that is.
Java the platform, Java the runtime environment, that is clearly one of the most successful cross platform runtime systems of all times. Cross-platform runtime systems have a long history, and my earliest knowledge of them is with Forth and with the UCSD p-System Pascal (which I ran, not on an AppleII but on a Terak PDP-11). Java the platform is near-ubiquitous, offers ever-increasing capabilities and performance, supports dozens of different programming languages, and does a great (not perfect) job of behaving well across platform.
Java should stay Java (?|!): Draws an interesting distinction between the uberprogrammers ("übergeeks that think in monads") and the rest of us. Tim Bray in On Closures draws a similar distinction. "My argument is simple: Java worked so well because it hit the 80/20 point; for my money one of the loudest, cleanest 80/20 technology victories ever. Subsequent attempts to fill in the 20% were, well, mostly harmless. Until generics, which are a disaster; they have made Java harder to learn and to understand, and you can’t avoid them."
I am very much in agreement with the points raised by these two. I can't help but remember Beta-versus-VHS being on the losing end by having bought the superior Beta VCR. This is my example of how the 'Best' is not necessarily 'Best'.
Just because some particular language has wonderful ubergeek features, does that make it 'Best'? There was a distinction Graham Hamilton promoted to the Java SE -- that there are a lot more average programmers than there are ubergeek programmers. If this thing we call Java were to be targeted only to the ubergeek programmers it would limit the potential audience for Java. Now, why is that important to anybody but Sun? Clearly this is important to Sun because the more Java appeals to a broad spectrum of developers the bigger a market we have to sell services into. However to the rest of y'all, this is also important because the bigger the Java market is the more work there is for Java programmers. It serves everybody if the Java market were to be as large as possible.
The nice thing about the Java ecosystem architecture is that it supports multiple languages. One can have a range of languages for the average programmer, and one can have language(s) for the ubergeeks, and through the magic of the underlying platform they can work together.
A practical example ... there are a couple ways to run PHP programs on top of the Java platform. This offers you an opportunity to hire PHP programmers to do the front end of a web application, while the business logic and enterprise scalability is written as Java services somewhere in the back.
So.. back to the debate of 'Should Java stay Java'... I don't have the technical background to properly evaluate the different Closure proposals. I have recently learned Groovy and like the way Closures are implemented there, and that's about as far as my preferences go.
But ... I think there's a distinction to be drawn here between Java-the-Language and Java-the-Platform. This distinction is, I think, sometimes lost on people.