Is Java Dying?
Oct 9th, 2007 by phil
I wrote last month about the decline of the Java programming language in a post called Stop the Insanity. The gist of the post is that the Java language has stagnated and this stagnation will eventually lead to a decline in popularity. I felt that this was a fairly uncontroversial idea; programming languages follow cycles and it seems inevitable that Java will eventually decline.
Some readers thought that I was saying that Java was dying and that Erlang was killing it. Consider this quote from David Herron:
Last year it seemed you couldn’t turn around without reading another blog entry saying Ruby was going to kill Java, etc. Now the named languages are Haskell or Erlang, but the story is the same.
Also, consider this comment left by Hervé Girod:
As of Ruby, Erlang, and other languages, it seems that people always discover a new cool language that is killing Java, each time more dynamic than the other. First it was Python, now the same people are talking about Ruby, next time Erlang…
Just to be clear, I don’t think Java is “dying” anymore than C++ is “dead” or “dying”. I think that the Java language will begin to decline in popularity as developers discover other tools that solve their problems in a more elegant way. This is called “progress” in many places and represents an advancement of the state of the art. The sheer bulk of extant Java code means that it will be around for many years to come, but it is impossible for Java to grow indefinitely.
If it is a mistake to equate “in decline” with “dying” then it is equally wrong to think that a single language or tool can bring about the decline of Java. Erlang alone1 is not responsible for Java’s decline. If anything, Java is responsible for Java’s decline. Programming languages are merely abstractions over the internal operations of a computer that allow programmers to write complex software. As the software that programmers are asked to write becomes more complex then they will seek out more powerful abstractions. Java has been largely stagnant on that front for a while.
There are some in the Java community who apparently feel that Java in its current state is the best language possible. They fight changes to the language tooth and nail and the larger Java community is slow to adopt change when it comes. This may be the right decision for those parts of the community that have a large investment in existing codebases but it does nothing to make Java more attractive to developers looking to start something new.
Both David and Hervé bring up the idea that Java is more than a language, it is a platform. Quoting David again:
‘Java’ isn’t just a language.. it’s an architecture that includes a virtual machine, a cross-platform application package format (.jar, etc), zillions of available libraries, a cross-platform GUI toolkit, oh and a language.
The problem with this argument is that the popularity of Java-the-platform is intimately tied to the popularity of Java-the-language. Java-the-language came first and Java-the-platform evolved as the language became more popular. I don’t think that Java-the-platform is strong enough to grow independently when Java-the-language goes into decline. Although, I could be wrong. We shall see soon enough.
Anyway, thanks to David and Hervé for posting their thoughts. Generally I find programming language topics fascinating, but I think many people have become emotionally investing in the tools they are using. When this happens they argue from a position that either Java rules the world or Java is dead. Neither is the case and I think the conversation is more enlightening when the participants look at the subject with a dispassionate eye.
-
…or Python, Ruby, Lisp or Haskell ↩





