I've been a zone leader with DZone since 2008, and I'm crazy about community. Every day I get to work with the best that JavaScript, HTML5, Android and iOS has to offer, creating apps that truly make at difference, as principal front-end architect at Avego. James is a DZone Zone Leader and has posted 639 posts at DZone. You can read more from them at their website. View Full User Profile

Why Java Will Always Be Suitable For Enterprise Development

11.24.2010
| 9579 views |
  • submit to reddit

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.

Tags:

Comments

Ronald Miura replied on Wed, 2010/11/24 - 12:23pm

The only problem is the 'Always' in the title...

Andy Leung replied on Wed, 2010/11/24 - 2:36pm

It's really interesting that dotNET is showing on top of Java in Enterprise platform. Does it mean that this survey or data-collection is conducted for some John Doe's business with maximum 2 employees and calling themselves enterprise because they outsource all development to India or China and these Indian/Chinese developers just know how to drag and drop UI components to make a mess in system design and backend processes? If yes, then I know why dotNET is on top over Java, otherwise I see it having the same adoption as PHP.

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

Hosanna

Otengi Miloskov replied on Wed, 2010/11/24 - 5:01pm in response to: Honey Monster

Im agree with Uffe Seerup and I would like really to develop in C# 4 and .Net and as he said with C#5 with the async is awesome. But ... All our customers and clients environment are Unix or Linux or BSD or even mainframe. We dont have a chance to deploy on Window servers because that is the politic side of almost all our customers the perception of Microsoft is not very good for serious Enterprise and Server applications. Me Im sure .Net and Windows Servers are for Enterprise Apps but the problem of Microsoft is the reputation and perception gained all this years since VB6 and Windows Fiasco with viruses and screen of deaths etc, it is not very good. About Java is a fine language and platform for Enterprise does not have all the syntactic sugar and goodies of C# but you can get the job done fine. I liked to develop with Borland Delphi desktop apps in the 90's so people as me that liked that environment can try the framework Apache Click is awesome and easy to work as the framework of Delphi but for Web applications, It is control/component based and you can define declarative way your method events instead of anonymous classes for events, it supports ajax and it very easy to use. For the backend Spring and Hibernate are the way to go. By the way Mono still not mature as the real Microsoft .Net framework and compilers. So it is not an option Mono for Enterprise deployment yet.

Praveen Govindan replied on Wed, 2010/11/24 - 5:16pm in response to: Andy Leung

What makes you think that the only thing Indian and Chinese developers know is drag and drop components and that they make a mess of system design? Do you any concrete evidence to back up this ridiculous claim? The ratio of good developers to bad developers would be almost the same anywhere in the world and since India and China has more numbers, you would find the more of both (good and bad) there.

Greg Brown replied on Wed, 2010/11/24 - 5:54pm

Interesting conclusion given that, in the chart, Java shows a 3-year growth pattern (from 48% to 54%) while .NET's numbers have remained relatively flat (~60%), and have actually dropped slightly since last year.

Greg Brown replied on Wed, 2010/11/24 - 6:03pm

Something else to consider:
  • 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

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.

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

Other point in consideration could be, what JEE implementation were evaluated against .Net?, Jboss, GlassFish Spring?

Fenton Travers replied on Wed, 2010/11/24 - 9:29pm

I've been a Java developer since the day it came out when I was in Uni. I still do java development. But you know what, there are aspects about it that just suck, and some new(old) kids on the block that are really compelling to me, and I'm rolling up my sleeves and learning, Clojure.

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.

  • Read this article: http://www.paulgraham.com/icad.html, to get a better understanding on the matter.
  • Run Ubuntu, as your primary desktop/laptop OS,
  • Yes, go back and work with Emacs.
  • Go to this site to learn how to setup your Clojure system: http://riddell.us/ClojureSwankLeiningenWithEmacsOnLinux.html
  • Learn how to program in Clojure from this site: http://java.ociweb.com/mark/clojure/article.html
  • Here is my after install Ubuntu apt-get, that gets me most of the way too...works on Ubuntu 10.04: sudo apt-get install compiz compizconfig-settings-manager compiz-fusion-plugins-extra simple-ccsm sun-java6-jdk gnome-do gnome-do-plugins texlive-full emacs clisp slime latexdiff git-core git-gui gitosis gitweb ant maven2 pidgin meld apache2 auctex libtiff-tools openoffice.org transmission cups-pdf gimp xmlcopyeditor shutter

