To VB or not to VB: VB.NET or C# -- which one should you choose?

I get asked pretty often which of these two languages I prefer.  I prefer C#.  But which one should you choose?  That depends.

*  If you have lots of legacy VB code, VB.NET may be a better choice.  VB.NET is a full-featured language and rivals C# in features and productivity.  They both derive their features and personalities from the CLR, so it's no surprise that most of the differences between them are more syntactical than semantical.

*  If you are coming to managed code from C or C++, by all means give C# a try first.  It's really just another language in the C family, and you'll be right at home in no time.

*  If you are new to coding in general or have no previous exposure to either C/C++ or VB.NET, I'd say it's a toss-up.  Which one you should go with really comes down to your individual skills and tastes.  As for C#, the fact that it's case-sensitive is about the only thing I can think of that might trip up a newbie trying to get up to speed with the language.  I find C# to be, in general, a more elegant language that is simpler to learn and simpler to use, but there are plenty of folk who don't feel that way.  For me, the ease-of-use chasm that used to exist between the VB family of languages and the C family vanished with the advent of C#, but other people still find VB.NET code easier to read than any flavor of C, including C#. 

*  If you have a mix of the above conditions, you might end up using both.  That's no crime, and is a perfectly reasonable thing to do given the right circumstances.  You can inherit from/use a class created in one language in the other (actually in _any_ managed code app), and, in fact, you're probably already doing that every time you build a VB.NET app because it uses classes in the Framework that were likely written in C#.

So, I won't presume to tell you what's best for you.  I'll just say that each language has its place, and which one you go with depends on your specific circumstances.