Well, I was really trying to avoid writing on that highly religious topic for a long time, not willing to offend one or the other side, but this time I feel I have to say it aloud. Offering and actively supporting two different languages for the .NET platform has turned its ecosystem into a mess.
It looked quite nice actually some time back in earlier 2000 when the .NET framework came out. It adopted the idea of managed code from the Java world and was advertising unlimited possibilities for software development when CLR implementations of various programming languages would start to appear. It sounded intriguing. It felt very promising. So we got into the idea and embraced the framework as blessing.
At that time Microsoft offered two official supported languages for the .NET framework. These were VB.NET and C#. I won’t be going into which one is better because it’s not the topic today. If you wish to know, I come from the C/C++ world so I chose C# to go along with. But that doesn’t matter much for this discussion.
So VB.NET was supposed to take VB6 developers on the next journey aboard the .NET cruiser. C# was expected to bring all those VC++6 developers into the collective. In theory, we would all develop our applications in the language of our choice that would all compile to the same IL and thus be perfectly interoperable. So we could even have teams where VB.NET developers would work along with the C# developers. That is, only until those other language implementations would made their way to the public. Then we could also have other people like maybe COBOL.NET developers with us.
The next best thing that happened to .NET is that it stopped there. Now we basically only have VB.NET and C#.
Let’s look closely at what we have after soon ten years with .NET.
Visual Basic developers stayed Visual Basic developers. Many embraced that strong object-oriented design of the VB.NET language. But the Visual Basic philosophy stayed there. These folks didn’t care about C# at all. They still don’t these days.
C++ developers turned into C# developers. The finally got along with some of the changes like not working directly with pointers and not being able to use multiple inheritance. They became good C# developers. But they couldn’t care less about VB.NET just like they did when VB6 was around. They’re still there today.
So we now have a lot of VB.NET developers who won’t write C# code and can’t even understand it (for example, the work of their colleagues). They wouldn’t even try.
We have even more C# developers who have been ignoring VB.NET completely. They don’t consider VB.NET developers to be good programmers. They won’t write VB.NET code. They can’t understand it. Actually, they’re likely to be smart enough to be able to but they would never try.
So we have VB.NET developers who won’t look into the C# direction. And we have C# developers who don’t take VB.NET programmers seriously. And they’re supposed to be colleagues.
This comic pretty much illustrates the situation we have arrived at. I apologize to VB.NET developers. I would gladly post a reverse equivalent as well but I couldn’t find one. Perhaps you can point me to some?

It goes further of course. Developers being very social folks (don’t laugh) often help each other online with various programming problems. They would normally offer a solution and provide a code snippet to illustrate it.
Naturally, VB.NET developers would post code in VB.NET language. C# developers would either ignore it or ask for a C# version. VB.NET developers wouldn’t give one.
C# developers would post their code in C# language. VB.NET programmers would declare they don’t understand it and ask for a VB.NET version. C# developers wouldn’t do it.
Many authors publish books on .NET development with focus on one particular language. One half of developers would gladly get it. For the other half it’s like it is in foreign language. Even when development with .NET is mostly about calling .NET base class methods and manipulating data, so the knowledge gained with one language should be applicable to the other. It seems not to work in reality. Very impractical, the knowledge and experience of the author is communicated to only one group. In the rare cases when the author would try to add code examples in two languages, it would require a significant amount of time to prepare them and test them both. If they should decide to write two separate books like some do, it would take them a few extra months or years to finish work.
It’s incredibly impractical. We all know the DRY principle (Don’t Repeat Yourself). Avoid duplicating things, refactor them into a common method, class or library. Do the work once. It will save you time and the future and it will be easier to maintain.
Do you remember the time back a few years when most articles in MSDN provided code snippets in several languages? You could open an article and see code in VB.NET, C#, managed C++ and in J#. Or was it J++ maybe? Did I miss one in this list? Well, who cares now. It felt not right then. It still does today.
Wait, it’s not over yet. Now it comes to the big one.
When considering a new job, VB.NET developers would usually ignore all openings that would require C# knowledge or at least the willingness to adopt it.
C# developers would probably set up a filter on a career site that would remove from search results any job listings that have VB.NET in their body.
Companies would decide for either language and build up a team around it. So VB.NET companies would want all new developers to start with VB.NET and accept it as a blessing.
C# companies would require their new employees to adopt C# quickly and forget their dark past with VB.NET. Many companies would try to avoid .NET developers with the past Visual Basic record of any version.
And who needs all that?
Where is the supposed language-agnostic development paradigm where we all would just develop for .NET?
Instead of creating a widespread community that would make out their differences and live happily together, Microsoft created a war zone. There are two sides, better call them two clans. It’s like they control each their part of the town and by silent agreement do not cross each other's way. It’s pretty much how .NET development community looks like nowadays. VB.NET developers live on their own continent while being vaguely aware of the C# land somewhere there beyond the sea. C# developers know that there are VB.NET developers out there but since they don’t cause any trouble to C# folks they simply ignore them.
I suppose at Microsoft there are two teams who are responsible for development of either language. It’s huge amount of time, money, human resources and brain activity to develop both languages and keep them more or less synchronized. These efforts could have been spent to develop a single language and to extend the class library at a double pace. So why are they doing that?
I actually have a pretty good idea why. When they introduced .NET it was a significant shift from the previous strategy of the development products division. C++ developers were taken by surprise. VB6 developers were probably scared. Microsoft had to take them both on the next ride. So they decided to make the next stupid thing. They created two languages to satisfy both groups.
Now they’re trapped in their decision consequences. They have to support both languages for unpredictable amount of time since .NET is their main roadway to the future. They can't just drop support for any of the languages without losing a significant portion of developers migrating to other frameworks, likely to those not under Microsoft control.
Great. It’s only good that nobody then had an idea (I hope) to take maybe Pascal/Delphi developers out of the Borland hands. We could have ended up with three .NET languages. Scary, yes.
I’m not sure if that was a good idea then. C# was different enough from C++. I can’t judge for myself, but from what I have heard, VB.NET was more of a completely new language to VB6 programmers, so significant were the changes in the programming model it introduced. Both parties had to leave something behind, learn a lot and make a step forward. They could make this step onto the same road. But Microsoft showed them two different paths promising they would go together and intersect.
They never did.