Ya know, I'm not trying to start any holy wars or anything, but I keep getting aggravated with some VB code I have to maintain.
First off, my biggest complaint is the way VB handles imports. A lot are assumed, but some aren't. I've even seen the same code transition to another machine and have it not work. I don't really know the rules behind it, but it sucks.
Second, the Microsoft.VisualBasic namespace needs to just die a horrible death. Do VB-ers not understand that it simply exists for backwards compatability and shouldn't be used? Sure, you may have the old VB6 functions around, but should you use them? NO! There's a reason it's in Microsoft.VisualBasic and not in the core .NET base class library!
While we're on "functions," let me gripe about the naming conventions. I understand the difference between a subroutine and a function - who doesn't? I just don't like the fact that they are different from the .NET standard of "method." Yeah, yeah, backwards compatibility, whatever. Backwards compatibility is the root of a lot of evils in the software world. Look at Java. One of the primary reasons it sucks so bad and doesn't go thru a major overhaul is because of backwards compatibility. Other things I don't like as far as standard naming goes are the keywords Shared, Nothing, Me, and so on.
This is a small one, but I hate the fact that Visual Studio doesn't tab regions in for VB. I like my regions to be tabbed in at the same level as the code. This is just a preference, but I think the code seems harder to read when the left edge of the code jumps back to the first character position every so often. As a matter of fact, Visual Studio's auto-formatting for VB drives me crazy altogether. Most of it works fine; but occasionally, I want something to look different for readability concerns. I'm sure there might be options for this, but I don't care enough to look. It's just annoying.
Speaking of readability, OMG!!! Nobody can argue that VB is more wordy. One thing I learned in a high school desktop publishing class was that white space is good. White space actually helps the brain process what's on the screen and separate code easier. It's a LOT harder to do that with VB because the lines can get so long and seem to jumble together. Granted, this only happens in lines with a lot of keywords, but that doesn't mean I like it any more.
Oh, great, now it's time for my favorite (well, for the past two days, anyway): modules. I've been working on .NET since its inception. I cheered on C# and revelled in its birth. Because of that, I ignored VB and its features (in part, that's why I'm getting so aggravated). Well, for the past few days, I copied some VB code and was modifying it. I kept looking for what seemed to be local methods, but couldn't find them anywhere. I searched through class after class to no avail. Finally, I was looking at an assembly and noticed that a class was using the Module keyword. "Hmm... That's odd. I wonder what that is. Oh well," I thought. A little later, I ran into another method I couldn't find anywhere. Then I made the connection and found it. This has got to be the most retarded feature. I can understand and appreciate it's worth, but I just don't like it. It obviously decreases readability and maintainability. Oh, and before you say that I should've used the "Go to Definition" context menu option, I didn't have the source loaded in a VS project, so I couldn't.
I don't even need to get into the obvious ones like case-insensitivity and Option Strict/Explicit. Hell, I think I've complained enough for today. There are a ton of other things I don't like about it, but this'll suffice. Also, I must say that I am merely pointing out my angst with VB. I am not saying that C# or any other language is perfect. There are aspects of VB I'd love to see in C#.