This is more aimed at people who are trying to decide which language to learn first:
I just recently started getting more into .NET coding.
When I looked at learning .NET, I chose VB.NET, because I used to use VB6 a long time ago, and I initially assumed that it would be somewhat backwards compatable and very familiar (this of course is not a good assumption).
I already know C, C++, and Java very well, and in fact, I do most of my work in those languages. So, looking back, I probably could have as easily chosen C# to start with.
I don’t see any really big advantages to C#, except for the fact that there are more code snippets online, so if you have a specific problem that you’re trying to find a solution to, you’re more likely to find the answer in C# than VB.NET. This isn’t a big deal, since it’s usually pretty easy to translate, but you can’t just copy & paste the code to see how it works.
It’s hard to say which language I would recommend to a beginning programmer who didn’t know VB or a C-flavored language.
I would however warn against the assumption that learning C# will make it easier to learn C or C++. I teach programming classes, and one of the things I find is that beginners often get confused when they learn a second language that has a very similar syntax but is fundamentally different.
This is true even of teaching C to someone who has been exposed to C++. If you’re going to learn multiple C-flavored languages, it’s always best to start with the one that is the most restrictive (which is C itself), then learn some C++, then learn C# and/or Java.
In some ways it’s better if two very different languages have very different syntaxes, because that forces a mental separation in your head, particularly for someone who is inexperienced. VB looks so different from C that no one is going to assume that whatever they do in VB will work the same in C.
I’m not sure that the argument that VB is a more verbose language holds much water in an OO programming environment. The C syntax was designed to make it easy to write large blocks of code in very compact form. The readability to an outsider is not as important as the coder being able to see all the code for his own function on one screen. Having case sensitivity also contributes to code compactness, because it makes it easier to use shorter variable names.
C is not the most compact language out there. You can write even more compact code in LISP and other functional languages, but C is probably the most compact procedural language that anyone uses.
However, the OO programming ethos, dating back to Smalltalk, is that you shouldn’t have to write these large blocks of code to begin with. If you subscribe to this philosophy, then verbosity is not a big deal and VB is certainly not the most verbose language out there (although one might argue that VB’s verbosity has little advantage).
I do find myself often writing large blocks of code that are hard to refactor in a more OO way, so C/C++ is more appropriate for that.