Channels ▼
RSS

JVM Languages

1000 Responses to Java Is Not Dying


My editorial last week, "If Java is Dying, It Sure Looks Awfully Healthy"  hit a nerve in various developer communities. Between Reddit, Hacker News, and Slashdot, it received more than 1,000 comments. Curiously, very few commenters disputed my central argument; namely, that the common prejudice that Java is dying is not supported by the reality. Here, however, are the major points they did make:

Java is not dying, but it is becoming a legacy language. This was perhaps the most common theme. Legacy languages, in my experience, are characterized by two traits. First, their codebase increases only to the extent that is required by maintenance of existing code. That is, new projects in which any language can be employed rarely opt for the legacy language. The second feature is that some other language or languages are widely used for the type of software previously written in the legacy language. In this sense, COBOL fits the definition of legacy: Business apps today tend not to be written in COBOL, but in a myriad of other languages, notably, um, Java.

I don't buy this legacy argument because I see no real evidence that either criterion has been met. Android alone guarantees that many new projects are being written in Java. And in the enterprise, I see no language that has taken Java's place. The popularity of Spring suggests that Java is still very much a preferred language for enterprises. JavaScript both as a client-facing technology and in Node.js might eventually push Java out of a portion of the Web app space, in the same way Ruby on Rails did for smaller sites. In that narrow area, Java might become legacy, but it is too early to see the extent to which this will happen, as lots of Web frameworks in Java are actively used in new projects.

Java only appears to be dying because the cool kids prefer other languages. I agree this is true. Software development is living through a "golden age" of new language development. In the last 15 years, D, Erlang, Lua, Ruby, Scala, Groovy, Clojure, among others have all emerged (although some were created long before this period of growing popularity), while a whole crop of new languages are competing for attention: Go, Rust, CoffeeScript, R, and Haskell, to name a few. Never in the history of computing has there been such a wealth of language options with such a wide variety of features. Given that many university computer-science programs use Java as a teaching language, there is the perception that Java represents the status quo, while the new languages are the emerging items of true interest. I share this view. I like exploring new languages, but their presence says little about Java. As one Redditor observed, "I'm fairly new to the scene, having just gotten my degree this year, but Java and C#/.NET certainly are not 'dying.' I'm on my second job now, and have written Java for both."

Java on the desktop is dead. Here, too, I tend to agree. Java applets are almost entirely gone except in a few niches where they provide a special benefit. And even though JavaFX is a big upgrade from Swing, I don't think it will be enough for Java to reclaim a major role in client interfaces, especially not on the desktop. However, Java hasn't been a factor on the desktop for a long time, so its future absence from the space is not really an indication of its overall health.

The Oracle factor. It's true that Oracle is not a popular company among developers. Its handling of many of the assets it acquired from Sun, especially open-source projects, did not enhance its reputation with programmers. But for the period that Oracle has had Java under its wing, I believe it has done a better job in advancing the language than Sun did. I mentioned this in the original editorial. Moreover, I'm unconvinced that being a "good nurturer" of a language is a factor of overriding value. Consider JavaScript, whose renaissance needs no elaboration by me. It's a language that nearly everyone complains about — and it has not been revved in years. The lack of updates does not seem to limit its popularity, even though most developers would love to see more than a few of its limitations addressed.

And finally…several commenters agreed wholly with the editorial and thought it did not go far enough. They pointed specifically to the very high quality of tools in the Java ecosystem, especially IDEs; the vast array of libraries — many of which are available as open source; the remarkable portability of Java bytecode; and the wealth of documentation and resources available to developers. One might argue these are the benefits of long-time languages, but I can think of no other language — older or younger — that has all these features in such profusion.

Onward!

— Andrew Binstock
Editor in Chief
alb@drdobbs.com
Twitter: platypusguy


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 

Comments:

ubm_techweb_disqus_sso_-d530f9e8cbcdf7b43ada2f6519b213cb
2013-10-18T16:38:52

You over estimated the value of lambdas. If what you say was accurate then we would be talking about LISP instead of Java.

Javascript's advantage over Java has more to do with installed base within browsers and startup latency not the existence of lambdas.


Permalink
ubm_techweb_disqus_sso_-d7a60af6edb9e9baf5e9c4402898f81f
2013-10-16T10:42:12

Portable mobile app development ?


Permalink
ubm_techweb_disqus_sso_-d7a60af6edb9e9baf5e9c4402898f81f
2013-10-16T10:41:27

