The Microsoft .NET Framework is a software framework for developing and executing applications on Windows client and server operating systems. It provides features and functionality that are designed specifically for creating and running applications on the Windows platform, but also supports connectivity with non-Windows systems. The Microsoft .NET Platform consists of five main components: the Windows operating system, Windows Enterprise Servers, .NET Framework, .NET Building Block Services, and Visual Studio.NET toolset. The three major components of the .NET Framework are the Common Language Runtime (CLR), Framework Class Library, and ASP.NET.
“Java” refers to a set of programs and standards originally created by Sun Microsystems, and now owned by Oracle Corporation. When people refer to “Java” they are generally speaking of one of the following:
- The Java platform, which includes the Java Development Kit (JDK) which includes the java compiler and other utilities, and Java Runtime Environment (JRE), which includes the Java Virtual Machine (JVM).
- The Java Class Libraries, a large body of reusable code containing most of the Application Programming Interfaces (APIs) and functions that would be provided by the operating system.
- The Java programming language, with which developers can write applications.
- A particular “edition” of the Java platform, Java Card, Java Micro Edition (ME), Java Standard Edition (SE), or Java Enterprise Edition (EE)
The Java compiler, part of the Java Development Kit (JDK) translates the code written by the developer into platform independent Java “bytecode”. The Java Virtual Machine (JVM) translates Java bytecode into instructions comprehensible to the underlying operating system (playing much the same role as the CLR in .Net). If the Java class libraries and a JVM are present on a computer, the machine is said to carry a Java Runtime Environment (JRE). Modern JRE’s include more than just the JVM, such a Just-In-Time compilers and byte code verifiers.
Similarities Between .NET and Java
Microsoft .NET and Java both aim to simplify the development of applications by providing a set of standardized, modular components and services. By having standard components and services at their disposal, developers can concentrate on business needs (“business logic”) rather than programming more fundamental services. Using visual tools that simplify application development is a type of programming that is often called Rapid Application Development (RAD)
Multi-tiered, similar computing technologies: Java and .NET each were created to enable programmers to build “tiered” web applications. A three-tiered application consists of a client tier, server tier, and database tier. .NET and Java both provide services to facilitate transactions in which business processes can be triggered and data recorded in databases.
Enterprise Level Development: Both offer different tools and ways to achieve the same goal of enterprise application development. C# (primary language of .NET) and Java both derive from C and C++. Both platforms are object-oriented, type safe, and have automatic garbage collection.
Both .NET and Java provide enhanced ability to develop and integrate web services, thus making the applications more extensible and interoperable. In addition, Java/JEE and .NET each have a set of components, services, and features that provide a standard way of performing tasks such as accessing databases, scripting Web pages, handling messages, and connecting to remote resources. A comparison of the key .NET and Java/JEE features and services are summarized in the table below:
Differences between .NET and Java
While they are similar in some ways, there are many differences in the internal workings of these frameworks and certain aspects of the languages that come with them. Let’s look at the core differences that enable us to make our pick. These are just differences and not necessarily advantages or a disadvantages for one platform over the other:
Windows vs. Multi-Platform: Though there are open source implementations of Microsoft’s .NET Framework, like mono to create cross platform applications, Microsoft .NET is primarily targeted for the windows operating system. Java, on the other hand, is based on the idea that the same software should run on many different kinds of computers, consumer gadgets, and other devices on a network. The big promise of Java is that it allows applications to run on different types of computers without having to be rewritten. Java applications run on “virtual machines” that were written for each platform.
Proprietary vs. Open source: The .NET Framework is a concrete and free product that is developed by Microsoft and integrated into the Windows operating system. It does not rely on third-party vendors to provide an implementation, although it is highly extensible and many third-party additions are available.
Although Java is provided by a number of vendors, most users will only ever encounter the Oracle JDK and JRE (The OpenJDK is an open source version found on some Linux distributions and other open source operating systems, and IBM and HP both supply their own implementations for their big iron Unix systems). One of Java’s strengths is that a wide variety of tools, products, and applications are available from numerous vendors. Competition among Java EE vendors drives innovation, while strict compatibility standards help maintain quality. Commercial, proprietary products co-exist with their Open Source counter parts. Because of the open nature, third party tools like JRebel have been developed that can help cut development time significantly. Microsoft users, on the other hand, must rely on Microsoft for all .NET innovation.
Also, for .NET, a standard development IDE (integrated development environment) is available with Microsoft Visual Studio. This tool comprises all the things a developer needs to develop, debug, build and deploy any kind of application targeted for the .NET framework.
For Java, there are four main IDEs, Eclipse, IntelliJ Idea, Oracle NetBeans, and Oracle JDeveloper. Instead of being tied to a single environment, on a single platform (Windows), you are free to choose the product that best suits your needs, at many different price points, and can choose to use Mac OS X, Linux, or pretty much any other platform for which a JDK exists to do your development work. However, there is no one standard tool that is available.
How to choose between .Net and Java
Both platforms provide technologies that enable a skilled developer to build quality enterprise applications. However, a technology is rarely picked based on performance alone. The following are some points that IT managers should consider when weighing the choice of .NET vs. Jav
1. Assess the complexity of the applications you will be building
Microsoft tools have an edge over Java for building applications that require rich graphical user interfaces and that deliver content to web browsers. The perception is that Java servers are better for complex applications supporting higher volumes of users.
2. Take stock of your existing developer skills and infrastructure
Take into account the existing technology landscape of your firm and the technical abilities of your workforce, because training developers and replacing existing infrastructure could be costly.
3. Weigh the importance of application portability to your product, company
Java, with its multi-platform portability, gives you leverage to either negotiate with an existing vendor or pick the vendor of your choice.
4. Investigate outside vendor support
As mentioned above, Java’s strength lies in libraries developed by various third-party vendors. Similarly there are a bunch of controls and libraries available for .NET as well.
5. Consider the cost of the solution
Consider the total cost of building, deploying, and maintaining the application. Factor in productivity based on choice of tools, turnaround time, and hosting costs such as users per server, cost of application servers, etc.
In conclusion, the platform to pick depends on your situation and the needs of your application. You wouldn’t go wrong picking either of those. However, the pick should not be based on which has better architecture but should be based on the strengths and weaknesses of the technologies and which system has better solution for the task at hand. This is exactly how we recommend between the two with our clients here at Segue and the same should apply to your company’s unique situation as well.