C#: Is the Party Over? Not to anybody with 20/20 eyesight...

After a circuitous route through Davis before it got here to Seattle, my copy of Java Developer’s Journal finally showed up at my doorstep over the weekend, and from the top of the magazine’s cover blared Calvin Austin’s editorial entitled “C#: Is the Party Over?”

Huh?

As I read through the editorial, I began to realize that not only were the points ill-conceived, but that Mr. Austin doesn’t even offer up credible or factual basis for his perspective–in other words, this is FUD at its best, the very same tactics that Sun accuses Microsoft of using when the facts don’t suit.

Mr. Austin begins by justifying his expertise on the subject by saying,

One of my tasks at Sun was to keep abreast of the technologies in the marketplace that competed with Java.
Somehow, we’re to believe that since his job was to “keep abreast” of all competitors to Java, that somehow Mr. Austin is now a C# expert. Which I find an interesting position to take–does that mean that the various marketing and project managers at Microsoft, whose job it is to keep abreast of all .NET competitors, are now Java experts? If so, then we have to take as equally credible their claims that the number of .NET developers exceeded the number of Java developers in .NET’s first or second year of release, and we have to take as equally credible their claims that .NET has now surpassed Java/J2EE in corporate environments for enterprise development. Frankly, I find both sets of claims equally absurd.

Next, he begins his arguments as to C#’s iminent demise:

The .NET platform has been under constant development, often too fast for many corporate users to accept. There has been a 1.0, 1.1 and 2.0, each which could be counted as a significant version in their own right.
Huh? First of all, the 2.0 release hasn’t shipped yet, but we’ll mark that as a nit–it ships on Nov 7th, so we’ll just presume that Mr. Austin didn’t hear that bit of news and believed Microsoft’s earlier estimates of a ship date in August or September. (Then, if he were writing this article a few months ahead of time, as is pretty common with print magazines, he would have been correct had Microsoft shipped on time. Which I find amusing–that, if you take my explanation as germane, he believed Microsoft’s ship date estimates when nobody else did.) But to claim that 1.1 was a “significant version” over 1.0 is absolutely ludicrous–as the guy who was responsible for the reference section of C# In a Nutshell, I can attest for a fact that the Base Class Library did not change more than a fraction of a percentage of the total surface area–I know this because I had to update all the method signatures and types that changes between 1.1 and 1.0. Given no language changes, no library changes, and no major enhancements to Visual Studio (which doesn’t really count as part of C#, IMHO, but we’ll include it since the two are pretty inseparable), I fail to see how 1.1 can be any different than 1.0. Which reminds me, didn’t Sun release JDK 1.0, 1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.5, 1.1.6, 1.1.7, and 1.2 all within a five year period (1995 - 2000)? That’s three major releases, not counting the “point releases”, not to mention a complete marketing rebrand, all within a five year period of time.

What I find fascinating, however, is the implicit criticism that innovation and progress is bad. Corporate users aren’t accepting of too many changes, true–this is precisely the experience Sun faced during the 1.1.x hyper-release cycles, when they were castrated in the press for doing too many releases in too short a period of time. But an eighteen-month release cycle (which is the current development cycle for the .NET teams) is hardly what you call rapid, and frankly, I’ve heard a number of developers complain that the releases are too far apart to begin with. Coupled with the fact that both platforms support a very good side-by-side deployment story, I think both Sun and Microsoft could stand to shorten their cycles, not point-and-kvetch that the other side is releasing too quickly.

Next we see Mr. Austin point out that C# hasn’t been the astounding success Microsoft wanted it to be:

Looking at the forums, Visual C++ and Visual Basic and not C# attract the lion’s share of the forum attention.
… which, it could be argued, is because those two languages underwent major revisions in adapting to the CLR platform…
In addition, the underground community site, gotdotnet.org, has undergone significant site and management changes.
Underground? Like GotDotNet is some kind of rave that if only the cops knew about, they’d bust up? That GDN hasn’t been the stellar success its founders hoped it would be is pretty obvious, but there’s some very smart people working on GDN (including a well-known former ThoughtWorks consultant) to fix that. But what, exactly, does GDN have to do with C# and its adoption curve?
The C#, C++ and C compilers are now free, although not obviously as optimized as the professional edition.
Source? Factual basis for this statement? From what I can tell, looking at the binaries and implementation, the C# compiler that comes with the freely-available .NET Platform SDK is exactly the same beast that ships with the Visual Studio development environment.

