Wednesday, June 15, 2005

.NET vs. Java

Like a classic Greek drama, an endless battle swirls around .NET versus Java (particularly J2EE -- Java version 2, Enterprise Edition). Both players tout their own superiority across countless dimensions, including:
  • scalability
  • security
  • performance
  • interoperability
  • ease of development
  • support for 3rd-party products
Feature for feature -- both platforms are pretty much neck and neck -- at least in terms of what they allow developers to do. When one camp innovates, the other one almost immediately follows by delivering virtually equivalent functionality.

Philosophically, however, both worlds remain poles apart.

Most IT organizations would prefer not to have to support both platforms. Truthfully, though, they have little choice since they already own both. Microsoft's tight grip on the desktop combined with Java's strong hold on the server have made heterogeneous computing the reality almost everywhere.

.NET rules desktops

Java dominates servers

Because Java sits above the operating system, its rich suite of APIs offer a complex set of capabilities that enable it to run on Windows, Linux, Solaris, Mac OS, UNIX, etc.

.NET, on the other hand, includes deep integration with its underlying operating system. That means an application developed in .NET will only run on Windows. Of course, that Windows-only drawback is also .NET's greatest strength. On the desktop, Microsoft holds a huge edge over Java's AWT- and Swing-based graphical user interface, both in terms of visual development as well as deployed applications.

Functionally, Java and .NET are nearly identical. Yet their primary marketing messages are exact opposites:
Java says:

.NET says:

Who's Using What?

What sorts of companies are using which platform? The longstanding stereotypical stigma has been that Java is for computer scientists while Microsoft caters to programmers who learned to code in Visual Basic. In truth, building serious enterprise-class applications in either environment requires a high degree of skill and knowledge.

IT organizations focused on robustness and security tend to choose Java. Those that need a solution faster, with less business complexity, often choose .NET.

Organizations that spend lots of money on IT are more likely to do the majority of development in Java. Conversely, small departmental IT groups tend to select .NET as their platform of choice. Of course, as already stated, large organizations mostly are using both platforms.

A host of cultural factors holds sway over the two environments. .NET is often seen as a benevolent dictator. Because it only supports an all Microsoft environment, .NET is sometimes perceived as all-or-nothing strategy. Java, on the other hand, has developed the reputation of being a big, dynamic, democratic community that thrives on open source software. Of course, the democracy exhibited by the Java Community Process (JCP) is often slow and chaotic. Many describe it as herding cats.

.NET's Cathedral vs. Java's Bazaar

Conventional wisdom suggests that innovation ought to be more likely to originate among members of the Java community. For starters, beyond Sun, its creator, Java enjoys the strong backing of many powerful software vendors, including IBM, Oracle, and BEA. Also, .NET has been hurt by long product delays, especially Longhorn -- the next generation Windows operating system.

A few years back, Eric Raymond authored a seminal paper he called "The Cathedral and the Bazaar." His visionary look at the open-source community is being played out today in the battle between .NET and Java.

Innovations emerge slowly from the Microsoft Cathedral. Meanwhile, developers using community-advanced Java are benefitting from not being coupled into an entire environment.

Because Microsoft has this grand release cycle, a lot of improvements aren't getting out into the hands of .NET developers. As a result, .NET's most developer-critical component, Visual Studio, is now facing increasing competition from the openness of Eclipse.
Will the delays plaguing .NET allow nimble Java to advance ahead?

Will .NET successfully extend Microsoft's monopolistic control over desktops and office out to servers?

Will the heterogeneous computing landscape continue to persist?
Only time will tell the answer to these question. Meanwhile, Java works well in some areas, and .NET works well in others.

In summary, let me end with a quote by Grady Booch who pointed out long ago, in an article about "Developing the Future" that appeared in the Communications of the ACM in March 2001, "there are three harsh realities: developing complex software of quality is wickedly hard, it's not getting any easier, and there is a very real shortage of skilled men and women to do the work."


Post a Comment

<< Home