Why Java Will Always Be Suitable For Enterprise Development
A recent Forrester article proposes that "Java is a Dead End for Enterprise App Development". It's a headline that grabs your attention, especially if you are a Java developer, but does it have any basis? I don't think so. Let me explain why.
The article refers to recent survey results, showing that Java is still one of the main options available for as a development platform. No surprises there.
However, the article goes on to say that Java has served it's purpose, and that it's time to move forward. Some of the reasons provided for the need for change include that Java's VM limits innovation to traditional services provided by Java and that Java is 20 years old. And so onto the conclusion:
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.
I don't see how Java fails to deliver here? There are frameworks that support rapid application development across the Java ecosystem : Spring Roo and Play being the front runners. Android gives Java it's place on the mobile space, and again, Spring/VMWare provide compelling cloud computing solutions. There's nothing that enterprise application need that Java cannot deliver.
The way I see it, Java is nothing like a dead end for enterprise applications. But if you agree with the Forrester article, I'd like to hear your reasons.






Comments
Ronald Miura replied on Wed, 2010/11/24 - 12:23pm
Andy Leung replied on Wed, 2010/11/24 - 2:36pm
Honey Monster replied on Wed, 2010/11/24 - 4:35pm
in response to:
Andy Leung
You need to wake up and stop uttering ignorant clichés about .NET being only for drag and drop development. In case you haven't been bitten by it yet, .NET is eating away at Java in enterprises of all sizes. As the article says, .NET is considered by many/most enterprises to be more productive. That may not be correct, but it is still a perception problem. Deal with it instead of dismissing it.
The big deal with C# compared to Java is LINQ (to objects, to databases, to webservices, to anything), reified generics, automatic resource management, generators and (not least) much better support for tooling/codegen through partial classes/methods etc.
With C# 4 and VB10 .NET gained native support for dynamic typing. This improves interop with dynamic languages considerable, but perhaps more importantly it allows meta programming and dynamic DOM oriented programming like what you find in Ruby and Python.
The gap is set to widen considerably with C# 5 which will have new in-language support for asynchronous programming. One application of this is parallel programming where developers can still write loops, conditionals (if-else), throw and catch exceptions etc. across asynchronous continuations. The point is that you can convert an existing algorithm to async model with minimal effort. C# 5 will probably be released before Java 8 (late 2012). Java 8 will have a form of semi-closures. Yay!
These are all distinguishing factors which can make C# much more productive than Java. LINQ certainly is a big deal. It also makes C# more complex, so maybe C# will crumble under it own weight at some point. But for now the perception is that C#/.NET is much more productive than Java. And perception is important when decisions are made.
Armin Ehrenreich replied on Wed, 2010/11/24 - 4:51pm
in response to:
Honey Monster
Otengi Miloskov replied on Wed, 2010/11/24 - 5:01pm
in response to:
Honey Monster
Praveen Govindan replied on Wed, 2010/11/24 - 5:16pm
in response to:
Andy Leung
Greg Brown replied on Wed, 2010/11/24 - 5:54pm
Greg Brown replied on Wed, 2010/11/24 - 6:03pm
- C was created in 1972, so is ~40 years old
- C++ was created in 1983: ~30 years old
- Objective-C (love it or hate it) has been around since at least 1992: ~20 years old
All of these languages are still in active use, so I'd suggest that Java's age probably isn't all that relevant. In fact, Java is actually younger than any of these langauges: it wasn't released until 1995.Andrew McVeigh replied on Wed, 2010/11/24 - 6:30pm
in response to:
Honey Monster
Certainly LINQ is a very "sexy" feature. Trouble is, the complexity often isn't worth it. I was working on a market data system the other day, where the back end was written in Java. We implemented the full query language in less than 10 classes (and, or, operators, bitemporality).
Anyway, they needed to be able to post-process the points returned from the back end in C# also. They wrote a LINQ provider and used expression trees. The end result was over 5x the amount of code *and* the queries were uglier because the data we are mining doesn't have a fixed set of domain objects. Yuck.
As for C# eating up Java's enterprise space, that's partially true, but it's not the whole story. I've written a major server-side app in C# recently and it was a decent experience, but Java wins out still on the tunability of the VM, the maturity of the open source stuff in the space and far better caching options. In practice, I felt the extra language features of C# really didn't impact the productivity too much.
And interestingly, the C# server system that I wrote at one point had to interface to XSLT2. We used the enterprise version of Saxonica (superb BTW) and curiously, we started getting Java stack traces out of it. Turns out they converted it to .Net using KVM and its libraries. Basically, the .Net space is still playing major catch up on the enterprise libraries and will be for some time.
Finally, when we deployed the C# server side app, we at one point wanted to run it on bigger hardware. The bank only supported Linux on these, which would have been fine with Java. So, in the server space, the lack of platform options really does bite.
Manuel Jordan replied on Wed, 2010/11/24 - 8:51pm
Fenton Travers replied on Wed, 2010/11/24 - 9:29pm
OO, was supposed to save us from the dreaded spaghetti code c could become, but the side effects inherent in imperative coding means that in Enterprise development, you see tonnes of crap code, that no one would EVER reuse. Everyone, if you want to elevate yourselves to real power, simply learn to use Clojure, who's power comes from being a Lisp dialect.
Frank Thomas replied on Wed, 2010/11/24 - 10:02pm
Attila Király replied on Thu, 2010/11/25 - 1:29am
- "Java, JavaEE, or J2EE" 54%
- "Open source frameworks like spring or hibernate" 17%
It smells fishy to me. Especially if you combine the results of these two: Java takes the lead with more than 10%.
Gervais Blaise replied on Thu, 2010/11/25 - 2:19am
in response to:
Attila Király
Kit Davies replied on Thu, 2010/11/25 - 4:52am
Andy Leung replied on Thu, 2010/11/25 - 8:04am
in response to:
Fenton Travers
Honey Monster replied on Thu, 2010/11/25 - 9:30am
in response to:
Attila Király
Honey Monster replied on Thu, 2010/11/25 - 9:40am
in response to:
Otengi Miloskov
Attila Király replied on Thu, 2010/11/25 - 10:48am
in response to:
Honey Monster
James Jamesson replied on Thu, 2010/11/25 - 1:40pm
Andy Leung replied on Thu, 2010/11/25 - 1:47pm
in response to:
Honey Monster
Besides, you constantly say "Java is not in the lead", where is your proof?
Andy Leung replied on Thu, 2010/11/25 - 1:53pm
in response to:
Honey Monster
oh..btw, good luck with your MS servers :)
Alex(JAlexoid) ... replied on Fri, 2010/11/26 - 7:21am
in response to:
Praveen Govindan
I do, for Indian developers. But there are 2 reasons for having higher percentage of horrible developers:
1) Culture and caste system(witch is actually in full effect still) in india forces more people that don't like software development to be developers.
2) Little or no options of getting a good and stable job outside of IT related fields.
As a result of the above 2 points, you get apathy and no interrest in professional development. In wealthier countries people can(and do) change their speciality and profession and still get a descent salary, in India that is not an option.
So yeah, based on that logic and personal experience there is a higher ration of horrible developers in India than in Europe and Americas.
Honey Monster replied on Fri, 2010/11/26 - 12:05pm
in response to:
Andy Leung
Kristian Rink replied on Fri, 2010/11/26 - 3:27pm
Good article, James. Generally, I think people tend to deal way too much with questions like that. I mean, why bother? .NET is an interesting platform and surely has a bunch of features worth eventually being adopted, and, vice versa, Java as a platform, community, ecosystem has a bunch of advantages over .NET. From a technological point of view, I would consider this discussion pretty next to useless.
But there's one valid point about it, nevertheless: Productivity of developers. I guess the original author has a valid point here, but to me, the solution here is not about creating new tools to quickly write more code, but rather to build more tools in order to do more development work rather than "just" writing code. In order to get a (business) problem solved and, thus, provide value to your customer, your company (and, subsequently, be "productive" from an economic point of view), maybe you generally want to work as "high-level" as possible, you eventually want to cut down the amount of boilerplate code and configuration files to be written, and you might want to drastically reduce all effort spent on bothering how and where to fit a piece of code into an existing application infrastructure. From that point of view, I think Eclipse people are on a track not completely wrong by providing a vast range of tools, frameworks, technologies to not just support writing code but to support software modeling. Maybe this is a way way more promising than any other "language" or "platform" dispute...
Ibrahim Levent replied on Sat, 2010/11/27 - 1:41pm
One valid point in article is development productivity and platform complexity but it depends on your technology(specification) selection and tool assets. We had to develop a new toolset to develop ERP appications to ease development. On the other hand, platform complexity shows maturity as well. Enterprise development teams are responsible to build a development stack for themselves by selecting frameworks or making it, that's the freedom with some cost.
Finally, world's top 2 ERP vendors(Oracle,SAP) support Java, that's the answer to show that it is not dead-end in enterprise development.
Steven Goldsmith replied on Mon, 2010/11/29 - 12:50pm
in response to:
Honey Monster