10 Reasons Why Visual Basic is Better Than C#

After having converted a whole lot of training materials based on VB.NET into C#, Andy 'Wise Owl' Brown decided to write a tongue-in-cheek rant whilst he could still remember the pain-points. 'Convert to VB.NET! You have nothing to lose but your semi-colons! '

Visual Basic is a better programming language than Visual C#. Who says so? This article! Here are 10 reasons why you should always choose VB over C#.

1 – “Rose is a rose is a rose is a rose”

This is a quotation from Gertrude Stein’s 1922 play Geography and Plays. However, the poetry wouldn’t work in C#, because – unforgivably – it’s a cASe-SeNSitIvE language. This is madness!

Before I start ranting, let me just acknowledge that case-sensitivity confers one (and only one) advantage – it makes it easier to name private and public properties:

Writing properties like this means that you can refer to the public Name property, and it’s obvious what the private equivalent will be called (name).

So now we’ve got that out of the way: case-sensitive programming languages make everything else harder. Why, you ask?

  • You keep having to switch between upper and lower case when typing, causing RSI in your poor little fingers as you reach for the inconsiderately located Shift key.
  • You are much more likely to make mistakes – are you sure you meant to type DateOfBirth, or should it have been dateofbirth?
  • When you accidentally leave Caps lock on, it really matters.

The only possible benefit is that you can use more combinations of variable names, that is, you can use more of one of the few infinite resources in this universe…

It doesn’t matter if you disagree with everything else in this article: case-sensitivity alone is sufficient reason to ditch C#!

2 – The Switch clause

Both VB and C# contain a way of testing mutually exclusive possibilities, the Select Case and Switch clauses respectively. Only one of them works properly.

A Visual Basic Select Case clause, returning a description of how old someone is. The age range for a young person is a tad generous, reflecting the age of the author of this article.

A Visual Basic Select Case clause, returning a description of how old someone is. The age range for a young person is a tad generous, reflecting the age of the author of this article.

You can’t do this using Switch in C#, as – astonishingly – it can’t handle relational operators. You have to use an If / Else If clause instead. But even if you could, you’d still have to type in lots of unnecessary Break statements:


It’s easy to forget to type in each of these Break statements!

3 – Event-Handling code

This is specific to Visual Studio (I’m using 2010, the latest version). Suppose I want to attach code to anything but the default Click event of a typical button:


Let’s suppose that I want to attach code to the MouseHover event of this button.

I can do this in Visual Basic without leaving the code window:

a) First choose the object from the drop list.


b)Then choose the event you want to code.

In C# you can’t do this – you have to return to the button’s properties window and choose to show its events:


You can double-click to attach code to this event for the selected button – but that’s the only simple way to create it for C#.

But it’s even worse than that. If you then rename a control (in this case btnApply) you have to re-associate the event-handler with the renamed control in the properties window (or in the initialisation code, if you can find it). In Visual Basic, of course, you can do all of this in code:

Globally change btnApply to the new button’s name in code, and everything will work as before.

4 -Stupid symbols

C# was written by academics. It shows. Consider this table of C# symbols and their VB equivalents:

What you’re trying to do C# Symbol VB Equivalent
Test if two conditions are both true && and
Test if one or other condition is true || or
Test if a condition is not true ! not
Concatenate two strings of text + &
Test if a condition is true within an if statement == =

Which column looks like it was designed by a real person?

5 – Autocorrection in Visual Basic actually works

IntelliSense works much better for Visual Basic than for Visual C#. Take just one example – creating a write-only property. Let’s start with Visual Basic:


When you press return at the line end…

… You get this fully-completed clause.

For C#, the same thing doesn’t happen:


When you press return here, nothing happens (other than a blank line appearing).

This is just one example. I’ve just spent ages transcribing our VB courses into C#, and believe me, there are many, many more!

6 – Lack of supported functions

Here are a couple of functions I use from time to time in VB:

Function What it does
IsNumeric Tests if a value can be converted to a number
PMT Calculates the annual mortgage payment for a loan

Great functions, but they don’t exist in C#.

7 – That wretched semi-colon

Why do I have to end every line in C# with a semi-colon? The argument used to be that it avoided the need to use continuation characters in Visual Basic:

You used to have to use an underscore as a continuation character to show incomplete lines of code in VB.

However, as of Visual Basic 2010 you rarely need to do this anymore. Come on, C#: Visual Basic has ditched its line-ending character; why can’t you?(;)

Someone commented on my original (much shorter) blog about this:

    “In a short amount of time you’ll type those semi-colons without thinking about it (I even type them when programming in visual basic).”

That’s like saying that you’ll soon get used to not having any matches to light your fire, and you’ll even start rubbing sticks together to start a fire when you finally manage to buy a box!

8 – Arguments and variables

The order of words in a C# variable declaration is wrong. When you introduce someone, you wouldn’t say, “This is my friend who’s a solicitor; he’s called Bob”. So why do you say:

To me:

…is much more logical. I also find the C# method of having to prefix arguments with the word out confusing, particularly as you have to do it both in the called and calling routine.

9 – Strictness

C# is a much fussier language than Visual Basic (even if you turn Option Strict on in Visual Basic, this is still true). “And a good thing, too!”, I hear you cry. Well, maybe. Consider this Visual Basic code:

With Option Strict turned on this shouldn’t really work, as it’s comparing an integer with an enumeration – but VB has the common sense to realise what you want to do.

The equivalent in Visual C# doesn’t work:


A less forgiving language…

What this means is that you end up having to fill your code with messy type conversions:

The simplest way of converting an enumeration to an integer; but why should you have to?

10 – Redimensioning arrays

If you want to dynamically change the length of an array in Visual Basic, you can use Redim Preserve. To do the same thing in Visual C#, you have to copy the array, add a value and then copy it back:

The vile, clunky C# method of extending an array.


This epitomises Visual C# for me. Critics will tell me that:

  • Behind the scenes, the Redim Preserve command does exactly the same thing as the C# code above; and
  • I should be using lists and not arrays anyway.

That’s hardly the point! The point is that – as so often – Visual Basic makes something easier to code than C# does.


So those are my 10 reasons to code in Visual Basic. What are you waiting for, all you C# code-monkeys? Convert all of your code to VB – you have nothing to lose but your semi-colons!

