17
votes

I've been in workplaces where, at the start of a project, the "Should we use VB.Net or C#" question has been raised.

Granted, it's probably less common to have to make that decision now than it was in the early days of .Net, particularly given the trend towards language convergence, but it can still be a heated debate.

So, between VB.Net and C#, Which language do you prefer and why?

4
  • 2
    Just to throw a spanner in the works, there are some products (e.g. WF designer in VS2010) that only support VB.Net syntax...
    – Damovisa
    Sep 7, 2010 at 23:56
  • Around here, C# programmers get paid more then the VB.NET programmers.
    – SeanX
    Sep 9, 2010 at 0:41
  • I removed "The eternal" part of the title that seems actually "unconstructive". The question itself is very useful and the quality of the answers is a much better indication of how is constructive that the infamous "six guidelines".
    – Wizard79
    Oct 8, 2010 at 9:59
  • I often wonder if that will reverse itself if the trend continues towards C# making people with VB.NET experience more scarce and able to command a higher premium.
    – JohnFx
    Jan 14, 2011 at 16:22

20 Answers 20

29
votes

I prefer C# over VB.NET because

  • it's easier to find programmers/jobs:

alt text

  • it's easier to find help:

alt text

(from stackoverflow)

5
  • 3
    +1 SO is fast replacing google as my preferred source of programming help. Sep 27, 2010 at 0:07
  • 12
    The question is does the 10x more C# tags mean the subject matter is covered better, more usage or it has more problems? +1 on job availability.
    – JeffO
    Oct 8, 2010 at 13:11
  • 12
    I would be wary of any employer that wouldn't hire a VB.NET programmer to do C#. Oct 8, 2010 at 16:03
  • @Anonymous: SO replaced google by day 2 (over a year ago). FireFox at home has SO, MSDN, and Programmers as my 3 main search sites.
    – IAbstract
    Jan 14, 2011 at 16:21
  • @IAbstract, lol, so true. Jan 16, 2011 at 21:01
27
votes

I hate VB.NET. The days I still spend using it are the days I regret. That said, my tastes are a part of my situation and experience, and don't necessarily have any relevance to what you're doing...

I think it is important, when comparing continually-evolving languages like C# and VB.NET, to look back at their history and see how they arrived at their current state:

The original advantages of BASIC on microcomputers included size and simplicity (small, easy-to-parse syntax made for small, reasonably fast interpreters and left room in memory for the actual program and data), an interactive environment that enabled experimentation, and a syntax that eschewed terse symbols and structures for a reasonably clear, English-like syntax. It was poorly-suited for large, structured programs however, and tended to encourage spaghetti code. Still, its availability and simplicity made it an excellent choice for an introduction to programming.

QuickBasic updated the syntax to allow for large more structured programs, and added compilation for faster execution.

VisualBasic provided a powerful, easy-to-use form builder to enable rapid construction of GUI applications, while adopting the QB syntax for use in scripting these UIs. It worked best when used to create UIs for low-level logic provided as pre-built components (usually written in some other language). Over time, the syntax became increasingly large and inconsistent as new features were tacked on. The focus on drawing up a UI first and then filling in bits of script worked well for small, UI-centered apps, but tended to encourage copy-paste programming and a variation on spaghetti code while discouraging re-use, complex data structures, and separation of concerns. In the minds of many, "VB code" became synonymous with "big ball of mud"; "VB programmer" with "inexperienced hack".

