Java Is A Dead-End For Enterprise App Development

Before Java was invented, one of the key industry trends was to increase the productivity of both developers and end users. For example, fourth-generation programming languages (4GL) such as Powerbuilder, Progress, and Uniface provided professional developers with faster ways to develop business applications than using COBOL, Pascal, C, or C++. For end users, tools such as Dbase, Lotus Notes, and Visicalc provided them with the unprecedented ability to create mini-apps without the need for professional developers. In the early '90s, this productivity trend was thrown into a tizzy by the Internet. Now, software vendors and enterprise application developers had to rush to write a whole new generation of applications for the Web or risk becoming irrelevant. The Internet forced developer productivity and 4GL’s to take the back seat.

Java Was At The Right Place At The Right Time For Web Applications

Java was designed in 1990 as an easier and more portable option than C++ to develop embedded systems.  The invention of the WWW in 1993 started a meteoric change in IT application development. Sun Microsystems moved quickly to take advantage by selling “network” servers like hotcakes and offering Java as the platform for Web development. Most other software vendors were caught off guard and Java became the de facto Internet development standard for enterprise Web application development.

Fast-Forward 20 Years

Forrester data reveals that Java is still firmly planted in enterprise IT shops for custom-developed applications (see figure). But, data always tells us what happened in the past and does not predict the future. Application developers should also not make the mistake that adoption means goodness.

