Should You Use .NET or Java on a New Project?
Your organization has decided to embark on a large software project. In addition, it has also been decided that this new project will help introduce the company to new technology. After conducting a little research, the two candidates are Java and .NET. This is not an unlikely situation. Of course, you, as a developer, might not have complete freedom in making that decision. In the end, the choice may be one reserved for management or even senior management. Regardless of who has the final say, as the developer of this software, hopefully your opinion will be valued.
Java and Microsoft .NET offer more than just object-oriented programming languages. They provide a framework and platform for building enterprise-level software, complex applications whose architecture may be separated among multiple tiers and be comprised of many distributed components. Java and .NET are very similar in many respects, in terms of their runtime architecture, toolsets, and even language syntax. Both .NET and Java have proven themselves worthy candidates for delivering enterprise software solutions. That does not mean that one does not fit better in some instances than others. Following are some of the areas that should be considered when making an informed decision between the two.
Are you a Windows-only shop? Or, are you running Windows right alongside Linux and even some Unix systems? If the former is the case, .NET becomes a very appealing option, of course. You've already standardized on Microsoft technology and .NET is the future of development for Microsoft-centric applications.
For heterogeneous environments, or if you are writing commercial software and looking for the widest possible customer base, a strong case can be made for Java. Java's promise of write-once-run-anywhere holds true, for the most part, and can be an important factor in your decision. Of course, when building Java applications, it is important to be mindful of any vendor-specific enhancements you utilize as they will most certainly not be portable.
What current vendor relationships do you have? As mentioned previously, if you have a close relationship with Microsoft and that relationship has worked out well for you, it might make sense to stick with what has worked in the past and proceed with .NET as your development platform. The same is true for vendors such as IBM and Oracle, who promote Java technology through their tools and application server offerings. With .NET, you will inherently tie yourself closely to a single vendor. That is, Microsoft. With Java, there are numerous vendors to choose from, each offering their own tools and server software.
Cost and Support
Cost is always a factor. Having said this, there are many ways to evaluate cost and it is not just the initial price tag for an application server or a per-seat license for an IDE (Integrated Development Environment). A large choice in vendors can provide greater flexibility and the ability to lower costs. In recent years, open-source software has gained significant traction within organizations. For example, there are many good open-source Java application servers out there. There are also many Java applications servers with a price tag that far exceeds the Windows alternative. It's not to say that these commercial application servers are not worth the money and that they may not provide real value over their open-source competitors.
When adopting technology, one also must consider support. Going with .NET or a vendor of commercial Java products will include support. Open-source offerings often will provide some kind of support package, but this will cost money. If open-source is appealing to you, you will find that Java is the clear leader in this area. However, there should be some structured approach to what and how open-source products are utilized in your organization.
Ease of Development and Maintenance
Now, look at .NET and Java from a software developer's perspective, the individual who will create and maintain that software for years to come. It has often been suggested that developing with .NET is easier than Java. There is at least some merit to this argument. One obvious reason for this is that you are dealing with one vendor and that vendor's set of tools. In the world of Java, it is, quite simply, easier to become overwhelmed by the different offerings, from IDEs such as Eclipse and NetBeans, to web application frameworks such as Struts and JSF (JavaServer Faces), and to the numerous application servers available. Sun Microsystems, the owner of Java, helps to drive standards through specifications. The JSF framework, for example, is based upon a standard specification to which all vendors offering JSF tools and components must conform. However, numerous popular open-source frameworks are decidedly non-standard, even if they are popular in the development community. It's a big job to digest everything that's out there and available in the world of Java, and it can be time-consuming.
Development shops that choose Java are well served to implement some kind of in-house standardization. I am not talking about coding standards, though that is a good idea too, but standards in terms of which frameworks, toolsets, and servers are permissible in your organization. These restrictions will eat at those Java developers who crave the freedom of choice above all else, but it will help to minimize training costs, reduce maintenance headaches, and help to focus you on what is truly important: building software that delivers business value.
A New Reality
Finally, it should be noted that with the emergence of SOA (Service-Oriented Architecture) through the use of web services and more, some of the worry over making the wrong technology choice should be eliminated. Standards such as SOAP allow Java and .NET applications to interact quite nicely, whether they be two systems across the globe, or in another department on the same floor where you work. With this in mind, any application providing important business functions should consider what services they can make available to others, regardless of the technology they are based upon.
Deciding between .NET and Java is not always an easy decision and requires careful consideration. The upside to this is that you have two powerful and proven technology foundations to choose from for creating world-class software.
About the Author
Michael Klaene is a Principal Consultant with Sogeti USA. He has over 10 years of experience in IT, and specializes in J2EE, .NET, and Oracle design and development.