VB.NET is a VB-like language on the .NET platform, an attempt (not entirely successful) to clean up and modernize the overgrown VB syntax. It was not perfectly compatible with existing VB code, and made no effort to provide compatibility with VB forms (arguably the most important part of VB) whatsoever. This left many VB product owners with the unpleasant choice of effectively re-writing their applications in VB.NET (dealing with subtle incompatibilities in every routine that wasn't carefully examined) or actually re-writing their applications in C# (dealing with an unfamiliar syntax in addition to the new runtime library and forms designer). Most VB.NET users were VB users who stuck with it for the syntax alone, many using it as a crutch while learning C#. As a result, it immediately took on a reputation as a haven for programmers who had become stuck in their ways, unwilling or unable to expand or improve their skills.

At this point in time, VB.NET continues to evolve, slowly shedding baggage while picking up new and interesting syntax (LINQ, XML literals). Still, it retains almost none of the original advantages of BASIC: it is a large, complex language with a fairly steep learning curve and limited opportunity for interactive experimentation.

  • For old programmers who have stuck with it over the past 30+ years, it's not a bad choice, provided they don't limit themselves to it.
  • For new programmers, the increasingly-vague resemblance of VB programs to English is hardly worth the bizarre nods to backwards compatibility and social stigma.
  • For new projects, VB.NET is a strange choice unless the project is heavily involved with one of the few tasks the language is optimized for: integration with poorly-typed COM components (Office...) (though C# 4.0 reduces this advantage considerably), or inline XML generation.
3
  • 4
    With C# 4 I don't see any advantage VB.Net still has with regards to COM integration. I think inline XML generation could be a useful feature; I try not to use XML (and have been successful for the last 5 years!), but if I have a .net project that needs to generate lots of XML I'll probably create a VB project just for the XML generation. Sep 26, 2010 at 3:43
  • 3
    I was enjoying reading your answer but it seemed to stop suddenly. You provide history of basic that is interesting and I assume correct. I was expecting to find out why you dislike VB.NET and/or why you like C#. "For new projects, VB.NET is a strange choice" Why?
    – Tim Murphy
    Oct 8, 2010 at 11:11
  • @Tim: I dislike VB[.NET] because most of the code I encounter is untyped spaghetti code written by programmers who picked it up on the job years ago (or were taught by such coders). That's not necessarily a good reason for anyone else to dislike it though. A better reason is simply that the language has made far too many concessions to backwards compatibility... and yet isn't actually backwards compatible. So unless you're looking to write new untyped spaghetti code...
    – Shog9
    Jan 14, 2011 at 16:37
20
votes

I'm familiar with both, but did a lot of my early programming work in VB4, VB5, and VB6. Now that both languages in .NET have gone through a few iterations and converged quite a bit in their capabilities I think the debate is downright silly, much akin to "what's your favorite color."

Personally, I like both of them for different reasons.

VB.NET
A lot of people talk about how the C# syntax is more intuitive, but that is very subjective and based heavily on what you started out knowing. I would argue that if you were completely objective VB.NET syntax is probably more intuitive if you don't assume prior knowledge in another language. For example, given the same program in C# and VB.NET which do you think would be more decipherable to someone who has no knowledge of programming. Seems pretty clear to me.

The other thing that is nice about this syntax, is that is is much more explicit about closing structures (END IF, END WHILE, NEXT X) compared to the bracketing model. It makes the code a bit more readable and often allows the compiler to be more precise in what line number exactly is causing compile errors. If you've ever gone on a missing bracket/semi-colon hunt because of a compiler error 50 lines away from the problem you know what I mean.

Also, in the VB.NET win column in my opinion is lack of ==/= as comparison/assignment operators. The rare benefits of having a distinct operator for each is never going to offset all the (sometimes) hard to discover foibles that it helps create.

Finally, I hate case sensitivity in programing languages. One of the complaints about VB is that it has so much baggage, but C# carried forward the albatross of C's case sensitivity. I have never been in a situation where I wanted two identifiers in the same scope to differ only by case. It just makes for busy work and slows me down. VB.NET gets some points over C# in this regard to me.

C#
Programmers love to be concise, which is why I think they generally favor this syntax. It just has a certain aesthetic appeal. However, from a completely practical perspective I like it because it is so similar to languages like Java, JavaScript, and C++.

Since I do a lot of web development that requires both server and client side programming, I find it easier to mentally switch between C# and JavaScript as I am frequently required to do.

Also I like the fact that, for the most part, that if I ever had to transition to doing Java or C++ programming, I would have a bit of a head start if I were using C# most of the time.

7
  • 3
    +1 for the web development comment. I use both VB.NET and C#, depending on the project, and find it much easier to go back and forth between C# and Javascript than VB.NET and JS.
    – Paperjam
    Sep 8, 2010 at 22:54
  • 2
    'I have never been in a situation where I wanted two identifiers in the same scope to differ only by case.' is pure subjective. This is exactly one of the reasons why I prefer C#. When applied correctly and consequent, it might make all sense to the world to have for example a parameter in the constructor with the name name and a public property with the name Name and then assign it through Name = name;. As long as you keep a coding standard, else I agree, then it can cause confusion.
    – Aidiakapi
    Oct 18, 2011 at 11:52
  • 1
    Needing a coding standard to avoid insidious bugs like that, to me, is a negative. The presence of a workaround doesn't excuse it.
    – JohnFx
    Oct 18, 2011 at 12:31
  • It should be hard to write sloppy code in any programming language. Case insensitivity just encourages sloppy code. Case sensitivity does not slow you down at all, what kind of an argument is this? It slows you down when you make a lot of typos and then it's a good thing you are being slowed.
    – Falcon
    May 17, 2013 at 16:30
  • It is only sloppy code because the compiler can't interpret it. If all compilers were case insensitive it wouldn't matter a lick. Our job is not to write code for print in a magazine, it is to write code that does a job. "Sloppy" case doesn't inhibit that one bit.
    – JohnFx
    May 18, 2013 at 0:11
19
votes

I prefer the bracket syntax of C-style languages to the more "verbose" syntax of BASIC-style languages.

My introduction to programming was with Turbo Pascal. (The bit of BASIC programming I did on the Commodore 64, as a child, doesn't really count.) After learning Java I never looked back and have preferred C-style syntax.

5
  • 4
    ""verbose" syntax of BASIC-style languages." - Yea, I never looked at VB again when I saw if something then code endif
    – TheLQ
    Sep 7, 2010 at 14:39
  • 1
    Heh, I was surprised that someone downvoted this. (I expected it to be the Emacs vs Vim question.) Sep 9, 2010 at 16:23
  • 3
    @TheLQ: and also the AndAlso !
    – Gerry
    Sep 27, 2010 at 1:29
  • I miss my Turbo Pascal days. That was a lot of fun. Oct 8, 2010 at 10:44
  • 1
    I find the bracket syntax easier to read. One generic symbol for a block rather than several context specific words.
    – Michael K
    Mar 17, 2011 at 12:53
11
votes

They are functionally the same, there is nothing you can do in one you can't do in the other, and for the future Microsoft have pledged that the language teams will develop both evenly so this is equivalence unlikely to change.

The differences now are purely cultural and personal. This article is interesting reading on the differences between the cultures of programmers using C# and VB.net

[Note: Although I'm a C# dev myself, the linked article's conclusion does not necessarily reflect my personal opinion, it's just an interesting alternative approach in the debate]

3
  • 8
    It's not entirely true: for instance, VB.NET doesn't have iterators, which are a great C# feature. Oct 18, 2010 at 0:49
  • 2
    C# doesn't have VB.NET's XML literals: blogs.msdn.com/b/wriju/archive/2008/02/07/… (although I am not a fan of the feature for architectural reasons, it IS cool) Mar 17, 2011 at 15:39
  • @Thomas @WeekendWarrior: Good examples, but just to point out, I said "Functionally the same", which they are. They both compile to IL, so the same set of functionality is achievable. These examples are just language shortcuts for functionality that can be achieved in other ways. Mar 17, 2011 at 16:58
8
votes

I came to .NET from C and C++ (with a bit of Java, Ada and Pascal thrown in) so C# was the natural progression for me.

If a job came along that required VB.NET I certainly wouldn't turn it down.

6
votes

I've done a lot of work with VB.NET, but I understand enough C# to get the gist of what is happening in the code. My current preference is VB.NET because I am most familiar with it (obviously), but I don't really have a preference between verbose BASIC syntax and C-style syntax, both are very readable and understandable to me.

Most of my coworker's programming background is COBOL and VB6, so VB.NET was the more comfortable .NET language choice for us as a team. There wasn't a solid reason for us that made learning C# a requirement since they are functionally the same.

That said, learning C# is most definitely on my list of things to do.

1
  • 2
    I´m in the same trouble. :) and I prefer VB.NET at the same way I prefer coke not pepsi. But, if we´ll starts a new project, C# is the best choice because we´ll find more programmers that knows and prefers C#. I understood that MS strategy for VB was to bring up VB community to the .NET plataform.
    – Pagotti
    Oct 8, 2010 at 12:46
5
votes

I prefer C#.

I started as VB.NET programmer but with passing of time it became obvious that quite a lot of new features are coming first to C# and then later to VB.NET (e.g. automatic property). And community surrounding C# is much more lively than VB.NETs one.

Additionally, if you intend to learn Java or similar language, C# is better starting point - syntax is almost same in all C-derived languages. Although this would not be tipping point for me since syntax is something you can learn quickly anyhow.

3
  • 3
    "features coming to C# first" It's not always that way, though. See stackoverflow.com/questions/181188/… (Just to throw another spanner in the works) Sep 16, 2010 at 20:48
  • This is where I'm at. I'm still fond of VB, as it's where I got my start, but in my opinion C# has better syntax in things like lambda expressions. On the other hand, VB has XML Literals, which C# can only dream of. I think it's worth breaking off a separate VB project for heavy XML work.
    – Kyralessa
    Oct 7, 2010 at 23:02
  • 1
    With each generation of tools, the "features" arguments shift a bit. The only thing I can think of which C# has as of vs2010 which vb.net lacks is iterators; by contrast, vb.net offers named indexers, exception filters, XML literals, a an "Is" operator that's 1000x better looking than Object.ReferenceEquals, event handling that's almost done right, and a smoother IDE experience. VB.net makes it possible, albeit slightly awkward, to have field initializers use constructor parameters or safely create IDisposable objects without having to use ThreadStatic variables; C# does not.
    – supercat
    Jul 18, 2012 at 15:32
5
votes

In addition to the other answers posted here, I would choose C# over VB because C# programmers get paid more. More experience with C# = more $$ :)

I know both languages are almost the same and its really easy to switch between the two, but I think when management looks at a bunch of curly braces and semi-colons they accept the fact we are doing something they cannot do, where with VB.Net they might look at it and go "oh that must not be that hard to do if I can understand it".

1
  • 1
    I think a rather valid point that often gets overlooked depending on industry/region. Jan 16, 2011 at 21:01
4
votes

C# because I can switch between it and Java with minimal effort

VB.NET is entirely different syntax. C#, being similar to Java and other languages gives me a better position to quickly adapt to new things. Since the output of C# and VB.NET are virtually interchangeable, it makes sense to go with C#. Plus, if your company's code is in C#, you're more likely to be able to train a Java developer how to code C# than a Java developer VB. There are only subtle advantages, but subtle is still an advantage.

3
votes

Putting my personal preferences aside. As someone who's been recruiting (and trying to be recruited) lately, when we had this debate in the office the general consensus was that we should look to move to C# from VB.

Why? Because C# was more prevalent in the market (around us anyway), allowing us to recruit more easily, and be recruited more easily.

It looks like it's gone full circle; people learn C# because recruiters want it, because there are more candidates.

3
votes

Being a somewhat older dev (is 59 "somewhat" older?), I learned BASIC first on a Commodore VIC-20, taught myself Turbo Pascal (v1!), went on to learn COBOL at college, and spent 14 years developing on IBM mainframes, with brief diversions writing a medium sized apps in Revelation BASIC (a variant of PICK BASIC) and a few utilities in Modula-2, before side-stepping over to VB5 and VB6. And then came .NET.

Because of my Basic background, I thought I should start out with VB.NET, only to find that I kept trying to do things the "old" way and it was driving me nuts (okay, more nuts). Being that I had done some work in C, I thought I would give C# a whirl to see how that went. And OMG, that was like emerging from a dark tunnel into clear daylight! Totally unexpected. And I used to make disparaging noises about C being a "write-only" language -- "so hard to understand that a C programmer couldn't figure out what his own code did 6 months after he wrote it", an observation made by semi-famous novelist that I thought sounded cute at the time.

So, by virtue of being a bit unfamiliar with C, C# was paradoxically easier for me to learn .NET programming in than the far more should-be-familiar Basic paradigm. I still like VB6, but have come to love C#. The best programming language on the planet.

1
  • 1
    Interesting answer, I think this at least partly debunks the idea that the "older crowd" tend to stick to VB.NET over C# Nov 15, 2010 at 21:58
3
votes

I develop in Visual Basic .Net since 2001 and I love it and I hate it!!!

The order of presentation of these points is just based on the order in which he came to my mind...

In vb.net with visual studio, there is a visual line break between each method, property. For many people, it's not a good reason to prefer vb.net over c# but I don't understand why the c# team at Microsoft don't have implemented it. There is a add-in that draw this line in c# but thanx again Microsoft to have a c# team and visual basic team that don't talk to each other.

In vb.net, when you create a winform, you have two combobox in visual studio at the top of the editor and you can auto-generate event automatically when selecting an event on the right combobox. When you attach dozens of events each day, it can be very cumbersome to don't have this feature. With c#, you have a small button at the top of the property grid that can generate event but it's not fast as in vb.net. More, if you attach event of control in c# and delete the control on the form, the delegate created on the auto-generated code to handle event have to be deleted manually. Thank you again Microsoft.

In vb.net, when you try to modify a method that contain a linq query without modify the query itself, no problem but in c#, all the method code is locked. If you have a lots of linq queries or lambda expression, the edit and continue feature will rapidly be a good old thing. Ok, a little bit of exaggeration... but :)

In vb.net, when you create a method name and tap enter, the 'end sub' will be automatically created. In c#, do it yourself. Ok, if you have resharper or devexpress installed, it will be better but why all these little but greats features were not be implemented in c#.

In vb.net, when you have errors on your code, the errors are automatically displayed and when you correct it, these errors are removed of the stack in real time. In c#, you have to build your project to realize that you have successfully corrected or not the specified errors. Why c# team don't have put an option to verify in real time error like in vb.net. With big solution, no real time verification of error can be a very nice optimization of performance but I love to see a stack of error disapear while I correct it.

Like other person have mentionned, I think it's more easy to read vb.net condition if..end if, select case... end select but with devexpress painting bracket, forget what I said.

With vb.net, there are many many bugs in visual studio. Just to mention one in visual studio 2010, the intellisens don't filter correctly enumeration if you have the mode "common" activated instead of "all".

With vb.net, you are perceived as a dummy guy because statically, more bad programmers use vb.net instead of c# because c# is harder to learn and promote better programming practice.

Like other said, c# programmer have better chance to have a good job with more money.

In the head of customer, vb.net = guy who program in his basement with a bol of spaghetti of code. c# = wow, you are very intelligent. The fact is that it's not because you program in c#, that you make a good program but statically, yes.

With all these points, I chose to convert all my vb code in c#. I program with all the best practices of object oriented, design pattern, clean code with standards and strict syntaxe and I can program like that for 50 years but from the eyes of community, I'm not a good programmer. I will convert my code in c# with no other best practices and I will be another person; a great guy who you must respect..... :( what a joke...!!! but it's the reality.

2
votes

Here's a way of looking at it: Between SO and CodePlex, which language is more popular? C# or VB.Net?

Sometimes, following the herd is a good thing because it's the herd that's going to be able to help you when you need it. By default, C# will be faster than Vb.Net. I believe using Option Strict might equalize it though. The last time I compared IL between the two, VB.Net's type safety ended up adding about 15% more to the IL. This translates into extra overhead. AND... given languages that do basically the same thing, I'll take the faster one. My convenience should not override my user's experience in general.

2
votes

I like to say that the only reason BASIC is still popular is that it was Microsoft's first product, and they've be shoving it down our throats for the past 35 years. It should have died a long time ago.

With that said, I've worked on two sizable .NET projects and both were done with VB.Net - though there was a bit of C# because either the translation was a bitch, or the construct didn't exist in VB.Net. The only advantage I see with VB.Net is that the Visual Studio editor is much more friendly to it (in my experience anyway) than it is with C# - Intellisense seems better, and so does autoformatting (note that since I have not used C# as much, I may just be missing something in the configuration of the IDE...)

A major disadvantage in VB.Net is that they brought in a lot of VB6-era crap way back in .NET 1.x to ease the conversion of VB6 code. That stuff is still in there, and VB6 coders are coding new code using those... "extensions" rather than using the more neutral .NET classes/methods/whatever. I don't know how many times I asked my boss why he still used that crap. "But... It works..." Right. Hey, I like to bitch.

While looking for help on the web, I found the vast majority of solutions were in C# - check out the MSDN forums, various blogs, etc... Books have a tendency to focus on C#, and if there is a VB version, it usually comes in months later (e.g. Pro LINQ.... from Apress.)

Many languages share the C ancestry, which makes switching between C, C++, C#, Java, PHP and a few others much easier. PHP is a bit of a stretch here, but it does have a lot of C-like constructs. VB? Well, it's pretty much its own little thing and that's that.

A project leader in my organization recently told me that more and more new projects are being developed using C# instead of VB - FINALLY. When .NET was introduced in our organization, they more-or-less-officially went with VB.Net because of all the VB6 coding that was already going on. The powers that be later admitted to me that that wasn't their best move.

As somebody else above pointed out, I wouldn't say no to a VB.Net project, but I'm still hoping that it will be slowly eradicated from newer development at my place of work.

1
vote

Well, today there's little to none real reason to use VB.net. In the beginning it was just a way to give give VB programmers a familiar syntax, but was essentially a BASIC-like remapping of C#. So its only real advantage is a more familiar syntax, and its BASIC syntax is also its real only limit.

Over the time the two languages evolved alongside, the only significant difference is the my pseudo namespace.

I would advice every .net programmer that is not familiar to C# to learn it, as the community is fairly larger and the C-like syntax is common to most of the more used languages.

1
  • Another important consideration for why VB.NET exists is that it made for an easier upgrade path for projects that were in ASP "Classic"/VBScript or VB6. It was a lot less work to port large existing applications.
    – JohnFx
    Jan 14, 2011 at 16:20
1
vote

VB the language is easier to read for newbies, they tend to write their first, second and third application in it and we all know what our first applications are coded like - terribly.

Programmers from C++, Java and etc have moved to C# whilst VB.NET developers come from VBA, VB and BASIC background, essential non-traditional programmers.

1
vote

There seem to be more C# code samples online than VB.NET samples. Not like its all that hard to convert one to the other, but why bother if you don't have to.

1
vote

I prefer VB .Net over C#,

  • (97) ...
  • (98) because I learned VB before I even knew about C#.
  • (99) because I already bought a 10,000 page tome on VB .Net.
  • (100) because VB does not have braces.
  • (101) because everybody hates VB.
0
votes

C#. It's just because I have done C and Java, so I feel that C# is more readable to me. C# is for me, as VB.NET is for former VB programmers.

Not the answer you're looking for? Browse other questions tagged or ask your own question.