Hi all,
I should mention that this post is a bit off topic. If you hate
Microsoft then stop reading now and I'm sorry for wasting your time. I
don't own stock in Microsoft, I don't know Bill Gates and nobody paid
me or asked me to say the things I wrote below. These are just my
opinions based on my experiences with many years in Java and two months
of learning .NET/C# 2.0.
I've been programming in Java/J2EE for the past 8+ years, most of this
time as a contractor for several companies on many J2EE projects. I
even have a small (and now hopelessly out of date) Java web site that
I've maintained for the past 5+ years at www.absolutejava.com, which
will be removed in early May.
Until about 8 weeks ago, I never even considered looking at anything
Microsoft offered. Recently though, on a whim, I browsed over to the
Microsoft site because I'd heard about their new release of Visual
Studio. I'd been a Windows programmer back in the mid '90s and was
curious to see how Visual Studio (it was Visual C++ back then) had
evolved (or not).
I didn't download Visual Studio but instead I downloaded a couple free
tutorial videos for Microsoft's "Web Developer Express" product (which
is a free product, BTW). "Web Developer Express" has a subset of the
features in the full "Visual Studio" product and is used for building
server-side (or client side, for that matter) web apps. I couldn't
believe what I saw. "Web Developer Express" blows away anything we have
in the Java world for developing server-side web apps. It was kind of a
jaw-dropping experience to see what the tool can do and what ASP.NET
offers compared to servlets/JSP/Struts/JSTL/JSF.
I don't want to turn this post into a "feature by feature" comparison
of ASP.NET and equivalent Java technologies. My impression, though,
from watching these tutorial videos is that we in the J2EE world are
living like knuckle-dragging Barbarians, scratching out an existence
clothed in bear skins, using stone knives and sticks as our tools of
choice. Those using .NET are living in fine brick homes with hardwood
floors, fireplaces and regular visits from PeaPod.
After looking at ASP.NET I became interested in looking at the C#
language, proper. My impressions of C# vs. Java mirrored those of
ASP.NET vs. servlets/JSP/etc. Java has kludgey support for properties
and events (they're just regular methods with parameters) while C# has
the constructs (delegates & events) built directly into the core
language. C# also supports co-routines, something we have to simulate
in Java as well as "out parameters" (which allow a method to change the
caller's parameter's value) and operator overloading. C# also has
"nullable" types. Imagine Java's primitive types being able to hold
null values. This is highly useful when working with databases.
Finally, .NET provides an integrated and more comprehensive approach to
setting security permissions and versioning of what are called,
"assemblies". Assemblies are very roughly equivalent to JARs. This
allows you to compile your code against a specific version of an
assembly and have that version information maintained in the resulting
executable. It also allows several versions of the same assemblies
(again, think "JARs") to co-exist peacefully in a global, system-wide
cache of assemblies. Sun should have given us something like this five
years ago.
Another advantage I saw with .NET is that it is more "cross language"
friendly than Java. First of all, .NET, like Java, executes a "platform
neutral" representation of a program (analogous to Java bytecode).
Unlike Java, .NET programs can be written in many languages (C#, C++,
Perl, Python, J#, VB, and many others). Microsoft's J# is, from what
I've seen, a clone of Java (although I'm sure there are differences).
The point I want to make is that once compiled, .NET programs can call
each other seamlessly, regardless of the language the programs were
originally written in. So for example, a J# class can extend a C# class
which can extend a VB class. You're not tied to one language like you
are in Java.
I know that, theoretically, any language could potentially be compiled
into Java bytecode (I guess Groovy is an example). Practically,
however, this is not commonly done.
Suffice it say, I am switching after 8+ years in Java. It was a tough
decision at first because I have so much time and effort invested in
Java. When I eventually get on a .NET project I will be starting over
as a junior person making a junior person's salary. That won't be
pleasant. I have close to $1,000 in Java books that I've accumulated
over the years that are now for sale on Amazon. Ultimately though, I
felt I'd be able to spend more time actually writing code on a single
consistent, and what seems to be superior platform (.NET) rather than
gluing together a half dozen open source tools with XML files, which it
seems J2EE requires far too much of.
To me, J2EE has become too fat and burdensome in the past few years,
especially with the proliferation of so many competing open source
projects. I think too much choice can be as bad as not enough choice.
BTW, I realize .NET is not perceived as being as "cross platform" as
Java (although that's changing as the Mono Project
[http://www.mono-project.com] gains traction). Initially, this lack of
"cross platformability" gave me cause for hesitation. But then I
started thinking of all the J2EE projects I'd been on in the past 8
years. How many of them do you think ever used the same Java code base
on multiple platforms? How many of them ever ported Java code from one
platform to another? Zero. Not a single one, at least not to my
knowledge.
In my experience companies do not port their back-end enterprise
systems between platforms. They usually know what platform they will
run on long before the first line of code is ever written and they
stick with that platform. So, "cross platformability" was, in my
experience anyway, more applicable to systems with significant UIs and
Java has not done well in this area.
I think "Cross Platformability" sounded great when Java was young
because we all had these visions of cool Java programs running on all
these different platforms and within web browsers. It was a very
seductive thought. But this vision depended on Java being a success on
the desktop. So much for that.
Again, this all is just my opinion and somewhat preliminary as I've
only been learning C#/.NET for about 2 months now. Many of you will
undoubtedly vehemently disagree with what I've said and probably
suspect I have ulterior motives for making this post. I posted this
because I just wanted to share what, for me, was something of a happy
and exciting revelation. At this point I feel a bit like I did when I
switched from C++ to Java back in 1997. I realize there is always
strong and emotional anti-Microsoft sentiment in these groups for some
reason. All I can say is that when I looked at what each platform
offered, for me, .NET and C# were the winners, based on their technical
merits. I never thought I would leave Java, especially for C#, but so
far I'm not regretting it.
Good luck to you all.
--
Tony LaPaso
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]