Tags: , , , ,


  • Rate
    [Total: 2304    Average: 3.2/5]
  • Anonymous

    even seeing that vb syntax makes me wanna puke.
    but that’s just me 🙂
    good article though,thanks.

  • karolis

    The points made in this article are pretty weak. Actually, very weak. Complaining about case sensitivity is ridiculous and the boolean operators in C# are those that are used by most of other languages..
    But do not get me wrong – by no means am I defending C#. All the .NET platform is disgusting in my linuxy eyes.

  • nick harrison

    Implementing interfaces
    I normally try to be neutral on the merits of the two different languages. My preference is for c#, but if you prefer VB.Net, more power to you.

    For the most part the two languages are functionally equivalent. However, I have found and frequently run into one glaring problem. C# will allow code to implement interfaces that VB.Net will not recognize. This often has implications to my software designs.

    If I have an interface that requires a getter on a property, c# will not complain if the implementation also has a setter. VB.net on the other hand will not consider the interface implemented.

    I have also found in clunky and cumbersome that you had to explicitly state what each method or property was implementing. C# will automatically match the method signatures and property names to determine what is matching what. With VB.Net you have to explicit and this is the only work around to the limitation mentioned earlier.

    If you have one interface requiring a getter and a separate interface requiring a setter, the one property can implement both interfaces in C#. With VB.Net, two separate properties will be required.

    Before I understood this limitation, I had 3 interfaces that my UI needed to implement. One required a get for a dozen or so properties. One required a set for the same properties. The final one specified a a get and set for each of these properties. Everything worked well in csharp code, but when another developer insisted on doing the UI in VB, we were both shocked to discover that we needed three times as many properties as anticipated.

    Granted, this turned out to be a bad design for our application, but this is a limitation that few people acknowledge.

  • Henk Simmelink

    No difference to me

    For me it makes no difference which language one uses.

    The only thing i do not understand why the result is not the same in both languages:

    dim a = 0
    if a = nothing then a.dump()

    var a = 0;
    if(a == null) a.Dump();

  • Anonymous

    … crazy talk 🙂

  • GB2003

    Your take on booleans is wrong.
    This is not a “your opinion is wrong” statement. This is a “you just compared apples to oranges” statement.

    In short, your comparison should have shown this:

    C#: &&, VB: AndAlso
    C#: ||, VB: OrElse

    Those are the equivalent operators. “And” and “Or” in VB.Net (1.0 and up) do NOT short-circuit. They will compare all expressions in the predicate.

    Outside of that, your article is a good read and funny as well.

  • Anonymous

    Finally someone with sense
    C# is an attempt to appease a group of idiots that where using an antiquated language like C++ which was an attempt to appease idiots that where using an antiquated language like ANSI C which was an attempt to appease idiots that where using K&R C.

    The idea was bad from the start. It has always been a poorly designed language that simply drives up development costs. While it might have been good in the 70’s, now it makes as much sense as coding in assembler.

  • Anonymous

    where is the editor
    I can’t believe the editor there let you publish something like this article !

  • Damon
  • Anonymous

    C# vs VB
    One can write anything in VB that can be written in C#, and usually much quicker. Seeing that case sensitivity BS (!) makes me want to vomit.

  • Anonymous

    You should correct your title
    I can’t find any reason why VB is better than C# in your post. You just wrote why you prefer VB than C# on your biased view. I don’t mind your preference – it’s your choice.

    I saw these kind of articles about 10 years ago. But now it’s 2012. Please don’t waste time.

  • Anonymous

    Check mate
    .net is written in c#

  • Colin Bull

    This is crazy…

    1. Case Sensitivity,
    I definitely want to know weather I am accessing a field or a property as the property may have some behaviour it encapsulates before getting or setting the field. Also your example is flawed, why not just use auto properties,

    public string Name { get; set; }

    2. The switch clause

    The example you give here is actually an if/else statement, later in section 9 you moan about strictness against and enum that you cant implicity convert it to an int, in this case you should be using a switch.

    Also I’m presuming that you cant deal then with mutliple case in a single stmt, i.e.

    case Element:
    case Var
    case Number
    case Literal:
    throw new ArgumentException()

    3. Event handling

    Fair enough if you are a click and point developer . But really is

    btnApply.Click += HandleApply;

    that complicated, Oh yeah, and if you use the refactoring tools to rename btnApply, this will get cascaded to all of the references.

    4 – Stupid Symbols,

    Of course this is just preference and there are errors, mentioned above, but it does highlight a valid point.. That you actually raise about syntatic noise, As far as I can see semi-colons are about the only thing you lose VB / C# hwoever the amount of other noise that is about in VB is tremendous.. Just take a look at lambdas or generic type declarations

    Besides if you are bothered about syntatic noise, move to F# or Haskell…

    5 – Autocorrection,

    That is not intellisense I don’t think I believe that is snippets your seeing there.

    6 – Lack of functions,

    IsNumeric -> errr, float.TryParse??

    PMT -> Really should this be in a language, or even in the .NET framework I don’t think so, besides it is an easy enough function to implement.

    7 – Semi Colon,

    Is valid C# and no underscore…

    8 – Arguments and variables

    IMHO the C# is less typing and more concise, and just as revealing, And typically if you find your self using out alot why not return a tuple instead. Or create a class / struct to represent the return type.. Far more revealing to a user of an API.

    9 – Strictness

    Already commented on this, but one additionally thing it lets the compiler move a class of errors, for you. I’d rather have the compiler check and force me to be explicit about the cast to amke sure I definately want to do it.

    10 – Redimensionsing Arrays,

    I think list.Add is fairly easy dont you??

  • Anonymous

    I disagree!
    Let’s not forget that C#, because of its stripped down syntax (which was a way to save keystrokes when CPU cycles were expensive) is much “smarter” looking than the relatively English-like syntax of VB.

    I mean, it’s got “Basic” in the name for a reason, amirite?

  • Travis Laborde

    completely agreed
    I switched from VB.NET to C# a few years ago, and now it seems just fine to me, but… your points are right on.

    As you pointed out in your first point – case sensitivity alone should end the story.

  • BuggyFunBunny

    Those Who Forget History…
    C# was created as M$’s response to java, recall? VB.NET created great hate amongst the VB6 crowd? Both generate the same intermediate, which is why it’s so foreign to the VB6 crowd. VB6 was the last “real” VB. .NET is an impostor.

  • Anonymous

    This is almost a work of pure fiction.

  • Anonymous

    Right on
    You are 100% right, and seriously there are so many other reasons not even mentioned here, someone should compile all reasons together.

  • Anonymous

    Right on
    You are 100% right, and seriously there are so many other reasons not even mentioned here, someone should compile all reasons together.

  • Peter Ashford

    Nice troll! Very good work. No-one could be that much of a moron.

  • Terry

    Great post
    Outside of this:
    && and
    || or
    which should have been
    && AndAlso
    || OrElse
    this was a great article that hilariously points out some of the more glaring problems with C#. I ‘ve spent a lot of time working with C# and for sure I can say that VB.NET just is better about getting out of your way and letting you get work done in terms of IDE and compiler support. I 1000% agree but sadly the .NET industry has settled on C# as standard but I’ll keep fighting the VB.NET ,Python or Ruby fight on my personal projects. Semicolons and curly braces absolutely stink.

  • chris marisic

    Silly list is silly.

  • Anonymous

    Good for You!
    I coded a lot form vb3 to vb6, now I happily using c# and not looking back. N
    Use what fits you better.

  • Anonymous

    Funny as f##k
    You must win a prize or something, you found the 3 things VB has that c# doesn’t, Java, ECMA, C, ruby, PHP are all doing it wrong

  • Anonymous

    Funny as f##k
    You must win a prize or something, you found the 3 things VB has that c# doesn’t, Java, ECMA, C, ruby, PHP are all doing it wrong

  • Anonymous

    When I read the intro describing the article as being written “tongue-in-cheek”, I was expecting some comparisons which were obviously meant to be funny, like showing how VB makes it so much easier to do something that’s universally accepted to be bad … like using gotos or something. The switch statement example comes close, since good designs rarely make use of switch statements, preferring rather to adhere to the open/closed principle, but the majority of developers haven’t heard of the SOLID principles so this seems less likely to be tongue-in-cheek. Over all, these are all legitimate points, and while I don’t fully agree with all of them or believe they make up for the odd, wordiness of the VB language, I fail to see how this article is intended to be understood as being written tongue-in-cheek. That is, unless you mean the archaic meaning of contempt. Did I miss something?

  • RichB

    but what about…
    I prefer C#, but You missed some of the really quite nice VB.Net features. eg parameterized properties and filtered exceptions. These have been in the language since the start.

  • Anonymous

    Procedural is procedural is procedural
    1. Hungarian Notation

    2. Lack of understanding of abstract data types. An array? Seriously? Is this 1999?

    *Takes Geek card*

    *Rips to shreds*

  • Alex_Kuznetsov

    can you recommend a good book?

    You sold me, I can’t wait to try this VB thing out. Can you recommend some good books and tutorials on VB.Net?

  • Jon Wingfield

    It’s scary how shallow this post is. Are you really evaluating a language based on the tooling? There are actually some things that I find better about VB.NET than C#, but you didn’t mention even one of them.

  • Anonymous

    The correct VB translation is :
    If a Is Nothing then…
    “is” being the comparison for reference types. It wouldn’t compile as an integer is not a reference type.
    if a=nothing compares value types and nothing is the default value for an integer (as this is the default value for a reference type when used in a “is” comparison). So the C# translation would be :
    if (a==default(int)) …

  • Anon

    Don’t cry
    Don’t cry if all of the MS samples are written in C#! Just relax!

  • Jwalant Natvarlal Soneji

    Actually, its correct!
    Good article! C# is getting more than what is its useful for. Its a mistake by the old, lame C, C++ guys….

  • RobCroll

    VB.NET is for real programmers!
    Good try Andy but C# programmers are the best and they know it. 😉

  • Kevin

    This was posted as a joke, right?
    Not only are your “facts” about C# way off, you almost only seem to be talking about IDE functionality instead of the language…

  • Thomas Eyde

    You know your way in VB
    If you only knew your way around in C# equally well, you would never have written this article.

    I am a former VB6 developer, and I really liked that language. There’s a reason I never went for VB.NET.

  • Bill Gate

    Wrong, Big TIME
    you’re wrong, BIG TIME!!!
    This article just proves one thing, YOU DON’T KNOW SHIT ABOUT C#

  • Tony Dieter

    Not sure if troll or terrible programmer.
    This is a terrible article based on opinion alone and unbalanced. I can name counter arguments for just about all points which are essentially flip sides of the same coin. Glossing over points 1, 2 and 3 (which is a gripe about the IDE, getting mixed up here already), the other points are worse.

    Point 4 proves the author has no clue what he’s talking about. “C# was written by academics.” just shows that the author clearly has no idea of heritage that is the C language, which always used these symbols.

    Point 5 is that autocorrection should NEVER be a feature, I consider it a bug. It means you can’t write valid code yourself (pretty easy, millions of people a day to this). Autocompletion on the other hand is a real time saver, and works in C# just as well (again though, IDE)

    On point 6, VB.NET lacks some critical features that C# has, such as unsafe code and much more. Clearly, some stupid library functions which can probably be used by linking to microsoft.visualbasic.dll cannot make of for this.

    Point 9 claims that “but VB has the common sense to realise what you want to do.”. Again, it’s a computer so it cannot and should not be guessing what you as the coder seem incapable of expressing.

    Finally, point 10 proves you’re doing it wrong. Use a collection and do it properly, instead of coding like it’s 1995, or in performance critical apps, at least you know where your copying is happening.

    The author must have minimal real world experience or missed the transition from VB to the .NET era. It’s like the author is still coding with a VB mindset and failed to embrace .NET principles. Plus, strictness is a HUGE asset for large projects. All these points are hallmarks of someone with terrible coding skills or a highly skilled troll (not sure… :).

  • Anonymous

    You’re forgetting the best one…
    You can declare an event without having to explicitly create a delegate for it. That makes event handling in VB a lot easier than in C#

  • Anonymous

    That’s the funiest comparison I’ve ever seen, so retard to do such a comparison! Is this the way you compare two programing languages!! ahhahaha

  • A2

    Funny facts
    Remember everything is translated to IL in the end but I disagree with the most content of this article.

    C# syntax (because its similar to C++) is elegant and professional. VB is for dummy developers who doesn’t want to know anything about anything and they’re forced to work as developers (for some reason) with all respect to VB guys 😀

    I think the writer lacks some decent knowledge in .NET (again with all the respect)

  • Anonymous

    Don’t confuse VS with C#
    I agree with many of the comments above but would also add that how Visual Studio decides to add a UI (adding events/autocorrect for example) are no failing of C# as a language they’re a failing with Visual Studio!

  • Leo

    Please stop
    I think the election of a certain language should reside on its capabilities more than just semicolon or an ide menu issue. This is just a “what I like about VB above C#” more than “Is VB actually a better programming language than C#?” I am pretty sure you can generate the same results, keystrokes more, keystrokes less with both
    I think in the end we are witnessing just another round of the vb/C# holy war. We should better be talking about who is the best captain, Kirk or Piccard. Got it?

  • Anonymous

    Spock is not impressed with this article.

  • Anonymous

    C# devs use Resharper
    If you start comparing IDE features, compare it with Resharper!

  • Anonymous

    Oh. My. God.
    Either you are all trolls, or all insanely stupid. The article is clearly written as a joke.

  • Anonymous

    More choices for developers
    Each one has something that the other does not have. Better or worse is often subjective.

  • Chicken Leg Willey

    Confirming what I have suspected for years
    Thank you. I have been programming professionally in Basic and VB since 1979. I looked at using C and dismissed it decades ago (literally).
    All of the VB haters attacking this article need to realize they are just insecure little whiners protecting what they know.

    Wake up guys it is all just syntax!

  • Anonymous

    You know what I really hate about C#?
    It basically forces you to use lists. I mean how stupid?
    I mean seriously, as if you wouldn’t know the maximum size you’ll need for your array at compile time.
    Not to mention the fact that i’d have to learn a whole new language!
    That would be the worst!

  • Anonymous

    funny how someone can complain about a 1 char semicolon and not complain about the
    ending semantics like
    end if

    end while

    and so on just look at the property that u defined
    i.e. End Set, and End Property

    a simple } would do in C#

  • Anonymous

    You specialize in VB.NET, I’ll specialize in C#. Then let’s both look for a job and see who comes out ahead. 🙂

  • AmightyWInd

    Whats the point
    I don’t even understand why VB.NET is still around. I believe it was a tribute to the 6 million VB developers at the time, of which I was one of them.

    It’s really time to ditch VB, its nothing like any other language. (And that’s a bad thing – for YOU).

    I swallowed the Red pill, and went all in on C#, and I don’t have any regrets.

    That type coercion that VB just handles for you, because “It knows what you want” is the core of its flaw.

    Here’s a real world example….

    If you have an object model inheriting from a base class, that has events, and you serialize that object – vb casts a “hidden Delegate” back to the sending code. That defeats the entire purpose of serialization in the first place….

    To simplify: you have a reference you don’t know about in Code B, back to Code A…

    Now that could be a application deal breaker.

    Case Sensitive – I love it, it keeps me from naming things within the same scope and getting odd results.

    IMHO – this conversation smells of 2002.

  • Anonymous

    and so it seems…
    public string rant{

    …yer a complete idiot when it comes to C# and WiseOwl would benefit by giving you walking papers… Not a single thing you pointed out is significant enough for a 10 point rant full of C# rage like yours above.

    if (the article IS in fact meant to be humourous, and is a joke){ x++ to you } else { get a life }

  • Anonymous

    Five+ stars
    Best article I’ve read in a long time. And the responses bring out the significant attitude problems of the self-professed C,C++,C# elitists. It seems they like to keep their ‘craft’ above the comprehension of mere mortals. Five+ stars Andy.

  • Adam

    VB better than C#? Really?

    I think you just favor the syntax.

  • the Kris

    4 –Stupid symbols
    LOL, why not replace all operators by words then? Equally stupid:

    + -> AddedTo
    – -> SubtractedFrom
    * -> MultipliedBy

    Dim a As Integer = b AddedTo C MultipliedBy d
    Dim a As Integer = b Plus c Times d

    I couldn’t find a good replacement for ‘=’ though…

  • Anonymous

    This article is one of the funniest programming jokes I’ve seen in recent times.

  • Anonymous

    Dim vbProgrammer As Hack

  • Anonymous

    Two words why VB > C#
    With blocks.

  • Anonymous

    Very weak
    You lost my respect when you brought up case-sensitivity.

  • Anonymous

    re: 4 –Stupid symbols
    Word for ‘=’ could be “Assigned”

    Dim a As Integer Assigned b Plus c Times d

    And what’s with that ‘Dim’ thing when declaring a scalar variable?

  • Anonymous

    re: 4 –Stupid symbols
    Word for ‘=’ could be “Assigned”

    Dim a As Integer Assigned b Plus c Times d

    And what’s with that ‘Dim’ thing when declaring a scalar variable?

  • Anonymous

    Are You Just Trying to Pick a Fight?
    It should be obvious that VB.Net is purposely designed to appeal to former VB’ers, while C# is purposely designed to appeal to the Java/C/C++ crowd.

  • Walter

    Is a pointless task to convince them!
    Is a good article but is like to convince a billion chinese people to write in english because their lenguage stinks!!!! 🙂

    By the way, I use c# because is closer to Java, C/C++ and Objetive C (and almost all).

    Maybe in 50 years, our childs use VB!

    VB Rocks!

  • Anonymous

    Automagic is not always better
    Years ago I had to write some ptr heavey code using Turbo Pascal. It was a great language of its time much like VB. I never did have the time to get all the bugs out of the ptrs but one day Windows shipped in 1990 and the only way to prgram was in C. I had to port the code and learn C at the same time. The fact that C did little to help forced me to do something with the ptrs…Think. The fact I had to think about what the ptrs where doing in all cases resulted in code with fewer bugs. In this case thinking trumped automagic.

  • Walter

    Is a pointless task to convince them!
    Is a good article but is like to convince a billion chinese people to write in english because their lenguage stinks!!!! 🙂

    By the way, I use c# because is closer to Java, C/C++ and Objetive C (and almost all).

    Maybe in 50 years, our childs use VB!

    VB Rocks!

  • Charles Kincaid

    Different is not better. Get over it!
    I have written in practically every version of Basic inclding things prior to Visual ANYTHING.

    The two are different. Yet what you have to look at is what actuallye gets run. In Dot Net everything compiles down to IL. Get a decompiler and look at cdoe written (and written well) in both VB and C#. Remarkably similar IL.

    C# make YOU do more work. Very little question of it. Also most folks agree that the IDE for VB is way better than the IDE for C#. So blame the IDE and not C#. The C# crowd should be down Microsoft throat to make the C# IDE better and not to make the VB IDE worse.

    I’m migrating to C# and as an old dog (read as antique) it’s tough. Yet I’m doing it.

    Oh, by the way. If there were a great IDE for IL I would vote to send both VB and C# into the trash bin. let me write close to the harware so that my code works right and runs fast.

    Both C# and VB compile to some damn stupid code.

  • Paul L

    You have a job? I’d say this article essentially shows you to be unemployable. At least I’d never employ somebody with such a fundamental lack of knowledge, claiming they know everything.

    Look up ‘Dunning–Kruger effect’ on Wikipedia. Take heed.

  • Walter

    Is a pointless task to convince them!
    Is a good article but is like to convince a billion chinese people to write in english because their lenguage stinks!!!! 🙂

    By the way, I use c# because is closer to Java, C/C++ and Objetive C (and almost all).

    Maybe in 50 years, our childs use VB!

    VB Rocks!

  • Anonymous

    I love it!
    Those saps think you’re joking.

  • Anonymous

    This type of arguement is pointless. You couldn’t think of anything creative and/or ihnformative to write about?

  • Anonymous

    Retarded article. C# Pawns VB.NET right in the kisser 😀

  • Anonymous

    Like a baws
    C# Owns VB like a baws.

    C# is made 100% for .NET,

  • Anonymous

    Point 5… Really!!?
    Hang on a sec…
    Point #5… whoa whoa wait a sec! I dont know if you lack understanding in C# here, or if you’re deliberately making VB’s flaw as its strength.
    In C#, you do NOT need to declare parameter (and its type) of a property’s setter!
    Therefore, well, obviously there’s nothing to autocomplete there, because you literally do not need to type anything!
    Whereas in VB, you have to (redundantly) type the paramter and its type when you make a setter, and this verboseness requires IDE intervention to *hide* the ugliness by generating this meaningless boilerplate code for you.
    This is obviously a flaw in VB.NET setter, and it’s bordering comedic how you describe it as a strength.

  • Anonymous

    When you type set{… in c#, nothing appears on your autocompletion. You know why?
    Because there is nothing more you need to type! That’s it, setter declaration is just that. The next line would be your setter body.
    Unlike c#, in vb.net, you need to REDECLARE your parameter type again (value as String), and obviously Visual Studio team recognizes this silliness of the language and generates it automatically for you.
    This is not a feature! It’s like saying (following your matchbox analogy) that matchbox is better than a zippo, because zippos don’t come with striking stripes.

  • RobCroll

    VB.NET is for real programmers!
    Good try Andy but C# programmers are the best and they know it. 😉

  • homemade pizza

    than VB i prefer PHP…

  • Rod Rodrigues

    I wish I could also write articles like you while drunk, stoned or both…

  • Snake

    Get your facts right.
    To be honest, you should get your facts right when posting stuff like this. Read my response.


  • Anonymous

    To the one who commented “Finally someone with sense”
    First of your pretty judgemental. Idiots you say.

    Normally I am not critical on the language, I don’t want to bad mouth a language. I developed in a lot of languages. From Assembly, C, C++, Visual C++, GNU C/C++, Visual Basic, C#, Java, PHP, ASP. I believe its the customer’s preference, anyone’s preference, and sometime on the situation, environment or technology.

    If you want more control and you need to be involve in what should be going on under the hood its C, C++, Assembly even. Specially for hardware oriented or protocol oriented work.

    If its rapid development, and memory, speed is not an issue you can go with Java, C#, Visual Basic.

    Why would you call someone who needs to know more detail and control under the hood idiots? You do know another judgemental person can see it as the other way around.

    For the sake of not causing any fights I’ll stop here. Do not be judgemental all programming languages have merits. Sometimes its use is a matter of a lot of factors.

  • Anonymous

    Two of these points are criticisms of the IDE
    Not the language.

    Also VB.Net causes aids.

  • Anonymous

    Everything I hate about our industry
    Glad you are a consultant and not a real developer doing anything useful. Just feel sorry for the people you “train”.

    You can prove me wrong by providing us with a github account where I can see your contribution to our .NET community. Rather than this blog post that is in bad taste, designed to provoke a reaction in the flawed VB vs C# debate (we are all on the same side as Microsoft .NET developers). All so you can shamelessly promote yourself whilst contributing zero. Everything I hate about our industry.

  • Anonymous

    Love your website
    Love your website http://www.wiseowl.co.uk/ was in done in frontpage with VB.NET

  • Anonymous

    Very Dim 🙂

  • Anonymous

    I use VB.Net every day
    So I speak from a position of knowledge when I say this. VB is terrible. It encourages laziness in ways that break programs. C# and other languages are better because if you don’t know what you’re doing, your program doesn’t compile. VB is worse because you think you’re being more productive, because it isn’t flagging your errors. In reality, you are only creating runtime errors in the future as the compiler tries to be too flexible.

  • Anonymous

    Really, letting the compiler find your errors for you?
    That’s the very definition of lazy. And of breathtakingly poor programming.

  • mpalmer

    I agree… mostly.
    I have built hundreds of projects in both C# and VB.NET since 2002 and I agree that VB.NET is more productive when using Visual Studio. I can whip through a code file much quicker in VB.NET than I can in C#, even if I’ve used C# exclusively for several projects in a row… when I get back to VB it’s a breeze again. I also enjoy reading VB better, much more blocked and concise to my eyes.

    But, all of these feelings are personal preference and I wouldn’t say empirically that one is better than the other. I would say so on a personal-level.

    Boy, you sure opened up the flames though! HAHA!

    Us nerds can get pretty passionate about technology, sheesh. Bunch of dorky geeks.

  • Anonymous

    “… VB has the common sense to realise what you want to do …”

    That doesn’t seem to apply to properties:
    “… WriteOnly Property PersonName As String …”

    In C#, as with VB6 and earlier, a property with a getter and no setter is read-only; a property with a setter and no getter is write-only. In VB.NET, they’re both a compiler error unless you tell the compiler, “yes, this is really what I want to do”.

    ReDim Preserve? Try Array.Resize instead.
    var PartyGuests = new[]
    “Sarah Palin”,
    “Richard Dawkins”

    Array.Resize(ref PartyGuests, 3);
    PartyGuests[2] = “Mitt Romney”;

    Missing PMT? If your wife can’t help, try adding a reference to the Microsoft.VisualBasic assembly and using the Microsoft.VisualBasic.Financial class.

    Strictness? Great, let’s all go back to the days when “5” + “7” = “12” (instead of “57”). After all, the only reason VB introduced “&” for string concatenation was to avoid the evil type-coercion errors that resulted from using “+”.

  • benjamin.raibaud

    good for you (and good luck!)
    Great; yet another VB developer trying pretend VB is still alive and still ahead of anything else. Honestly if you feel better after having written this article, good for you. I feel like you are the only person you are trying to convince. Long story short: VB developers are terrible developers most of the time. They don’t really understand what they are doing. How come 95% of the .NET community has missed such a great language?

  • Emmett Childress

    I demand an additiaonal post!
    How could you leave out the lambdas and linq expressions?

  • Emmett Childress

    Metro Development
    Vb is so awesome that wp7 development supported those whinny c# clowns to keep the peace http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/6e154937-4b28-4873-aa5d-636b758da949/. The zombie apocalypse will be started by c# developers making pitiful attempts at Metro-style interfaces.

  • Anonymous

    VB is a more “intelligent” and more user-friendly language
    You are 100% right. There are several other reasons why VB is more “intelligent” and more productive. May me user-friendly is teh most serious of all arguments…

  • Anonymous

    Have you tried to teach a new-comer programming?
    I have used both languages (C# and VB) to teach newcomers programming. VB is DEFINITELY MORE USER-FRIENDLY and you can get results MUCH MUCH quicker…

  • Anonymous

    A suggestion…
    I suggest that Microsoft merge the two, provided they make C# look like VB

  • Anonymous

    RE: A suggestion
    You’d have to get in Mr. Peabody’s WABAC Machine (for those on the East side of The Pond: http://en.wikipedia.org/wiki/WABAC ) and go slam on Bill and Steve’s heads: they decided to make VB6 (calling the result VB.NET) look like C# in order to get a single IL stream. Merging’s done, and C# won. Water under the dam.

  • John Glasgow

    Can’t we all just get along?
    I really don’t see what the big deal is, they both have their merits VB is more for business developers and C# is more for software developers. I have a good article which discusses iterpretted vs. compiled code, somewhat similar of a discussion.

  • Anonymous

    Can’t believe
    Visual Basic is a better programming language than Visual C#. Who says so? This article! Here are 10 reasons why you should always choose VB over C#.

    Every reason you stated is either wrong or you didn’t do your research properly. Colin Bull said it all to you. Stop writing stupid “articles” is you can even call this annoying post.

  • Anonymous

    Horrible article
    I’ll jump on the bandwagon and agree with everyone else that this is a horrible article that I can’t believe made the light of day. I honestly don’t care if someone prefers VB over C#, but the arguments presented in the article seem weak and petty and best, and show a distinct lack of knowledge at worst.

  • Anonymous

    Quite right about the switch statement but the rest…
    Point 9 is wrong – make the enum inherit from int and it would work.
    The point about RSI is laughable – VB is so much more verbose in almost every aspect.

  • Ian

    It not about the language, it about the programmers that choose each…..
    I have worked on both C# and VB.NET project, as far as the syntax goes, I like C# better as I have been using ‘C based syntax’ for the last 20 years however it is clear that VB.NET syntax is good enough.

    However I have found that the C# projects tent to have much better code quality – maybe this is due to the background of a lot of c# programmers.

    Therefore given choose between a C# and a VB.NET job, I will take the C# job along with a lot of other very experienced developers. Therefore the C# projects will tend to have better code quality…. (Warning infinite recursion!)

  • Richard

    We all missed the real point.
    Q – Why did he convert the VB course material to C#?

    A – Because there are sooooo many more customers.

    People who care enough to buy training are far more likely C# users.

  • Anonymous

    Select Case can be True
    VB Also allows:

    Select Case True
    Case A = B
    Case E < F
    Case Else
    End Select

  • Haris

    My opinion
    Either this article was deliberately written to actually tell the truth that C# is far better than VB, OR there is some serious problem with Simple Talk’s article selection.

  • Bassam

    Fully Agree
    after 20 years of programming, used many languages, VB syntax is for sure much superior, clear than C# and much productive also , we are sticking with VB , we do LOB database applications.

  • Bodycheetah

    Better for what?
    So you prefer a scripting language to a programming language. Fair enough but you may as well argue that Python is better than C++.

  • Frávio

    And is not &&
    && means AndAlso
    & means And
    || means OrElse
    | means Or

    I work with both languages, using VB as default (I came from old ASP and VBScript). Love both of them, and sometimes I like to alter between them.

  • Anonymous

    real people?
    When you say “Which column looks like it was designed by a real person?” Does this mean academics aren’t real people?

    I develop mainly in VB.NET but have my own projects in c#. The reasons given in this article just make you look like you’re ignorant to c# and should you really be giving training to other people?

    This is the first time I’ve read a simple talk blog and it’ll be my last.

  • Freedom of choice

    Why can’t we all just get along?
    Let’s all just agree to disagree.

    There is no solution to the VB vs C# debate.

    I’ve written code in both and in the end the MS folk has managed to do a good job of making the arguement for either pretty much moot.

    Microsoft’s message to developers is pretty simple – pick your favorite language and write code that works.

    Frankly – I like a development enviroment that allows me to make a choice with almost no built-in compromise.

  • Anonymous

    Love it
    It’s funny how you got all these C# monkey’s undies in a bundle. You pissed on the side of their private club house and now they are plotting their revenge…

  • Anonymous

    Windows 8 is written in VB.Net
    Windows 8 is written in VB.Net with some C# for performance.

  • Anonymous

    Inferiority Complex
    BASIC initially meant “Beginner’s All-purpose Symbolic Instruction Code”. However the first BASIC is totally diferent from todays Object Oriented VB! However the name bothers a phsycologically inferior mind with an inferiority complex. This people like to make things more complex & harder than what they are. Oh, BTW, the 11th reason I use VB over c# is XML Literals!

  • Anonymous

    This article is a very successful TROLL.

  • Anonymous

    Embarrassing Haters
    Thanks for the article, I found it entertaining. As I read the responses, I thought that some of the extreme reactions were funny. But gradually I became embarrassed for the community of programmers, myself being one of them. The insults are really unbecoming, folks. Relax.

  • Bill Bixby

    Excellent read
    Made me realise why I use C# and not Visual Simpleton.

    So many of my points already made.

    (!c# ? u=numbty : u=smart)

  • Sandra

    Fun Article
    I agree with the first point. All you have to know is “case sensitive” and you can stop there.

  • Max

    Ford versus Chevy?
    Me thinks the crowd doth protest too much! The responses are more telling than the original article. They appear indicative of people who spend entirely too much time inside playing on devices that evolve and change constantly. All programming languages have their quirks, merits, and purpose. Can any of you remember Fortran, COBol, etc.? Such seriousness and vulgarity from some of the posters does not reflect well on the programming community. Lighten up folks and open your minds to all possibilities.

  • Clinton Gallagher @virtualCableTV

    I Thought Pragmatists Buried The VB Fanboys!
    I started with VB syntax and grammar dabbling in VBasic, VBA and then using ASP but realized developing for the WWW had –two– tiers: server-side and client-side so I switched to C# for pragmatic reasons.

    A.) All client-side code is written in JavaScript which syntactically looks and feels like C# both having been bred of the legacy of C.

    B.) VB being born of the devil.


  • Anonymous

    This article was funny – stop being so serious!
    Really, what a negative, condescending and critical bunch of people the commenters show the C# community (generalisation, don’t get your knickers in a knot) to be… This article is meant to be entertaining and funny. Try reading and understanding the first bit stating “a tongue-in-cheek rant” and taking a deep breath before commenting…

    Too all you overly serious people out there, relax! Remember, your choice of language is your preference. A good coder can develop in any language and make a success of it.

    PS: And and AndAlso allow for a bit more flexibility where you can actually choose whether to short circuit or not. You’ll almost always want to short circuit but there are lots of useful cases where you wouldn’t.

  • Doug Pederson AKA SpectateSwamp

    The language hasn’t mattered in ages
    If efficiency was important we would all write in assembler. Simple is always best. Keep it simple over-rides everything else. Besides the greatest program on the planet; My MultiMedia / Search Engine lives in VB5. It’s been running for 12+ years now. Operating or languages matter little. It is the app dumbasses….

    Grab a free copy:

  • Anonymous

    Not professional
    I disagree with every single point.. (except for switch maybe)
    How could something like this be posted on a reputable web site like simpletalk?

  • Burton Roberts

    Can’t go back to VB.Net
    I switched from VB.net to C# about 2 years ago. While I miss some VB.net conveniences, most articles in MSDN and other publications include C# code only. Now I think in C#, can understand the articles, and would never go back to VB.net.

  • Anonymous

    rose is a rose
    Considering that yoU read code more than yUo write, point 1 is stupid and I stop reading!
    Case sensitive or not, code style is another subject, and whether a language permits you to be lazy or not is not as important as write clear code.

  • Joop

    Language is a matter of tradition and culture
    Coming from a XBase (Clipper,Foxpro,Visual Objects) background I found VB.NET more comparable to the languages I used in then past. More readable also. The declaration of variables in VB is very clear. In C# I have to read the declarations twice sometimes. There is, however, one thing I do not like in VB, which is the assignment of variables. In my opinion there should be a difference between a variable assignment and a comparison. If I see a = b, then does this mean that we want to check if both variables are equal of is b assigned to a? The way Pascal (and some XBase languages) are dealing with this is better I think: a := b. It would be nice if MS would implement that in VB.NET.

  • Anonymous

    Seriously?? Fixed Length Arrays???
    Has anybody used this construct in the last decade? Even in .NET 1.1 they introduce the ArrayList which was far superior to fixed length arrays. Then along came generics…

    A number of your other arguments are about the IDE and NOT the language. Auto complete? That has nothing to do with the language. That is a lack of functionality with VS. Same is true with several other of your points.

  • Anonymous

    Right on!
    Thank you!

    I was going to write almost the same but you got ahead 🙂

    Reading the comments here, the most frequent explanation I hear is “your arguments are about the IDE and NOT the language”. Now, I’m asking:
    1. How many of them is NOT using the IDE? Yes, some points are about the IDE but, to be productive, you need a good integration with the IDE.
    2. And why are they blaming the way VS was written? There is a VB.Net team and a C# team and they choose how and what to integrate in the IDE. If the VB.Net IDE is clearly better, that is the merit of the VB.Net team.
    3. Since C# is the “de-facto” choice at M$ for so many years, how come they were not able to come up with a friendlier IDE? You know why? I start believing that they did NOT want to. It must be part of their masochistic coding mindset.

    A few bright minds at M$ declared about 2 years ago that the policy at M$ is to keep the two languages at par. It is very saddening to see the arrogance some C# zealots still show.

    Last year, I was very excited about the .Net Micro-Framework just to find exclusivist arrogant slurs on their forum against a poor man who only asked if they would support VB.Net. Even if VB.Net would be the lesser brother of C#, M$ is losing big time by allowing a bunch of ignorants to bully and alienate so many VB developers.

    But the problem I see lately is that M$ is lacking some straightness. They prefer going with the established “flow”. Gone are the days when they had the courage to bring VB and it looks like they jumped wagon and turning away from Silverlight, too.

    It is funny how superior many of those that dream in curly braces talk as if they hold the absolute truth … the reality is that the best things in .Net (such as Generics) are of Eiffel influence; another “verbose” language free of curly braces, what a coincidence. Bertrand Meyer, one of the best promoters of object orientation (to say the least) and the father of Eiffel was with Bill Gates on the scene to announce the launch of .Net. Yes, with C-like cloths (syntax) but with Eiffel know-how.

    And the series of “coincidences” goes on. While highly influential, Eiffel never gained the popularity it truly deserves. Why? It did not have a giant software company behind it. It is that simple. So, if that happened to Eiffel … let’s not kid ourselves.

    To those who found good value in VB, keep your chin up and be true to yourselves. Do not give in to the bullying of ignorants. Ask them to explain the miraculous advantages of C# and then critically judge what you heard from them (take a lot of salt). And make your voice heard. Ask for what YOU think is valuable. There is still a VB.Net team at M$ and it looks to me they are doing a pretty good job.

    Thanks again!

  • Victor Marques

    Software Development Services
    Nice post.

  • Anonymous

    HAha.. if it’s a joke then it’s funny.. 🙂 but reallly VB.net sucks big time!

  • Dan

    Lambda statements prompted me to switch to C# after 17 years as a visual basic programmer. I could not convert a particular simple C# lambda to VB. Life as a C# programmer is now easier. I no longer have to mentally convert all the C# code I find everywhere — that was always a pain. Loved the post though!

  • sgtahan

    Good Grief
    I use whatever the client pays me to use. Yesterday it was C#, today it’s VB.Net.

  • brass9

    Wow! This has got to be the stupidest article on this site. Your comparision of C# & VB operators (#4) clearly shows very little understanding of C#
    M$ has created a new product for your kind… it’s called lightswitch…
    I’m surprised the editors have allowed this ridiculous piece to be published on this otherwise high quality social blog at all…
    (Ed: Removed unnecessary ad-hominem attack)

  • knuckleswanny

    Well, I just took a fancy new job leading some vb guys around and I’ve been writing C# since beta 1. Haven’t even read any vb code since my early 20’s (a long time ago) and I just can’t stop typing that semi-colon at the end of every line in vb. Making me crazy. Funny article tho’

  • danielea

    I’m with sgtahan
    Why all the aggression? Reading through the responses I can almost tell who is a professional developer and who isn’t. I mean who cares what someone else’s preference is? Neither language is going anywhere and really at some point MS might just decide to merge the two. :D. Did that hurt someones feelings. You want me to help all you close minded people out a bit. Here it goes, The best language is the one that provides a service to your employer which ultimately puts food on your table and gas in your car so that you can drive your carcass to work. Have a great day!

  • Nekoyoubi

    You’re doing it wrong.
    I just created an account here simply to join the masses in mocking you for this ‘article’. People would most assuredly be voting this down even harder than they already are if you hadn’t come across so self-righteous that they thought you HAVE to know what you’re talking about. Sadly, they are mistaken.

    The majority of people that are agreeing with you are doing so because they as well, apparently, have not written in C#. I don’t prefer your language, but I used to live by it. Preference, however, is not the problem. Your blatant arrogance and ignorance of your subject matter is. With that in mind, like many others here, I’ve decided to respond to your ten.

    1. If when you type “da” (w/ capslock or not) you don’t already have your Intellisense sitting on DateOfBirth, then you’re doing it wrong; not VS/C#.

    2. If you think that testing values is supposed to be in a switch/select, you’re doing it wrong.

    3. Wait, you mean seeing a grid of events and handlers is worse than clicking over and over to see what handlers are attached to what events? Doing it wrong.

    4. Everyone else has covered it already, so I’ll just fall back on… you guessed it, you’re doing it wrong.

    5. Interesting, you typed all of that? In C#, I would have typed “prop{TAB}”. Hmm. Maybe you’re doing it wrong.

    6. Because an XNA game destined for XBox needs to have mortgage calculations baked in. Perhaps you’re wanting C# to join you in doing it wrong?

    7. When in Rome Yeah Tthis is way more understandable I don’t know what I was thinking Perhaps some closure’s not so bad in the rest of the world either, no So why so bad in a language Especially in a language you pride on being just like English Perhaps I’m doing it wrong Nope Pretty sure this would be easier to read with some ending punctuation Just saying

    8. You’re right, it makes much more sense to start the conversation off with an obvious but explicit qualifier: “Introduction. This is bob. He is a solicitor. See Bob run. Bob does it wrong.”

    9. I don’t remember who, but a famous VB programmer/author said something to the effect of “Visual BASIC makes it easy for bad programmers to write bad programs really, really fast.” If you’re wanting a language that promotes your bad coding practices by removing your accountability, then VB is certainly your language,but you should be aware of the fact that you’re doing it wrong.

    10. Congratulations VB, you made it to where you can easily overcome a limitation of a development challenge that has presented itself since List. If you’re re-dimensioning arrays instead of using a dynamically sized List, I hate to say it… but you’re doing it wrong.

    Oh, and about your analogy about matches is infantile, argumentative, and implausible.

  • TheAntiCol

    Gosh, I don’t even know where to start. Perhaps with your bio: You claim to be a consultant providing C# training. I am so sorry for whoever you have taught.

    C# may not be the epitome of programming languages but VB is even further from the ideal. The idea that the compiler is not strict and can just guess at what you want to do is aberrant. Without strictness, you can never reliably refactor your code. The only way to get it right, is to get it right first time. Over time any VB application degrades into an unmaintainable franken-application.

    Perhaps in your pseudo academic world of training consultancy your points make some sense, but for those of us who write very large, optimized, integrated applications the best choice is still C# (or perhaps Java, depending on your environment)

  • hongweb

    Excellent Rejoinder
    Great article, thx!

    I thinks some of the other posters take themselves or their preferred .NET language far too seriously.

    As I do both, I think they’re both great ’cause they both pay my rent!

    And, regardless of C# or VB, I still see crappy code, so having a preferred language does not save you from poor coding.

  • terroare

    Get real
    I will try to keep it short. I have a C, C++ and Java background, for me C# is like the dream come true language, for me the VB is a nightmare.
    I have worked with both languages, and I can say that in the end of the day you still use the same .NET Framework classes and methods, only the style differs.

  • mikeybmkb

    hmmm ?
    I love case sensitive class’s variables for making a clear diffrence between public and private , protected etc NAME = private Name = public simples its a Coding Guideline i use and stick to.

    switch statements ok il give you that its something im use to but i personally use if statements majority of time again what im use to.

    event handling c# this.Click += ?? if using visual studo auto types rest for you aswell takes care of auto creation ur next topic aswell
    also + side
    b1.Click+=new EventHandler(OnClick);
    b2.Click+=new EventHandler(OnClick);
    b3.Click+=new EventHandler(OnClick);

    wolla all handled by same event handler cuts down on code massively also means u can use he Sender object to make distinction

    symbols or words personal prefrence i like if(me == 0 && me != 2 || me <5 && me>3) {}

    and ; not line ender its a statment ender so you can do

    public string name {get{ return NAME};set{ NAME = value; EVENTNAMECHANGE;}}

    why spread that over 7 lines when 1 will do ?

    8 – Arguments and variables

    string name = "boo";
    wouldnt say this to you friends

    well u wouldnt say dim name as string = "boo" would you its programing not a conversation 😛

    9 being strong typed is good since gets you in to good habbits and force checking rather than getting errors at runtime

    10 like you said use lists

  • jalle007

    Signing every word you said !
    I am big fan of VB.NET and now forced to do my coding in C#.

    I hate it !!!

    and 11. point to add to your list:

    After all VB is coded with pure english words. today its almost as i you know to write english you know to write vb code.

  • clefranc

    This is wars for star
    VB.Net is like an old Jedi Master, trying to teach is young C# padawan humility and chastity of mind, but in the end, what can you do when you’re attracted to the dark side?

  • Pauço

    Oh my God! I don’t beleave so much ignorance !
    I desagree with all the author says, except the break in the switch/select.

    C# is o clone of Java wich is based in C++ wich is based in C.

    C has the break keyword, so C++, so Java so … C#

    In C and C++ there are good reasons for the "break" existence. In Java or C# thats no reason but the keyword stays for historical reasons and nothing more.

    Anyone can get 10 or 20 reasons to say that language X is better than Y. It’s just a matter of personal taste and no more than that.

    Look at this:


    FOR i=100 TO 1 STEP -1

    code here


    C / C++ / Java / C#

    for (i=100; i>=1; i–) {

    code here


    Why do we need the UGLY "STEP" and "NEXT" keywords?


    IF <condition> THEN


    END IF

    C / C++ / Java / C#

    if <condition> {



    Why do we need the UGLY "THEN" and "END IF" keywords?


    (more than one statment per line)

    astatment1 : statment2 : … : statmentN (colon separated

    (1 statment per line)


    C / C++ / Java / C#

    (more than one statment per line)

    astatment1 ; statment2 ; … ; statmentN (semicolon separated)

    (1 statment per line)


    (semicolon separated also – just one syntax)




    C / C++ / Java / C#

    int n;

    Why do we need "DIM" and "AS" keywords?



    DO WHILE <conditon>



    C / C++ / Java / C#

    while <condition> {



    Why do we need "DO" and "LOOP" keywords?

    These are only basic instructions. I don’t even waste time of advanced features.

    The most powerfull feature that any language can have are pionters. (yes, this kind of thins that most of so-called "developers" hate and are the most powerfull tool we have.

    C# has a very limited use of pointers, and Java just ignore thenm at all. But if you are a driver developer (software that controls hardware devices) you can survive without pointers, because you need to read/write in physical memory or IO addresses.

    In C++/CLI you have native pointers, native references, managed pointers, reference trackers, interior pointers, pinning pointer.

    But, as I’ve read in a book some years ago, C++ is not for kids. And C# is somekind of lightweight C++

  • Pauço

    Grammar error

    In my last post, when I say "you can survive without pointers"

    I mean

    "you CAN’T survive without pointers"

    Sorry, english is not my native language.

    And BTW, this is not only valid for drivers. Pointers are a MUST for operating system developing.

  • nemo66ro

    The War of the Roses
    Very good article, Andy. It is a good kick in the "C# code-monkeys" ass. VB world is the silent majority. Keep going on, "old soldiers never die" !

  • Natwoowoo

    A list of the worst features of VB
    So… you have listed most of the things about VB that make it poor compared to C# and then you put a title saying the reverse. I do not see the sense in that.

    You have pointed out most of the sloppy features of VB and attempted to make them into a positive. You have affirmed with this article why people use C# over VB.

    If there is a function missing in C# that you would like to use often then make one.

    I find that the C language has the most sensible and logical syntax of all, hence the reason why it has been mimicked in so many other languages. It is succinct and to the point. For example, you universally end all statements in the same way without having to memorise different endings.

    I can see how the childish way in which VB syntax is structured can help new programmers learn the ropes but I find it inefficient and filled with unnecessary items.

    Why do I have to put "then" in an if statement? What else can it be? "Maybe", "Sometimes", "Probably"? I am surprised they have not included the keywords "Please" and "Thankyou".

    I don’t doubt the professional status of people who use the language. It is used by many professional programmers; but I just don’t like it. It is not always about snobbery, many people just prefer the C syntax.

  • Kelvysb

    12 – Inline XML and HTML
    Don’t forget the amazing inline XML and HTML, that doesn’t exists in C#.

    xmlDocument = <VB>Is better!</VB>

  • Kelvysb

    12 – Inline XML and HTML
    Don’t forget the amazing inline XML and HTML, that doesn’t exists in C#.

    xmlDocument = <VB>Is better!</VB>

  • ManOguaR

    Very bad information here. Nosense on every stated reason.
    1 – as someone says, you can use automatic properties:

    public string Name {get; set;}

    and also you can write the code correctly for field access:

    private string name = null;
    public string Name
    get{ return name; }
    set{ name = value; }

    Maybe your code is only few lines every time, but when you are working with extensive applications, you pray for a case sensitive language.

    Accidentally caps lock on is truly a beginner issue (are you watching what you do? That screen and keyboard are in front of you).

    You said that "It doesn’t matter if you disagree with everything else in this article: case-sensitivity alone is sufficient reason to ditch C#!"

    I think you never code more tan few lines… Because with a million lines in a class you are really in trouble without case-sensitive language

    2 – SWITCH
    Let’s try to understand the diference between Select and switch:

    VB’s select is compiled as nested if…then clauses.

    C#’s switch is a true C++, low-level switch, that’s why you need break as keyword: for code O-P-T-I-M-I-Z-A-T-I-O-N

    3 – Event-Handling

    you can use += and press tab to créate any event handler, so you can do this visually as said, but if you rename anything, you can refactor all code references with only two clicks.


    VERY WRONG INFORMATION. I recommend you to read some more before write that stupid opinions:

    to test if two conditions are both true, you use a single ‘&’

    to test if two conditions are true, you use ‘&&’ this checks for the first condition and if it is true, checks for the second. Using ‘&&’ the second check is not performed if the first one is false. Very useful for cases like:

    if (anystring != null && anystring.Length > 0)

    The same are aplicable to ‘|’ and ‘||’

    Also the symbol ‘!’ is used to negate a value, not to perform a check if a condition is not true:

    bool aBoolean = false;
    aBoolean = !aBoolean; //now aBoolean’s value is true

    The symbol ‘+’ used in strings is for concatenate, as we are using ‘&’ and ‘&&’ for logical operations

    The symbol ‘==’ is used for comparison because ‘=’ is used for assignation. You can use ‘=’ inside any conditional statement allowing for more complexity inside a single line (inline):

    while(((value = newValue) + 5) == 5)


    string PersonName { get; set; }

    press tab and you need no more to write with automatic properties.

    6 – Supported functions??????
    Why in the name of the lord i have to include unuseful code on my DirectX application??

    And also you can String.IsNumber(…

    7 – Semi colon?

    try that:
    public void some(
    string val1,
    int my =

    and no need semicolons

    8 – Arguments and variables

    You never write anything that is not visual basic isn’t it? Because C, C++, C#, Java do things same way, REDUCING KEYTYPES BY 7 KEY PRESS ON EVERY VARIABLE DECLARATION. And it’s a lot of time if you are coding 10 million lines

    9 – You must manage any type conversions because when you use C# you are creating enums as low level types, like C++, instead of overloading memory with integer to string converion tables

    10 – Redimensioning arrays:

    string[] party = new string[2];

    party[0] = "Me";
    party[1] = "You";

    party = new string[3] {party[0], party[1], "Him"};

    and so more…


    C# can be compiled in UNSAFE MODE… Can you use pointers in VB at all?

  • Khaled Kokah

    Both languages are good
    Coding in C# is more "native", if you are a good C# coder, then you’ll easily code with other languages like C++,Java,JavaScript, .. etc. But actually VB.Net is much easier,simple and more quickly.
    However, I think the most important thing is to get the job done perfectly using any language.

    Great article and I loved that "What are you waiting for, all you C# code-monkeys?", that’s funny 🙂

  • CSharpVisitor

    This is the Stupidest comparison i read EVER
    I register in this website for one reason only, to comment on this stupid post, I’m a software developer for more than 8 years , started with VB6 then VB.net and last 5 years with C#, the comparison is very wrong and VB.net is for non-confident developers who afraid to move to C#, after i try both i have no doubt that VB.net is a trash compared to C#, VB.net is for Academics who need to learn what is programming, C# is the real world Syntax, any beginner who read this will make a wrong choice to start his career ,
    No Monkeys between C# Developers nor VB.net, both can get the job done, but C# is more friendly syntax after you get used to it, VB FOR BEGINNERS WHO WANT THE CODE LOOKS LIKE A CHILDREN STORIES 🙂

  • stevo5800

    Worst Article I’ve read today!
    Wish articles would have to be reviewed by experts before people post dumb things like this. Not saying anything bad about VB but saying use this language and not this one is not the correct answer. Most of your arguments on why VB is better are invalid. Things like auto correcting witch is done by the IDE not the language it self. I’ve mostly programmed in C/C++, Objective C, C#, Python… and VB has very different syntax from all of these. Making it a harder transition from VB to C let say vs C to VB or even C# to VB. Really though both languages get the job done, heck some experts even prefer C++ with .NET. Anyways C# is a fairly easy language to use and does everything VB does and more so saying VB is better for C# always is a bunch of BS. REad ManOguaR he shows how invalid your arguments are

  • kploader

    This article seems to have touched a nerve
    We’ve all spent various amounts of time writing countless lines of code, educating ourselves, and reading articles like this one. Based on the responses, it would seem that one’s programming language preference is in some ways held similarly to their religious or political preferences.

    One of the reasons I do like this article is because in my development travels, I have run into more dogmatic C# folks than VB folks, much like the Apple users that "look down" at the Windows users, or those living in California who see the other 49 states as "unenlightened".

    BTW: Not describing all, just most.

    This article seems to have touched a nerve, and to my C# friends, I would say you should have nothing to worry about. Knowing the language is important to the developer, but for the consumer, it just needs to work, and that should be threshold.

  • kploader

    This article seems to have touched a nerve
    We’ve all spent various amounts of time writing countless lines of code, educating ourselves, and reading articles like this one. Based on the responses, it would seem that one’s programming language preference is in some ways held similarly to their religious or political preferences.

    One of the reasons I do like this article is because in my development travels, I have run into more dogmatic C# folks than VB folks, much like the Apple users that "look down" at the Windows users, or those living in California who see the other 49 states as "unenlightened".

    BTW: Not describing all, just most.

    This article seems to have touched a nerve, and to my C# friends, I would say you should have nothing to worry about. Knowing the language is important to the developer, but for the consumer, it just needs to work, and that should be threshold.

  • kploader

    This article seems to have touched a nerve
    We’ve all spent various amounts of time writing countless lines of code, educating ourselves, and reading articles like this one. Based on the responses, it would seem that one’s programming language preference is in some ways held similarly to their religious or political preferences.

    One of the reasons I do like this article is because in my development travels, I have run into more dogmatic C# folks than VB folks, much like the Apple users that "look down" at the Windows users, or those living in California who see the other 49 states as "unenlightened".

    BTW: Not describing all, just most.

    This article seems to have touched a nerve, and to my C# friends, I would say you should have nothing to worry about. Knowing the language is important to the developer, but for the consumer, it just needs to work, and that should be threshold.

  • Theophilus

    VB vs C#
    Ive been a system engineer and programer since 1969, programing in virtually every language. I speak 2 foreign languages fluently living all over the world. My major point would be a simple statment, "beauty is in the eye of the beholder". Visual Studio compiles code to the same intermediate stage, with maybe some small differences, so therefore almost all comments reflect the personal desires of the programer. If it makes you more effective to write code in either language, please do so. Peace!

  • ericcire

    Re: #8
    When I’m declaring a variable, I know what type of variable I want before I think of what to call it. Therefore, the C# syntax is more natural for me.

    FWIW, I prefer VB.

  • drwho

    VB.NET rules
    C# people always say case sensitive is more advantage than non-sensitive language. But what VB.NET code does that made the code clearer than C#. Stop confusion between variables ex: name, Name, nAme, NAme, naMe, nAMe, NAMe …etc

    why a property like this in C#: public string Name
    and VB.NET like this: Public Property Name() As String
    Clearly VB.NET is easier to understand when you are reading the code.

  • HRG

    there is one more reason.
    the ‘OPTIONAL’ keyword in VB.NET which does not exist in C# .

    in VB.NET you can have Optional parameteres in Functions or subroutines which C# does not support it.
    I myself have used it many times!

    on the other hand once I was using C# for image proccessing when I wanted to convert my codes to VB.net I found out there were no equivalent for ‘unsafe’ command in vb.net

    First I was so mad of VB.net cause I had to comletely rewrite so many function with help of LockBits method of bitmap Object , Marshal.Copy for copying pixles in arrays, and yes!, define arrays and so on.

    but later on, when I was going to use the same funtion in ASP.NET i was not allowed to use code written in C#, cause they were not safe and IIS would`nt allow you to run such codes, and I again appreciated VB.net in spite of all those trouble.

  • BeStelios

    I just created an account just to say that VB makes me wanna puke too..
    Not more than Lisp but it’s getting close..

  • BeStelios

    Case Sensitive
    Additional i have to say that if you can’t write

    _Case_SeNsiTi_ve then stop coding…

  • snpcrkpoprc

    Sad fact
    You can produce crap elegantly in any language … and most software development is crap … like golf there are tons of hackers and very few pros … and a pro can write in anything … true software development is an art form …

  • aralmo

    Can’t be true.
    I am a .Net programmer c# and vb.net, i feel more comfortable with c# and i think that’s the language everyone should use to learn .net, after that use wathever you feel more comfortable with.
    Why i say that? because c# forces you to know what are you doing, while vb sometimes asumes you know what are you doing (like casting a string to an int and living happy or using a dynamic array wich is not).

    1. Did you ever listened about code standards? those things are used by professional programmers, it does not matter if you use vb c# or f#. If you are coding professionally you should use a common casing standard.

    2. You can avoid the requirement of the break; and use the switch like a group of label gotos using a #pragma. That’s all.

    3. Very well, now how do you access the eventhandler array? you can’t. Even in vb.net i only use this on a fast written application.

    4. Err stupid comment? & binary operator && comparision operator. Now write an IF clause that contains conditions and flagged enumerals in vb.net; what does that and means? comparision? binary operator? …

    5. To start with i must say i don’t see why someone wants a writeonly property, use a method dude. But that’s not the point, the complete declaration of the property in c# is shorter than the shortcut for vb.net

    6. .Net has the same functions, methods and classes, doesn’t matter what language you use. That IsNumeric maps to a <T>.TryParse function, so thats wrong.
    Anyway in you need 2 calls IsNumeric(textvar) and then do the cast dim a as int = textvar using those methods. Why not if(Int.TryParse(string,out int)) dothestuff?

    7. You don’t need an underscore in c# because closures are easier to see even when reading fast but you can have multiple lines.

    8. Won’t comment on this, thats only the flavour.

    9. Ok, now i realise, you’ve never worked as a coder. C# forces you to define explicit casts to do that so if you want to code like crap you first must to know what are you doing.

    10. You are always copying the array, it doesn’t matter if its vb or c#. Dynamically sized arrays aren’t part of the CLR that’s another handy shortcut of vb that should not be available to un experienced programmers.


    Those who talk about Vb being the future; tellme ruby style languages being the future, maybe rads but not BASIC, thats just a learning language.

    You should not be training anyone…

  • alexsarafn

    AWESOME ARTICLE. This was written by a professional that cares about delivering the right product to his customers. Not a narrow minded programmer.

    BIG FAN.

  • Djacob

    Both languages have same capabilities
    VB.NET is easy on the programmer; which is what you want in a language. That is the language of the apps I sell. However, when I sell my programming skills, I find it much easier and with better returns to sell C#.

    From an employer perspective, it is easier to find C# programmers than it is to find VB.NET programmers. Besides most corporate programming teams have standardized on C# so they will only recruit C# programmers. I think both these developments are cause and effect, interchangeably.

    Bottom line, save yourself some stomach acid by opting for VB.NET if you sell programming through your own products. Opt for C# under all other circumstances.

  • rrvenki

    Case sensitivity issue – Here is a scenario
    Create a webservice in C# which has Email as string, email as property. It works fine…

    Use Webservicetester from codeplex.com. Change the code generator in it from C# to VB. Now VB compiler will says Keyword Email is already declared in the client code. You go nowhere. Use any other language you will get same issue. So case sensitivity a feature in C# is pain in coexistense.

  • aralmo

    rrvenki-> not a problem of casing.
    rrvenki if you are having this problem probably you have both declared as public and as properties.
    I am almost shure that webservicetester uses reflection and reads only public Properties, not private fields.
    Won’t happen if your code is solid.

    I’m tired of people that only knows 1 language and have no clue of what architecture is and comes here to demonstrate how that particular language is the best.

  • achurchill7534

    Old tymers
    It’s always funny hearing C# people talk about Vb.net. Most of these people never even really looked at Vb past vb 6. So what theyy think is its the same vb 6. Hate to tell you C# people, if you cant read both languages then you are programming illiterate. I can do code in VB a lot faster sometimes then in C#. Its about what you can do and how fast. So when you try to come up a reason for why Vb is an amateur language, then you better thin again. Vb.net is just as powerful as C#. THEY ARE THE SAME BASIC LANGUAGE. Man people are stuck in the past. Learn both languages.

  • aralmo

    Old tymers…
    It’s always funny hearing vb guys assuming that everyone that prefers c# is because they don’t know vb.net and bla bla and then always end up with, vb is better in productivity and the CLR is the same.
    Say you like the syntax, say you can’t understand C# and VB is more natural to you, but don’t talk about things just because you have listened to them before they don’t need to be true.

  • snetzky

    The technijihadists are out in force
    Amazing how any discussion of technology brings out the technijihadists (my own term) in force to declare that all other technologies (languages, operating systems, platforms) are unclean and must be purged in an auto-de-fe! (yes, I’m mixing metaphors, but the Inquisition and Al-Queda have a lot in common).

    The arguments still come down to "stop liking what I don’t like!" which is not only infantile, but gets in the way of problem solving and collaboration, which is often difficult with programmers anyway, given that a lot of them are "strong" personalities.

    I’ve been coding for 12 years or so, and frankly my prejudice will always lean toward getting something done rather than making something elegant and complicated.

    If it’s hard to code then it’s going to be hard to maintain, for the most part, because not only do you have to figure out what the hell the last guy was doing, but you also have to figure out why they were doing it the way they did.

    Not having to parse through cryptic syntax (which if you show the average layman C# code and VB.net code and ask them what’s going on, I’m guessing VB.Net code will be more intelligible) is a bonus in this case.

    Always write for the next poor schmuck, because most likely it’s going to be you.

  • TheGameSquid

    In my opinion, these are very weak points
    Okay, I’m not a professional programmer (at all) and neither do I have very deep knowledge of both the .NET platform or C# and VB.Net, but a lot of your arguments seems pretty random to me.

    Let’s go over them:

    1) Ok, so here you say that in the even that your CAPS LOCK is on, the compiler shouldn’t mind? Has it occurred to you that:
    A) Proper casing and the use of good naming conventions can drastically improve readability? The reason why you would name a field "dateOfBirth" and the property "DateOfBirth" is because that way you instantly KNOW whether you are talking about one or the other.
    B) You actually WANT to compiler to be OK with the fact that you’re not using proper naming conventions? How about the person who comes after you that has to plow through you code? You think he would like to see how you use completely random casing everywhere? It seems to me like you’re in DIRE need of case sensitive language to teach you how to write clean code.

    A) If you’re going to use the relational operators in a switch statement, I’m not entirely sure what the use of the switch statement is any longer. You’re saying you want the switch statement to EXACTLY like the If… If Else… Else statement. They both have different uses. The switch is used for fast value-based comparisons.
    B) Yes, you obviously need to write the "break;" statement because "falling through" a switch statement can actually be an interesting programming technique (though not one I’d recommend to use).

    3) Erm… How about just MANUALLY subscribing to the event in your form? You’re complaining that AUTOMATIC way isn’t good enough for you. Okay, do it manually then. Write actual code. Oh, and if you want to change the name, VS has some very handy tools for refactoring code, and even specifically for name changes. Sounds to me like you just have no idea what’s happening under the hood.

    4) These "stupid symbols" are used in a BUNCH of other languages, and are extremely standard. Plus, what INSANE language uses the EXACT SAME operator for assignment as for equivalancy checking (‘=’ as opposed to ‘==’). Moreover, there is no equivalent in VB.Net (correct me if I’m wrong here) for ‘&&’ and ‘&’, so there’s no proper way for me to tell it to short-circuit or not.

    5) Ever heard of code-snippets?

    6) All primitive types in C# support the .TryParse () method. So does System.Int32, or System.Double, or whatever.

    7) I suppose this indeed is a matter of personal preference. For me, this makes it very easy to skim over a piece of code and see the individual statements. I find that it makes it very clear that I’m saying "Do this. Do that. Do this. Then do this." whereas in other languages that don’t use terminators I just see endless lines of text.

    8) It’s odd that you should mention this because most of your previous arguments are based around usability and ease of use. The way you declare variables and their types in VB.Net is WAY too long IMO. Both the "Dim" and "As" keyword are COMPLETELY useless here and serve no added pupose. Once again, just my opinion.

    9) The compiler does not know whether you’re a responsible person or you know what you’re doing. Explicit casting let’s you tell the compiler that you know what you’re doing. This is a good thing. You should not be casting values without realizing what you’re doing. I especially like the way C# lets you control the you’re being notified for this, like the use of the "checked" and "unchecked" keyword so you can control checks for overflow/underflow.
    Also, in the case of the enum example you’re giving, you do realize that the base type of an enum does not have to be a System.Int32? When using enums defined by other people, explicit casting makes you more aware of the way they have been defined.

    10) I sincerely doubt anyone would have told you that you "should be using lists instead of arrays". I think it was MUCH MORE likely that they would have told you that you "should not be using dynamically sized arrays". I think (once again, correct me if I’m wrong) that they were removed because they were bad practice and were seriously damaging performance. Use of generics is encouraged instead.

    Please do point out where I used incorrect information. As I said, I am NOT a professional.

  • me_pollack

    lazy lazy programmer
    What I see is an undisciplined lazy self taught programmer.

    Vb is a pile of feces and no professionally educated software developer should ever enjoy using it.

  • Vulturica

    I am a professional programmer and I agree
    If you mean that Visual Basic 6 is better than C or C++, then you’re right, it is. Believe it or not, there are programming languages made in Visual Basic 6 (VB6).
    This language was and still is so popular that Microsoft has no choice than to support it.
    You believe that C++ or VC++ is the most popular language? try again! What shocked me at this language it is his ability to work with the assembly language.
    Pay very close attention on this article:
    So, in a recent announcement, VB6 is supported by Microsoft many years to come.

  • aralmo

    Vulturica you have to be kiddin
    You have to be kidding me. vb6 better than c++? really? vb6 is the slowest shit i’ve ever compiled.(period)
    Half way between procedural and oop taking the worst of the two…
    Now i understand the name of this page simple talk.

  • Vulturica

    If you desire, we can make a bet
    If you desire, we can make a bet (up to 8000$): I can do ANY algorithm written in VB6 (in combination with machine code) to run faster than the same algorithm written in C++. VB6 seems simple but it is not so. Most programmers do not know enough about VB6 and talk without knowing.

  • aralmo

    I don’t bet with people i don’t know, but we can try if you want…
    I don’t bet money with people i don’t know but you should take care of your money…

    Do you know that inline-assembler is part of visual studio? that means that it is available on c, c++, VB6 and c++ .Net. So "I can do ANY algorithm written in VB6 (in combination with machine code) to run faster than the same algorithm written in C++" no, you can’t, at most they will be exactly the same (only while executing the assembly part, it will take more time in VB to find the memory pointer to that ummm, call it delegate).

    Anyway that’s way out of the discussion. You want to demonstrate that vb6 is as fast as c++ because you can code assembler on it… yeah, ok… Why don’t you just code in assembler then? what’s the point of having a high level language for that?

    Don’t misunderstand me, i can see the use for having some critical algorithms written in assembler (not nowadays, better to make it multi-threaded).

    If you want to try, we can both code a simple CRUD application for two or three entities that does some calculation with them and set a total development time of about 1-2H.

    I’ll do it in c# (yes, even a managed language is faster), not even c++ or c and i bet it will run faster than in vb.

  • aralmo

    BTW Vulturica
    BTW, that’s totally out of the scope of this article as it’s talking about VB.Net and C# not VB6 vs C++, even the author of this article won’t go this far, hehehe.

  • aralmo

    Response: Henk Simmelink
    That won’t even compile in c#…

    var is not a variant type like in VB (and having option explicit off in VB is like racing your bike without helmet) it’s just syntactic sugar, in pre-compilation it changes to int a = 0;

    Read the warnings on C# and you will see something like "a would never be null" as integer is not a nullable type.

  • Vulturica

    The experience of the programmer makes an enormous difference.
    Dear aralmo,

    Thanks for the replay. I’ve already won a bet like this. A guy from France (now a friend of mine) also put a bet with me back in 2009. We agreed to make a brute force engine. He did it in VC++ and I in VB6, and I won the bet.

    If you look on PSC, you will see phenomenal codes (in the advanced section), all programmed in VB6 and many of them designed to be faster than those programmed in VC++. If you look there, you will totally change your mind about Visual Basic 6. There you will also find several assembly compilers designed in VB6.

    Again, the experience of the programmer with the language in question makes an enormous difference.

  • achurchill7534

    Lazy Programming
    Sorry just because you program in VB doesn’t mean your a lazy programmer. I have seen C++ C# code that is plain crazy. Your argument really shows how much you know about programming. If you argument is between the {} and the Function End Function then you must really not know what your talking about. I get the feeling a lot of these posters on this thread don’t work with both. I think both of them are good for certain things. If you rid off VB then your a fool.

  • snetzky

    In the words of the Great William Shatner….
    Get a Life! Will you people?!

    You’ve taken a perfectly enjoyable article about why someone might very reasonably prefer vb.net to C# and turned it into a colossal waste of time!

    As far as performance goes, if the difference is less than a second, most users aren’t going to really know the difference. It’s like movies that put an insane amount of detail into background scenery that no one really pays any attention to.

    Frankly if a user can’t tell the difference, then it probably doesn’t make a lot of sense to worry about it all that much, at least to my point of view.

    Getting all tied up in knots because someone uses or prefers a different tool than you do is nothing more than mental mas…..well you know what I mean.

  • rmcmullan

    } /* end do*/ } /* end if*/ } /* end try*/ } /* end Class */
    I think you missed one of the best features of the language and the main reason I prefer VB.Net to C derivative languages — it’s those darn curly braces. They’re used for everything from try blocks to loops to scoping structures to logic constructs (if, case), function definitions. Soooo many {}’s.

    After a while, if you’re writing a nest of logic in a C derivative language, with looping and logic and try blocks there’s a lump of code which is line after line of closing "}" and it’s pretty hard to match them up. One of the helpful style guidelines for C based languages is to leave a comment after a closing "}" to say what it is closing.

    VB has wisely gone another way. An "End If" ends an if statement, an "End Catch" a catch block, an "End Do" a do loop, a "Next" to end a for loop "End Class" to end a class, "End Sub" for a sub and so on. Much better readability and way less mismatched parenthesis.

    There are a lot of languages that are based on the K&R version of C. The K&R version did not have an elseif, an omissions which some of the newer derivatives fixed, others did not. But VB has a pretty nice one. It also has the break and continue and exit for loops. And these are programming constructs that are very basic. Every language should support the basics and make coding easy.

  • v008370

    A man after my own heart
    There’s nothing annoys me more than, in 2013, having to explain to a student what a { means. Or a semicolon. It makes no practical sense and keeps software development firmly in the geek camp in the corner. Everyone can program but why do we make it as inaccessible as possible to the beginner?

  • EenOog

    EX VB developer
    Coming from long vb 4,5,6 / VB.Net background i really have evolved with my migration to c# and will not switch back for anything. I too was very anti c# until i dug deeper and realised that i was just doing my self an injustice by not switching.

  • v008370

    That’s not a compelling reason in itself why c# is better though – is there actually ANYTHING in the c# syntax that is more intuitive that VB?

  • Vulturica

    Current VB6, ASM and C sharp programmer
    EenOog, there are C and C++ programming languages ​​made ​​in Visual Basic 6.0! Did you know that?

  • Vulturica

    Current VB6, ASM and C sharp programmer
    EenOog, there are C and C++ programming languages ​​made ​​in Visual Basic 6.0! Did you know that?

  • Vulturica

    Current VB6, ASM and C sharp programmer
    For example there are two that I know for sure: Libry and Visio compilers, made in Visual Basic 6.0, compile directly to machine code. The strange thing is that these languages can code for Linux too !

  • rmcmullan

    C# Stockholm Syndrome
    Yes, EnnOog, unless you can tell us why the C# syntax is better, we can safely assume you are just used to it. Or suffering from C# Stockholm Syndrome. Most mothers love all their children, even the ugly ones.

  • flargle

    C# training from you?
    Well, thanks for the recommendation against your (reluctant) C# training, Andy.

    Excellent demonstration of missing the point.

  • plurple

    Rat’s nest of logic
    @rmcmullan If, in an object-oriented language, you’re writing a "nest of logic" so deeply nested that you’re having trouble picking out one brace from another, you’re doing it wrong.

  • rmcmullan

    McCabe Cyclomatic Complexity Index and {} Nesting
    Plurple: I disagree, because {} is used for EVERYTHING. If you have a loop, its enclosed in {}. That Loop is probably inside a function which is enclosed in {}. That function (in an OO language) is inside a class enclosed in {}. So I’me already three deep on my first loop. Add some branching and catching. By keeping the McCabe cyclomatic complexity index less than 10 logic constructs per function and I can still add another 9 levels.

  • AlgorithMan

    VB is a language BY tinkerers FOR tinkerers
    Nearly all of your "arguments" are that you personally LIKE the syntax more. These are not reasons, these are opinions.

    I for one prefer case-sensitive languages and also strongly-typed languages, because you "need" case-insensitivity and weak-typing only when you botch together half assed bullshit code, that decent QA divisions wouldn’t even allow.
    To write QUALITY code, you have to get your shit together. IMHO you shouldn’t even be a programmer at all, if you can’t be bothered to keep your variable names and types straight.

    And also – as someone who knows compiler programming – I have to say that the design of the BASIC language is very lazy. It is clearly designed towards ease of writing a compiler – not towards ease of writing programs in it: the language is LL(0), you can compile it without lookahead, because the programmer always has to tell it "now comes a function", "now comes a call to a function", etc.

  • v008370

    Strongly typed
    Are you saying VB isn’t strongly typed? Why do you need case sensitivity to write quality code? I’m genuinely curious here.

  • snetzky

    Writing quality code
    If you know how to write good code, you’ll write good code. If you need the IDE to prevent you from writing bad code, then there’s a bigger problem there than the language you’re using.

    A poor craftsman blames his tools.

  • v008370

    Strongly typed
    Are you saying VB isn’t strongly typed? Why do you need case sensitivity to write quality code? I’m genuinely curious here.

  • AlgorithMan

    Some clarification
    Good developers consistently use fixed naming conventions and therefore don’t need case insensitivity.

    VB might give you the ability to use strong typing, but from all VB code that I have seen, about 95% of the variables were declared without a type. C# has var and C++ now has auto, but from all C# / C++ codes I have seen, at least 99% declared their types properly.

    IMHO, getting your data structures right is the most important part of development today. Programming today is so much about proper translation between (semantic) informations and memory layouts…
    So much is taken care of by todays frameworks… Really, my ex employer had 100-200 developers for doing what I can do alone today.

    Okay – today, VB is basically C# with a slightly different syntax, so it makes hardly any difference which language you use. BUT for too long VB had no multithreading (this atrocious DoMessages!), no classes, then no inheritance etc. and this was well in the 2000’s, when OOP had already become all the rage. VB was a toy for script kiddies. Good developers would make an arc around it (I’d rather kill myself than use VB6 again!) so why would you bother to switch now (since as I said, it hardly makes a difference today and you’d be ridiculed, since VB still has the terrible reputation)?

    VB used to be a language for tinkerers and it gives good developers no reason to switch today. Therefore, (IMHO) it will stay a language for tinkerers.

    Btw. IsNumeric only tells you whether a string consists of digits (and sign, decimal separator etc). It doesn’t tell you the range. You have no guarantee that you can store the corresponding number in a 16 bit integer, 32 bit integer etc… In C# you have Int16.TryParse, Int32.TryParse etc. – This is more type safe.

  • snpcrkpoprc

    Interesting topic ..
    I have led teams developing software in VB6, VB.NET, C#, C++,etc over the last 20+ years. One of these was a POS system for Amoco Oil written in VB6/C++/Access. Languages do not matter. Talent does. Some of the best C developers had absolutely no people skills.

    The recruiting process is flawed today with an emphasis on skills tests for which all the answers can be googled. People should be hiring the best software engineers. There are no critical differences between C# and VB as the syntax can be learned in days. I think most C# programmers feel they are special. Ridiculous.


    I do not know of any serious VB developer who does not strongly type anything but throw away code.

    Most of the projects I am involved in are best described as Extreme Programming.

  • achurchill7534

    Why stick to one?
    snpcrkpoprc is totally right. C# somehow think C# is so much better. You can do the same things in C# as in VB.net. You guys that call Vb.net a trash language obviously have not coded in Vb for long periods of time. My guess is that you have worked with Vb coders and that’s your view on Vb. VB.Net and C# syntax, in my opinion, is not too hard to go between them. Use both of them. Some of C# features help you code faster, some of Vb features help you code faster. Use all the tools available to you.

  • AlgorithMan

    Again – TODAY, there is no real difference between VB and C# – but every good coder I know still passionately hates VB for how bad it was 10 years ago.

    And well – even if they declare types – in my experience, its all global strings and integers. VB coders tend to (again: judging from my SUBJECTIVE experience) program too procedurally / pseudo OOP.
    I have NEVER seen a VB code that I would call "good". Twisted control flow, pushing data around in global variables for the next timer event to pick up – ignoring mutual exclusion problems, ignoring performance, everything in strings and integers instead of designated composite types, dumb handling of different decimal separators in different locales etc. etc. etc.

    Some people here seem like they would accept these things as long as the job gets done, but you get so much trouble in the long run because of software erosion (an effect only >real< experts know how to deal with). The time you need to implement changes increases exponentially and that kills your productivity and drives you out of business in the long run.
    My ex employer has been market leader in his business segment, but he didn’t see these problems and today they are fighting bankruptcy (my guess is that bankruptcy will win soon).

  • snetzky

    Nothing like overgeneralizing
    Overgeneralizing about vb programmers based on code that was written in VB6 or VBA is like claiming that all GM products are crap because you owned a Chevy Nova back in the day. (The readers older than 40 will know what I’m talking about)

    You can write crappy code in any language. If a developer is using global variables all over the place or not typing the variables he is using then he probably shouldn’t be a developer or should at least be given a remedial course on variable scope and why not typing variables is a bad idea.

    Blaming it on the language is a waste of time. I use VB.Net because it’s less of a leap from VBA to VB.net than from VBA to C#. That doesn’t make me a bad programmer, and I’ve written code in C#, but I am still more comfortable with using VB right now. I plan to pick up C# as I go, but I’d rather focus on learning the .net framework right now than fighting a new syntax on top of it.

  • snpcrkpoprc

    Everything has been said …
    The difference between vb programmers and c# programmers is what is being discussed. And while one may argue that there is what’s the point? You want to banish and mistreat vb programmers? Starting to sound like racism sexism etc. Vb programmers are probably more interested in the business side while c# folks are more interested in pure tech side. BOTH are needed for most projects. And both have made very successful software and total and complete disasters.

    Software development should be looked on as an art form.

  • snpcrkpoprc

    Everything has been said …
    The difference between vb programmers and c# programmers is what is being discussed. And while one may argue that there is what’s the point? You want to banish and mistreat vb programmers? Starting to sound like racism sexism etc. Vb programmers are probably more interested in the business side while c# folks are more interested in pure tech side. BOTH are needed for most projects. And both have made very successful software and total and complete disasters.

    Software development should be looked on as an art form.

  • snpcrkpoprc

    Everything has been said …
    The difference between vb programmers and c# programmers is what is being discussed. And while one may argue that there is what’s the point? You want to banish and mistreat vb programmers? Starting to sound like racism sexism etc. Vb programmers are probably more interested in the business side while c# folks are more interested in pure tech side. BOTH are needed for most projects. And both have made very successful software and total and complete disasters.

    Software development should be looked on as an art form.

  • achurchill7534

    Learn about as many technologies as possible

    To say VB programmers use global variables is you view on the programmer. I don’t think the VB language encourages the use of global variables all the time. To say you have never seen Vb code that would be called "good", obviously you don’t work with VB or you work with amateur programmers.
    You can’t tell me the place you work isn’t on a time and money budget and they allow you the time needed for a project. You must have the best project manager in the world. Sometimes, and that goes for any language and any project, they just want the job done. Are you saying every project you worked on at this magical place allows you enough time to make perfect code? I have a feeling most people posting on this post is stuck in their ways and don’t tend to find out about different technologies. To me that sounds insane.

  • Vulturica

    Beware of C++ stupidity syndrome
    AlgorithMan, you do not know what you’re talking about! The best codes (beter than C++ or Java) are made ​​in VB (I am speaking only of VB6 and not of VB.NET). My students are surprised by programs made ​​in VB6. Their expression is normally: oauuuuuuu (and they are C++ or Java programmers). They find it very, very difficult to make a similar app (made in VB6) in C++. So, AlgorithMan, to quote you: rather kill yourself ! …

  • foofy

    Oh dear deer, author prefers VB syntax over C# and is strongly opinionated about that, big deal?
    Instead of trying to come up with arguments why he is wrong or why C# sux, just learn F# or any other functional language, if courage allows to step out of m$ bubble.

    (it’s sad that this article comes up on google in first pages and gets used as hard truth elsewhere)

  • TomasRG

    C-like languages
    C#, like C, have many issues

    -Curly Braces are messy (Much more important is read code than write it)

    -Start counting by 0, the first element of a array or other structures is the element 0 (completely stupid and counter intuitive)

  • AlgorithMan

    When you do your indenting properly, then curly braces are no less clear than begin and end, but faster to type (i.e. superior).

    0 is the smallest (unsigned) integer and thus a valid parameter for operator[], so why should arrays start at 1? If they started at 1, you could not protect them against out-of-bounds access by taking the index mod length. Technically, you would have to subtract 1 from the index every time you access it (because of rices theorem, this cannot be optimized away) so your programs get slower for no reason except "In kindergarten we started counting at 1".

  • TomasRG

    All Curly Braces are equals
    All End are not equal, End Sub, End If, End Anything…but all Curly Braces are the same }}}}}} There is not any difference between the end of a block or a method or anything. On the other hand I don’t need a { curly brace to start a method or anything. Should be enough the Keyword or the declaration and/or the signature in order to compiler understand this a new start point. The starting { is simply B.S.

  • TomasRG

    Yes as Kindergarten
    Protect or not protect them against out-of-bounds is a language implementation issue, not matter where some data type start. Starting U Integer by 0 a only a convention. 0 mean empty, nothing. 0 is not a positive integer at all because 0 is not bigger than 0. in fact in the West World there was not 0 until Arabic borrowed it from Indian mathematicians. C# compiler should implement it correctly in order we can start to count as in Kindergarten.

  • AlgorithMan

    VB burdens you with a lot more nonsense – for example you have to write "function" or "sub" in front of functions and subroutines and "gosub" or "call" if you want to call a subroutine or function "dim" when you declare a variable etc… To someone who has studied compiler construction, it is obvious that this is only there to turn the grammar into an LL(1) grammar, which makes the language parsable with a recursive-descent parser. In other words – John G. Kemeny and Thomas E. Kurtz made the life of millions of programmers harder only to make it easier for themselves to implement the parser…

    C-style languages deduce whether something is a function call, procedure call, function definition, variable definition etc. from context. This is possible because the C-grammar is an LR(1) grammar. LR(1) is a much more powerful class of grammars which are still parsable with deterministic pushdown automata. You were complaining about the { ? Well, you could remove that, but then you couldn’t distinguish single-instruction blocks from multi-instruction blocks and then you’d have to write more }’s. I don’t think that would make a big difference…

    If you just don’t like the syntax – fine – use your kindergarten programming language (and stop pretending your opinion was objective fact) – but there are good reasons why C-style languages are the way they are and if you don’t understand these reasons, then this doesn’t mean C-style languages suck – it just means that you are a n00b (and if you disagree, look up the Dunning Kruger Effect)

    • snetzky

      Vb vs C#
      I’m in the process of translating some VB code to C# at the moment as both a project for work and as a means to teach myself the differences between C# and VB.

      The biggest differences I’ve found so far is that I spend more time correcting my typing in C# than I spend writing code right now, simply because I’m still learning the differences between the way a statement is written in one vs the other and what’s lower case and what’s upper case and putting the brackets and the ; in the right places.
      Those will certainly get better.

      I don’t however relish the thought of getting the gigantic stick shoved up my arse which apparently is a requisite part of becoming a proficient C# coder, so if you don’t mind I’ll skip that part.

  • TomasRG

    You don’t know VB neither C#
    Starting a method with Function or Sub made it clearer but you don’t need gosub o call in order to use a method in VB, (In Visual Basic .NET, the GoSub…Return and On…GoSub statements are no longer supported. These statements were supported in Visual Basic 6.0 for compatibility with earlier versions of the Basic language; they are not compatible with object-oriented programming practices. http://msdn.microsoft.com/en-us/library/bkd98f37%28v=vs.71%29.aspx)

    C-style languages "don’t" deduce whether something is a function call, procedure call, function definition, variable definition etc. from context…..you must to specify the data type in the declaration Integer, String, etc for functions or Void for method without a returning data type

    Yes, C-style languages suck

  • TomasRG

    You don’t know VB neither C#
    Starting a method with Function or Sub made it clearer but you don’t need gosub o call in order to use a method in VB, (In Visual Basic .NET, the GoSub…Return and On…GoSub statements are no longer supported. These statements were supported in Visual Basic 6.0 for compatibility with earlier versions of the Basic language; they are not compatible with object-oriented programming practices. http://msdn.microsoft.com/en-us/library/bkd98f37%28v=vs.71%29.aspx)

    C-style languages "don’t" deduce whether something is a function call, procedure call, function definition, variable definition etc. from context…..you must to specify the data type in the declaration Integer, String, etc for functions or Void for method without a returning data type

    Yes, C-style languages suck

  • ncacace

    Nice trolling : )

    Anyone who would make a statement espousing the merits of VB over C#
    is either
    – Trolling
    – a Code Parrot (Uses the language but doesn’t actually understand)
    – a candidate for career suicide.
    – or should be committed.

    People who enjoyed this article in the spirit it has obviously been intended for may also like this:

  • SloanReynolds

    Pretend the title is "10 Reasons Why C# is Better than Visual Basic" and this article makes a whole lot more sense.

    Yes, I registered just for this comment… Waitaminute! You sneaky bastard!

  • lvendrame

    Nice arguments
    but not.
    Is this some kind of sick joke?

  • achurchill7534

    It is amazing
    Amazing that people still don’t see that C# and VB.net are about the same thing with different syntax. I think most people think of vb6 when they think of VB. It is pretty sad that if your in this field that people still think they are totally different.

  • achurchill7534

    I do like VB better for the fact that I think intellisense picks up things faster, not case sensitive, semicolon (but that goes both ways with line break _) and I am use to VB syntax. But I can write C# too and use it a lot too because people use it more. I just hate when it takes forever for C# intellisense to pickup things. VB it is right away. Doesn’t mean I think VB is better. I just choose it over C# as my personal language. I find myself coding more with C# but I wish people would stop being lazy and learn both. To learn both is so easy.

  • jimv1983

    This post is crazy
    This post is just crazy. It does make a few good points but most of it is just ridiculous.

    1. Regardless of if the language is case sensitive or not doesn’t matter. Case sensitivity makes things much more readable. If I have a public property that sets/gets an private field the case will tell me which one I am dealing with.

    2. The "break" statement allows the switch to have multiple cases for some action.

    I could do something like this:

    int i = …..

    case 1:
    case 2:
    // Do something here

    Without the break statement I would need to repeat the same code twice.

    I will admit that being able to have a condition in the case would be nice but an if/else if statement isn’t that hard.

    3. If I’m going to be creating an event handler it will most likely be from the form designer anyways. As far as having to re-associate the event handler that just isn’t true. If you created the event handler from the properties window(which is the best practice) then all the UI building code is done in the *.Designer.cs file for the form and is regenerated when the control name is changed. The only thing that happens is the name of the created event handler method doesn’t match the new name of the control but it still works.

    4. I guess the "stupid" symbols is just a matter of what you are use to. Using "&&" and "||" is a carry over from C++. Why C++ used those symbols I don’t know but since C# was based a lot on C++ using the same symbols was just being consistent.

    The one exception is "==" vs "=". Of course there should be a difference. With a difference between the assignment and equal operators you can have a condition and assignment in the same statement. Here is one example I found:

    List<DataObject> dataObjects = new List<DataObject>();

    DataObject nextObject;
    while((nextObject = ReadNextFile()).Category == "category")

    5. Why not just use the "prop" feature from Intellesence?

    6. C# can do the exact same thing as IsNumeric using something like double.TryParse. However, if you really want to use the IsNumeric just simply add a reference to Microsoft.VisualBasic.dll.

    As for calculating annual mortgage payment I don’t think C#(although you could probably add a reference to Microsoft.VisualBasic.dll like IsNumeric) has anything like that but should something so specific really be part of the base framework? There also isn’t a method called DoMyTaxes() either. Specific functionality like that is up to YOU.

    7. The semi-colon ends a statement. It allows to have either multiple statements on one line like:

    int a = 1; int b = 2;

    Or to allow one statement to span multiple lines.

    8. The way C# deals with variable declaration makes much more sense. "type name value" makes perfect sense. Stating with Dim(what the hell does that even mean) is just silly, just create the variable. And having the type right before the value is just out of place. The type makes more sense at the beginning.

    9. The fact that C# is "fussier" is a good thing. It is more clear at what is actually happening. If you let the compiler just assume what you want to do it might not be doing what you think. It’s much better to tell the compiler exactly what I intend to do.

    10. The example here is really bad. If you know at the time that you are coding that you need a bigger array then change the array to make it bigger to start with.

    string[] partyGuests = new string[3];

    partyGuests[0] = "Sarah Palin";
    partyGuests[1] = "Richard Dawkins";
    partyGuests[2] = "Mitt Romney";

    If you have an array that will be changing then a List is better.

    However, if you really do want to do what the example shows that just use Array.Resize

    string[] partyGuests = new string[2];

    partyGuests[0] = "Sarah Palin";
    partyGuests[1] = "Richard Dawkins";
    Array.Resize(partyGuests, 3);
    partyGuests[2] = "Mitt Romney";

    Now for some reasons why C# is better.

    1. Increment by 1 with ++ operator.

    for( int i = 0; i < 10; i++)

    2. The lack of use of brackets ‘{‘ and ‘}’

    This is easy to read:

    //Do something

    Than this is

    If (True) Then
    ‘Do something
    End If

    and why do I need the "Then". It’s common knowledge that IF the condition is true THEN something will be done. I don’t need to have the extra word get in the way.

    And trying to tell where one code block ends and another starts is much harder with End statements.

    3. Very odd behavior when resolving references at compile time.

  • achurchill7534

    Right back at you
    1) Come on man, the { } and End stuff is preference. If you cant read END SUB then I don’t know what to say. C# code can get crazy with { } .
    2) If you code in VB you would know that the THEN and END statements are put in for you.

    3) As for prop to get property is nice but VB you can type pro and double tab and property is there for u but I don’t know if they have a shortcut for Auto-Implemented Properties but they have them.

    4) Spanning multiple lines all you do is add a _. No big deal. If you think adding few keystrokes will take up your time, I think it really isn’t too time consuming.

    5) I can’t remember the last time I used a switch case statement.

    6) Array.Resize is in VB too. Redim is there too.

    Both languages are amazing and in my opinion about the same. They both pretty much can do the same thing. VB6 made a lot of people think VB.Net is a lesser language and sloppy, I think C# coders can be just as messy. I think the messy argument is a really poor excuse.

  • jimv1983

    Just preference?
    1. I guess you could say it’s just preference. I can read the End Sub just fine. However, with a quick glance a symbol like { and } is immediately more apparent that it begins/ends a code block without really having to read. Plus, I find it annoying that I can’t use "End" as an variable name because it is used. End is a common word.

    It’s also about how they work.

    With the brackets you can have them on the same line:

    string prop = "prop";
    public string Prop
    get { return prop; }
    set { prop = value; }


    Private _Prop2 As String = "Empty"
    Property Prop2 As String
    Return _Prop2
    End Get
    Set(ByVal value As String)
    _Prop2 = value
    End Set
    End Property

    Hell, if I really wanted to I could reduce it even more in C#

    string prop = "prop";
    public string Prop { get { return prop; } set { prop = value; }}
    although that makes readability harder for me.

    2. I am aware that Then is put in automatically but it makes the code look cluttered to me. You can call it preference but it’s totally redundant. Anyone that has any knowledge of basic programming(in any language) knows that the "Then" is obvious.

    3. My only point when with using "prop" was based on the author saying that IntelliSense works better in VB.NET when the example he gave can easily be done in C# as well.

    4. Sure, spanning lines isn’t HARD by using the _ but why require me to add an extra character to the end of every line when C# allows me to use a single ; to end the statement. Adding the _ can be quite tedious on long strings and especially several line LINQ statements.

    Dim q = _
    From a In dc.GetTable(Of Order)() _
    Where a.CustomerID.StartsWith("A") _
    Order By a.OrderDate Ascending _
    Select a

    6. Ok, so you are right about Array.Resize being in VB.NET too. My comment was directed at the author’s statement that re sizing arrays in C# is much harder and requires creating a new array and copying the values. It just wasn’t true.

  • achurchill7534

    1) When you have a million {} that is so much easier to read? I think either one can get cluttered. Your just used to your language that is all. A C#er and VBer can tell right away. Like I said Vb also includes Auto-Implemented Properties like
    Public Property a As String

    2) Cluttered again is based on what you are used to. I still think cluttered is a bad argument because both code can be cluttered. Can you tell if there are 5 { } , that which is what right away by looking at it?

    3) I think the intellisense is slower in C# then VB. VB is almost right away that might have to do with case sensitive. C# takes time sometimes to pop up.

    If I had a choice it would be VB but most programmers program in C# which I do not mind at all. Both are good, learn them both they don’t take much more to learn really.

  • achurchill7534

    1) When you have a million {} that is so much easier to read? I think either one can get cluttered. Your just used to your language that is all. A C#er and VBer can tell right away. Like I said Vb also includes Auto-Implemented Properties like
    Public Property a As String

    2) Cluttered again is based on what you are used to. I still think cluttered is a bad argument because both code can be cluttered. Can you tell if there are 5 { } , that which is what right away by looking at it?

    3) I think the intellisense is slower in C# then VB. VB is almost right away that might have to do with case sensitive. C# takes time sometimes to pop up.

    If I had a choice it would be VB but most programmers program in C# which I do not mind at all. Both are good, learn them both they don’t take much more to learn really.

  • achurchill7534

    Forgot one thing C# makes you put a ; at the end of a statement. Just like VB has _ at the end of a line when you need to span across multiple lines. Think you use ; more.

  • jimv1983

    1. When you have a million { } that is so much easier to read?

    Yes. Maybe it is just me but my mind distinguishes between a word and a symbol much faster than between different words. When I’m scrolling around code files a lot my eye will catch a "}" much faster than it would catch an "End Sub". I often look at a code file and just filter out the text and focus on { and } to find blocks of code. For a single instance it probably wouldn’t matter much but it adds up. It helps even more when there is a lot of code at a verity of different indentations.

    It’s very possible that I just work best that way but it is a huge difference to me.

    2. Can you tell if there are 5 { } , that which is what right away by looking at it?

    Right away? Maybe not. Faster than without them? Absolutely.

    3. All other things being equal I haven’t ever noticed IntelliSense being any slower or faster for either language. There is, of course, a difference when the number of references varies greatly. If I am working on a big C# solution with lots of projects and external references compared to a brand new project with just the few default references then I sometimes notice a difference but that isn’t really because of the language. Also, I’ve always worked with relatively high end hardware so that could be part of it too.

    4. I guess I see your point with the ;. I’m guessing it probably has to do with the fact that since it is at the end of every statement it’s just automatic but when I’m spanning lines (which isn’t really that rare for me but not extremely common either) it is something I have to think about doing.

  • jimv1983

    References in VB.NET
    Another issue I have with VB.NET that I just discovered recently when I had to use the SDK of the company I work for in VB.NET is how VB.NET resolves dependent references during compiling. It’s not really an issue with the VB.NET language but the VB.NET compiler.


    I have a project that uses my company’s SDK. All of the SDK classes are found in one DLL( which references many dependent DLLs). When deploying one of these SDK applications the only DLLs that have to be with the EXE are the two that help resolve the location of the DLLs(the DLL with the SDK classes and it’s dependent DLLs) wherever they are, which could be several different places depending on how our application is installed.

    When creating the SDK project only the one DLL that has the SDK classes needs to be added as a reference to the project since the reference location for that SDK DLL also has the dependent DLLs. Add the one reference and build…DONE…but only in C#.

    VB.NET requires that my project directly reference ALL DLLs that the one SDK DLL depends on. Without the extra references the build fails.

    This is a problem because, although we use our SDK for some custom stuff internally it is also available to our customers and we don’t want them to have to add all the unneeded references that have classes that they shouldn’t be directly accessing anyways.

  • starlisa

    I mostly agree
    Two notes: First, + works to concatenate strings in VB.NET and is way more intuitive *and* user friendly (because there’s a + on the numpad). But that just supports your position.

    And yes, switch is ridiculously and unnecessarily complicated. That said, you shouldn’t be using Select Case, either. If-Then is more efficient.

    But I’ll be sharing this article. It’s so spot on.

  • led
  • njsokalski

    Good to know I’m not alone!
    When I was in college, all my courses were taught using C++ or Java, I never learned VB.NET (or .NET at all) until I was forced to transfer to a community college. But I have to say, I liked VB.NET more than C++ or Java, and I could never give up .NET now! What I want to see happen is to have Microsoft give us VB.NET developers the same priority they give C# developers (give example code in the documentation in VB.NET as well as C#). I’m glad I know enough C# to be able to make use of the examples I find, but I do feel like a minority as a VB.NET developer.

  • Vulturica

    Visual Basic 6.0 is better and faster than C++
    Visual Basic 6.0 is better and faster than C++, but, VB .NET is NOOOOOOT:


  • Vulturica

    Visual Basic 6.0 is better and faster than C++

    Visual Basic 6.0 is better and faster than C++, but, VB .NET is NOOOOOOT:

    <iframe width="560" height="315" src="//www.youtube.com/embed/C6jZpzJtpMQ?rel=0" frameborder="0" allowfullscreen></iframe>

  • Vulturica

    Visual Basic 6.0 is better and faster than C++, but, VB .NET is NOOOOOOT
    <a href=’https://www.youtube.com/watch?v=C6jZpzJtpMQ’>https://www.youtube.com/watch?v=C6jZpzJtpMQ</a&gt;

  • tedebus

    Opinion about some points
    Point 1

    Case sensitiveness is one of the most important think for code clarity.


    int objectLength = MAX_LENGTH;

    Any software developer would think that MAX_LENGTH is a constant. And so it should be.
    There are a lot of conventions related to upper cases and if you respect them your code will be more readable.

    Point 2
    This is the only think I’m agree, but these feature may be dangerous in some cases

    Point 3
    The matter is that YOU DON’T KNOW HOW TO DO.
    The easy way, that is exactly what you do with your VB code:

    1) select properties tool,
    2) select events tool button on the top (if not already selected)
    3) double click the needed event (or type a personal event handler name if you don’t like the default one).
    The code will be automatically prepared by IDE.

    Time need to do this: 5 seconds, if you are slow a bit.

    Point 4
    Why do you use & and than say that && is stupid, it’s a couple of &? ahahahh
    Words like "or", "and", etc… are words, and the should be used for things related to words: vars, functs, methods, ecc…
    Symbols like & | % …. are operators!

    So I can type:

    bool or, OR, oR =true;
    int Or = 1;
    bool and = false;

    or = OR = oR;
    bool result = or || OR || oR || (Or == 2);
    result &= and;

    You can’t do the same because Or and OR because:
    1) "Or" is a reserved word
    2) "Or" and "OR" is the same var!

    Let’s rename Or in Or1, so your compiler wont explode!

    What about operators concatenation?

    (C#) bool result = Or1 == 2;

    (VB) Dim result As Boolean = (Or1 = 2)

    I see that Or1 now is 1, even if it was 2? It’s not clear!!!!!

    (C#) result &= and1;
    (VB) result = (result And and1)

    Point 5
    I will comment about the point no. 5 because a lot of people already did the same on other points with obvious answers.
    What are you looking for is not "autocorrection" but" AUTOCOMPLETION", and, believe to me, it’s not the same!

    So, I will show you some triks.
    Open you VS ide, new c# project and type: "prop" followed by 2 tabs….
    "prop" changes in

    public int MyProperty { get; set; }

    where type and name are editable in automatic, switching with tab button!!!!
    Now… more power! Try to type: "propfull" followed by 2 tabs…
    Now you see:

    private int myVar;
    public int MyProperty
    get { return myVar;}
    set { myVar = value;}

    and if you change first "int" in "long", the sencond "int" chages automatically too!!!
    Using tab button to reach "myVar", it changes its color, and if you change it’s name…. all "myVar" references change!!!

    More power! More power!
    You need a dependecy property? (Do you know what it is?)
    Well! Try "propdp", this is the result:

    public int MyProperty
    get { return (int)GetValue(MyPropertyProperty); }
    set { SetValue(MyPropertyProperty, value); }
    // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc…
    public static readonly DependencyProperty MyPropertyProperty =
    DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));

    And if you are a man that need ALL, with getter and setter separed, VS helps you with "propa":

    public static int GetMyProperty(DependencyObject obj)
    return (int)obj.GetValue(MyPropertyProperty);

    public static void SetMyProperty(DependencyObject obj, int value)
    obj.SetValue(MyPropertyProperty, value);

    // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc…
    public static readonly DependencyProperty MyPropertyProperty =
    DependencyProperty.RegisterAttached("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));

    Now, I will say you an important truth: autocompletion, autocorrection, events tools and similar things…. are not part of the programming language, as you think… These are IDE’S FEATURES!!!!

    Point 6
    No comment! 😀 😀 😀

    Point 7
    Hmmm… are you joking?

    (VB) MessageBox.Show( _
    text:="This article is a bit opinionated", _

    (C#) MessageBox.Show(
    "This article is obviously a bit opinionated",

    2 underscores vs 1 semicolon!

    Other Example:
    (C#) if (operation==true) {Do_this(); AndThis();} else {Do_thisOtherThing(); AndThisOne();}
    (VB) If (operation = true) Then
    End If

    Other one
    (C#) private int myVar;
    public int MyProperty { get { return myVar; } set { myVar = value; } }

    (VB) Dim myVar As Integer
    Public Property MyProperty As Integer
    Return myVar
    End Get
    myVar = value
    End Set
    End Property

    Well… I prefer semicolons!!! SURE!!!

    Point 8
    "The name of the caller is John"

    (C#) string caller = "John"; //(2 C# words + assignment)
    (VB) Dim caller as string = "John"; ‘(4 VB words + assignment)

    (C# in human) caller is a string, it’s "John"
    (VB in human) Size caller as a string that is "John".

    Please note that "as" is a reserved word in C# as in VB, but you CAN use it and NOT MUST use it.
    For example:

    object foo = "string";
    string foo2 = foo as string; //(is a cast)

    Point 9
    See points 7 and 4

    Point 10
    Strictness is not the evil! Your code does cast automatically, if you are a good programmer you should know that it’s very dangerous!! Think about int32 converted automatically to int16 or byte….

  • njsokalski

    Opinions & Equality…
    The best language for everybody is whichever one they prefer and are more familiar with. I prefer (and can’t imagine why somebody wouldn’t, but apparently they are) and am more familiar with VB.NET. Why do I prefer it? Even though C++ is what I was taught in college (.NET didn’t exist then), I think that it’s easier to read VB.NET (especially the operators), because it is easier to remember "Not" than "!", for example. It is also easier to avoid typos (such as "&" vs "&&" or case sensitive typos). Case sensitive can also make it easier to miss errors when debugging. Both languages have little tricks to them, so I have nothing against C# programmers, if that is the language they prefer or are more familiar with, all I ask is that VB.NET programmers be given equal resources and treatment.

  • Bart76

    How much b*llsh*t can a developer take while reading a single article…
    Preference for case (in)sensitivity is subjective. But in my experience, case sensitivity can provide technically more coding options. So, technically, case sensitivity is more flexible!

    The Select Case block in VB is indeed functionally richer than switch statements in C-like languages. The question if this extra functionality needs to be exploited to the maximum is a question that everybody should answer for themselves…

    Event handling in VB.NET contains a lot of functionality that was ported from VB 6.0 and earlier.
    Things like WithEvents and Handles in VB are indeed nice facilities, as are the IDE-related features. C# is stricter regarding event handling, yes.
    But on the other hand, C# forces the developer to overthink event implementations twice. Event handling is a powerful mechanism, but it comes with a price in the form of runtime processing overhead and (partly invisible) object dependencies.

    Those operators were available in C (and later also in C++ and PHP) in the 70’s… The reason for these was that memory resources were very expensive in those times: "&" and "&&" are shorter than "And", "|" and "||" are shorter (or as short as) "Or", and "~" is shorter than "Not". Every "mature" software developer should know them (or at least should know them, if only for nostalgic reasons). And yes, it is less readable at first, but it reads nicer on the longer term. Just like we all prefer reading "2 + 3 = 5" over "two plus three equals five", don’t we?

    This very serious lack of functionality in C# has never bothered me before… Perhaps there are 3rd party tools available that offer that kind of functionality…

    These VB-specific functions also seem to be an inheritance from the pre-dotNET era. IMHO these functions are provided mainly for backward compatibility. I don’t use those functions if I do not really need them. And to be honest, I practically never need them. And if I should need them, I would still try to use a separate (3rd party) function library.

    Yes, the underscore as a continuation character is not necessary anymore. But the underlying logic in VB has not changed at all… Ever tried to comment out a part of a statement that is split over multiple lines in VB? Doesn’t work. But it works fine in C#.
    Besides that: the fact that the semicolon explicitly ends the statement is also a lot clearer.

    That’s just a consequence of the defined syntax. (Why do you put an adjective before the noun in the English language, but after the noun in the French language?) Anyway, you don’t have to type "Dim" and "As" in C#… But, sadly, the (un)clarity of the absence of those unnecessary keywords is also subjective, and thus as useless for discussion as most of this article.

    Indeed. But I like the strictness. It allows me to find logical errors a lot sooner. I personally think that the loose syntax in VB can cause problems. IMHO, an enum is NOT a numeric type (even if its elements have unique numeric value for practical reasons) so it is not logical to use enum values as numeric values…
    Regarding possible errors… please look at http://stackoverflow.com/questions/26416644/vb-vs-c-why-is-this-possible

    Well, IMHO those critics’ have strong and valid points! Stating that their defense is hardly the point is naive. Besides that, this "feature" is also inherited from the pre-dotNET era. For different tasks and different scenario’s, several well-proven collections have been developed whose usage may result in clearer code and more effective execution than trying to hold on to (obsolete and inefficient) functionality for redimensioning arrays.

    This article is entertaining, but not very serious. Holding on to prehistoric features that caused (Visual) BASIC to be considered as an inferior and hobbyist language seems like a bad idea. Instead, focus on the new powers of VB.NET (like true object orientation) and use language structures and features that are intuitively understandable for any .NET developer (regardless their language). Happy developing!

  • AnthHalliday

    When you accidentally leave Caps lock on, it really matters
    WOW. I read this yesterday and still cannot stop laughing, i had to revisit and register just to say this is unbelievable.

    "When you accidentally leave Caps lock on, it really matters"

    I sincerely hope this is a joke.

  • Bart76

    Re: When you accidentally leave Caps lock on, it really matters

    Well, it all depends on your idea of a joke. This whole article is a joke, I think.

    However, you cannot "accidentally" leave Caps Lock on when coding in C#. C# is case sensitive. That’s not a joke. That’s very serious. On the contrary, Visual Studio has a "nice" code beautifier for VB.NET code, which will automatically correct the casing of identifiers and VB.NET keywords. That’s not a joke either…

    Anyway, my idea of a joke is that some people actually state that the case sentitive behavior of C# is a drawback… It’s even more hilarious that there even seem to exist some people (especially the ones who call themselves trainer and consultant) who find this single "issue" to be enough reason to ditch C#… LOL

    When the new compiler (codename Roslyn) will be introduced, you might also be surprised that by default all VB.NET keywords will be automatically converted to lowercase, to make it look more like C#. With the emphasis on LOOK more like C#, and not BEHAVE more like C#… Since this was not announced on April 1st, I do not consider this to be a joke, but a serious attempt by Microsoft to gently push VB.NET developers a little bit into the direction of C#…
    I consider this effort from Microsoft as superfluous. In my humble opinion, VB.NET developers should just stay with VB. More serious developers will find their way to C# anyway as soon as the time is right for them to make that next evolutionary step.

    I think all this b*llsh*t is just very entertaining. As a true professional developer, I am comfortable using both VB.NET as C#. And I think that it is important to look at other languages too. A language is just a tool to get a specific job done. But regarding C# vs. VB.NET, I think that C# as a language is cleaner and better structured. Probably because I have a C/C++ background. It’s just a matter of opinion. Nothing more.

    Happy developing.

  • AnthHalliday

    Re: When you accidentally leave Caps lock on, it really matters

    Very comprehensive. I wasn’t too sure if the article was serious or not…

    The part i found amusing was that if someone is incapable of determining caps lock is enabled and continuing to type regardless, should they really be let outside. I MEAN COME ON WHO FORGETS THAT THEY ARE TYPING IN CAPS- my bad, I forgot to turn it off there ;).

    With regards to VB vs C#, as a C# developer with a background in VB I believe both languages have there merits and are not that dissimilar.

  • njsokalski

    Same functionality, different syntax
    Both C# and VB.NET have the same functionality as long as you know how to use it. They even compile to the same runtime. The only real difference is the syntax, which may in some cases may also mean a tool is better or worse for some scenarios (but that is the fault of the tool, not the language). So which one is better? Whichever one you are more comfortable, experienced in, and have the most useful background in. It is no different than asking what is better for anything else (if they both have the same capabilities), the best choice is the one that you will be best at using. It is important, however, to have at least enough knowledge in both that you can, when necessary, recognize basic structures (such as if, switch, methods, etc.) so that you can get at least some use out of examples that are only available in one language. I am a VB.NET developer, but I have nothing against C# or C# developers; if you try to force people to use a language they know very little about, you will do nothing but slow down development and cause more bugs in other people’s code.

  • Brain2000

    You missed some other VB.NET features that C# does not have
    VB.NET supports the XML document natively, where C# does not.

    You also missed the fact that VB.NET can use optional byref variables, where C# cannot.

    Also, a minor correction to the article above. The equivalent to && and || is actually "AndAlso" and "OrElse", not "And" and "Or". The difference is "And" and Or will evaluate both sides, where "AndAlso" and "OrElse" will stop if the first side if the second side’s outcome won’t change the result. These are also called short-circuit operands.

    VB.NET used to be terrible, but since VS2013, I prefer it over C#. Yes, I’m surprised to hear myself say that.

  • Bart76

    Re: You missed some other VB.NET features that C# does not have

    C# offers two alternatives for VB.NET’s ByRef keyword: out paremeters and ref parameters. Differences between them are subtle but important. Of course, they are documented on MSDN, in case you are interested (…)

    Since version 2010, C# also supports optional parameters and named parameters. I personally do not consider the use of optional parameters a "good programming practice", but it can sometimes be useful when applied properly and consequently. Named parameters can be useful for improving readability of the code in some cases, but that applies to both C# and VB.NET.

    C# also offers boolean operators that evaluate both sides: & and | (in comparison to && and || which are the short-circuit variants). And yes, we can continue to discuss the difference between bitwise and logical operators, but in the end we will conclude that it does not make any difference for their behaviour. Everything you can do with the operators Or and And in VB.NET, you can do with the operators & and | in C#. And everything you can do with the operators OrElse and AndAlso in VB.NET, you can do with the operators && and || in C#. And vice versa.

    I prefer C# over VB. But as I said in an earlier post, it’s a matter of taste. There are no real advantages or disadvantages between the languages. They both have their own curiosities (like all languages have). IMHO, C# is a "cleaner" language, built from the beginning to support all the features of the .NET Framework technology, where VB.NET built upon the earlier VB 6 syntax to make the new .NET technology attractive for legacy VB developers.

    Furthermore, I do not understand why VB.NET is suddenly better in VS 2013 than in earlier versions. I have used VB 5 and 6 in the past, and I have used VB.NET in almost all versions of Visual Studio: .NET (2002), 2005, 2008, 2010, 2012, and 2013. (Before that, I programmed in C++, using both VC++ 6 and Borland C++Builder). I do not see any relevant changes in 2013 compared to the same features that have become available in C# too.

    Compared to other languages, C-dialect languages use quite few keywords and operators. But the meaning of the keywords and operators can differ based on the context in which they are used. I personally find that attractive, but I do understand that others find the more readable form of VB.NET keywords more attractive.

    Some important things that behave really differently between C# and VB.NET are:
    – the VB.NET root namespace vs. the C# default namespace,
    – the ability to turn off compiler features in VB.NET (using Option Explicit, Option Text, Option Strict and Option Infer)
    – event auto-wiring features in VB.NET (using WithEvents and Handles),
    – some casting functionality (VB.NET offers a DirectCast and a TryCast method, where C# offers the ‘as’ keyword, but there are some important differences that disallow a direct 1:1 translation in all scenarios)

    There are undoubtedly more subtle language differences, but all that still does not make one language better than the other. As I indicated in a previous post, the existence of more language features does not imply that the language is superior. Just look at PHP. It’s a nice, good OO language, but it offers so much language "garbage" that it is difficult to learn and apply a robust programming style using it. That’s my personal experience anyway.

    One HUGE advantage of C# is the nice lambda syntax, which offers an easier transition to functional programming languages (Scala in particular). It is also very nice that some interesting features that have been available in Scala (and undoubtedly other functional programming languages too) for several years are now coming to the new Roslyn compiler.

  • DanielF847

    Wibbly Wobbly Timey Wimey Fun
    So, there are reasons why those trade offs you mention exist. I’ll address them in order:

    1. case sensitivity is a style thing. I can’t fault you on opinion.

    2. Case statements can be very efficient. VB case statements compile to if-else at binary level because they allow for such broad expressions. They also don’t do short circuit logic because they are compiled essentially the same as vb’s if-else statements (this last part is only true for vb6 and earlier)

    3. This method of associating handlers allows code to be independent of visual studio. you can code C# in whatever you want, and associate code with any controls. VB’s code assocation for events is name based. If you change the name of a control, all the events break.

    4. These are convention, and make moving to C# much easier for programmers of other procedural languages.(and contextual detection of = as assignment makes it impossible to do some optimizations.)

    5. This is based on your settings in visual studio. I know that this works for me. (also might be different 3 years later.)

    6. These functions exist just not in the global namespace. why would you put any symbols other than essential language pieces in the global namespace. That’s just irresponsible and un-maintainable.

    7. semicolon makes it so that windows/unix line endings don’t cause problems. also explicit line ending is just safer.

    8. The average programmer would prefer the more abbreviated syntax that is convention for most languages of (Type)<Identifiers> SymbolName = Value

    9. Hard Typed languages are always more strict. If I wanted a less strict language, I would choose a dynamic language like python. If you want reliable code hard typed and "fussy" is the way to go. it makes sure you meant what you said.

    10. the C# syntax is like that because that is what’s happening. VB doing it for you just makes for more irresponsible programming. if you don’t know your data size, use a collection.

    FWIW, I use both heavily and am not a huge fan of either, but its dumb to think MS should continue to support a clunky statement based language like VB when we’ve learned from our mistakes and made something much more useful.

    if you want wibbly wobbly timey wimey less strict fun, move to JS and XAML and stop complaining.

  • njsokalski

    You are underestimating VB.NET
    You seem to be underestimating VB.NET. First of all, most of what you said is only true sometimes. Also, many of the things can be checked for by Visual Studio by changing the options. I believe both are equally good languages, and pretty much everything that can be done with one can also be done with the other. My personal preference is VB.NET, but that is primarily because that is where my background and experience is, but I do know enough about C# to say that if that was where my experience was, I would be happy to stay with it. It’s all about personal preference and where your background experience is.

  • Bart76

    Some more considerations for C# vs. VB.NET
    In VB.NET, the For Each loop seems to be evaluated at runtime, which may allow obscure and buggy code. See http://stackoverflow.com/questions/26416644/vb-vs-c-why-is-this-possible for more info.

    Pro C#:
    C# allows the use of pointers within an "unsafe" code block. Compared to managed references, this kind of code might have superior performance (at the cost of a higher risk of unstable code when the developer is insecure). There are lots of resources available on the internet, like http://stackoverflow.com/questions/584134/should-you-use-pointers-unsafe-code-in-c.

  • rrvenki

    Interesting references from Microsoft, msmvp…
    Read the articles in the URL and take your own decision. If someone says VB is not good…, These article shows what it means to gain expertise in VB.



  • tphaneuf

    Nothing seems to kick an anthill like this topic. I do think some good points (and some moronic ones) were made in the comments.

    I am always amazed at the vitriol that VB.NET seems to generate with some people. They really get pretty riled up. It would be like getting mad at someone because they prefer Pepsi over Coca-Cola. Both are colas – as both of the languages are .NET.

    I work with C# pretty much exclusively, but I have done a lot of VB.NET work as well. I mostly like C# and I like mostly like VB.NET in strict mode. Both are good, but neither are perfect and both stink in their own unique ways. It is too bad that the ideal language, Delphi’s object pascal with .NET (ala Oxygene) can’t seem to get much traction.

    Four things I hate about C#:
    1. Case sensitivity. HATE hate hate that. It is a holdover from the old days when the extra cycles to compare something to the ascii value of upper- and lower-case letters was expensive. Now it is not.
    2. Having to add "break" to every switch statement. In C and C++, you had the option of dropping through and having additional conditions evaluated. In C#, you don’t (which I agree with). So you have to break out of the switch – but if you have to every time anyway, DON’T make me have to friggin’ type "break" every time – it KNOWS it has to break. It should be implicit. Are you THAT dumb, C# compiler?
    3. No WITH statement. Anyone that says that is bad practice or an "anti-pattern" or whatever, is an idiot. The people that tell me the "using" statement is equivalent, also don’t know what they are talking about (look it up if you are one of them). Also, if someone says that it makes code unreadable, it isn’t the "with" statement – it is the coder. I can show you lots of unreadable code that doesn’t have a WITH statement.
    4. Type before Name for variables, functions, etc. – This is a personal thing. I like to alphabetize my stuff so I see at a glance when something is out of place. C#’s approach makes this more difficult. The name is more important to me than the type.

    Four things I hate about VB.NET
    1. The Dim keyword. What is THAT about? Is a stupid thing that is holdover from the VERY old days of Basic when it was used to dimension arrays.
    2. AND and OR not short-circuiting expressions by default, and having to use the stupid ANDALSO and ORELSE statements for that to happen.
    3. Declaring arrays based on the last index of the array (which is 1 less than the size). That strikes me as one of the most idiotic things that I can think of.
    4. Parentheses for indexed values instead of square brackets. Makes it look like you are calling a method instead of referencing an indexed value.

    As for some things that VB.NET cannot use from C# libraries, the reverse is also true (I know this). The reality is that if you going to write libraries that will be consumed by both, you have to test them with both.

    That’s my two cents. I know this was an old topic, but it is still alive, and still kind of fun.

    And to the haters out there: Just because VB.NET isn’t as bad as you want it to be – that doesn’t mean that your C# skills are diminished in any way. Just calm down, and maybe take a nap.

    What torques me off more than the particular language is the approach that is getting more common of creating function definitions that may or may not also have function definitions that… (etc) as parameters. Makes things very hard to read and follow. Just cause you can do something, doesn’t mean you should.

  • tphaneuf

    Clarification on last comment: Yes, you can drop through a C# switch case statement if it is empty – but the compiler should know that too.

  • jimv1983

    Case sensitive
    @Wow, you make some good points but I totally have to disagree with the case sensitivity. Having case sensitivity is really useful for properties. The property itself starts with a capital but the inner private variable starts with a lower case but has the same name. Without case sensitivity how do you cleanly name the two?

    I mostly prefer C# just because I’m familiar with the syntax. I can’t even really think of the things I don’t like about VB.NET unless I’m actually using it to do something and remember that I don’t like a certain thing about the language.

    Any libraries that are build with either VB.NET or C# should work just fine with the other. Both compile to MSIL and I would expect the resulting MSIL would be the same. You might very well be right. It just seems odd to me. I’ve never experienced any issues myself.

    I wasn’t even aware of the WITH keyword in VB.NET. I just looked up its usage and I think it would just make code readability harder.

  • nterry

    C# is better that vb in 99.99 percent of use cases. Ill give you the switch statement, but its better to use polymorphism to do operations on different types anyways…

    All of your reasons are WEAK beyond compare. For example, those "stupid symbols" are actually the standard operators. Your confusion is based on a lack of understanding. The single symbol operators are bitwise operations, not an "academic" choice as you so ignorantly point out.

    Another example is that you say that "Autocorrect" works in visual basic… That is an IDE limitation, not a language limitation…

    I looked at this article out of curiosity and after reading it, i am convinced that you are stuck in the past. You need to grow up and use a proper set of languages. VB solved a lot of problems when it was in it prime, but there are a LOT of options out there now. VB is an antiquated language that die-hards use because they are afraid or unwilling, (or both) to learn something new…

    How do you even have a job as a trainer when you have so desperately cling to a dead technology. Read a book, expand your mind, leave VB in the dust where it belongs.

  • Brain2000

    They’re the same 99.99% of the time
    Your killin’ me smalls.

    I work in both. Since VS2013 I have a slight preference leaning towards VB because of the extra features. Though I much prefer the C++/C# style of brackets.

    You do realize that all languages in .NET (for the most part) compile to the same IL code? You do realize that you can call C# functions and properties from VB.NET and vice versa?

    Have you ever worked with an XML literal directly in-line? It’s pretty cool. VB can do it, C# can’t. We use those in our production software for templates.

    For you to say that C# is better than VB 99.99% of the time is just not a true statement by any means.

    That’s like saying "my religion is better than your religion… 99.99% of the time."

  • anon123123


  • anon123123

    1. 1 – “Rose is a rose is a rose is a rose” (Case sensitivity)

    English is a case sensitive language as well, and for reason. It makes communication simpler and clearer.

    I’d be fine with a case insensitive, but case aware, language if all the other programmers in the world followed some common sense conventions on casing, but they don’t. Just look at people’s SQL code. They mostly SHOOT reserve words.

    Quite frankly, I’d rather be forced to write a variable as studentName then have to deal with people inconsistently writing STUDENTNAME, studentname, StudentName, studentName, Studentname all over the code. I have to read the code of my coworkers, like it or not.

    2 – The Switch clause

    I can buy expanding the switch statement to include arbitrary expressions, but Visual Basic does not do that and has a half-ass implementation of expressions in case clauses. In your example, you give
    Case Is < 18
    txtVerdict.Text = "child"

    which is nothing but syntactic sugar for
    if (AgeEntered < 18)
    txtVerdict.Text = "child"

    But what about doing
    if (AgeEntered < 18 and State in [‘AL’, ‘LO’, ‘MO’])
    txtVerdict.Text = "minor"
    else if (AgeEntered < 21 and State not in [‘AL’, ‘LO’, ‘MO’])
    txtVerdict.Text = "minor"
    txtVerdict.Text = "minor"

    You cannot do that with the half-ass switch statement in Visual Basic. If you want to make the Switch statement a new syntax for sequential IF-THEN-ELSE statements then it should look like this:
    case Age < 16 and State in StatesWithDrinkingAgeOf18
    CanDrink = false;
    CanDrive = false;
    case Age < 18
    CanDrink = false;
    CanDrive = true;
    case Age < 21 and State in StatesWithDrinkingAgeOf21
    CanDrink = false;
    CanDrive = true;
    CanDrink = true;
    CanDrive = true;

    Although, I don’t see how that’s any more readable than a series of IF-THEN-ELSE statements.

    More importantly, you should never write code that sets the value of a UI control nowadays. You should have a proper model and bind that model to UI controls. Directly manipulating UI control values is so 1990s and makes for ugly, less maintainable code that violates separation of concern.

    3. Event-Handling code

    Personally, I prefer to just edit the XAML. It’s quicker and easier and you write better code.

    4. Stupid symbols

    Arbitrary personal preferences, but it you use the same symbol for assignment and comparison, people make stupid mistakes and their coworkers have to spend hours debugging their dumb code to find the mistake.

    So if you want to use "=" for comparison, you should be using something else like ":=" for assignment.

    5. Autocorrection in Visual Basic actually works

    This is a deficiency in Visual Studio, not the language. Of course, you could create a macro to automatically fill in Property getters and setters.

    Personally, I think Microsoft missed the mark on properties all together. It’s a half-ass improvement over fields, but it doesn’t go far enough and properties should have replaced fields whether you want to call the replacement fields or properties.

    6. Lack of supported functions

    I can think of thousands of functions that various people might find useful. These functions belong in libraries, not the language.

    7. That wretched semi-colon

    The semi-colon indicates the intention to end a statement. Sometimes it is ambivalent whether a block of code is meant as one statement or two and it’s better for the compiler not to join two statements when that is not the intent or you get the wrong result.

    Yes, you could use a character to indicate multiline statements, but that’s far more tedious and real code tends to have a lot of multiline statements.

    As for using

    8. Arguments and variables

    It is in no way logical to use the reserve word Dim to declare anything other than an array since that word literally means "dimension" as in the length of an array.

    Also, typing Dim all the time takes way more time than typing semi-colons.

    And why do you need that extraneous "As" reserve word. How does that add clarity?

    9. Strictness

    Coding is damn easy compared to debugging. Which do you want to spend more time doing? I’d rather take the extra second being strict — or to say it better, explicit — in my code than spending hours chasing down some obscure bug caused by a loose interpretation of an operation that wasn’t what the developer intended.

    10. Redimensioning arrays

    If you are doing this, you shouldn’t be using arrays. You should be using collections, particularly ones backed by links like the class List.

    Side note: List should be called LinkedList like it is in Java. The class name in .NET isn’t as clear as to what the class does and when you should use it.

    > What are you waiting for, all you C# code-monkeys?

    Visual Basic has a long culture of trying to deskill programming. It’s a fool’s errand. The only software worth writing is that which does something new, solves some problem not yet solved. Otherwise, it’s easy to buy software than write it.

    If software solves a new problem, then by definition, writing it is a skilled, creative task. Referring to software developers as "code monkeys" is insulting and demeaning, especially since software development is one of the noblest and most useful careers in modern society. We create technology that affects every other field and advances medicine, science, education, economics, etc. Our work unites the world allowing unprecedented communication and collaboration. And quite frankly, the vast majority of our species could not write commercially viable software if their life literally depended on it. How exactly is any competent software developer a "code monkey"?

    Final remark

    When Microsoft introduced the ? operation, it really missed the mark. It would have been far more useful if no variable or property was nullable unless explicitly declared as such. This would greatly improve code allowing for compile-time checks to see that null was properly handled when allowed and only allowed when the developer explicitly ops in.

  • JCKing

    I came here looking for actual intelligent points…fool me once I guess.
    This article is hilariously biased and shouldn’t be taken seriously by ANYONE. I’d be willing to bet that the author spends FAR more time writing articles and translating code into his pet languages than actually writing any real, new, useful code.

    1. Case sensitivity
    Covered mostly by the guy above me. Why do you WANT to write variables with 12 different capitalization? Are you a sadist? Because everyone who comes to work on your code later HATES you, I guarantee it. You can’t just say case sensitivity gives only one advantage and have it be true, because its not. Clarity and readability, standardized practices for multiple contributors to code, and (albeit very very marginal) better performance. There’s 3 right there.

    2. Switch statement
    I’ll give you that breaks are weird and annoying. That may be your one solid point in this whole article. However, writing a switch statement in VB is NO easier than writing an If/Else in C#. It doesn’t provide any extra functionality, so…how is it better? Plus, if you’re going to want to do anything even slightly complex, you’re going to have to go with an If/Else in both languages anyway.

    3. Event Handling Code
    So this isn’t even an argument, I’m pretty sure you just threw this in to get an even 10 reasons. Unless you think "I prefer clicking here and here instead of clicking here and here" is an argument…and like "point" 5, this is an IDE thing. "My method completely ignores x, so x is bad!" Nope. Your method is bad.

    4. Stupid symbols
    So most of your "arguments" hinge on "I don’t like hitting one extra character" but you prefer typing out a full english word (which those "comparisons" aren’t correct by the way) instead of && or || (which are the accepted symbols in EVERY OTHER LANGUAGE for a reason). Why even learn to code? Just write a compiler/language that reads pseudo code! What? People have tried that and they suck? Hmm.

    5. Autocorrection
    Again…"The IDE sucks so the language sucks" is just silly. "JGrasp doesn’t compile Ruby code so Ruby on Rails is worthless!" That’s the same argument, see how ridiculous it is?

    6. Functions
    …I sincerely hope you don’t need me to explain libraries to you, or that VB has JUST as many things that aren’t built in as every other language.

    7. Semicolon
    Another thing that almost every other language uses for various reasons, but you don’t want to type a single character that’s in the HOME ROW that explicitly states the end of a line so its bad. But again, you want to type OrElse instead of ||. Got it.

    Also your response is completely childish. Pressing a single extra key that requires NO finger movement vs. not pressing the key is NOWHERE NEAR using matches vs. rubbing sticks together for 15 minutes until you get a fire. Are you kidding me? A better example would be "I just hang up the phone and leave the other person to figure out when I’m done talking instead of just saying ‘goodbye.’" Except that saying goodbye requires more effort than typing a semicolon.

    8. Variables
    You’re seriously defending "Dim" as "more logical?" Did I fall into a hole and end up in bizarro world? And once again, you complain about a freaking semicolon but you want to type a full sentence instead of just the variable type. "Dim myString as String" is way more ridiculous than "string myString;" And yeah, I would introduce someone as "this is my friend, John" or "this is my boss, Bill" rather than "Person Bill is my boss!" because I’m not insane.

    9. Strictness
    Once again, sure, you’ve pointed out a difference, but is the code doing a ton of implicit things that you have to debug later good? Anyone who’s worked on code that ANYONE ELSE has touched would immediately tell you "hell no." I’d rather type a few extra characters here and there and know what my code is doing, rather than do research into how the compiler works just to find an error the LANGUAGE introduced because its "not strict."

    10. Arrays
    Or you could not use arrays because they’re very very VERY rarely the best function in ANY language unless you’re doing some INCREDIBLY simple, programming 101 stuff. That’s like saying "my modern programming language is better because it maximizes the efficiency of vacuum tubes!" …wow, cool, why would ANYONE care about that?

    I’ve coded in both. They both compile to the same shit. An actual account of the pros and cons of the languages would be nice, but instead…we get this. Its interesting to me however that every VB worshiper I’ve met in my life has been older though. Sort of seems like something you pick up as your first language when it came out, but absolutely NO ONE in their right mind would switch to, since everything is so fundamentally different in VB than any other language (Dim vs just stating the type, english language operators, willy nilly implicit decisions made by the compiler, etc etc). Working better with a meh IDE is the only solid point you made, so forgive me for not being convinced.

  • me_pollack

    sorry brother
    vb was going to be discontinued my MS but the uproar from untrain devs was huge

    VB.net has always been one revision behind c# and in many instances the functionality never is just not there.

    the IDE fights a good programmer by trying to write the code for them and in some instances the basic features of the IDE dont work in vb.net

    Besides all this VB.net is for untrained developers to create bad code using a language that is obsolete.

    Remember when .net came out MS said if you programmed vb6 switch to c#. The problem is most vb.net coders do not have the ability to switch to c# it is above them

  • gbmarshall

    I’m a long time vb guy. I understood classes. The java guys seem to think that if they have curly brackets that they are somehow more object orientated.

    Anyway, I think it comes down to what you start learning in.

    HOWEVER, reading, typing VB is way faster, easier – such that you can think about the programming task problem and NOT the syntax problem. What bugs me is when I edit some c# code and change a method or property name of an object by double clicking on it – you have to end up typing the whole thing to get the case right – intellisense WON"T solve it for you. In VB it will figure out that you mean Console.WriteLine when you type .writeline.

    My real question is what is real popularity of VB vs C#?
    Why doesn’t Microsoft do more to make the VB language more popular? Change it’s name to B# for example?

  • njsokalski

    Incorrect Spelling vs Incorrect Typing
    Even though I still and will continue to stand by my philosophy that the best language for you is the one you are most comfortable with and have the most experience with, I want to point out one important reason I think VB.NET is better. People make typos all the time, we’re human, it’s unavoidable. A misspelling will be caught by Visual Studio (unless it is the name of another variable, property, etc.). But in C# if you enter incorrect capitalization, you could easily end up having it do something you don’t want, and it will be much harder to find while debugging. In VB.NET, Intellisense will usually just fix the capitalization for you instead of thinking it is a different name. This not only makes debugging easier, but it can help enforce usage of more descriptive names instead of trying to come up with and reuse tiny short names when that is not necessary.

  • Michael Finn

    Best reason to choose C# over VB.Net
    My bottom line:
    C# programmers get paid more for doing the same work.

    Spent many years doing VB, starting in version 2.0.

    Unfortunately, most people doing the hiring don’t think VB or VB.Net programmers worth as much as C# or Java coders.

  • Brain2000

    VB programmers get paid more for doing the same work.
    Michael Finn, any programmer worth their salt understands the .NET framework underpinnings, and therefore knows that both VB and C# are essentially the same language.

    Those programmers make more than your standard VB or C# guy who doesn’t know the different.

  • reddak

    Fun and should be taken light-heartedly
    I use both vb dan c# and I have to admit vb helps me produce a lot faster. c# is great too although its being case-sensitive sometimes is annoying. As much as I love vb, there are some points I disagree. Redimensioning arrays can be done much simpler using array.resize in c#. Also event handling code is handled automatically in c# when you rename a control, just like in VB. Set/Get takes longer codes in vb but thanks to intellisense we dont have to type much. On the other hand, set/get in c# is much much shorter to type, hence no intellisense is needed.
    In the end, it’s a classic ‘apples and oranges’ comparison, and the comments that follow this fun article make this topic serious, which in fact it shouldn’t be. So relax guys.

  • falseprophet

    Excellent article
    You can tell it’s all true by reading the hilarious outrage responses from all the c# goons. I use both. c# sucks by comparison. Cryptic academic nonsense just getting in the way. Use VB.NET when you want to do some real work.

  • pgmr777

    It’s not the tool
    I can write an equally crappy program in C#, VB, or any other language/platform you care to name. It’s the carpenter, not the tool bag.

  • matt99

    Agree completely.

  • joeb99

    Most of what you say is opinion, of course, and I respect that. Some of your arguments seem a little petty, though.

    But if you’re talking about the IsNumeric function, I think C# has you beat here. All the primitive numeric types include a static (shared) function called TryParse which not only tests whether a string can be converted to a number, but actually does the conversion if possible, without raising an exception if it’s not possible.

    As for “Autocorrection actually working,” you might consider code snippets. There are many available in Visual Studio that will generate code for common constructs (Including different types of properties) and render your argument about Autocorrection a moot point.

    As far as resizing arrays, you seem to have missed the Array.Resize function. Perhaps that wasn’t available in the version of the .NET Framework you were referencing, but given that people are still commenting on this article (2 weeks before this comment, in my case), I think it’s worth keeping up to date with breaking changes.

    I grew up on VB6, but I use and understand C# given that the overwhelming majority of code in the .NET universe is written in this language. And if we’re going to start laying it out on the table, consider:

    * C# in Visual Studio includes powerful method refactoring, renaming, and interface imnplementation functionality not available in VB.
    * One good VB thing you missed: The ability to create application-wide IMPORTS statements through a tab in Project Properties.

  • joeb99

    Just because someone disagrees vociferously with you doesn’t mean you’re correct.

  • joeb99

    The only case in which this is true is if you misspell a variable declaration. And even in that case, Visual Studio Intellisense will attempt to continue using the same misspelled name you created in the first place. So I’m not buying this argument, at all.

    • bimplebean

      Actually, no it won’t. If you declare the variable a certain way in VB.NET, then every time you type it the case will be automatically fixed. If you misspell it, the IDE will flag it as an error if you have not declared it. If you have declared two similar variables and you type one instead of the other, then yeah, VB wont help you there. C# won’t either.

      • joeb99

        I think we’re talking about 2 different things here, the capitalization issue and the “different variable names” issue.

        The VB.NET IDE will fix capitalization for you in *subsequent uses* of the variable *after* declaration. For example, if I type in…

        Dim myName as String
        MyName = “Pete”

        …the VB IDE will prompt you to change the second line to “myName” there (Or IntelliSense will do it for you on the initial typing, if you let it).

        Thing is, the C# IDE also does this (with a valid C# declaration stmt in line 1 of course). C# will not just end up “doing something you don’t want” (Citing the OP’s words), it will flag you with the same error. It’s not as if C# just lets you create variables that aren’t typed. What is this, JavaScript?!?

  • joeb99

    As a trainer, I see no new courses being produced by Microsoft Learning that include Visual Basic. In fact, the most recent Microsoft Official Curriculum VB.NET language course is one that uses Visual Studio 2010. So draw your own conclusions.

  • joeb99

    I think your characterization of VB as only being used by “untrain[ed] devs” is false and just a little rude. As a consultant and trainer, I see plenty of demand for VB.NET, especially in the Bay Area (specifically San Jose) and the DC area, among others.

    “Most vb.net codes do not have the ability to switch to c# is is above them.” Please tell me you’re kidding. Because otherwise I have to believe you’re just being arrogant and ill-informed.

    • GrowABrain

      I know, right? I’ve seen thousands of examples of hideous C# code out there and elegant examples of VB.Net. They compile to the same damn executables in 99.999% of the time. There is almost nothing that you can do in C# that you can’t also do in VB.Net. C# does nothing to promote good programming practices, either. That’s up to the developer.

      On a side note: It was Visual Basic that promoted bad coding, for sure (way too forgiving of a language).

  • Hye Kan Chu

    his profile mentions…”providing SQL Server, .NET, Visual Basic and (reluctantly!) C# training for businesses in the UK” so I think he has expanded his mind

  • bimplebean

    I’m having to learn C# as part of my job search and could not agree more with the above. VB just makes the everyday things you do hundreds of times EASIER. There are tremendous inconsistencies in how the code syntax is implemented as well.

    I miss the 90s, when VB ruled. But C# is the law of the land now. I must be assimilated.

    • Tegaton

      Well done, but with the depth of knowledge I have, i cant learn C# just to get a job.

      • bimplebean

        There are so many high paying C# jobs out there in LA — and not many VB.NET jobs. It’s just how things have gone. :’-(

  • bimplebean

    Have to agree with joeb99. Plus, since both use the .NET framework the argument that C# is more capable than VB is also incorrect. This may have been true in the 90s, when C++ was the domain of wonky, brilliant programmers and VB was the domain of regular guys who just needed to get stuff *done*, but not now.

    Sadly, since this perception lingered into the .NET era, C# programmers were sought out by all while VB.NET languished. There is no technically valid reason for it, it’s all perceptions and suppositions.

  • Jannet Delrosario

    My children needed Mp2 enrollment system form yesterday and were made aware of an excellent service with a ton of fillable forms . If you are interested in Mp2 enrollment system form too , here’s a link “http://goo.gl/qvKX2H“.

  • Tegaton

    Perfect.. And there are more to this.
    I thank heaven i learnt VB, its just like you are speaking english to the program.
    Your code is neater.. C# was developed by Microsoft to drag java (and all related languages) and c++ developers to the .NET framework so they wont have to start allover like kids. The plan worked so much..

    • dasiths

      I was a VB6 developer and a VB.NET developer for more than 10 years. C# is a better language is almost every way possible. There just too many lazy practices VB.NET encourages developers to do. Your argument is invalid and most java and c++ developers have a better understanding of OOP concepts than VB6 developers. Nice try though.

  • AliReza Sabouri

    awesome article but please add these too :
    1- working with XML : you can just type xml directly in vb
    dim x = testValue
    2- pass parameter’s to properties
    Property pr(p1 as integer) as String

  • Joseph Miloshevsky

    I know you people think VB is the greatest thing since sliced bread, but you fail to realize that by knowing C#, it makes it simple to transition to other C-based languages like C++, Java, JavaScript, PHP, etc., etc., the list goes on. There is no language transition advantage to being fluent in VB unless you want to learn more VB. Additionally, VB is so much more verbose than C-based languages. C# is far more short, sweet and to the point.

    Also wanted to particularly address some numbers in the author’s list above:
    2) The VB switch statement is not a pure-breed switch statement, its an ifswitch bastard love child. If you want to compare things, do it in an If statement, that’s what its designed for. Switch statements are merely supposed to be selection, not comparison.

    3) I could type that one line of code much faster than you can select items from two drop downs at the top of the screen.

    4) The author is forgetting that ‘And’ is not the same thing as ‘&&’. ‘And’ doesn’t short-ciurcut, so something like ‘If obj IsNot Nothing And obj.prop = 5 Then’ will throw a null argument exception if obj is nothing, because the if statement doesn’t stop execution after the ‘obj IsNot Nothing’ returns false. It next tries to evaluate the ‘prop’ property of null (or, oh wait, you guys call that ‘Nothing’ for some strange reason…). To avoid this situation you either need nested statements or to use ‘AndAlso’ instead of ‘And’. Not sure when you would EVER need to use only ‘And’ and not ‘AndAlso’. The reason comparison operators make C# look like it was written by academics is because it was. Those C-based operators are short and sweet and make C# much cleaner and neater replacing the 7 characters of ‘AndAlso’ or the six characters of ‘OrElse’ with simply ‘&&’ or ‘||’ respectively. Don’t get me started on ‘Not’ vs ‘!’.

    7) You complain so whole-heartedly about a single semi-colon at the end of each line, but you don’t mind adding ‘Dim’ and ‘As’ for every variable declaration and ‘End Something’ at the end of every block of code?

    8) ‘Dim anInt As Integer = 0’ is so much less aesthetically pleasing (and so much more verbose) than ‘int anInt = 0;’ What the hell is ‘Dim’ anyway? Do any of you even know???

    10) Array resizing? Why would you want to do that? If you want an array that can be resized you should probably be using a List, that is what it is designed for.

    Additional comments: VB is too verbose for my liking. The brackets “{}” in C# make code look less bulky and more compartmentalized. Variable declaration is SO much shorter without the ‘Dim’ and ‘As’.

    Conclusion: Because I understand c-based languages I can switch between multiple languages with relative ease. Also, there is WAY more support behind C# because a vastly larger number of .net programmers use it compared to C#.

    • matt99

      Yes we understand that Joe, that’s why we all learned it, it’s just a shame that the worst one won this time.

      • Joseph Miloshevsky

        A portion of my comment was to show that visual basic IS the worst one, that’s WHY C# won.

        • matt99

          Just like McDonalds won the hamburger wars cause they make the best one. 🙂

    • Hestia

      @Joseph Miloshevsky

      Pretty need explained, I really can’t stand the VB syntacs “DIM, AS, …”

    • Aby Kuruvilla

      I’m a software engineer and have done projects in VB .net ,Java,C ,Perl and PHP. The reason why I like VB.net is that it’s pretty straight forward,like to set a text of label or textbox it’s objectname.text=”text”. Same goes to a lot things like type conversions and event handling is the best ,you can simply make a function respond to event by adding a line ‘handles objectname.eventname ‘. But in java it’s a pain in the ass and so is dealing with threads. The and,andalso,or etc. is in fact longer than && and | but intellisense make it much easier.
      I personally hate the ‘Dim’ keyword it’s an unnecessary evil. I ported an 8085 emulator from vb to java and it was like twice as big.
      UI designing is super super smooth on visual studio and for java and android it is just pain in the ass.
      I never tried C# but I know it closely resembles java and I hate java personally.The developer of perl said that “Java just makes you feel that you have coded something big but in reality it can be achieved in 10 lines in some other language”

      Reason why I still carry around java is because of it’s inter platform support .

      • Joseph Miloshevsky

        In Java, to set a label’s text it is labelName.setText so I’m not sure how you think this is more difficult.

        Type conversions? Seriously? So CType(someObject, someType) is better than (someType) someObject???

        I’ll grant you that the ‘Handles’ syntax in VB.NET is convenient, though I suppose every language has to have SOMETHING that doesn’t suck.

        Intellisense does make a lot of things easier, but holy crap can it be a hindrance sometimes. It’s huge pop ups cover code that I’m sometimes trying to read while I type. This drives me absolutely insane! Sometimes it doesn’t work as expected either. For example, trying to figure out how to call a specific cell in a datagridview by using the datagridview.Item property can be called thusly: dgv(columnIndex, rowIndex) but intellisense won’t show the arguments for this property unless you litereally type ‘dgv.Item.’ That is one example of many. Intellisense, for all its convenience, becomes more of a hindrance once you’ve mastered VB.NET because you don’t really need it to tell you how to finish things anymore. If you can type quick enough, it actually slows you down in some instances.

        I find that most people who are very comfortable with VB are not usually comfortable with OOP based languages like Java. Most VB programmers want to make everything global or shove everything in Modules. This completely goes against the OOP structure. I also find that those who bathe in the VB glory are not as educated in the theory of computing as those who dislike it. That is, however, a general blanket statement, and is not unanimously true. But, none-the-less, VB does make it very easy to do things that I personally feel, should be better understood first. That’s why Java is HARD because computers are not simple, and programming them is usually not either. You have to actually RESEARCH how stuff works sometimes to make something work in Java. But also, one of the advantages of an OOP-centric language like Java is that you can inherit from things and add functionality to personalize anything. Over time you can end up with all the same functionality of VB but customized to YOUR needs. Of course VB.NET contains this same functionality, but it is an after thought and a by-product of being part of the .net language family. Java was DESIGNED to be OOP-based.

  • GrowABrain

    My biggest regret is being stuck in VB.Net since DotNet’s inception in 2002. There are almost no jobs for VB.Net developers anywhere. I don’t blame the language inasmuch as I blame the “VB” stigma that VB.Net got. Visual Basic and VB.NET, to recruiters, managers and most C# developers are the same language – which is completely wrong (VB.Net is OOP, has routines that compile bit for bit to identical runtime code as C# (and the other CLI languages), is what VB should have been a long time ago) . The stigma that VB.Net has also suffered, over the years, is from assumptions that anyone who codes in it, is somehow, not a real developer or even an amateur. Because of these misconceptions, the industry flushed VB.Net down the drain.

  • GrowABrain

    My experience is the opposite. VB.Net devs get paid less (thanks to the stigma of it being confused with Visual Basic or that somehow only amateurs use it). I’ve developed a multi million dollar application a decade ago, and heard via the grapevine, that the entire application is being converted to C# (WTF?) because it’s somehow “better”. That poor company will spend half a million dollars to “improve” nothing (except the contractor’s wallet).

    • dasiths

      No one spends millions just converting it to a different language. Maybe while bashing C# you missed the real reason for the re write like breaking down the monolith you built into micro services that are scale-able for a SaaS solution?

  • Robert Blair

    The IT industry is a fad-driven, politically-correct pile of steaming proverbial.

    It is also cyclical (you young-uns have yet to find that out). When the cycle turns a lot of people will very unhappy.

    A long time ago I learnt to ignore what “the experts” say, or “the gurus”, etc.
    Decide what you are trying to do, and use whatever tools will do that.

    An awful lot of developers think what they are trying to do is: “cut cool code just like the cool dudes, using the cool tools that the cool dudes use”.
    In fairness, that is what their career demands. The people who interview them have the same ideas.

    In my case, I have a 300,000 LOC software system to maintain, extend, port (and shrink – the Express version).
    The “cool” stuff doesn’t cut the mustard for me.
    VB.Net, SQL Server (and MySQL) does.

    • dasiths

      Typical stawman response. I guess you’ve never developed any scale-able or bigdata consumer software in your life. You probably only ever developed for Windows using Winforms. The story of the toad in the well giving advice comes to mind. There is a whole world outside your little use case. Do you think a relational database will work for Google? Have you even seen how apps are developed for mobile devices? How much SaaS development have you done? How micro services and discovery works? Cross platform?

      Just because you wrote 300,000 LOC for windows apps doesn’t make you a good developer. If anything being stuck in one technology for many years makes you the opposite. I’ve seen many old developers who hit their ceiling and they get pissed at young developers who are more skilled and knowledgeable in a few years than they did in 30. As developers we can’t afford to have an ego. Be open to learn new things that SMARTER people than you preach. Maybe they have a point and maybe that’s why they are hired by Facebook and you aren’t. 😀

      The world of software evolves. If you sit their with one technology that solved problems 20 years ago chances are it’s not the best technology to solve newer problems.

  • dasiths

    Writes a simple winforms app and thinks that is “real work”. Sure. Carry on.

  • blaise

    Earlier I used vb.net,,
    I see vb.net is the most outstanding language for programming because it uses basic English language
    to understand or traced whatever you want from your code.

    Now, I used Delphi(INNO SETUP) and c#

    Why? I also understand or read codes of c/c++.

    if you want to learn/use/concentrate/code ONLY 1 computer programming language then CHOOSE VB.NET!

  • Ammar Hassan

    It over now.. C# > Xamarin | HoloLens

  • Daniel Morrow Borden

    Great article – totally agree – tired of these snooty C# and Java programmers who think they’re superior – the bottom line: VB.Net is much easier to read and faster to code – I’m not saying C# is inferior but how about a little respect for us old timers – pick the tool that works for you while respecting the other guys skills and what he or she has to offer – and don’t get me started on Visual FoxPro (we’re the Rodney Dangerfield of programming languages “We get no respect” … and it was a true orient oriented programming language long before VB.Net and C# !

    • Avik B

      Great article – totally agree

      c# and vb both are good. This article is purely biased. The author mentioned only WHAT HE THINKS as negative about c# or c based language in a nutshell.
      the guy complain about semicolon yet ignore the stupid Dim in VB. The switch case argument is even more stupid.
      Also for some reason less strict typing is now good. I don’t find it funny when you have a large project and some guy just randomly thought of comparing two different data types when they were declared in another class or something.

      Also comparing between symbols when they are completely different.
      I really don’t get the point of this article being great, but more like someone who does not like changes or is just ignorant or just hate c#.

      this guy actually describes the shortcoming of this “Great article”

      I’m not saying C# is inferior but how about a little respect for us old timers

      c# and vb both are good. This article is purely biased. The author mentioned only WHAT HE THINKS as negative.
      Also “respect” is not something you get for being just old. You have to earn it. I don’t think you get less respect for just using VB over c# but how you write your codes.
      Ofcourse if someone persistently uses a old technology when there are better alternatives available(visual fox pro….maybe) i highly doubt anyone will praise him instead new developer who will maintain that code will curse that person who still uses that old tech, not because it is bad but it is not relevant anymore.

      “We get no respect” … and it was a true orient oriented programming language long before VB.Net and C# !

      Microsoft has ended fox pro long ago. There are BETTER alternatives. Instead of moaning over dead and outdated technology you should learn to move on.

      • Daniel Morrow Borden

        I’m not going to disagree with your argument – the point I was trying to make and failed to do was 1) we do need to move onto Neewer technologies 2) we should respect our past and the programmers who came before us 3) you’ll will eventually be on the other side of this argument when some youngster comes along and flames you, trust me you’ll feel the sting – and since companies don’t move at your pace they still need to support older technologies that won’t go away none to soon – it’s just reality – I was in your shoes and that the shoe is on the other foot I’ve have time to reflect and wish I was more respectful of those who came before me – I program in many languages and what I learned was pick the tools that best meet the needs of a project – you don’t take shoe to hammer a nail.

        • Avik B

          you are right. I think the disrespect or frustration comes from maintaining any legacy code. Even sometime there are bugs that will make your head smash towards wall and since the tech is now phased out in favor of newer tech there will be no more official support and workaround issues brings even more issues.

          I use php with MVC design pattern and c#(mostly WPF) with MVVM design pattern. And recently i joined an institute where they use VB6. I was furious to see such an old technology was being taught to new generation of student, for sake of maintaining legacy code in industry. It is a painful. Even installing it on newer OS is painful, i ended up running Windows XP through VMWare workstation for windows 10, which works perfectly fine but these types of thing makes one really disrespectful and furious towards people who are senior IT tech who decided to still use that software.
          And the software is a huge mess, consists of codes that even makes javascript looks good. This makes me really angry.

          I personally don’t hate VB or anything. If they’ve used latest VB.net maybe it could’ve been way better.

          I learned was pick the tools that best meet the needs of a project

          It wouldn’t have been any problem if that was the case. But often times you will already have legecy code written by previous devs and some higher ups just wants you to maintain and fix issues with it, instead of porting or even rewriting it, even in phase. Eventually you will hate your job even more than you will love it.

          I’m a technical architect who uses Java, C#, VB.net, delphi, COBOL, ASP.net, Sybase, Oracle, Sql Server

          That is impressive. My knowledge is quite small only php, MYSql, c#, c++ and learning VB

          I’ve had my share of C# programmers who worked with me who couldn’t program their way out of a paper bag

          … looking at some people at my institute who knows very basic OOP and mixes it with Procedural programming and creates even bigger mess and then teaches it to other people.

          One of the benifit of moving towards newer tech is that support is better and if that tech is open source problem will get fixed quickly.

  • giantloadinmypants

    I’ve developed in both languages and besides syntax they are the exact same. I prefer VB.NET as the flow of typing syntax seems more natural but that is just my preference after working in both languages. Also think VB is more readable. I’ve never come across any code example in either language that couldn’t be converted from one to the other using a syntax conversion tool. This whole argument is purely semantic and about personal preference. Your programming language does not define your skills as a developer or to problem solve. If two carpenters had the exact same saw but of different brands, could you determine which was the better carpenter by that. What this argument feels like.

  • elmer

    After programming with VB for decades I decided to see what all the fuss is with C# and did an application in that. Not impressed and totally agree with your article.