Monday, January 4, 2010

I Use Dead Programming Languages

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.


Conclusion

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.

20 comments:

fgaucho said...

The hype of magic languages is dismaying ... all that Scala-Ruby-Grails-Whatever promises are proving now a big illusion..

adwin said...

Try Groovy then ... it has closure and it is "java"

rainwebs said...

It is pretty amusing how often this is discussed. Here's my No. 1 on DZone Top Link list from 10/2009:

http://blog.rainer.eschen.name/2009/10/03/only-narrow-minded-programmers-think-that-java-is-dead/

mikeborozdin said...

Java doesn't have any advantages over C++ in terms of GUI building. Yep, MFC sucks, but at least you don't have to mess with various layouts, a produced GUI looks like other applications and its faster.

As for decline of C/C++, it was really replaced by Java for business applications and high-level Windows desktop applications, but in the world of low-level and high-performance software it has no rivals and is not going to be replaced by anything.

At the same, Java has been being pushed by .NET for a few years.

Dustin said...

fgaucho and adwin,

Thanks for the feedback.

I'm a strong believer in using the correct tool for the job and find myself most happy with Java, Groovy, and Ruby, but most of my professional work is in Java. I certainly find Java to be a useful tool, but I think the real answer is in having many tools in the tool chest and using the appropriate one for the appropriate situation.

Dustin

Dustin said...

rainwebs,

Thanks for the feedback. Your post on this subject brings up many of the same and different points along the same lines. I do like many of the aspects of newer languages, but I also feel that Java is no more "dead" than any other language.

Dustin

Dustin said...

mikeborozdin,

Thanks for taking the time to leave feedback. I have spent about the same amount of my career on C++ as I have on Java and I definitely think C++ is often unfairly maligned and its continuing popularity and use is probably not sufficient realized by many developers. That stated, I disagree with the assertion that "Java doesn't have any advantages over C++ in terms of GUI building."

In my experience, Java GUIs are much, much easier to implement in Swing than in MFC or Motif or other C++ approach. They are so much easier that one has time to go back and fix minor appearance issues.

I think Java is as much easier than C++ GUI development as it is easier in database development (JDBC versus Pro*C/C++ or other C++ API). In the middle (between GUI and database), I really like C++ and some of its freedoms.

This is probably one of those areas where we just have to say "to each his own" or "your mileage may vary."

Thanks again for posting.

Dustin

mikeborozdin said...

Dustin,

I mentioned MFC simply because it was the most popular choice, however there is also VCL in C++ Builder which is actually pretty similar to .NET WinForms or to VB6, but the code remains native.

shevegen said...

I think you should not be too dismissive about this. Programming languages as such don't really die - at least not easily.

But one interesting thing is the question "does a programming language still have momentum?"

I think we all agree that COBOL does not have any momentum. Java still has though even though I don't think Java is a particularly fascinating language. But it has other stuff like the JVM which spawned other projects.

The second question would be "how many new people learn AND use the language?". I also think that Java can answer that question positively.

Yet, at the same time, we now have more programming languages. So the competition will be harder and harder.


As for a possible decline of C++ - a friend once said that if he would have to rewrite his game, he would use a managed language. He just was tired eventually of using C++ (he stopped)

For a big project this is probably no big deal, but for a small project the choice of the used language has a HUGE impact.

RTipton said...
This comment has been removed by the author.
AHAntics said...

"Fourth, Java boasts arguably the largest developer and open source ecosystem out there."

Coming to Java from the .Net world late last year, I've had a hard time finding "community". For .Net, there is a plethora podcasts and a bundle of prolific, high-profile bloggers.
So when I got a job in a Java house, one of my first thoughts was "hey, I'll grab some podcasts and find the groove." Heh. Try googling "java podcast". There's not that much and the episodes I've listened to of, for example, Java Posse, invariable involve at *least* one devolution into "MS sucks" and ".Net is garbage" with little or no justification.

Just MS bashing to bash.

It's another side of the "X is Dead" phenomenon, and could lead to many newer Java developers buying the "Java is dead" talk.

For me, Java is almost identical to .Net, and a programming gig is a programming gig. I miss Visual Studio but life goes on. Code is code and frameworks are frameworks.

I think what Java really needs is it's own versions of DotNetRocks and Hanselminutes and Oren Eini and Roy Osherove and more. Maybe they're already out there, but if Java Posse is as good as it gets, it might benefit from some friendly competition.

Just a Java Newbie's Observations.

Dustin said...

AHAntics,

Thanks for the reply. Although I am much more experienced with Java, I have played with C# and .NET and agree that there is much similarity between the two and I generally like what I've used in C#. In fact, the existence of both .NET and Java SE/EE is good for all of us because they keep driving the other to innovate.

I'm sorry to hear about your experiences with the anti-Microsoft crowd. Unfortunately, there are similar anti-Oracle crowds and anti-IBM crowds, and so forth that can sometimes cloud the issues that really matter.

