VB.Net and C#… again

Published on January 8, 2009

Jeremy was complaining recently about being given a hard time for not being sufficiently supportive of VB.Net developers in relation to his Structure Map OSS project.

As I mentioned in the comments to the post, when .Net first appeared on the scene I believed that VB.Net should be specialized for learning, prototyping and writing quick throw away applications. C# on the other hand should be aimed at people building medium to large applications that would have a long lifespan and need to the be production quality.

Not too surprisingly many people did not agree. The problem is that people tend to look at programming languages as if they were comparable to spoken languages. In most respects spoken languages are functionally equivalent. For example, there is no real benefit to choosing between French and English to communicate an idea, unless of course the intended recipient does not speak one of the languages.

We should look at languages more like software tools. Take Excel and Word as an example. You can write a letter in Excel, you can create an Invoice type document in Word but I think most people would agree that the opposite choice would be easier.

Imagine for a moment if VB.Net had been optimized for prototyping an application and C# had none of the fancy drag-and-drop data binding stuff. It would be important for a software developer to learn both languages because they are not equivalent. When the boss asks for a prototype you could whip one up in no-time and when management then try and turn the prototype into the working application by asking you to just "add the code behind the screens", we lowly programmers could say, "Er... no we can't do that because this prototype is written in VB.Net and it isn't designed for creating production applications. We need to start from a new code base in C#".

It was a real missed opportunity to make C# a lean, mean and solid language for building quality apps whilst making VB.Net an all singing and dancing, "drag the table to create the form" type of language. Instead we have a feature war where every new thing that is added to C#, the VB guys say "we want that too" and vice versa.