Java is not going away for business applications, just as COBOL is not going away. Java is still a great choice for app dev teams that have developed the architecture and expertise to develop and maintain business applications. It is also an excellent choice (along with C#) for software vendors to develop tools, utilities, and platforms such as BPM, CEP, IaaS, and elastic caching platforms (ECP). Software such as operating systems, databases, and console games  are still mostly developed in C++.

 Java Has Served Its Purpose, But Now It Is Time To Move Forward

Java development is too complex for business application development. Enterprise application development teams should plan their escape from Java because:

  • Business requirements have changed. The pace of change has increased.
  • Development authoring is limited to programming languages. Even though the Java platform supports additional programming languages such as Groovy and  JRuby, the underlying platform limits innovation to the traditional services provided by Java. You can invent as many new programming languages as you want, but they must all be implementable in the underlying platform.
  • Java bungled the presentation layer. Swing is a nightmare and JavaFX is a failure. JSF was designed for pre-Ajax user interfaces even though some implementations such as ICEfaces incorporate Ajax. There is a steady stream of new UI approaches reflecting Java's lack of leadership in the presentation layer.
  • Java frameworks prove complexity. Hibernate, Spring, Struts, and other frameworks reveal Java’s deficiencies rather than its strengths. A future platform shouldn't need a cacophony of frameworks just to do the basics.
  • Java is based on C++. Is this really the best way to develop enterprise business applications?
  • Java’s new boss is the same as the old boss. Oracle’s reign is unlikely to transform Java. Oracle’s recent Java announcements were a disappointment. They are focused on more features, more performance, and more partnerships with other vendors. So far, it appears that Oracle is continuing with Sun’s same failed Java policies.
  •  Java has never been the only game in town. C# is not the alternative. It is little more than Java Microsoft style. But, there are new developer tools such as Microsoft Lightswitch and WaveMaker -- and traditional but updated 4GL tools such as Compuware Uniface and Progress OpenEdge. And don’t forget about business rules platforms, business process management (BPM), and event processing platforms that enable faster change offer by enterprise software vendors such as IBM, Progress, TIBCO, Software AG.

What It Means: Application Development Teams Must Find A Better Way To Develop Apps

Many enterprise application development teams are already using a combination of tools and technologies to overcome the complexity and inflexibility of Java applications. BPM is used to quickly define and change business processes, and collaboration suites like SharePoint and Lotus are used to respond to the increasing demands of long-tail apps. Progress Software’s responsive process management (RPM) combines the best of BPM and business events to help businesses respond to real-time events and change business processes. This is just a small sampling of the next generation of business application development tools

Clear standard alternatives to Java and C# for custom-developed applications do not exist. There are issues with many of the alternatives. For example, BPM tools are great for defining and implementing processes but a poor choice for implementing compelling user experiences. The market for application dev tools is beginning to change though. The next generation of app dev tools will:

  • Dramatically increase developer productivity.
  • Allow developers to delegate change to business end users.

You Must Transform To A Lean, Mean Change Machine

Application development teams should create a three-year application development strategy and road map to include architecture, process, talent, tools, and technology. All options and trends should be put on the table and up for discussion. Development platforms are not the only items to consider. Cloud computing and mobile, to name a few, are other trends that must factor into your new strategy.



Java is NOT based on C++. If

Java is NOT based on C++. If anything it is based on smalltalk. They adopted the C syntax to speed adoption but that's where the similarity ends. Despite a few cosmetic similarities Java and C++ are very different animals. Twitter switched to Scala on the JVM and their reliability improved by orders of magnitude.

not based - evolved from

to say Java is _based_ on C++ is not the most illuminating way to say it - it's more like Java _evolved_ from C++... Java is based on OO, smalltalk being the grand-daddy (but not at all redundant!)...


This progression is parallel to the evolution of the abstraction of the machine that is the OS... UNIX (1974-ish) begat C - a language with the highest quality of abstraction (of forementioned machine) to express solutions with, such that no semantic 'resolution' of the machine's capabilities, above the OS level, are lost.

( Some still say the only 4GL is the shell! )

From there, our lineage collides with the unilateral efforts to compute simulations (instead of looking 'up' from the machine at the real world, we look down from the real world at the machine). In the 1960's MIT begat Simula (19)67 on a PDP-1. This is where we first heard the terms 'class' and 'instance of a class'. LISP and Pascal were inspired by Simula. OO was coined by XEROX and the result was smalltalk, the improvement on Simula was that it was designed to be dynamic.

Point is, C++ (1980s) represents the overlapping of these two perspectives (bottom-up and top-down). It can get ugly because the code reads like what it is - a muddle of expressions at two _very_ different levels of abstraction. But hey, it allowed for the complexities of event-driven programming and GUIs to be affordable...

By abstracting the machine to the degree that Gosling (et. al) did, Java was a language at such a high quality of abstraction that it didn't even matter which OS was in place, how it computed, and, therefore, which hardware it ran on. (Recall Oak was intended to run on a broader spectrum of machines that UNIX could run on...) i.e. C was developed until it could express itself (compile a C compiler), and Java was developed until it could express itself...

Java is the best 3GL blend of OO purity and 'machine' functionality to date. It only makes sense that 4GLs _based_ on it will be best-of-breed...

So... C to C++ to Java... - _evolved_ from...

Java is _based_ on Oak, which is _based_ on a combination of SmallTalk and UNIX (Solaris)...

THOUGHT: If the UNIX computing gurus maintain the shell is the only 4GL, then what do the OO gurus think the only 4GL is? (HINT: you can draw it)


Anybody care to comment about SAP with the devidement of SAP Java stack and ABAP stack? I'm now learning Composition Environment with Java and BPM and such..


"Java frameworks prove complexity" not a sentence. "Java is based on C++" not a coherent thought. Entire article: Not even worth rebutting.

Well, that's it.

That's it. The debate is over. The entire article is worthless, because Bob Foster said so. Everyone go home. Nothing to see here. Move along.

Java and market apps

When dealing with business apps don't forget the role being played by market apps like SAP, Oracle Siebel and many others where most of the programming is replaced by customization, if these apps are properly used.

Enterprise software vendors

And don’t forget about business rules platforms, business process management (BPM), and event processing platforms that enable faster change offer by enterprise software vendors such as IBM, Progress, TIBCO, Software AG.
AND most important Oracle who leads the pack here. Funny you "forgot" to mention them in the "good guys" section of the article only in the bad. Something doesn't smell right here...

I do not see how I can agree

I do not see how I can agree with the article. The article seems to concentrate on presentation layer and make a sweeping generalization. Tools such as BPM , Sharepoint, Lotus are not necessarily alternatives to a language capable of providing enterprise scale apps .. at least not yet, but hopefully soon. The current alternative is to expose capabilities as services and then enable apps to be built using ROR, PHP etc. on top of these services.

Java improves because IDEs improve

While the Java language, and the JVM may not change much, what has changed - a lot - are the IDEs. Eclipse and (my current tool) Netbeans have made giant leaps in Java programmer productivity.

As Mike said, Swing is a nightmare, but the addition of the Matisse form designer for NetBeans has brought GUI design ease almost to the level of Visual Studio.

What hampers Java is just what has been mentioned already: the dizzying array of third party APIs that have to be collected from all over the world. And determining "Have I the latest version of this thing?" is a nightmare.

VS offers a very integrated environment. The .NET framework is VERY comprehensive and greatly reduces the need to go scouring the world searching for components (and wondering if what you found is a serious tool, or some high school students pet project). Then there is the Licensing that has to be untangled: "OK, this one is GNU. Can we use that with this XYZ license? Wait, is the MIT license compatible with the ABC License on the Blurble API?".... and so on.

And, in VS, if you do go looking for third party components, the market is rich with vendors offering them in a centralised, easy to version place. If I want to use the tools offered by Telerik, I know exactly where to find them, and once there I can find the latest version in a single click. I don't google "telerik" and keep skipping through results pages thinking, "here's version 4.02... Oh wait, these guys have version 4.3.1, I'll get that. Wait, this article is talking about version 5...!!! Where can I find it?..."

GWT / GXT - anyone ?

We have been using GWT and GXT (with Java) for last one year and it gives us all the power of Java on server side while a thin client suited for enterprise apps. We also use RoR, PHP and .Net but we found the Java Stack with GWT/GXT best for enterprise development. It aligns us to all standard as well as Android app for field usage with web services.

Has anyone used it? Any thoughts.

What is dead?

I've finished my electronics course in 1972. This should give you an idea of how long my eyes have been watching technology. I am basically a C/assembler with a bit of java (no frameworks!) experience and OSS addicted.

What I see here is a common place dilemma of any human arena: A "thing" to do "things" for us. Let's always strive to abstract the abstraction to the point where we press a button and BANG: problem solved. Oh my! how business suits would love that! Those dammed developers interfering in the cash flow! They need time to come up with a solid and stable solution, those dammed bastards!

I've read the article and most of the comments and I believe we should all agree on one point: We desperately need the difficulties. If we had achieved the perfect world, all of us would probably had shot ourselves in the head by now.

A few years ago, I was cooperating with a developer which was developing some app in struts (or hibernate, I don't remember) and he couldn't connect to a server. I asked what was the TCP error and he said: what???

Most the people here defending 4Gls had to walk through the thick bushes. From Boolean algebra, data/address buses to assembly,C and OOPs. We have a tendency to forget how much we learned from these things, how useful they are to us, and end up making them villains in the processes and that we need to abstract them. I wonder what 4Gl graduates coming out of 4G schools will know, the same way I wonder when 4G athletes wearing 4G shoes will run 100m in 5 seconds but the moment they take their shoes off and take a step they will rupture a ligament because without these shoes their body won't even know how to walk anymore.

I know that things have scaled exponentially since those early days but we as humans should not let money kill elegance and the quest for perfection, for art.

In my humble opinion, the real dead paradigm here is humans x business but the suits keep reviving it by asking us, developers, how can they, the suits, get more and more of us out of their way. Is business good for humans or is business good for business?

Think carefully before you answer.

Don't you want to use a chainsaw?

Mario, I appreciate your comments and I agree that business is challenging, not just developers, but sales, marketing, manufacturering, logistics, r&d, and all units to do more. But, the reality is that this is not a new phenomenon just in technology. New technology, processes, and political systems brings disruption to those who have invested years in the olds ways.

I hear you on the problems with many developers today - they don't know enough about computer and software architecture. I was writing operating systems in 8080/Z80 assembly in the early 1980's and had to understand the microprocessor architecture fully. But, that doesn't mean I would want to use assembly instead of C++ or Java for a similar project 30 years later.

I think you make some excellent points about the business pressure that often leads technology charletans to create magic bullets. But, isn't that what Java has become now?

I appreciate the simplicity and beauty of an ax. But, if I have a cord of wood to cut, I will use a chainsaw.


Re: Don't you want to use a chainsaw?

Ok I must agree with you, Mike I don't want anybody to think that I am against progress. But remember that progress doesn't necessarily mean evolution. Deep down inside those JVMs is still assembly code being run. Compilers get better and better at putting together (almost) the same MOV, ADD, JMP, XOR, etc... of decades ago, linking ever growing and complex libraries of those instructions. Processors have most certainly progressed on how the execute those instructions.

Java, Mumps, C#, BASIC, Python are just reflections of specific needs at specific points in time. I don't think any of them is dead nor that we should let them die. We didn't dump bikes just because we've invented rockets.

It comes to my mind a scene of a very funny Woody Allen movie called The Sleeper (if I'm not mistaken). He wakes up 100 and something years in the future and bumps into this guy eating a ton of a greasy ice cream and smoking a cigarette. He is bug-eyed staring at him and the guy says: "whaaat? don't you know these things are good for you?"


I'm a doctor, not a programmer, so you'll have to excuse my ignorance, but I read this article with interest, because what I want is to be able to develop my own data based applications with nice easy to use interfaces that your average computer hater can happily use.

Database technologies offer so much for medicine in terms of audit, research, governance, reduction of transcription errors, drug error checking etc etc etc, but clinicians can't take advantage of that because your average doctor's comfort zone reaches its end point after excel, and we can't be bothered with the time, effort, excuses, money etc that it takes for our IT departments to produce anything that is of any use. Thats ignoring the fact that the privacy concerns are never adequately knocked on the head early, the software companies are milking the healthcare industry with proprietary offerings, and selling support, project management etc, etc way beyond what I see as required.

Here I am trying to learn Java and use it with MySQL, which I think is way to complicated and flexible for what I want, its going to take me a lot of time to learn, my projects are going to be very buggy etc, but I can't find an easy to use development environment that is cheap, and produces data based applications that I can have ported to your average hospitals servers, distributed through the enterprise easily, and that is easy to support. I'm tearing my hair out here.

Ok Ok Ok. Please define

Ok Ok Ok. Please define "Enterprise" "Enterprise development" and all these other buzzwords first. Is 1995 "Enterprise" the same as a 2011 "Enterprise"? What is a 2011 "Enterprise application" vs a 1995 "Enterprise Application"? Is it a website? An Internal one? Something that hooks up to LDAP or Kerebros? An e-business? A phone application on Android? What the hell is going on with all this "Enterprise" word I keep hearing about? What problem does it solve? How do you use it to solve the problem? Why is there so much confusion over this "Enterprise" word? Name some examples of "Enterprise" applications and maybe I will have some ideas. Otherwise I might just think "Enterprise" doesn't really exist. I have never once in my life felt anything concrete with the word "Enterprise" as it is applied to Java and real world use cases.

An example of confusion:

An example of confusion: Spring source. One framework amongst over two hundred other frameworks. What problem does it solve? Rod Johnson seems to think it solves "Enterprise development" problems. Spring Source is an "Enterprise". Their website is built on PHP and Drupal. I guess their website isn't part of their "Enterprise" because Spring is only good at solving "Enterprise" problems. I've heard it all: "don't reinvent the wheel, use what's there, use a drop in solution blah blah blah blah blah". Spring reinvents the framework wheel (need I reiterate HOW MANY FRAMEWORKS EXISTED BEFORE SPRING?) Use a drop in solution? Ok. Just use Struts then. It's already there. Yep yep yep. Why is there so much marketing uselessness in Spring? Why can't we have things like "here is the technical/business problem we face. This is the solution." instead of "we think we can apply enough spin to your mind so you can adopt our product for your enterprise and spend money and time on our product".

Is SOA the future of enterprise applications & frameworks?

A recent poll of enterprise developers revealed that 71% of corporations have adopted the service-oriented architecture (SOA) paradigm.

Shouldn't we factor in SOA when we evaluate what are the best languages and development frameworks for future generations of enterprise applications?

SOA implies building collaborative applications, using programmable web services, and communicating with XML-based protocols. The distributed nature of the processing brings encryption, secure sockets, authentication, authorization, trust, identity and web services security into the picture.

Bottom line: developers need a rich application development framework that can handle the complexity of specifications and APIs of the SOA environment.

Java is a robust programming

Java is a robust programming language, thanks for the information.

Vaadin Framework


I assume you refer to Vaadin, Google Web Toolkit and like when saying: "There is a steady stream of new UI approaches reflecting Java's lack of leadership in the presentation layer."

What is your opinion on Vaadin?

Java Baklava

Java will still be here by the time we all retire. It's biggest weakness is it's complexity, which renders application source to become very difficult to maintain (if not impossible). We have been using a language called LANSA for the past 15 years on the IBM i, Windows and UNIX platforms quite succesfully. LANSA provides a very high developer productivity (At least 3 X faster than Java development). Maintenence is a treat too. May be worth a consideration for folks out there looking at high-productivity multiplatform, multi-technology development languages.

I don't think Java is going

I don't think Java is going away anytime soon. Core of the enterprise is still Java and .NET(Microsoft changed the world). If you only just live on the Internet you might be thinking everyone on the world is using an IPhone and Apple Laptops, but in reality you would not have visited the world. The next sensation for small businesses is PHP. Being on the same space Python, PHP and Perl(Python killed me!) fight with each other than with others. Sure, Python might be older than Java. But almost half the programming population's contribution and usability testing on Java has edge. As you can see from the graph above (Java + Spring, Hibernate) still owns the market. The same reason why Android API was closely designed to capture the real programming community. Now since Java is completely open sourced(GPL), it has freed itself from all the constraints and still favorable for the market. Java's specification is not ANSI C (un-alterable), so it will address new trends (scala, groovy, jruby, jython, closure) and still be compatible with the old. I think programmers won't have much time for programming than before(else who would watch their youtube videos), they are getting really lazy. With Internet getting more cheaper and faster, we might see a major shift towards html 5, javascript, css for ui over systems like windows 8, and other mobile technologies. The backend and core is still going to be those standards(.NET, Java, C, C++). If programmers only have to do top level programming they won't be interested on what's inside. That would be the reason for these systems to take a hold for a really long time.