Saturday, January 12, 2008

VB.NET is the illegal immigrant of Microsoft languages

I currently mostly code in VB.NET, developing ASP.NET web applications. I have in the past developed in Omnis, MS Access 2/95/2000, Lotus Notes/LotusScript, Java, VB6, VBA, PHP, JavaScript, C# and Ruby (on Rails). Some of those I did for fun, but most were because I was paid (and asked) to. I point this out not to boast, but in order to put some background around this particular rant.

[NOTE: Another accidental thing that denigrates VB is that we must put ".NET" at the end if we are talking about 'real' development, because VB as a term covers such a broad range of languages. This alone makes C# seem exclusive and more 'grown-up'. In fact C# is more properly referred to as Visual C#, or C#.NET.]

“Computer languages influence how you think about a problem, and how you think about communicating.”
The Pragmatic Programmer
Microsoft have a publicly declared agnostic view of which language a developer chooses to use within the .NET platform, so long as they use it. For this reason they have researched new languages for the CLR, and are introducing the DLR to enable IronPython, IronRuby etc.

Internally however Microsoft have a culture that prefers people using C#. In practice this means that the 'cheap' option is always to do code samples and demo code in C# and not VB (or some other .NET language), because it is simply more convenient to do so. When asked why a given example is not also in VB, this is the answer given (and the occasional plea for help). There is however a tendency to see VB developers as somehow inherently less capable that C# developers - perhaps this is a view that the 'best' work at Microsoft, or maybe it's a hangover from the "Basic" part of VB's name. Most probably it also has a lot to do identifying VB users with using a persona called 'Mort', whilst C# is Elvis and C++ Einstein (thanks usability guys).

A few months ago Bill McCarthy, a VB MVP, ranted about this issue in his post Is VB the n*gg*r of programming languages?. Leaving aside a controversial choice of words (for which he was smacked down), he had a very good point. My post's title is a reference to his point (with a more PC turn of phrase).

Bill points out that how to videos (for beginners?) are often coded in VB, but the SDKs have C# examples (for real developers?).

A more recent balancing view comes from Scott Hanselman, who asks Is rooting for Visual Basic like rooting for the Red Sox?. Leaving aside the unfortunately humorous connotations of 'rooting' to us Aussies, his point is that VB is making something of a comeback in popularity, but old-timers (like Bill?) still want to feel like underdogs. Reading the rest of Scott's blog shows that he's been exploring beyond the homely environs of C# and hanging out with people who are pragmatic enough to use whatever works.

Personally I think this last point is the one that makes the most sense. In The Pragmatic Programmer Andy Hunt and David Thomas said:
“Computer languages influence how you think about a problem, and how you think about communicating ... Designing a solution with Lisp in mind will produce different results than a solution based on C-style thinking, and vice versa. Conversely, and we think more importantly, the language of the problem domain may also suggest a programming solution.”

All of this is what has attracted me to the ALT.NET movement (see the first use of the term, the conference last year, it just had a leadership summit and a Yahoo! group). Martin Fowler weighed in and said this about ALT.NET:
“The mind-set is one that is very familiar to me. It has that mix of agile + object-orientation + patterns + TDD + DDD which is very much the school of software development that I favor. (Lacking a proper name for it, I'm inclined to call it the OOPSLA school of software development.) There is certainly a belief that there is a mainstream Microsoft orthodoxy at the moment, one that doesn't fit the OOSPLA school. And there's some frustration with that. But the point here is that it's not that the community thinks that the perceived mainstream Microsoft route should be erased, but that the Microsoft world is big enough for different approaches.”
To all this I say a big hooray! But ... it seems everyone who wants to do something with ALT.NET is a devoted fan of C# (or at least NOT a fan of VB). So every code sample, explanation or tool is aimed at C# and either requires much grokking to be used in VB, or in many cases, cannot be used with VB at all.

The answer I'm afraid is that I must use more C# if I want to become more agile, practice TDD or play with ASP.NET MVC. The fact that I get paid to work with VB.NET is not a good enough reason to stick with it. VB is the illegal immigrant of .NET languages, it snuck into .NET when it should have been told to stay away (perhaps forcibly deported) and the sooner any of us who use it realise that, the better. Shifting to a true .NET citizen like C# is clearly the only responsible thing to do - and using those Johnny-come-latelys like IronRuby or IronPython (or Boo) is a joke - they are only toy languages, not super-strong doers of great deeds like C# is.

Still, at least there is one hope on the horizon, with Silverlight assuming such importance in Microsoft's plans for the web, perhaps VBx will come to our rescue? With VB moving into the DLR perhaps VB developers can all become the new, new boys on the block, and start looking down on those poor C# types who are unable to duck-type or use Jasper. And my persona? Let's just call him Ben.


  1. It is perhaps ironic that in a post where you want 'your toy language' to be taken seriously you post something like:

    "and using those Johnny-come-latelys like IronRuby or IronPython (or Boo) is a joke - they are only toy languages, not super-strong doers of great deeds like C# is.".

    Hopefully this is intentional irony...

    Actually using a dynamic language is far more in the spirit of ALT.NET - and fortunately they are better languages as well. Maybe you should join us...

  2. fuzzyman,

    Indeed it was intentional irony! Personally I don't mind the idea of using Python or Ruby in .NET. It just seems that Microsoft have made the mistake of focussing on one language to the exclusion of others.

    However this is also why Elcom is using VB.NET, Given the flexibility of .NET languages, once you are using one language consistently it is far easier to stick with it than use another one 'just for the heck of it'.

    So it seems that the major advances in the .NET world (at least the CLR) are being pushed in C#, because that's easier for Microsoft. Well, unlike DHH they get paid to be a vendor, so I would like them to start respecting their own product a little more!

    I feel like we're left with either needing to become super-gurus in VB/IronPython/IronRuby ourselves (converting everything across), or give up and switch to C#. This is not the way your customer should feel about the programming language you are supplying them with.