got net?

Kevin Hazzard's Brain Spigot

About the author

Welcome to Kevin Hazzard's blog.
E-mail me Send mail

Recent posts

Recent comments

Authors

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2010

Language Features Versus Tool Features

F4 Phantom

The physics guys in my college fraternity often joked that the F4 Phantom aircraft was proof that, with enough horsepower, even a brick could fly. In the software development world, we Microsoft developers have a similar joke:

"With enough Eclipse plug-ins, even Java becomes a useful programming language."

OK, I know I'll take a lot of heat for that. I certainly appreciate that the emergence of Java in the mid-1990s rescued me from the minutia and doldrums of C++. But once you become exposed to the expressiveness of the C# language and the richness of the .NET Framework Class Library, you just cannot to go back. I've worked in both .NET and Java environments extensively and I get more and better work done in C#. End of that story. And I apologize to my Java-oriented friends for the bad joke.

But there's an interesting phenomenon happening now that the joke sort of highlights. C# is mature and stable. It's about ten years old at the time of this writing. C# has grown considerably over that decade, acquiring lots of really cool new features:

  • Generics Classes and Methods
  • Anonymous Methods with Captured Outer Variables (Closures)
  • Nullable Value Types
  • Streaming Iterators
  • Partial Types
  • Static Classes
  • Partial Classes
  • Implicit Typing of Local Variables
  • Object Initializers
  • Collection Initializers
  • Anonyous Types
  • Lambda Expressions
  • Expression Trees
  • Extension Methods
  • Automatic Properties
  • Query Comprehension Syntax

And this list doesn't begin to describe all the changes to the CLR and FCL to support these great language features. Many of my friends who code in Java every day are openly unhappy about how slowly Java has been evolving as a language during this period. While Sun seems happy to add wonderful new features to the JVM and the class libraries all the time, they seem somewhat reluctant to expose much of that thinking through the language itself. Now that Java has gone Open Source (in a sense), it will be interesting to see how this changes. Certainly ECMA's oversight of the C# specification has been a good thing since the language's inception.

I think that programming languages have inertia. In the physics world, we say that Force equals Mass times Acceleration or F = ma, as Newton's Second Law of Motion describes it. As programming languages go, C# certainly has tremendous force in the marketplace based on the sheer mass of the features being added to the platform and the language over this past decade. And the acceleration that's been achieved through arguably modest adoption of the .NET platform finishes the equation. Java, which has grown much more conservatively as a language, also has great force. Look at the trends from Indeed.com for Java and C# job postings.

These graph lines were harvested from job descriptions across the Internet containing the terms Java and C#. You can see that C#has enjoyed steady growth over the last few years. The gap between job postings mentioning C# and Java even seems to be closing until Q3 of 2008. Even since then, C# has enjoyed statistically steady growth. But Java took a statistically unusual leap at the same time. Was it the release of Eclipse 3.4 (Ganymede) in June 2008 that is reflected in this graph? It would be interesting to hear your feedback on that.

It's clear that the ecosystem that exists to support the Java language is much richer than that which exists in the .NET space. Visual Studio, as a development environment, is highly integrated.  I can load half a dozen projects in the debugger at once and step from client to service to database code all in one smooth motion. Microsoft has done a marvelous job with Visual Studio, no doubt. But it is a largely closed platform. The developers at JetBrains have said very publically that each new compiler and IDE release forces them to do rewrites of large portions of their code to support the new language features and libraries that appear.

The publicly available information on Visual Studio 2010 is promising in this regard. The rewrite of the GUI using WPF promises to make hooking into the editor interfaces much cleaner. The super-rich ecosystem that's built up around Java, especially through and for Eclipse makes me really envious. Eclipse is infinitely pluggable so the hordes of Java developers who exist are constantly adding great new free features for the community to use. Of course, I'm not saying that if Visual Studio had the kind of extensibility that Eclipse has that awesome companies like JetBrains should be put out of business by the emergence of many free alternatives. ReSharper is the market leader and I expect that they would continue to do well, even in an environment where "average" developers can extend the IDE without so much intimate knowledge of the compilers, debuggers and editors.

Remember, if you respond to this post, it may not appear immediately. Because of link spammers, I have to approve every comment. Thanks for your patience on that.


Categories: Rant
Posted by kevin on Friday, April 03, 2009 7:55 PM
Permalink | Comments (0) | Post RSSRSS comment feed

Comments

Comments are closed