Some alternative sources you might look at for Java-related podcasts include Sun-provided videos and podcasts, JavaWorld podcasts, developerWorks Podcasts, informIT Podcasts about Java, and podcasts hosted at TheServerSide.com.

My experience (and it may simply be my lack of experience in .NET world) is that Java's API documentation is more readily accessible and the Java tutorials (Java SE and Java EE) are as good as any for a major language/platform.

Unfortunately, a prevalent anti-Microsoft (and often anti commercial software) attitude often manifests itself in the Java development community and distracts from useful dialog. I have seen the same from several .NET folks as well; in fact, many of the .NET respondents and non-Java developer respondents to a posted link to this blog post on reddit reflected such an unfortunate attitude as well. It's really too bad because I think much more could be learned from each other if minds were a little more open.

Thanks again for the response.

AHAntics said...

Thanks for the ideas on places for more podcasts and information. I was pretty sure I'd tried most of those out, but I double-checked to be sure, and this is what I found...

TheServerSide.net - Didn't find any podcast feeds on site. TechTalks is primarily stream only, the ones that are mp3 don't have any sort of "Subscribe to our Podcast" link.

OnSoftware - 3 podcasts TOTAL for 2009. 1 about DB app performance, 1 book review, and 1 discussion of iterative development.

DeveloperWorks - Doesn't look like anything Java-specific, and very little that isn't psuedo-marketing or fluff or reviews.

JavaWorld Tech. Insider - Most recent podcast: June 2, 2009. 8 podcasts total last year, and not a single one that really interests me or even says "Look how robust the Java world is!"

Java Technology Videos and Podcasts from Sun - 2 podcasts. TOTAL. From 2008.
---The DeepDives here look very similar to Microsoft's Channel9 stuff, but it's from Sun, not from the community. And there were a grand total of 7 in 2009.


So, I have to reiterate my initial point. There really doesn't seem to be any sort of podcast presence for Java except for Java Posse, and I don't really find them interesting or open-minded.

It seems like the developers that would be the guys to be doing these podcasts and blogs and generally creating a robustness of presence on the internets aren't. Maybe they're doing their 9-to-5 and going home to wash their brains out so they can do it again tomorrow. Maybe they're stagnated and don't want to or don't have the lattitude/permission/initiative to seek out fun, new ways of thinking and coding. I don't know.

I do know that the .Net developer community is far more robust, though I don't know why. Maybe .Net is more fun, maybe .Net developers have more lattitude at work or less soul-crushing jobs.

Maybe the worlds are so different, they can't be alike, but I don't believe that for one minute. The Java guys I work with now are just as intelligent and clever as (most of) the .Net folks I've worked with in the past. Maybe Java is just too old to have a thriving, robust, bazaar-like community.

It's an interesting dichotomy, though. Frustrating for the language-agnostic, but interesting.

jacksonsoftware said...

AHAntics,

It may be that the C# community focuses more in the podcast medium than the Java community does. As a long-time java developer, I see many blogs, conferences, books, articles, and open-source projects. However, I don't know of any big names in the Java community that actively podcast. I do think that finding good "beginner" material in both languages is hard. Most people are striving for originality and it's easy to fall into the mental trap of thinking, "everyone already knows how to solve this basic problem." To get around that issue, I would recommend books like "Effective Java" by Joshua Bloch. Some of the writers of his caliber are so good that nobody bothers to restate what he's said.

Dustin said...

Reports of Java's Demise Have Been Greatly Exaggerated is another post on this subject.

Dustin said...

Java is dead? 9 million devs disagree is another similar post on the subject.

Dustin said...

Alex Staveley asks, Is Java Dead or Invincible?

@DustinMarx said...

In his editorial If Java Is Dying, It Sure Looks Awfully Healthy, Dr. Dobb's Editor in Chief Andrew Binstock details some of the reasons he believes that there is "little evidence to support" the "recurring prejudice" that "Java is fading in popularity." His conclusion summarizes his cited evidence well and articulates my thoughts as well: "So, what I'm seeing is a language that is under constant refinement and development, with a large and very active community, which enjoys a platform that is widely used for new languages. None of this looks to me like a language in decline."

Even back in early 2010 when I wrote this post, the claims of "Java is dead" had been made for years and seemed ridiculous then. In late 2013, it just seems downright silly to be making this argument. A person may not like Java for various reasons, but it is naive to believe that the language or the platform are dead. It might be wishful thinking for those who don't like the language and the platform, but wishing for something doesn't make it so.

@DustinMarx said...

In his InfoWorld article Java forever! 12 keys to Java's enduring dominance, Peter Wayner concludes, "Java continues to live and even thrive."

@DustinMarx said...

Major releases of Java, such as last week's release of Java 8, seem to bring out the Java is Dead mantra from the denialists among the development community.