This node is still here for historical purposed and for support for the nodes bellow it. I've learned a lot more than what I knew back in my school days, when I wrote this. I'll add, as time permits, an accurate account of the facts.
This node describes and documents the differences
and the similarities of two programming languages, namely Java and
C#. These programming languages are meant to satisfy the same kind
of needs and are best suited to a certain type of project, the "enterprise
application". Naturally, this rivalry sparked countless debates
and comparisons, and this node tries to separate the truth from
the vaporware and the FUD (fear, uncertainty and doubt).
Buzzword no. 1: "4th generation languages"
Both Java and C# are 4th generation languages. In simple terms,
this means that they are both quite evolved and complex. These languages
are typically used for advanced "enterprise applications"
like:
These are highly specialized applications that are generally developed
"in-house" (each company develops it's own) and are not
typically sold like regular software (in a box, with a manual)
Buzzword no. 2: "Platform"
Java and C# by themselves are more or less useless.
Because of the high degree of abstractisarion used, they both relay
on a set of applications and libraries that connect the language
to the OS (operating system) and different data sources (databases,
directories, etc.).
These components, took together, are called a "platform".
It's actually these platforms that programmers use to create the
end applications.
A little history
Java was created at the Sun Microsystems research labs (http://research.sun.com/)
as early as 1995 and was designed to be a platform for mobile computing
and non-PC devices. After the Internet boom of the 90s, it soon
became well known due to annoying little applications called "applets"
which ran inside the web browser. In the late 90s, the Java platform
had evolved in one of the most complex systems for client-side computing
but mostly for server-side applications (interactive sites, like
eBay, email, news and chat).
Sun, capitalizing the momentum of Java, created the "Java 2
Enterprise Edition" platform, a complete and mature solution
for database-driven applications. This will be later incorporated
in the "Sun ONE" (Open Network Architecture) initiative
for web services.
About 2 years ago (1999) the Microsoft Corporation (http://www.microsoft.com/)
was offering several 3rd generation languages, including MS Visual
Basic and MS Visual C++, bundled in the "MS Visual Studio Platform".
These offered little regarding web technologies or portability, but were widely available because of their ease of
use and powerful integration with MS Windows.
After failing to "embrace and extend" Java, a technique
often used by Microsoft to control and monopolize other companies'
intellectual property, Microsoft decided to enlist the help of Borland
Delphi veterans to develop it's own enterprise platform.
This platform's name was .NET and it was all about "web services",
a new and exciting concept taking over the IT&C news sites.
But this new platform needed a new language to replace the problematic
and baroque Visual C++
enter C# (pronounced "C sharp").
Buzzword no. 3: "Web Services"
"Web Services" refers to different technologies that
enable:
1. A common login for a single user to all sites (resulting is
a single username/password combination being used on all systems)
2. "Smart" server-side services/sites that connect to
one another to create a realistic context and real-time integration
for the user.
This concept exists now mainly as proposals and un-tested protocols.
This being said, if such systems are ever to be implemented on a
large scale on the Internet, they will probably use SOAP, which
is compatible with both Java 2 Enterprise Edition and .NET.
Buzzword no. 4: "n-tier architecture"
As
far as performance is concerned, both Java and C# are too slow to
be used in games or most "regular" applications, they
are designed to be used for "n-tier systems".
"n-tier" means that the applications is spread between
different computers, each one doing a specific task. This is an
extension of the classical and popular "client-server"
architecture.
The tiers are:
Industry support, the decisive factor
Java and C# are very much alike. Some would say C# is just a Java
clone, deployed by Microsoft in a hurry to catch the new wave of
Internet computing (distributed computing, web services, etc.).
Even from this point of view, C# is still a powerful alternative
to the widely used and stable J2EE platform.
What .NET lacks is wide industry support. Most important IT companies
dealing with server technology have their own J2EE implementation
and have been selling these for over 2-3 years now. By the time
this node was completed, few companies manifested interest in joining
the Microsoft side, as the .NET platform was yet unreleased (an
early beta3 was available).
C# has some added programming features like pointers and operator
overloading, that have been removed from Java because they were
considered as problem-makers and obsolete, even in 1995. Overall,
C# presents some improvement in code style and syntax but most differences
are not missed while working with Java.
Buzzword no. 5: "the open monopoly"
The recent success of open-source software (properly called "free
software"), like the GNU project, while used for servers and
server-side applications, determined a Sun analyst to claim the
beginning of an "open monopoly".
More and more, open systems (GPL or not) are used because of their
performance and reliability. Although they might not be as user
friendly as Microsoft's packages, they are "free" (as
in no cost) and "free" (as in open-source).
The Java 2 platform (Enterprise Edition, Standard
Edition or Mobile Edition) is a good example of open software. It's
not GPL but the sources to the libraries and platform are open and
free (no cost). In contrast, Microsoft's platform is all "closed".
This raises the issues: how does Microsoft expect to have success
with its new platform, a totally proprietary system, while most
companies are looking for open software that enabled growth and
cost reduction, without locking you into a certain vendor's software?
Open source implementations
Because of licensing issues, related to Sun patents, a truly open-source
(as in GPL, artistic license, Mozilla license or BSD license) version
of Java is not available. This means that all the 4-5 language implementations
(Sun, IBM, Blackdown, etc.) are proprietary, even if they are free
(no cost) and in some cases the source of the libraries are also
open (Sun's).
What Java does have is a full J2EE implementation
licensed under the GPL, called JBoss. The latest version implements
all the J2EE specifications and is 100% compatible with other implementations,
like Oracle's for example. This means that one can build cost-free,
high performance servers, running Linux as OS, JBoss as application
and web server and PostgresQL as database, at virtually NO software
cost, while still enjoying the latest in "enterprise computing".
On the other end of the spectrum, Microsoft's .NET lacks any open
source, or even free, implementation. A linux company, called Ximian,
is working on porting the C# language to Unixes but it won't be
able to implement some vital parts of the .NET platform, greatly
reducing the overall usability of the software.
Buzzword no. 6: "WebOS"
The "web os" is the name different analysts gave the
trend of porting and developing applications for the n-tier architecture,
where the client is connecting with a web browser, via the Internet.
The increased reliability of corporate networks and even the Internet
itself, coupled with the thin-ness of the HTTP (web) protocol has
created a perfect environment, accessible to PCs and portable devices
alike.
Instead of writing traditional software and installing it on several
hundred computers across the enterprise, contemporany programmers choose
to develop dynamic web site.
Advances in DHTML, XML and JavaScript enable highly interactive
interfaces, while keeping all of the administrative work centralized
on the server. Patches can be applied on the fly, without any software
being modified or installed on the client's machine.
With the successful development of the Mozilla
and Konqueror browsers for Unixes and portable devices, Microsoft's
monopoly (as determined by the US Supreme Court) on the desktop
market becomes more and more irrelevant. Applications are no longer
written for Windows or for Linux... they are written for the "WebOS",
actually a set of standards formed around (XHTML, DHTML, XML, JavaScript,
Java Applets and CSS).
So, in this battle, Microsoft will be unable to leverage its desktop
monopoly as it did with Netscape, as some analysts would suggest.
My conclusion
It seems to me that Sun's offer is more than complete, both in
terms of programming performance and TCO (total cost of ownership,
usually obtained by adding to the purchase cost the costs generated
by mainteinance and training).
Microsoft's solution brings insignificant performance and style
improvements over current systems, and the lack of Java-to-C# porting
tools will turn the transition from a platform to another into a
full blown application rewrite, even if the languages are similar.
Even if these platforms are being developed with web services in
mind, the bulk of applications will still be day-to-day intranet
reporting and management tools. Java tradition]'s in the field, and
the increased use of "alternative" platforms such as Zope
(Python-based), Cocoon (XML-based) or Jabber will leave little room
for Microsoft's .NET.
On the other hand, Microsoft has thousands of Visual Basic programmers
caught in endless pay-upgrade-pay cycles, more than willing for
a change and its marketing] techniques have saved the company more
than once.
Java has become very portable, running from cell phones (J2 Micro
Edition), to desktops (J2 Standard Edition), large servers and even
old COBOL mainframes (J2 Enterprise Edition). Meanwhile C# binds
the programmers to a single OS, Windows, a single IDE, Visual Studio
and a single architecture, IBM-PC (Windows runs on Intel x86, IA64
or old and obsolete Alphas).
Overall, this is going to be a very interesting fight that may
ultimately decide the fate of the Internet as a free communication
medium, and maybe even the demise of Microsoft as an IT monopoly.