Monday, September 21, 2009

Additional Thoughts on "Is Java Dead?"

Part of how I use posterous is as a web scrapbook of sorts, and it's a great way to keep the full version of something I come across on the web that I find interesting. Still find it odd you can't edit the excerpts posterous generates, but on the other hand if the original link goes away, then I still have it handy.

Anyway, someone on Twitter asked if I had any thoughts on the "Is Java Dead?" article I found earlier today, and although I had a couple of comments at the bottom of that post, I have a lot more to say about the continual predictions of Java's demise.

Living in the CFML world for so long I'm used to people proclaiming that one of my technologies of choice is dead. For those not in the know ComputerWorld put ColdFusion on their "Top 10 Dead or Dying Computer Skills" list in 2007/. In the top spot on their list was COBOL, but more on that in a moment. I won't rehash the whole ColdFusion is Dead trope here, but semi-related to my recent Grails post, I did find a blog post by Dave Lowe from 2007 on this topic that was particularly rational, and it begs the question: has enough changed in two years? I'd say yes and no, but that's fodder for another post ...

Back to Java. The timing of the "Is Java Dead?" post is interesting given that COBOL just turned 50. According to ComputerWorld and many others, COBOL is dead and has been for a long time. The irony here is that COBOL runs most of the world's ATMs and, according to the article, powers 75 percent of the world's business applications. I'm not sure how they define "business applications" and that number seems rather high to me, but regardless of the specific statistics, it's fair to say COBOL is far from dead. As a COBOL programmer friend of mine always says, "I'm not a dinosaur. I'm a shark." (He's referring to the fact that sharks have been around for millions of years but are still here and still to be feared, in case that wasn't obvious.)

Java has still to appear on any ComputerWorld obituaries (only a matter of time), but it seems that every year or so, much as with CFML, people fire up the death rumors once again. This year in particular that's to be expected since nothing fans the flames of FUD more than Oracle's acquisition of Sun. And to be frank, the mechanisms for Java to evolve aren't particularly speedy, which even Sun predicted back in 2000. (Some interesting parallels there with what's going on in the CFML world today.)

So is Java dead? To answer that we first have to consider what Java is, and it's much, much more than the OO programming language people love to hate.

What's Java?

In the first Java programming class I took at Sun back in 1999, the first question my instructor put on the whiteboard was "What's Java?"

People in the class had various answers, but none got at what the instructor was looking for. "Above all," the instructor eventually revealed, "Java is a platform." So Sun had the platform in mind from the start, and it turns out that's the smartest thing they could have done.

Java is of course also a programming language, and as such it's great. I can hear people disagreeing already, so let me support my assertion a bit. By "modern" standards (whatever that means) Java is more verbose than people would like, it's too strict, and compared to languages like Groovy and Ruby it seems downright dated. But what the Groovy, Ruby, Python, etc. advocates forget is that without Java they have nothing against which to look good.

OK, I'm being facetious, but I hope you get my point. Java wasn't designed to be the latest whiz-bang dynamic web 2.0 wunderkind because that wasn't the state of the world back in the 1990s. When Java 1.0 was released in 1996 it was, hard to see 13 years later, revolutionary. The garbage collection alone put it lightyears ahead of C++, and Java had serendipitous timing with the advent of the Internet as well.

As a language Java is admittedly rather stodgy compared to the fancy new dynamic rapid ajaxified agile toolkits we have at our disposal today, and yet with JRuby, Jython, and more directly in the case of Groovy, not to mention CFML, modern languages want to run on the Java platform because it's ubiquitous, it's powerful, and it's not going anywhere.

Java as a Platform

Regardless of your opinions of Java the language, there's much to love about Java the platform. Sun's original claim of "write once, run anywhere" is technically true even of C and C++ given the one additional step of native compilation, and this slogan has frequently been bastardized into "write once, test everywhere." But on balance Java lives up to its run anywhere promises, and this is precisely what allowed Java to grow and become as entrenched as it is today.

The notion of a virtual machine, driven by Java's origins as a platform for set-top boxes, turned out to be a stroke of genius that went far beyond its original intent. It was head of its time, to be sure. The notion of a compiled-yet-interpreted language was odd, and at first Java was dead slow compared to natively compiled languages. The promise--and actual delivery--of true portability was compelling enough for Java to take off, however, and these days the speed argument against Java is wholly irrelevant due to tremendous speed improvements with Java itself and the ridiculously powerful machines we have at our disposal.