Frank Thomas replied on Wed, 2010/11/24 - 10:02pm

It is dumb drivel like this that makes it into my RSS feed and makes me waste my time. Man seriously how retarded are you?

Attila Király replied on Thu, 2010/11/25 - 1:29am

Why are these two seperate options in the Forrester survey?
- "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

Like Attila, I don't understand why the chart make a difference between "Spring/Hibernate" and "J*EE & Co.". They are both used to build Java apps.

Kit Davies replied on Thu, 2010/11/25 - 4:52am

The text at the top of the chart states that multiple responses were accepted. Ie. someone could report that they used Java AND Spring, and each were recorded separately. Hence the total responses for all JVM-based technologies could be much greater than .Net. However, it really confuses the data TBH, and makes drawing clear conclusions dangerous.

Andy Leung replied on Thu, 2010/11/25 - 8:04am in response to: Fenton Travers

Fenton, I actually have to agree with you at some point regarding the OO is dreaded spaghetti code but I've found myself actually thinking too much in OO and not being practical sometimes, this is not the fault of a programming language; since I (or may be some of us) cannot think without a context when I/we have to use my/our logical units in our brain, I/we wrap with "object" (what) before knowing the "method" (how). If I turn my thinking around into manufacture assembly line model (streamed line process), it looks to me methods with threads do not need a context but after a while, I realize that even the robotic arm (thread) that assembles the good (data object) has attributes for the thread(s) to be used, so I guess it's really about OO at the right context at the right place. I do not believe that Clojure can solve all problems.

Honey Monster replied on Thu, 2010/11/25 - 9:30am in response to: Attila Király

There is nothing strange or fishy about it. Respondents were asked to check all that applied, not just one. Which means that some of those who checked "Java, JavaEE, or J2EE" also checked "Open source frameworks like spring or hibernate". So no, you should not add them together, and Java is not in the lead. Not in this survey, anyway.

Honey Monster replied on Thu, 2010/11/25 - 9:40am in response to: Otengi Miloskov

But ... All our customers and clients environment are Unix or Linux or BSD or even mainframe. We dont have a chance to deploy on Window servers because that is the politic side of almost all our customers the perception of Microsoft is not very good for serious Enterprise and Server applications.
The way it works for most enterprises (and the way it should be) is that they look for at solution (make or buy) and then go with the best platform for that solution. The OS platform really doesn't matter much anymore. This is especially true when using server virtualization or when moving to the cloud. You don't really care about the OS anymore. Cost is the same. Stability and security are the same. In that world, productivity rules.

Attila Király replied on Thu, 2010/11/25 - 10:48am in response to: Honey Monster

You are right that they can not be added together (I realized that after I posted my reply). Still it is strange to me that two of the biggest libs of the java ecosystem are listed separately, as the only examples of open source frameworks (they gie the feeling as the open source frameworks would be a java only thing).

James Jamesson replied on Thu, 2010/11/25 - 1:40pm

Comparing "Rich Interfaces in Browser" with "Mainframe and midrange platforms"? I do not know who this Mike is but he is definetely clueless. I wonder how people like Mike make themselves very popular with all that mambo jambo they skim from there and here and publish as a wanna-be-trustworthy technical article. And we are suppose take his made-out-of-thin-air Java bashing seriously on top of all that.

Andy Leung replied on Thu, 2010/11/25 - 1:47pm in response to: Honey Monster

Sure if you want them to be separate but please also separate LINQ and all .NET frameworks, ecosystems, or even libraries because they imply different things just like how you say J2EE should be separated from Java. I don't see difference because if you say you can't just put LINQ on its own because you code .NET with that but I have never heard you don't code Java in J2EE!

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