Mr. Austin continues with his analysis by pointing out that C# “didn’t make the grade” because:

… the Java platform did not stand still. Many of the benefits that the Java platform delivered were not solved by moving to C#, the most significant difference being OS independence.
Which was never a goal of the .NET platform in the first place. Microsoft admits as much. They’re happy to leave the OS-independent world to Java, because their market research indicates nobody really cares about that. shrug Agree or disagree, that’s their position. Given the number of people who standardize on Windows desktops and servers, it hardly seems necessary to point out that supporting only the Windows platform is still a fiscally-viable decision to make.
While C# was in rapid release mode, the Java platform was able to fine-tune the language and at the same time invest heavily in stability and scalability.
“fine-tune the language”, by adding more language features and functionality than ever before? That’s like suggesting that the Titanic’s brush with the iceberg was a “slight change of direction”. While I like most of the features introduced in Java5, one can hardly call it a “fine-tuning”, particularly when it’s fairly self-evident that many of those features were driven by similar features being released in C#. Why else, for example, did Java finally decide to get an enumerated type?
Deploying a .NET service leaves a company a small choice of application servers and OS versions.
Well, he got that one right, anyway–it’s called Windows. Assuming you don’t count Mono (which apparently he doesn’t, as evidenced by later prose), which runs on Solaris, Linux, AIX, and a bunch of other *nixes, basically all the same OS’es that Java runs on.

The criticism continues with his prouncement that “open source changes everything”:

While developers had to get budget approval for MSDN licenses, the Java colleagues were able to deploy a system for free.
Hmmm. If I go to the Framework SDK site, I find that I can download the core SDK–command-line compilers, including ASP.NET, ASMX, WebForms, the complete stack–for free. Granted, Visual Studio isn’t free, but neither is IntelliJ IDEA. If you want an open-source .NET IDE, consider SharpDevelop. If I purchase Windows Server 2003, the .NET SDK is already preinstalled, with rights and license to deploy .NET code on that server. ‘Splain to me how I need an MSDN license for this, again?
The growth of open source Java hasn’t stopped there. You only have to look at Hibernate, the Spring Framework, and Struts/Shale to see that developers can work together to solve their own problems.
Yes, and NHibernate and Spring.NET are, of course, completely not worth considering as either “open source” or “.NET” enough to merit mentioning, right? And Struts–that’s that framework whose central developer abandoned and moved to embrace Java Server Faces, right? Leaving all those people who spent time and energy learning and deploying Struts to wonder if their investment was about to be cancelled? Fact is, Mr. Austin, if you were as “hip” to the .NET space as you claimed to be, you’d know that the open-source movement is encroaching into the .NET space just as it is the Java space, and that open-source .NET projects are just as useful and powerful as open-source Java projects.

And no Java-centric criticism of .NET is complete without bashing Mono for a bit:

Mono today is still a development project much as .NET is still looking for full traction.
I think I’ll let Miguel answer that one: I know he (and Novell) disagree with that assessment. But that’s his fight to fight, as far as I’m concerned. I just find it ironic that Sun bashes .NET for being platform-specific, then pooh-poohs the platform-independent version of .NET that’s open-source to boot.

Mr. Austin wraps up his editorial with:

