Note: this entry has moved.All my programming life was tied to VB. I started with VB3, and finally became a master in VB6, where I was able to do ANYTHING the language would let me. Of course, there were MANY things that I couldn't do, and OOP and design patters were soooo cool that I really needed to get my hands dirty by doing real programming based on them, not just "bathreading". So I made inroads in Delphi and Java for some time.
Then came .NET, and MS gave me a new toy to spend my days (and many nights too) with. VB.NET and C# both provide extensive support for OO programming. Even when I still code and write books (see Amazon) in both languages, I prefer C#, because I find it cleaner and less convoluted. I believe over time, the mix of old VB keywords/syntax and new .NET constructs such as generics, is turning VB.NET into one of the ugliest languages EVER.
For example, I see (from the excelent article on MSDN) the VB format to construct generic types. It simply sucks:Dim stack As Stack(Of Integer)
I assume if the constructor has parameters, those will go after the type specifier?! Compare that with the elegancy of C# 2.0Stack<int> stack = new Stack<int>(); Constructor parameters go where you expect them to go, the type specifier is separated from the constructor call. It is simply perfect. For the VB version, I'd like it to be: Dim stack As Stack<int><br>stack = new Stack<int>();<br><br>'Or<br>Dim stack as New Stack<int>()<br>'maybe <br>Dim stack as New Stack[int]()<br> Maybe the VB.NET team should find an Anders Hejlsberg for their design process...
Update: from the discussion with one of the VB language designers, where he praises YAVBK (Yet Another VB Keyword), I can only say "WTF?!". They're adding an IsNot operand?!?!?:!!?!?!?! From the example justifying it:
(instead of this): If Not x Is Nothing Then Console.WriteLine(”Has a value.”) (you will be able to write this): If x IsNot Nothing Then Console.WriteLine(”Has a value.”)I wonder why on earth do VBers write code like that?! Look at the following equivalent (more readable) code: If x <> Nothing Then Console.WriteLine(”Has a value.”)<br>'Or<br>If x = Nothing Then Console.WriteLine("Doesn't have a value") It's FAR more readable and understandable than using that awful Is/IsNot test. It boils down to whether you want to teach VBers how to write good/maintanable/readable code or just give them new keywords to keep doing otherwise, but with less code.