In the late 1990s, a well respected and visionary colleague made the surprising statement, "Java is dead." That is probably the first time I had heard that phrase. Despite my respect for his considerable accomplishments, I thought that the statement was ridiculous. More than ten years later, it is still a pretty ridiculous statement. Java will "die" one day; all languages (and, even more so, all people) do. In that respect, Java "is dead," but so is every other programming language out there. I guess, then, it is safe to say that all programming languages are "dead."
When I enter the quotes-bound string "java is dead" into the Google search engine, I currently see 199,000 matches. Evidently, at least a few people have written this or written about someone else who has written this. Many of these posts make good points and the authors don't mean literally dead as of today, but the title "Java is dead" is obviously hyperbole. Who knew there could be so much Drama Queen behavior in software development?
The typical author of a "Java is dead" post is stating such claims because he or she doesn't like the Java feature set (such as the now-not-necessarily-the-case news that closures would not be in JDK 7; see Java Just Died (No Closures in Java 7)), he or she is concerned about the effectiveness and appropriateness of new features given backwards compatibility concerns (see Java: Evolutionary Dead End, Java is Dead?, and Java is Dead!), or he or she believes Java has become too complicated (see Java is Dead). Almost all of these posters have an alternative language in mind, though in almost all of these cases one could easily attack that alternative as well with some of the same criticisms. Indeed, Java is likely to outlive some of these languages.
For a "dead" language, Java isn't doing too badly. Java continues to top the Tiobe Programming Community Index, an almost boring feat at this point after holding this spot for roughly ten years (though it did swap places with second place C in the mid-2000s). Java continues to be a highly sought-after skill among potential new hires as proven by job searches at sites like Dice and Monster and obviously at JustJavaJobs.com. A Google search for "java -coffee -island" (without the quotes) reports 215 MILLION matches (and that's with the removal of pages/sites that might have happened to mention the Java programming language in conjunction with "coffee" or "island").
There are many reasons that the claim "Java is dead" will continue to be ridiculous (or at least overly dramatic) for at least several more years. First, many computer science programs and other training programs use Java as a primary teaching language. Second, there is a huge established code base that already uses Java. Third, there is significant vendor investment, tools, training, and other products that make both the vendors and their customers somewhat tied to Java. Fourth, Java boasts arguably the largest developer and open source ecosystem out there. When it comes to applications for which I want tools, vendors, and developers to be around with the right skills in the future, Java is still the leader. This point is well-made in Java: The Perpetually Undead Language.
Looking at other languages who have long since been pronounced dead shows us that Java's future may not be as bleak as some think. I heard (and hear) many enthusiastic Java developers talking about C++ being dead. I have noticed recently a resurgence in the interest in C++. The announcement of Google's Go programming language validates the interest there is in languages like C/C++.
One of the obstacles that faced Java from replacing C++ in places where Java obviously had advantages (such as GUI and database development) was the cost organizations faced to completely migrate C++ applications to Java applications. JNI, CORBA, web services, and similar technologies have made it possible to mix the two, but they all have their own complexities and issues. In a somewhat ironic twist, Java's greatest threat may be the rapidly rising popularity of alternative JVM-hosted languages such as Groovy, Scala, JRuby, and Clojure. Because these langauges run on the JVM, their integration with Java is much simpler than it ever was to integrate C++ and Java. This can potentially allow Java-heavy shops to more easily begin using these alternative JVM-hosted languages.
One development that could drastically impact the future of Java is Oracle's acquisition of Sun. However, for good or for bad, we won't know the depth or nature of that impact until the deal is finally approved (assuming that it is) and only time will tell. My best guess (and that's all it is) is that Oracle will do very little to change Java management in the near term.
If I was to base my opinions solely on what I observe in the blogosphere, I'd be sure that Java was already dead. It so happens, however, that reality is actually quite different than the blogosphere. When I talk to attendees at conferences, talk to other developers offline, and so forth, I get a much more realistic view of development. In that more realistic view, Java is far from dead.
Ted Neward wrote in mid-2008 that Java is Dead Like COBOL. In many ways, I still see this as the case. Java has warts and wrinkles. There are things I wish were done differently in Java. However, every language has its issues. When all things are considered (the large Java ecosystem of products, existing code, and investment), it is difficult to see what language one should tie himself or herself to for a good future that would be any more likely to succeed than Java. Instead, I prefer to continue to work with Java and to play with and work with other languages when they are more appropriate. I especially like the JVM-based languages because I can easily use them in conjunction with Java.
Java is far from dead and is probably further from language death than several of today's trendiest languages. Indeed, Java is only "dead" in the sense that all programming languages are destined to eventually die. I see some nice languages that complement Java (such as Scala and Groovy), but I don't realistically seeing them displacing Java altogether.