Is the C# party over? If the plan of C# was the slow the defection of Visual C++ developers to Java, then it was certainly better than nothing. The long-term savings for Microsoft in sharing a CLR between projects was more than worth the initial effort. However, C# is still not the de facto choice for web site or enterprise development and other languages such as Python and PHP, which are bringing in a new generation of developers who don’t have a need to migrate Visual C++ applications. C# isn’t going anywhere soon but its best days may be behind it.
Wow. So much wrapped up in so few sentences. Let’s take this one slowly.
  • Is the C# party over? Considering how he’s been equating C# and .NET as one and the same thing, Mr. Austin clearly demonstrates his inability to tell the difference between languages and platforms, a failing of Sun’s for the past decade. Even assuming C# as a language were to fall apart tomorrow (highly unlikely), the other languages–Visual C++, Visual Basic–would keep .NET alive for a very long time to come. So, if you’re to refute my arguments, make sure you clearly delineate between refuting the language (C#) or the platform (.NET). Combine this with the fact that Microsoft is about to unveil the plans for C# version 3.0, it hardly seems logical to suggest C#’s party is over.
  • If the plan of C# was to slow the defection of Visual C++ developers to Java… An interesting insight, one that I particularly agree with. But it also sells short the idea that Microsoft simply saw the union of Java-the-language and the platform (COM at the time) as a Good Thing, one that they wanted to enhance and adopt for themselves.
  • … then it was certainly better than nothing. Ah, a masterful choice of words, implying that there were much better things they could do, but chose not to for a variety of reasons. What those things were, who knows, particularly since Microsoft DID try to use Java as the core of their platform going forward (by leveraging Java and custom attributes, yielding J++) but were sued out of it by Sun.
  • The long-term savings for Microsoft in sharing a CLR between projects was more than worth the initial effort. Don’t be too quick to toss this off, Mr. Austin–the costs in sharing a platform between languages are subtle and deep. The cross-language .NET project is a lot more complicated than many people believe, and we can see that trying to build a platform that’s somehow “universally acceptable” to all kinds of languages is a difficult thing by looking at the efforts under way on the Parrot project. Microsoft has certainly done a powerful thing in building the CLR–and standardizing it–but it wasn’t easy, and something whose costs and effort hasn’t been fully measured yet.
  • However, C# is still not the de facto choice for web site or enterprise development… Not amongst the Java crowd, certainly, but there’s a lot of sites out there with “.aspx” in their URLs–measure for yourself if you don’t want to believe somebody else’s statistics–seemingly putting the lie to Mr. Austin’s cavalier statement.
  • … and other languages such as Python and PHP, which are bringing in a new generation of developers who don’t have a need to migrate Visual C++ applications. Huh? This part of the sentence doesn’t even make grammatical sense, but what I think he’s saying is that a whole collection of website developers, who currently use Python and PHP, have no need or desire to adopt C#. Got news for ya, Mr. Austin, this is the same crowd that has no need for Java and J2EE either. They’re hung up on Ruby and Rails right now, and probably still have a huge collection of Perl scripts that they use on a regular basis that have no easily-ported Java–or C#–equivalent. Fact is, the scripting crowd has very little use for any statically-typed, compiled language, be it C++, Java, or C#. Or VB, for that matter.

In the end, the reason I refute the meat of Mr. Austin’s editorial is simple: Java developers are being fed a constant stream of FUD about the .NET platform these days, just as the .NET community is being fed its own set of FUD about the Java platform by various players there, too. I find myself spending about equal amounts of time explaining the Java community to the .NET world as I do explaining the .NET world to the Java community, and although I typically get nothing but ridicule, anger and/or disbelief from the various zealots on both sides, I find that the majority of developers I speak with on the subject are quite interested to hear what the “other side” is doing. It goes back to what I said earlier–the more you know about the other platform, the more you can leverage their experiences and innovations for your own use. But the first step to learning about the other platform is to recognize that they’re doing something useful, and not just write off everything happening as irrelevant or meaningless, or to make such boldly unsustainable claims as “The Party’s Over” or that “its best days are behind it”. More importantly, it’s editorially irresponsible that JDJ published this tripe; granted, JDJ’s readership may think it wants to hear that the .NET platform isn’t useful and powerful, but that’s a factually incorrect statement and is likely to cause more pain in the long run than to simply face up to the fact that .NET is Java’s twin brother and can do anything Java can do.