So take or leave Java as a language, but as a platform Java got things 100% right. Where web applications in particular are concerned, I still get a big smile on my face every time I drop a single WAR file on a servlet container to deploy my applications as opposed to FTPing scores of individual files, and that's all thanks to the Java platform. Java thought well beyond being just another language and continues to be hugely compelling on the platform side even if you prefer to write your code in another language.

What Else is There?

Most of the arguments against Java are against its perceived shortcomings as a language, but even on that front Java does what it does incredibly well. It's extremely fast, and if you need the features that a strongly typed language has to offer, you could do far worse than Java. If you want to go with one of the newer kids on the block, where something like Groovy is concerned you really do get the best of both worlds: dynamic features for rapid development, with the speed of Java and access to the huge Java ecosystem at your fingertips.

When people claim that Java is dead and focus on the language, they're completely missing the all-important platform piece of the puzzle. So on this point I'd like to ask a blunt question, and one that none of Java's naysayers ever get around to answering: What else is there? What else out there offers what Java does as a platform?

To my mind the answer is nothing, so if Java truly is dead we're all a bit doomed. The closest corollary is the .NET platform in the Microsoft world, and therein lies the problem: it lives in the Microsoft world. People who know me know that makes it a 110% non-starter for me, but from a more objective standpoint that's an issue for much of the rest of the world as well. Why would people sink a lot of time and money into developing business applications that will only run on Windows servers? Yes, there's the Mono project that allows .NET CLR languages to run on Linux, but I suspect over time that effort will wane, and even now it's well behind the official MS version. The gNewSense project just announced it's eliminating Mono from its distributions, and given public opinion on the matter Ubuntu will likely lean in this direction as well.

So 13 years after its release, if you want write-once run-anywhere applications, great speed, and a tremendous platform on which to run all your apps in multiple different languages, Java truly stands alone.

Long Live Java

Even though Java's a bit long in the tooth in the opinions of some, all these years later it still offers things no other technology does. If Java is truly in jeopardy all of the efforts to run more modern languages on the Java platform wouldn't continue. Java still has tremendous value as both a language and a platform, and if anything Java seems to be experiencing a renaissance these days from where I stand.

A friend asked me just last week if I thought taking Java classes and learning Java was a good idea. I didn't hesitate to answer in the affirmative. Java as a skill is still in large demand, the Java community is alive and strong, the number of powerful open source projects written in Java is astoundingly deep, broad, and diverse, and given the other options in which my friend could spend his time and money, Java still comes out well ahead.

Java's not a dinosaur. It's a shark. And I can say with a great deal of certainty that sometime in the 2040s we'll see an article on Slashdot celebrating 50 years of Java. I just hope I'm there to see it.


Matthew Woodward said...

Friend sent this to me--Java is still #1 accoridng to Tiobe. The old "50 million Elvis fans can't be wrong" postulate:

jwhite1202 said...

Good follow up to the previous is Java Dead post. Thx for the reply, what you said does made sense in regards to Flex (i.e. needing Java or even CF, which is built on Java on the back-end). Even though I respect the strength and power of Java (just like I would a great white shark btw), I still believe Oracle or someone needs to further improve Java web development to put it on par with today's scripting languages, etc. to make it a more viable solution for web based projects. Not everyone needs to run millions, billions of dollars worth of transactions in a day, and if Java took the small to mid-sized shop into account I think it's case for a complete solution versus just a back-end or middleware solution would be that much stronger.

Matthew Woodward said...

The more I mess with Groovy and Grails, the more I think Java can just keep doing exactly what it's doing. We have Groovy and Grails now so Java itself doesn't need to become a scripting language. That problem is solved quite well by a number of other languages that run on the JVM.

jwhite1202 said...

Is Groovy/Gails really that serious? I have only heard about them some and because there aren't a ton of jobs posted for them on (yet) in the Chicagoland area, I have not really looked that hard into Groovy/Gails. Is it worthwhile learning these languages from a future job perspective? as a long time CF developer I have gotten use to not seeing a lot of job postings for CF, but fortunately, I have not been out of work in a long time, so I'm just trying to find out if the Groovy and/or Grails market is similar.

Matthew Woodward said...

Grails is still fairly young (about 3 years old at this point) but make no mistake--it's serious stuff, and it sounds like it's exactly what you want out of Java. I doubt people are looking specifically for "Grails" developers in job postings but my prediction is it will only become more of a force in the Java world over the next couple of years, particularly with the acquisition of G2One by SpringSource late last year.

Matthew Woodward said...

Off-topic, but I finally figured out how to pull excerpts from articles I want to quote--you highlight on the page before you hit "share on posterous." So easy it's hard. ;-)