Wither Java
Eddie and I (and some soon-to-be-mentioned others) have been working on a project that requires a number of key pieces of infrastructure as well as some high-level components and we've had some spirited discussions about programming languages (somewhat inspired by this post). Recently he's been working in C while I've been working in Python and I find that it's harder to get into the C-groove when reading his code after working in Python than say reading a more modern language like Java. And he's finding that chasing memory leaks also takes some mental re-tooling. And yet, the approach still feels more "right" than this 100% Java stuff which has become so popular on the web these days.
Today he revisited the issue of safety and freedom languages with me and we got into a discussion of control versus flexibility that merits its own post (or maybe a comment from him here) but during our conversation I was struck by the fact that both of us kept trying to work Java into the spectrum we had arrayed the various different languages into without much success. Java seems to fall somewhere in the nebulous middle where you get little control and little flexibility with performance that is somewhere in the middle of the two.
Anyhow this got me to thinking about Java and about why it was that in the last 5 years I've gotten so disenchanted with it and I realized that despite the hundred of millions of lines of Java code, despite the amazing state-of-the-art stuff JITs can do today-- Java has gotten pushed into the nebulous middle of a spectrum that will probably make it obsolete for web development over the next few years. The two things that were most exciting about it are now almost completely irrelevant:
(Just to be clear, the following applies only to web applications. PC fat clients, phones, and WARP engines may be a different story)
Portability: Back in the day of #ifdef UNIX hell, Java was a breath of fresh air. However, Linux won the Unix wars. Peter Yared, and ex-Sun guy who got the LAMP religion and started a company, put it best in an interview when he was asked about platform independence:
You know you’re running on Linux ‘x86, you don’t need platform portability at the language level anymore. We all spent a long time in Java to make sure developers were no longer locked into an operating system or chipset. That was what made Java successful. When it took off in 96-97-98 when it moved from the browser to the server, you weren’t locked in to Solaris or HP-UX or AIX or whatever. Linux does the same thing. So, if you know what operating system you are running on, in this case Linux, do you need layer in between? We think the answer is no.Alternatives: C++ does really suck and Java really did a great job of making programming fun again. Plus, 10 years ago Perl was the only credible alternative to Java (which is why I think it did so well). Today, you've got Python and Ruby and a number of credible apps that show that it's possible to work in these languages. Sure the JITs aren't there and the dev tools are not super rich but the runtimes work well and the languages are nice and clean. And most importantly, these languages/runtimes/communities play well with all of the existing web infrastructure so people feel little need to he compared Java to Cobol and called it an "evolutionary dead end." And the flamewars that the RoR folks have started over and over again with the Java people have now gotten so old, I wish there was a wired-tired list for geeks to post them to. I like Java, and as I said above, it's really much easier (at least pre-1.5) to read that straight C. My only real point here is that for what we're doing, it's funny to see it occupying a dead man's area on the spectrum of today's computer language trade-offs.

Hi, I'm Antonio, living in Boston and working this whole net thing out...
