Let The Language Wars Continue

A friend of mine pointed out to me the other day that the C in CLR stood for "Common," that is, the CLR provides the same services to all languages. In fact, at this date, C# and VB.NET are really just "skins" over the CLR and provide nearly identical functionality. With that in mind, why are we still fighting the language wars? There are several reasons:

  • VB and C# programmers are just culturally different. They come from different backgrounds, different educations and different points of view. Remember that VB was initially invented to let non-programmers program. C++ programmers came from folks building operating systems. Those roots are still evident today.
     
  • The VB and C# product teams are different and gain benefits based on how many of each kind of programmer there are. Based on that, do you think that those teams are going to pound the "all languages work great under the CLR" or the "C#/C++/VB.NET rocks" drum? Which message makes you look best at review-time?
     
  • Languages *should* be different. Managed C++ does that cool managed code/unmanaged types thing. Eiffel# does Design by Contract. Perl.NET has obfuscation built in at the source code level, alleviating the need for a 3rd party tool. The fact that VB and C# are virtual clones of each other is a mistake that I hope is rectified. Frankly, I hope that VB goes back to it's roots of enabling non-programmers, as that's a huge hole in the current list of managed languages. Certainly C# is going back to its roots by adding generics et al in the next version.

I've found that the "Common" means that teams can use the same language at more levels of their system, i.e. no more VB for this, C++ for that, script for this other thing. Now it can be all VB or all C# (or almost all, 'til Yukon ships) and the number of different kinds of programmers needed for a single project goes down. That provides a real benefit to companies trying to keep costs down and quality up while still allowing the team to decide what language features are important to them. This is goodness.

With the increased shared capability at the runtime level, I'm actually hoping that language motivation will increase. I think that there's still a lot left to do to make the programmers more productive and the motivation for one language to gain ground over another is a good thing. Plus, I still have an excuse to make fun of semi-colon-challenged programmers and what could be better than that? : )