I bet you work in a 10-staff employee or you are just a freelancer? Do you know how enterprise actually works? Is it really true that developers don't care about OS platform anymore? Okay, can I code Java or Php on Azure? Or can they code .NET on Google App Engine? OS Platform does matter! Cloud is only there for developers to concentrate on functional specs not non-functional except that you have to know at least what you are coding following what kind of cloud's rules. Don't say that you don't need to care about what OS is in Amazon, you still need to install all libraries and any packages you need for your development platform, it just clones an OS image for you. I consider Google App Engine is more of true cloud except that it is not as mature as enterprise could adopt yet but this is not what this discussion all-about.

oh..btw, good luck with your MS servers :)

Alex(JAlexoid) ... replied on Fri, 2010/11/26 - 7:21am in response to: Praveen Govindan

 

Do you any concrete evidence to back up this ridiculous claim?

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

I bet you work in a 10-staff employee or you are just a freelancer? Do you know how enterprise actually works?
I don't really like your tone. Why the vicious ad-hominem? Yes, I know how enterprises work, thank you.
Is it really true that developers don't care about OS platform anymore?
Read again. I didn't say that. I am keenly aware (even evidenced in this thread) that developers care very much about platforms. When enterprises make decisions on whether and how to go forward with a project, the platform matters less. Decision makers are not as zealous as some developers. Most enterprises already operate heterogeneous systems, and they have staff who understands how to operate both Linux, Windows, Java and .NET. When a new project is launched they look at ROI, not on platforms. Do you really believe decision makers say "we need this project to run on Google app engine". Or do they say "we need to cut operating cost. Let's look into cloud deployment."?
Okay, can I code Java or Php on Azure?
Yes, I believe you can. Or at least it has been announced.
Or can they code .NET on Google App Engine?
No, I don't believe so.
Sure if you want them to be separate but please also separate LINQ and all .NET frameworks, ecosystems, or even libraries because they imply different things just like how you say J2EE should be separated from Java.
Huh? I don't say anything like that. Maybe you should make a rule to read twice and count to 10 before posting? For the record, I did not perform this survey. I still don't get what your problem with the survey is, however. Other than Java is taking 2nd place?
OS Platform does matter! Cloud is only there for developers to concentrate on functional specs not non-functional except that you have to know at least what you are coding following what kind of cloud's rules. Don't say that you don't need to care about what OS is in Amazon
Oh it matters to developers! A great deal. This article is more about the decisions taken before the developers get their hands on the project. To decision makers it is ROI that matters. And ROI involves cost of development as well as cost of operating/hosting. Decision makers are more platform agnostic than you seem to think.
I don't see difference because if you say you can't just put LINQ on its own because you code .NET with that but I have never heard you don't code Java in J2EE!
Again, I'm not really sure what you are trying so say here. Are you comparing J2EE to LINQ? Or are you saying that they cannot be compared? For the record, many people who hasn't coded C# with LINQ have a hard time fully grasping what it is. Most just believe that it is something like Hibernate, EJB or JPA. LINQ is much more basic. When you code with LINQ your code shrinks considerably because most loops (while/for/foreach etc) disappear while the robustness and readability improves.
Besides, you constantly say "Java is not in the lead", where is your proof?
I'm not constantly saying any such thing. Not unless you read the same line again and again, each time out of context. Someone claimed that "open source frameworks" should be added to "Java, JEE, J2EE" and that lead him to conclude that Java "was in the lead". I pointed out that the questionnaire specifically asked respondents to check multiple answers if they applied. And then i wrote this: "So no, you should not add them together, and Java is not in the lead. Not in this survey, anyway.". As you can see, I specifically mentioned this survey. I did so exactly because it is merely just one survey. But this survey does not support a claim that "Java is in the lead".

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

We've been developing web-based ERP software(which is best example of an enterprise application development) with Java EE and we are very happy to be in Java platform. Language features don't matter so much in enterprise development. The problematic aspect of enterprise development projects are generally requirement analysis, design and implementation process but not the technology or language. Primary advantage of Java is freedom. There are many options, you can also develop your own middleware and tools.

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

Uh, really, so you don't pay for Micorosoft licenses? Your statement would make sense if it were say Ubuntu and CentOS, but to say the OS doesn't matter is ridiculous.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.