For a change, let's leave out all the debate as to whether VB.Net is a quality language. What I do know is that, while Microsoft pays a lot of lip service to the idea that VB.Net is a good "glue" language, yet it does not seem to provide it with the same sparkle as C#. Over the last umpteen years, Microsoft has introduced precisely zero new languages to the market at a mass level. I actually find this rather surprising, as Microsoft does a ton of research into languages. Sure, Microsoft puts a lot of support behind VB.Net, but they just are not jazzed about it.
Let's look at the facts. Number 1: Open a copy of any Microsoft funding magazine, and you probably will not see any examples using VB.Net; they will all be C# unless the article is VB.Net specific, and they do not seem to publish many of those. Fact number 2: Have you heard of technologies like LINQ associated with VB.Net? Neither have I. Strike number 3: C# is on version 3; if VB.Net is version 3, no one seems to care. And so on.
But there is more to it than that. The serious development community is not too big on VB.Net. Sure, there are tons of VB.Net code samples and VB.Net programmers out there, but most really cool pieces seem to be in C# and not VB.Net. As many readers are probably aware, I have been interviewing a lot of potential hires lately. The ones that strike me as really "senior" mostly trend towards C# and not VB.Net. Sure, it could be a coincidence, but it might not be.
Speaking of "cool," I read a lot of the stuff that comes out of Microsoft Research. Frankly, it is pretty good stuff. Sure, I don't understand a lot of it, but my level of comprehension is rising. I cannot remember seeing any work from Microsoft Research being done in VB.Net. In fact, I have seen more items discussing F# (then again, it is a Microsoft Research project) than VB.Net. Microsoft's own researchers shun VB.Net. As an example, I looked at a cool set of libraries of thread safe components that do not use locks for ultra high speed performance -- they were written in C#.
When C# first came out, it felt like (and most likely was) Microsoft's strategy was to have a Java knock off to help Java programmers easily transition to the .Net platform. Fair enough. VB.Net is close enough to classic VB for that to be an easy jump for them, .Net already supports C++, so really the only big language left would be Java. My assumption was always that Microsoft would lure the Java folks onto .Net with C# and then not really care. Instead, I see a lot of resources being poured into making C# be not just a Java knock off in syntax, but rather a very exciting language in terms of feature set. C# is no longer simply competing with Java -- it is doing a fairly good job at luring programmers for whom VB.Net just does not cut it.
Now, a moment of brutal honesty: I have never really worked with C# for the following reasons:
- I have always found myself writing code that VB.Net folks will be maintaining.
- VB.Net has always met my needs, kicking and screaming the whole way.
- VB.Net is great for code samples because the syntax is so insanely verbose that no one needs to actually know it to understand what the code does.
That being said, I have read plenty of C#, and I understand it just fine. I am sure that after a few hours of working with it, enough Java memories (there I go again with the "Java knock off" stereotype!) will flood back; plus, my solid understanding of C-style syntax will kick in, and I will feel right at home. I just have little motivation at the moment.
For the time being, VB.Net is my .Net language of choice; F# is winning some of my mindshare; and I need to investigate IronPython for business reasons (I suspect that we will need a dynamic language in the very near future). I am promising myself that I will give C# a shot for the next small project (1 day or less) that I have to work on. I feel that VB.Net, while it will never be EOLed, will not be taken much further than it is now. As my days of my gluing libraries together fade into the sunset and what time I spend coding is spent on R&D of techniques and such, I need a language that is forward looking.
VB was an easy way to hook into the COM components that the C++ folks wrote, just as VB.Net is an easy way to tap into the .Net Framework (and, by extension, the Windows APIs in general). F# is cool, but the commercial support is not there yet. IronPython (last time I checked) does not hook into Visual Studio, which is a major ding in my book. So, C# it is. Am I thrilled? Not really. I like what they are doing with C# but not C# itself. But I feel like I have hit the limits of VB.Net.