If there is one thing that is clear regarding C++ versus Java, it seems that C++11 combined with Java 7 have finaly halted the long process of Java slowly eating up much of the old C++ domains. C++ is now finaly standing its ground, what good for C++ but bad for Java, as scripting languages are now slowly eating up parts of many domains where Java used to be the undisputed ruler. Add to that the increase in multi-language stacks, where Java sometimes seems to be just a small layer of annoying glue in the middle, for example mobile apps using Cordova, Java and (NDK) C++, its sometimes like Java is now almost being crushed between scripting and native. Many people don't seem to realize how much JavaScript and C++ is already being used on non-toy Android apps for example. Android is perceived by many to be a Java stronghold. Looking closer at mobile development, you can however see that portable apps will tend to us C++ for performance critical parts and use JavaScript for cross-platform stuff. When looking at products that use both JavaScript and C++, you will see the Java part will often be reduced to mere glue code with all the business logic moved to JavaScript and C++. Many users will simply assume, hey its Android, must be Java, in many cases, especially for non-toy apps however its not.
Java is still big don't get me wrong, but if the trend of JavaScript/Java/C++ stacking continues to push much of the business logic out of the Java layer continues, Java coding won't be a very interesting place to be.


Permalink
ubm_techweb_disqus_sso_-d7a60af6edb9e9baf5e9c4402898f81f
2013-10-16T10:18:04

Its not the number of releases that count, it are the number of important modern language features (like lambda's) that count, and delivering on promises. In my current multi-language work setting, Java has (temporarily) dropped from scope for many new projects as a result of the impact that supporting Java API's currently has, mainly due to its failure to deliver on lambda's in 7. That is, with the JavaScript API, Python API and C++ API all making heavy use of 'modern' asynchronous interfaces with anonymous functions or lambdas, etc as parameters makes adding an old style Java API more trouble than its worth, not just implementation but also documentation.
Its possible that Java 8 will find its way back into our pallet of languages, and the Java API will be added with a long delay, but its also a real possibility that we shall find no real benefits in adding Java support back in after such a long delay. If Java gets dropped rather than delayed for our current project, chances are (resulting from us being out of practice) it won't even get considered for the pallet of our next one.

Lambda's are just one example (one that happen to be very important to our use of different languages), but there are many. Have a good look at whats new in EcmaScript5 and cumming in EcmaScript6. Have a good look at whats new in C++11 and comming up in C++14. Now compare those to whats new in Java 7 and comming up (hopefully) in Java 8 and tell me if you still stand by what you are saying now.


Permalink
ubm_techweb_disqus_sso_-7c6c4e7bcd8d8396016e96c97386f317
2013-10-16T09:57:26

I fully agree with you, Andrew! I work in the financial sector in the UK, and I see Java everywhere in this business domain.


Permalink
AndrewBinstock
2013-10-16T06:04:18

Thanks for your note. I agree I could have been somewhat more clear about JavaScript's release history. However, I don't agree with your analysis about how well EcmaScript is coming along.

ES 5 was only recently adopted by all the main browsers--nearly three years after it was released. The previous major release was in 1999. If ES 6 comes out in December--an uncertain timeframe--it would then be the second rev in 14 years and the first in 4 years. I don't think that could be described as running "twice as fast as Java," which has had five releases of JavaSE and an additional five releases of JavaEE during the same 14-year period.
Languages have their own timeframes, which are peculiar to them and their community's needs. My point was that having a diligent language custodian might be an overrated trait. The ugly failure of EcmaScript 4 did not hurt JavaScript's popularity, did it?


Permalink
ubm_techweb_disqus_sso_-d7a60af6edb9e9baf5e9c4402898f81f
2013-10-16T05:15:59

While your original article was quite accurate but missed a bit of nuance, part of this follow up is just plain uninformed. There are several reasons why JavaScript is immensely popular, the fact that its a language that with EcmaScript 5 has already seen incredible progress, thats accelerating with Ecmascript 6. A second one is its early support for anonymous functions. When doing API design, the pure OO style API is rather old school, so when I write an API for JavaScript/Python or C++, anonymous functions will surely be all over it. Than it comes time for Java, damn, No Lambda's in Java 7. I was counting on that one. Crap, will have to wrap up a crappy incompatible API for Java than. Its 2013. Even C++ has full lambda support since C++11. C++ is yet an other language that has picked up speed. Major improvements in C++11, more comming up soon in C++14. Where is Java? Still trying to deliver on features that were supposed to be in Java 7. Damn Orracle, pick up the pase, JavaScript and C++ are running twice as hard as Java is, JavaScript is half a round in front of you and C++ just two steps behind. Better start running now or be prepared to come in last.


Permalink
AndrewBinstock
2013-10-15T22:31:54

While not as detailed as my article on Java, I discussed the C++ trends in this article. http://www.drdobbs.com/2401458... The portion on C++ is in the paragraphs immediately before and after the graph.

I'll very much take your suggestion for a longer discussion under advisement.


Permalink
ubm_techweb_disqus_sso_-9833251ed247c245b120f607457504a9
2013-10-15T21:53:36

I'd like to see a similar article/post/comments with "java" replaced with C++.


Permalink
AndrewBinstock
2013-10-15T20:54:50

What are you talking about? There is not a single example where JS is used in lieu of Java.


Permalink
ubm_techweb_disqus_sso_-26be4e708c84c817e84abd2af4fd4ba2
2013-10-15T20:50:55

Edit:
<grumble/> I offer not excuses from my mental short circuit.


Permalink

Video