In my opinion, this is the beginning of the end of open-source freeware technologies.
http://www.theserverside.com/news/thread.tss?thread_id=40611
Java Succumbing to .NET in my Organization
After talking with some of the developers who are in the trenches, most of them are happy to move to .NET. This even includes some who, like myself, have been certified in and built a career on Java. Apparently, Java is just too hard and too intimidating, especially for beginners.
Java and .Net are comparably powerful technologies. As one who has experience with both, I will say that I prefer the Java experience (especially for developing business logic), so I find it discouraging that Java is losing ground in this way in our organization. I have thought about the reasons why and have come up with some reasons (and I acknowledge I am probably not the first to offer these explanations):
· Too many frameworks
If I want to design a website look-and-feel and page flow in .NET, I use ASP .NET. That’s it. If I do so in Java, I use JSP. Or I use JSP and JSF. Or Facelets and JSF. Or Echo2. Or Tapestry. Or Velocity. The number of choices can be intimidating. And that is just for web design. With persistence frameworks, .NET developers have ADO .NET. Java developers have entity beans and JDO as Sun standards or open-source options like Hibernate, Torque, Spring JDBC, and on and on.
Given all the choices for the web design, the middle-tier, and the back end, developers are overwhelmed by the number of permutations of possibilities. I could go JSP/JSF, Spring, and entity beans; or Tapestry, session beans, and Hibernate; or JSP/JSF, session beans, and entity beans; or ... You get the idea.
· Too many IDEs... all with weaknesses
Closely related to the issue of framework proliferation is the issue of IDE proliferation. Consider IntelliJ IDEA, my favorite IDE. It is an amazing piece of software, but it was really behind the curve on JSP development. And that is a Sun standard! IDEA is also completely unaware of JSF, another Sun standard that has been around quite a while and one whose goal was primarily to facilitate web development in IDEs. If IDEA has this much trouble with Sun standards, imagine how it does with open-source solutions like Spring and Hibernate. Sure there are workarounds and plugins and so forth, but those take time .NET developers don’t need to take.
Of course, if, for example, developers want to use JSF, then they can go with NetBeans, which is offered free from Sun. But then they forego the incredible refactoring capabilities and “smart coding” capabilities that make IDEA so great. For Java developers, it becomes a matter of deciding which IDE is the least incomplete for their needs. Developers in .NET have no such decisions to make.
· Too many infrastructure component possibilities
Developers in .NET have Windows Server and IIS. That’s it. All development organizations have professionals devoted to these technologies. Java developers have Tomcat or Apache, for example, for the web server. If they need to deploy to a full-fledged J2EE server, then there’s WebLogic, OC4J, JBoss, and on and on. Developers need infrastructure staff trained in the organization’s preferred server, and the staff might need to be retrained should this change. In my organization, there is no such staff dedicated to J2EE infrastructure as there is with Microsoft infrastructure.
It should be noted that deployment to IIS is a simple matter for developers—as simple as copying the project to the wwwroot folder. Java developers must build WAR files or EAR files in order to deploy across servers. Not terribly difficult thanks to Ant, but still more work than a simple copy.
What bothers me the most is that these problems negate two distinct advantages that the Java community has over .NET:
· Open-source energy
Microsoft has a lot of talented people working to improve .NET, but no single entity is capable of the creativity of many entities. There is also the possibility that Microsoft creativity may be somehow subject to the company’s corporate aims. Both of these factors can potentially limit the ability of developers to deliver the highest quality software in the least amount of time.
Because no one quite owns Java, much to the chagrin of Sun, there are a lot of great open-source tools out there like Spring, Hibernate, and Struts that result from the efforts of many brilliant, dedicated individuals. The Java community should be able to benefit from this universal effort, and it should be an advantage over .NET. Yet instead it has become a detriment.
· Manifestation of agile methodologies within tools
The Java community embraced agile methodologies well before .NET did (if it even has). Tools created to facilitate agile practices like JUnit, Ant, and CruiseControl, all of which are open-source incidentally, were developed in Java for use in Java projects. Moreover, many leading IDEs like IDEA embraced these tools as core components. The result was a generation of IDEs that served as a one-stop shop for coding, configuration management, automated unit testing, and automated builds.
The .NET community, on the other hand, lagged behind the Java community in all these areas except for configuration management. And even there, Visual Studio .NET only integrates with Visual SourceSafe, another Microsoft product, rather than the all the other choices like ClearCase, Subversion, etc. In the area of other tools related to agile methodologies, only after some time did the fledgling open-source community on the .NET side create equivalents—NUnit, NAnt, and CruiseControl .NET—to their Java counterparts. Agile methodologies transcend implementation technology, yet Microsoft seems to not be quite on board. Only the most powerful, and most expensive, edition of Visual Studio .NET 2005, has NUnit integrated. No such luck with NAnt.
As with open-source energy, the agility advantage has not proved to be a boon for Java. This is because the business community has not grasped the business value of agile techniques—particularly in my organization. Therefore, the advantage Java has in this regard is meaningless.
Again, the technologies are comparable, so the issue is development speed and ease. Ultimately, I think it comes down to the IDEs. If Java development tools allow for rapid development and help to ease a lot of the pain associated with configuration and such, then this would narrow if not close the gap with .NET. Visual Studio 2005 has a number of really compelling features that make development fast and easy and far more palatable to my management. It is no small challenge, however, for the Java realm to accomplish such a feat with the myriad of frameworks out there.
Perhaps the answer is IDE standardization. JSR-198 is a very weak start but a start nonetheless. All IDEs could be built with some minimum standard functionality—like support for all production standards from Sun like JSF and JDO and standard development functionality like drag-and-drop web design. Another standard capability, as Eclipse has pioneered, would be plugin integration and a standard interface for development with the plugin inside the IDE. It would be the responsibility of open-source framework developers to build their software so that it can be incorporated into the standard IDE according to the rules for plugin integration. In this way, Java developers could leverage the power of the open-source movement and agile methodologies while maintaining the simplicity enjoyed by .NET developers.
I would love to hear your thoughts on this topic. How can I convince my management not to abandon Java?
Thread Closed
This thread is kinda stale and has been closed but if you'd like to continue the conversation, please create a new thread in our Forums,
or Contact Us and let us know.