4-25-03 C#, Java and Joshua Bloch
One of the impressive things about Microsoft is that they don't stick their
heads in the sand forever. As the company has gotten larger and bulkier, they
have gotten slower in responding to changes in the computing environment, but
they still seem to become aware and change faster than most other companies. An
example of this is Linux and open source -- initially, these were not even on
the MS radar screen, then there was something about those things never having an
impact in the real world, then they became evil and anti-competetive (that is,
Microsoft was claiming this about open source), and finally MS publicly admitted
"it's a problem for us." And now they have the ability to make a change, to win
back all the hearts and minds that they've lost over the past few years (and no,
more aggressive licensing is not the answer).
C# and .NET is a step in the right direction, and is the first innovation
that I've seen from Microsoft in the programming world (until only recently
their C++ was the least-compliant implementation of the language out there, and
things like MFC are not worth getting started on). Certainly, .NET and C# draw
very heavily upon Java, and they had to convince Anders Hejlsberg (whom much of
the innovation came from) to come over from Borland. But they saw both the need
and value of it, and made it happen. It is possible for companies to
reinvent themselves, as is evident with IBM's Java projects (especially
Eclipse).
When I interviewed Joshua Bloch last Monday (for my "Making Software" series
of audio interviews, which I plan to have available on MP3 CD later this year),
I was heartened to see that he had a C# book on his desk. The Java team is
clearly not ignoring the threat of C# as Microsoft ignored Linux and open source
for so long. Josh told me something that I found particularly interesting: along
with the new features already on the list for "Tiger" (JDK 1.5), including true
enumerations, autoboxing, and generics (templates), they are adding attributes,
something (along with autoboxing) taken directly from C#, because it's a good
idea.
Josh also said that JDK 1.5 would probably be the last big change to Java,
and one of the biggest ever (although he was referring to the core language, and
acknowledged that JDK 1.2 with libraries like Swing and the new collections
certainly had a very large impact on programmers).
I note that Eclipse (www.Eclipse.org) continues to make big leaps, including
better JUnit and Ant support, as well as new and improved refactorings, and
features like automated delegation method generation (so you don't have to
inherit in order to get the interface of another class; this makes for better
designs in a number of situations). This puts Eclipse on par with Microsoft's
Visual Studio .NET as a programming environment, something that's very important
for Java's competetiveness. Big companies are using Eclipse as development
platforms, partly because IBM's WebSphere has an expensive add-on that makes it
easier to create and deploy J2EE components, but also simply because (I think)
it's from IBM ("Nobody every got fired for using IBM Open-Source Software?").
Competition is good for everyone. Now that Java has a real competitor in C#/.
NET, and vice versa, we should see some seriously interesting developments.
PS: forget half the stuff I said above about Microsoft acknowledging that things
are different now. I still think C# and .NET are very significant, but Steve Ballmer,
in the process of marketing Windows Server 3000, says that open source can't innovate
here.