Quickly:
1) the popularity of Java-the-platform is intimately tied to the popularity of Java-the-language
I don’t think so, on the contrary I think that both the JVM (and Microsoft’s CLR counterpart) are here to stay “forever”. If - I’m sayin if - there will be the compelling need for new languages, the exising Java-the-platform tools will be
2) Java is stagnating. You’re probably right. But perhaps the point is that as per today people don’t really need a lot of new language features?
3) Languages can decline in popularity also because they get too complex and bloated. See C++ for example. I think that there should be some new language features in Java 7, but most of the thing I see around are useless (or not really needed) and hype IMHO.
Sorry, missed a part:
If - I’m saying if - there will be the compelling need for new languages, the exising Java-the-platform tools will be an excellent point for start their implementation - after all, it’s what people are doing now with new languages.
“the popularity of Java-the-platform is intimately tied to the popularity of Java-the-language […] I don’t think that Java-the-platform is strong enough to grow independently when Java-the-language goes into decline. Although, I could be wrong. We shall see soon enough.”
I disagree, but I don’t think we’ll have the answer anytime “soon” either.
I’m not sure if Java is really on the decline. It seems the number of jobs for Java devs continues to increase. Even when the time comes, I’m not so sure that a dynamic language will replace it.
Consider the evolution C -> C++ -> Java Type safety increased at each step.
Dynamic languages have also evolved and become progressively more flexible. Remember when Perl ruled the web?
I guess the point is, each have their strengths, type safe and dynamic, and I think the future will bring a merging of them. For instance, in Java 1.7 we can expect to see scripting languages become first class citizens.
Though a first step, it holds great potential. The idea of being able to truly use the best tool for the job at hand (even on a small scale) can only bring about good things.
Scripting languages will really benefit by running in a mature VM vs the generally ad hoc state of them. Developers will benefit by being able to leverage the strengths of a language to pick up where another lacks.
Programming in 2 distinct but, connected, languages allows developers to make a mental contextual switch when moving between them.
My vision of the future (fav type safe lang) + (fav scripting lang) = sweet sugary goodness
@Fabrizio: I don’t think the point is that people need new languages or new features, but that Java is not well optimized for many problem domains. This is less of a problem in dynamic languages since you can bend the language to fit the domain better. Java is not so flexible and the language isn’t evolving quickly enough to make up for the lack of flexibility.
@Paul: I certainly agree about using the right tool for the job. I just don’t think the “right tool” needs to run on the JVM :-)
I suggest people should look at this presentation Ted Newerd made. I totally agree with him.
phil, the thing is, just about every scripting language (Perl/Pike/Python/RUby/etc) runs on one VM or another (whether or not its given the label). My attitude is why not pick a mature one? Doesn’t have to be the jvm but, there aren’t too many ‘mature’ choices out there.
Most use a VM that was built around the scripting language (and thus influenced the language development) why set separate how the language is run from the language itself?
@Paul: I think it is relevant to note that a lot of the recent buzz around programming languages has been around older languages that are being rediscovered. I am thinking of Smalltalk, Lisp, Ruby and Erlang. Smalltalk and Lisp implementations generally have very mature VMs. I assume that the Erlang VM is also very mature given that it runs software capable of 9 9s of uptime.
The JVM is indeed mature, advanced and fast. However, it also has assumptions built into it that are related to the design of the Java language. I don’t think it is an ideal platform for a dynamic language, but it may be better than starting from scratch. It just doesn’t look like the promising languages are starting from scratch.
BTW, if the language you want to build looks a lot like Java (strong manifest type checking, OO, etc), then the JVM is probably ideal. But then, what is the point?
@deans4j: Thanks for the link. The presentation looks very interesting.
I guess a good example is Groovy and Grails.
You could also argue that heavy annotation uses are an evolution of language or even a dialect . EJB3 , SEAM
Hmmm… Interesting thought I’m just now having. Languages may become dialects with a common base or runtime.
“Hmmm… Interesting thought I’m just now having. Languages may become dialects with a common base or runtime.”
This is exactly how many Lisp programmers work. They build languages designed to solve their problems in Lisp and then use the new language to solve their problem. Martin Fowler has called this language oriented development. Also, I know Paul Graham has discussed this as it applies to Lisp quite a bit.
“… the popularity of Java-the-platform is intimately tied to the popularity of Java-the-language.”
I too disagree with this, as it often is the other way around. The choice to use Java-the-platform is in many cases the primary decision and one that is heavily influenced by business reasons. Using Java-the-language then becomes a mere corollary.
The strengths of J2EE and the sheer number of enterprise products on the Java platform only adds more momentum to that trend.
A lot of people claim the decline of Java. Noone cites any numbers. Where is the decline? I can’t see it. So next time I jump to an URL from Dzone or Reddit which claims “Java declining or dying” I hope to finde some facts.
But if Java should decline - good thing! Currently it’s incredibly difficult to find senior Java developers on the market. A decline in Java languages will make it easier for me to recruit developers.
Sure Java (at least as a language) will decline, as every language does - perhaps in 10 years from now.
Peace -stephan
— Stephan Schmidt :: stephan@reposita.org Reposita Open Source - Monitor your software development http://www.reposita.org Blog at http://stephan.reposita.org - No signal. No noise.
Is it this time of the year again?
Java is dying no more than it was dying a month, a year, or five years ago. Can we go back to valuable content now?
If Java is in decline, it is because those in charge of web technology are trying to imitate other technologies instead of building on Java’s strengths. For example, Java is never going to have a standard toolset as powerful as ASP.NET in Visual Studio, nor a comparable number of third-party gurus needed to make visual components. That’s why JSF is failing. Nor will java ever have the undisciplined free-form appeal to teenage hackers that PHP enjoys.
On the other hand, Wicket beats all other frameworks for building highly interactive web applications; if Wicket worked its way into the Java standard (the way Hibernate worked its way into EJB), then there’d be a strong reason for using Java on the web (where most developers seem to be working these days).
Is Java dead? Yes sure. IBM ( + Intel, Google, AMD etc.) will kill Java because Java (7) is a dead-born child. Java 7 will be the most useless (Java-) language-release ever.
Consider this: Java 7 has no support for parallel processing. Moore’s law tells us that a 4-core chip today will be a 16-core chip in 3 years. Another 18 months later it will be a 32-core chip.
Where is Sun’s answer to that problem? Shall we write single-core applications for a 32-core processor using Java 7? It seems that Sun has no answer to that problem. IBM definetely has the answer we are awaiting:
http://x10.sourceforge.net/x10home.shtml
If x10 sees the light of the day this will be the end of Java and it will be the end of Sun’s control over Java-technology. Moore’s law demands fast solutions and strong powerful companies supporting those solutions. Companies like IBM, Intel and Google. Sun will be out of the game in 2 years.
AMD just joined the Eclipse-foundation (tools for parallel processing and multicores). Google and IBM are cooperating on bringing „parallel processing to the unwashed masses“.
@Arthuro
http://www.infoq.com/news/2007/07/concurrency-java-se-7
I do not see Java dying either - but perhaps the brightest people are looking for a new toy ? I’ve seen this happening with Smalltalk, where some of these pretty good people were switching to Java to make - with the same technology - real good money.
Another thing is indeed the multi-threading stuff, where the traditional systems (Smalltalk, Python, Lisp, Java, C#, ….) do not have good solutions and this cries for a radical change … but perhaps this will take some time.
Another problem are the 90% of the community - they know Java, and they will only learn stuff, which look like C (or Java, or C#…).
I have seen, that the initial battle of Smalltalk against C++ was won by Java and C# much later. But these systems are still missing some stuff (in the area of dynamical and meta programming).
I also think, that all these languages are still too complicated. Now that IBM has sold Smalltalk, the researchers from IBM and Microsoft mentioned dynamic typed languages as a solution to the software development process.
I would like to have a language like Smalltalk (with a very small syntax) and most of the “stuff” are coming from the library - like loops, branches etc … and they have support for multi-processing support. And of course: virtual machine support with automatic garbage collection …
[…] is a short followup to my post on Java’s decline. One of the issues brought up in the comments is that Java as a platform potentially has more […]