A favorite hobby-horse among various programming-related communities is to talk about why "Java is dead", and further, that programmers working in the Java ecosystem should really look for greener pastures elsewhere. You see these sorts of posts pop up on proggit, for example, often enough for it to get old. That's a lot of hot air, with plenty blowing in the other direction from various folks that have been pushing hard for significant improvements and changes to Java. Both sides are wrong, though, because as a result of its success and a series of historical accidents:
Java-the-language is dead.
Get over it, and realize that because of that fact, you'll probably come to depend upon Java more than you ever thought possible.
The JVM is probably one of the most vibrant platforms for developing new programming languages there is, in part because of the status of Java-the-language.
First, let's settle the premise. In comments on one of his recent blog posts, Joe Darcy, one of the fellows the heads up Sun's management of the JVM and JDK (I'm not sure of his exact title and portfolio), said a couple of key things about the never-ending saga regarding closures in Java:
There are millions upon millions of Java developers who would have to learn about closures if they were added in the platform.
...there is far from unanimity in the Java community on the underlying choice of whether or not closures would be an appropriate language change for Java at this time.
OK, there it is, closures are never going to be added to the Java language. Done, and done. And if closures aren't going in, then you can surely bet that other things aren't going to make it, either. To further make the point, Joe commented on an earlier blog post of his here
, saying in reference to a question about why the Java standard libraries don't slough off deprecated APIs:
To date, we have valued continued binary compatibility with code calling the deprecated elements more than cleaning up the API.
This sort of stuff pisses a lot of people off, and leads others to propose mildly absurd things IMO, like forking the Java language into "stable" and "experimental" versions. This a lot of wasted effort.
It seems that Sun decided long ago, through pressure from its customers and developers, that compatibility is more important than innovating at the language level. With that, managing Java and the JDK became more an exercise in stewardship than anything else. The quotes above from an authoritative source are proof-positive that this is the case.
That may make the Java language dead with regard to features, but it's hardly useless – it's simply transitioned to be the stable "systems language" for the JVM that a large swath of programmers (who Sun likely correctly identifies as being uninterested in things like closures, syntactic improvements, etc. etc.) happen to use for applications as well.
Trading off "progress" for stability bestows upon Java at least two characteristics that are shared by other systems languages:
- screaming into the void about how improvements and changes should be made yesterday is generally pointless and irrelevant
- knowing that the language is essentially fixed for years to come means that it fades into the background as a very useful artifact for those that want to build on top of a system with well-known characteristics
A side effect of this is that the JVM is a very fertile spot for new(er) languages, where language implementers don't have to worry about their building blocks being taken away or changed radically from year to year
. At the same time, the JVM itself has been getting tweaked and tuned heavily under the covers to support non-Java languages, not the least of which is Sun's JavaFX, their entry into the post-Java JVM language fray
. So, you want your fork of Java that pushes boundaries? They are many and plentiful, so go choose one, already.
The upshot of all this is that it's more likely than not that over the course of the coming years, your life (and quite likely your professional life as well, if you're involved in software) will come to rely upon Java, the JVM behind it, and many different other language stacks built on one or both of those technologies.
Of course, interop between these languages is a concern: only APIs matching Java's binary signatures are accessible by all languages, there's no standard interface for closures, there's no standard (sane) numeric tower, etc. etc. These things are frustrating if one happens to be working in a polyglot environment, but I've no doubt that necessity will draw the larger players in the JVM language space together to establish certain baselines to ensure interoperability.
In the end, we might have all been better off if the current state of affairs had arrived years ago. A steady drip, drip, drip of Java language improvements serves only to keep developers tied around what is functionally a frozen language, and away from superior alternatives (on the same JVM platform!) if they're so inclined to look up from their work. Since the state of play vis á vis Java-the-language is clear, maybe those that care so deeply about programming language productivity, innovation, and progress can set about enjoying the advantages of the future that Java has ensured for us all.
Comments (24)
Oct 01
Anonymous says:
Only on Reddit and other sites where dilettante programmers congregate is Java "...Only on Reddit and other sites where dilettante programmers congregate is Java "dead."
Your typical Reddit programmer wants to write cool software but lacks the drive or ability to start a project and see it through to completion. Instead they dabble in the arcane and esoteric, in different flavors of Lisp or in pure-functional bondage-and-discipline languages like Haskell. Learning these obscure languages not only makes up for them never producing anything useful, but allows them to look down at those who do, as those lesser programmers use "blub" languages like Java to accomplish their tasks.
Oct 01
Anonymous says:
@anon1: /lol/ Riiight. What a ridiculous thing to say, as bad a sweeping general...@anon1: /lol/ Riiight. What a ridiculous thing to say, as bad a sweeping generality as "typical Reddit programmers" (like there is one) thinking all Java developers are stupid. Except that the "typical Reddit programmer" is likely to be right.
Assuming that the "typical Reddit programmer" never produces anything is about as ignorant as can be. Heck, Reddit was created by some "typical Reddit programmers". As were many other properties you've almost undoubtedly used. And you know what? Some "typical Reddit programmers" use Java along with the languages that somehow don't allow us to get anything done. Another gem? Doing so makes us better Java programmers, better able to work around its impoverished model of abstraction.
Oct 02
Anonymous says:
totally agree with thistotally agree with this
Oct 01
Anonymous says:
People who say "Java is dead", fail to give any convincing reasons. They a...People who say "Java is dead", fail to give any convincing reasons. They are mostly driven by hatred just like people who hate .NET or C#. I find such people mostly ignorant or arrogant or both. Just because a language has some pitfalls does not mean it is dead. After all, which language does not have some drawbacks? I am sure java developers who writes robust enterprise class applications are not dying for closures and all the syntactic sugars in functional languages. If they want closures, they can easily switch to groovy. Now, people who think java is dead look at popularity of languages
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
or google trends
http://www.google.com/trends?q=java%2C+c%23%2C+PHP%2Cc%2C+c%2B%2B&ctab=0&geo=all&date=all&sort=0
and make your own judgements. Sure, popularity of java is declining but it is not dead anywhere in the immediate future.
- Indra
Oct 02
Anonymous says:
I disagree with Indra, in fact, the Java community is unique in for a very long ...I disagree with Indra, in fact, the Java community is unique in for a very long time having had enough in itself. This has been very evident, one small example is how you can run all kind of weird experimental languages on the JVM but oddly not C# which is for all practical purposes just a superset of Java.
So if Java is dead to people it's because it is no longer alive and flurishing. It will of course remain on life support for many many years where unfortunate programmers will have to maintain it.
Oct 02
Anonymous says:
I think that those who claim they cannot get the job done because of the languag...I think that those who claim they cannot get the job done because of the language limitations are not working in real life software projects.
I believe what matter most is the underlying platform with the APIs, tools and IDEs that are being available.
Claiming that Java is dead is just plain ignorant, since it has one of the richest commercial and open source ecosystems.
Let's see what Java has to offer:
-Vibrant Open Source frameworks (Spring, Hibernate, Wicket, Struts, Axis, CXF, Apache projects, etc, etc) - check
-Amazing IDEs (Eclipse, InteliJ Idea, Netbeans) - check
-Amazing tools that take development and project life-cycle management to a whole new level - Maven 2, Apache Ant, Ivy - check
-Open Source Application Servers - JBoss, Tomcat, Jetty - check
-Commercial Applcation Servers (IMB Websphere, Oracle Containers for Java, Weblogic) - Check
-Multiple Java Runtime Enviroments that allow running the same code on virtually any server platform (Sun JRE, IBM JRE, Oracle JRE Weblogic JRE) - Check
For me Java is all about choice. Choice about the IDE, tools, libraries and deployment options. As a Java developer I can target the small bussiness customer where price is most the important factor, but also the large enterprise customer where certification, commercial support and reliability are top priorities.
Oct 02
Anonymous says:
Well said!!Well said!!
Oct 02
Anonymous says:
I have yet to see that killer-app come frome Scala/Clojure/etc. If we stay on th...I have yet to see that killer-app come frome Scala/Clojure/etc. If we stay on the JVM, there is nothing that beats the maturity of the Java language.
A new language must make things drastically simpler/faster to produce/etc and must be as mature as Java to actually kill it. I have tested Scala's Eclipse tooling, e.g., a year ago and a few weeks ago and it seemed like there was no real progress.
What is the value of better language features that reduce the LoC you write if the tools are not as good? You end up with the same amount of time as if you had no access to these language features. There is no value in a language feature per se.
Oct 02
Anonymous says:
"I have yet to see that killer-app come frome Scala/Clojure/etc." Do you mean s..."I have yet to see that killer-app come frome Scala/Clojure/etc."
Do you mean something like 'Twitter'? See http://www.artima.com/scalazine/articles/twitter_on_scala.html
Oct 02
Chas Emerick says:
Looks like most people aren't actually reading the post. There's no mentio...Looks like most people aren't actually reading the post. There's no mention of Java not being used anymore, or not being useful, or anything approaching such things. To quote myself:
Java is now similar to other dependable and eminently useful languages, like C and Latin. Lots of people get lots of work done in C, too, and it also will be around for years and years. The difference is C programmers (generally) aren't overly-sensitive about the status of their chosen language.
Oct 02
Anonymous says:
What is 'death' for a language (of any type)? For people who are supposed to be...What is 'death' for a language (of any type)?
For people who are supposed to be very logical, and use words correctly, it is dismaying to see this idiom used so often and incorrectly, apparently without much thought to whether the underlying assertion is even remotely true.
No language ever dies until there is no longer anybody 'speaking' it (or i.e., developing in it) - even if no new features are being added to it. So no, Java is not dead. Indeed, in popularity (use in apps) I would say it is the #1 language being 'spoken' and therefore is very much alive.
Now an argument can be made, that in a sense, Java is stagnant because it is not evolving - at least not as much as some people would like it to and especially of late. I might even agree that in some respects this is true - especially of late with Sun dragging their heels in many areas, and going off on tangents in others (evolutionary dead ends in my opinion). But overall Java is still evolving, albeit more slowly - which might mean it is 'mature' in some ways.
Hopefully Oracle will breathe some new life into Java, but more importantly bring some sanity (for example, finding some way to make a break with old APIs and/or old classes/methods/etc. that should be allowed to die). We'll see.
Personally, I am not too distressed about the slowdown in Java evolution. I think many Java devs don't know how to properly use what is there and maybe this will give them time to catch up.
Oct 02
Anonymous says:
A lot of people are indeed missing the point, but it's probably your fault, Chas...A lot of people are indeed missing the point, but it's probably your fault, Chas, for using such a loaded adjective ("dead").
All Chas is saying is that the language stopped evolving, and I completely agree with him. Project Coin is a good example of this since the scope of the features was intentionally kept "small" (i.e. no closures).
I'm actually fine with that. What pushed Java over the top has always been its simplicity and clarity, and this is just the natural next step. There is still plenty of very cool stuff that can be written in Java (Guice is probably the best recent example) and even though I enjoy dabbling in Ruby or Groovy occasionally, I still have a lot of fun writing in Java every day.
--
Cedric
http://beust.com/weblog
Oct 02
Chas Emerick says:
Well, this is the realm of blogging and navel-gazing...what would we be left wit...Well, this is the realm of blogging and navel-gazing...what would we be left with if not for loaded adjectives? ;-)
But seriously, for those that this post was really aimed at -- anyone who seriously lobbies for significant change in Java-the-language -- the point needs to be made that they're barking up the wrong tree.
And really, I'm more than fine with the language not evolving any further...more than that, I'm very, very happy about it. I'm just hoping that everyone else aligns their mental model with the outside world sooner rather than later.
Oct 08
Anonymous says:
For people who are supposed to be very logical, and use words correctly, it is ...Surely you're not suggesting tha programmers ever use logic, much less words, correctly ;-)
Oct 03
Anonymous says:
You is crazy man !!! Java never, never die !!! You is c...You is crazy man !!! Java never, never die !!!
You is crazy, very, very crazy !!!
Oct 05
Anonymous says:
yes... me agri wid yo ! he veri crazi!!yes... me agri wid yo ! he veri crazi!!
Oct 05
Anonymous says:
Java is full rather than dead. The only new feature I'd really like to see is co...Java is full rather than dead. The only new feature I'd really like to see is control over the garbage collector, everything else I'd like done involves taking things out of the language.
Oct 05
Anonymous says:
Drools.Drools.
Oct 05
Anonymous says:
Any language, including computers ones, is in a living or dead state, depending ...Any language, including computers ones, is in a living or dead state, depending on how many people uses it, and not on the formal specs coming from an Academy of the Language in question.
The quality of the language, not only comes from those formal specs, but in the way it's actually used.
Reading some opinions on this subject, it seems that just the API decides what's possible to program. Where is the programmer's creativity?. Where is the flexibility of the discussed specs, which allow almost everything go extended at infinitum?.
Java language is not just the API, it's every single line of code, written every single day, by the programmers who used it.
This is the same kind of confusion, talking about human languages, between Grammar and Dictionary on one side, and Literature on the other one.
As long as there'll be good and creative "literature" written in Java, I'm sure the language will be very alive. As it currently is.
Oct 05
Anonymous says:
I don't know about you, but I'd like to see "Java 2.0" which is not backwards co...I don't know about you, but I'd like to see "Java 2.0" which is not backwards compatible with Java. It would consist of a language that is syntactically very similar to Java 1.0 except that some C+isms would be replaced with more Java-centric concepts. Concepts such as switch() falling through branches by default made sense back when C+ was the standard, but it no longer does; it just encourages buggy code. Generics are harder to read than they should be. A lot of the ugliness that are Generics would get cleaned up if we had full-fledged Reified Generics, so we should have them. There are plenty of similar low-hanging fruit that has strong community support. The only counter argument I've heard to date is that it would break backwards compatibility, not that they think the actual idea is a bad one.
I support backwards compatibility, but within reason. I support the idea of breaking backwards compatibility for APIs that have been deprecated for over 5 years. Java should deprecate a feature, point to an alternative, and 5 years later remove the deprecated API.
Oct 05
Anonymous says:
I've very glad that Java is stable and evolving very slowly. This means a ...I've very glad that Java is stable and evolving very slowly. This means a platform and language that you can rely on, and it means different developers using similar patterns and programming in similar ways. It means more maintainable and extensible software.
Adding new features to Java at this point will only muddy the waters, and make software that that is less maintainable, less stable, and harder to learn and use properly.
Besides, I've read several articles, looked at several samples of code, and have yet to see real, tangible benefits to adding things like Closures (the latest feature dujour). What I've seen of closures is that it allows expressing a lot of stuff in less code, but it also makes that code far more difficult to read, understand, maintain, and extend. I rather like Java's verbosity (in a way), because it makes the code very readable and very easy to understand. Besides, I don't mind typing! \;-) Code terseness is for programmers who want to look clever, not for making code easier to maintain.
Besides, for those that want the latest features dujour, there are the other JVM languages.
Oct 10
Anonymous says:
So reading this: "There are millions upon millions of Java developers who would...So reading this:
"There are millions upon millions of Java developers who would have to learn about closures if they were added in the platform."
Are closures not going to be added to the Java language because the millions upon millions of Java programmers are too stupid to learn?
Oct 14
Anonymous says:
I totally agree with the article! Java is a mature language and that leads t...I totally agree with the article! Java is a mature language and that leads the "innovative hackers" to learn new / more exotic languages to earn their recognition (again). And Java does not need new language features allowing people to write more crap code. E.g. I used closures before in other languages like Ruby, but I do not miss it in Java!
I like Java because it's reliable and applications are really maintainable (using the right tools)!
A clean and typecasted language as Java (or C#) drives business better on a long term. That's where "agile" languages like Ruby fail!
Oct 16
Anonymous says:
Although I agree that Java is mature (and I appreciate that) I disagree that Jav...Although I agree that Java is mature (and I appreciate that) I disagree that Java is dead.
There are changes done - even if currently mostly small changes - and I like the way, that the language architects do think very well before implementing something new. Not just for the sake of compatibility but also for keeping the language clean and straightforward!
I think it is totally wrong to pack every nice-to-have into the language - it would become bloated very fast if they would do so.
And: Not all currently hyped language characteristics (like functional programming) are really new and there were reasons in the past why such languages didn't really make it. - I have seen enough program languages in my life that allows me to say that.
Or other thing, just because I read about dynamic calls coming in C# 4.0 today and I heard some people complaining about lack of dynamic calls: You can do dynamic calls in Java either - no need to switch to other languages, I either found several possibilities to do so. Dynamic instanciation of classes is either no real problem so I can perfectly combine static and dynamic parts.
Just a simple sample for a dynamic call of a method of some not well known object/class (and I am not a Java pro):
Add Comment