tags:

views:

822

answers:

20

I'm asking this question as someone who works for a company with a 70% to 75% VB.NET developer community. I would say 80% of those developers do not know what an OOD pattern is. I'm wondering if this is the best thing for the health of my company's development efforts?

I'm looking at the tag counts on:
http://stackoverflow.com/tags
There are currently:
12175 .NET questions
18630 C# questions
2067 VB.NET questions

Checking Amazon, it seems like there are:
51 C# Wrox books
21 VB.NET Wrox books

On CodePlex there are:
979 Projects tagged C#
136 Projects tagged VB.NET

There is definitely less materials to learn from if you wanted to be a VB.NET developer. What would be a company's advantage to standardizing on VB.NET and hiring VB.NET developers? How does Microsoft answer this question?

Is the only two arguments:

  1. We had these VB6 programmers and lets make them comfortable
  2. XML Literals

If you work for a company that has completely standardized on VB.NET, can you post an answer explaining the pragmatic or technical reasons why they made that choice?

UPDATE:
More stats - O'Reilly Radar
State of the Computer Book Market 2008, part 4 -- The Languages

+10  A: 

I'm sure most of the time the reason companies go forward with VB.NET is exactly as you mentioned - large amounts of VB6 in the organization, both in terms of codebase and developers. Keep in mind that ASP websites and VB6 applications can be migrated to VB.NET with little to no pain. VB6 to C# is a different story.

That being said, having worked at companies that have used VB.NET, there's really very little difference in how you do things and developers who are curious get used to reading examples, books, etc. in C#. It's not like it's terrifically hard to translate C# code to VB.NET, especially if you're not copy-pasting.

Ryan Brunner
I've asked this other places on this question but... Ryan, I'm curious to what you think: How come Microsoft doesn't use VB.NET? And why aren't there more open source projects written in VB.NET?
tyndall
It really comes down to usage of VB6 / classic ASP. The open source community never took to VB6, partially because of VB6s (mostly deserved) reputation and partially because OSS, particularly in the Microsoft space, wasn't as big a thing prior to .NET. In addition, with open-source projects there's no institutional interia. Every new project is a blank slate, unlike a company where past projects may be in VB6, and it's cheaper / easier to hire people with experience in one language than two.
Ryan Brunner
For Microsoft, on the other hand, I wouldn't be surprised if there's some VB.NET lurking about internally. Most of the source code we see from MS is closely tied or part of the .NET framework, and lower-level code like that would almost certainly never have been written in VB6 prior to .NET existing.
Ryan Brunner
They did write the javascript engine for silverlight in VB.Net, does that count? http://blogs.msdn.com/b/bethmassi/archive/2007/05/25/siverlight-javascript-compiler-written-in-vb-net.aspx
Stefan
+5  A: 

Re point 1:

Well, my shop was a VB6 house - with lots of VB6 code to support, and we moved straight to C# with no problems. We did have to think about the decision, but I am 100% (or more) confident that we made the right choice.

Re point 2:

You'd be amazed at how much I don't need this day to day ;-p

I have nothing against VB.NET - I simply feel that C# allows me to do my job more elegantly.

Re the books etc - I wonder if there isn't a contingent of ex-VB6 developers who are still writing VB6 in VS2008. Making the switch to C# really helped me appreciate the new (at the time) .NET architecture. If I had moved to VB.NET I don't think I would have made that mental leap - at least for some time.

Marc Gravell
I think C# is a better language, but I guess by the stats I was trying to say, how do you learn to be a "rockstar" VB.NET developer- there are almost no resources. I can only name one VB.NET Open Source project off the top of my head - DotNetNuke
tyndall
+9  A: 

We're not standardized on VB.Net, and I often have to go back and forth between VB.Net adn C#. I'm unusual, in that I come from a C/C++ background, know C#, but actually prefer VB.Net (I severely dislike vb6/vbscript).

I say all this because it's important to remember the VB6 is NOT VB.Net. It's a whole new language and IMO does deserve to stand up next to C#. I really hated vb6, but I fell in love with VB.Net almost instantly. However, VB.Net did inherit some things from VB6, and not just a syntax style. I'm talking reputation, and that's not entirely deserved. But I'm also talking about the developer base that helped create that reputation. That seems to be part of what you're experiencing.

With that in mind, it looks like you're judging the language based primarily on popularity. Not that there's anything wrong with this. There's plenty to be said for the ability to more-easily find samples and community support. But let's at least call it what it is. And if that's your measure, there's certainly enough support out there for VB.Net to make it viable, and it's not hard to take advantage of the C# samples.

Also, we're still on .Net 2.0 where I work. For 2.0, I definitely prefer VB.Net. I like the syntax better and I like the way it does a few other things over C#. But I play around with Visual Studio 2008 at home. On 2008 I really prefer the C# lambda expression syntax.

Regarding your two arguments:

  • For #1, that may not be such a good idea, though I suspect it's the primary reason for many shops.
  • For #2, I've never used Xml literals. They looks nice, but just haven't been that practical.


Something I wanted to add: it seems like some of the recent C# features are actually intended to make C# work more like VB. Static classes fill the conceptual space of a vb module. The var keyword makes variable declaration look more VB's dim. The upcoming dynamic keyword will allow vb-style late binding. Even properties, which is something you could say was "added" to c# for 1.0, are something that vb has had since before .Net.

Joel Coehoorn
But even Microsoft is putting out almost 100% of their MS-PL code in C#. .NET Framework is written in C#. ASP.NET MVC, Unity, MEF, etc... They don't even eat their own dog food.
tyndall
Well; VB.NET may be a first class citizen, but if you can't find the necessary support for it... maybe that should influence your decision making?
Marc Gravell
Totally agreed on the .NET 2.0 vs 3.5 point over VB/C# switch.
chakrit
@Marc: that's kind of what I'm saying. Popularity is important, to a point, and C# is definitely much more popular. But VB is popular enough that you can still generally find what you need, and where you can't you can piggyback on C# some.
Joel Coehoorn
and optional parameters
Pondidum
A: 

I think its more to do with the potential target audiences that VB.NET and C# would have appealed to when they started out.

Under the hood, its all the same (well mostly) but .NET Winforms/Websites etc... what you can do in VB.NET you can do in C# and vice-versa. So the question isn't really relevant in terms of functionality

Completely subjective opinion, but I'd say anyone who jumped on the VB.NET Bandwagon would have come from a background in VB6/Classic ASP. However the ability to jump on the C# bandwagon extends to people with Java/C++/Other OO Backgrounds.

So from the outset, you have a larger community of people taking up C#, it makes sense that there are more educators/contributors/Open Source projects under that language

Eoin Campbell
Don't underestimate the popularity of VB6. Actually, I think even VB.NET Express has more downloads than C# (I think this was mentioned on a Hanselminutes podcast a while ago..)
Ryan Brunner
tyndall
I'm not doubting that VB6 and VB.NET is popular. According to my question not learning OOD Patterns is popular.
tyndall
A: 

At my workplace, VB.NET was the standard up until recently as several of the previous developers came from a classic ASP background and were familiar with VB syntax. As our development team has matured, and we've adopted more sophisticated design methodologies (DDD, good OOD), there has been a natural shift towards using C#.

In most instances I would guess that shops using VB.Net is a pragmatic choice, rather than a technical one. That being said, VB.Net really is a much more capable language than it's predecessors - it just lacks some of the elegance of C#, and as you've discovered there's much more material related to development in C# on the web.

Bayard Randel
I agree VB.NET is a capable language and popular. But if 75% of my company is VB.NET developers why aren't there more VB.NET books? I wonder if I could get the VB.NET versus C# books sales from Tim O'Reilly. Got it I'll add it up above.
tyndall
You found 21 wrox books and you're disappointed? So C# is more popular. That doesn't make VB worthless.
Joel Coehoorn
When I have to go back to C# it is painful, and certainly not much more elegant (if at all). C# has exactly 2 syntax features I would like to have in VB9, and is missing all the niceness I have. VB9 converted me.
Andrew Backer
Well yeah, obviously it's subjective, but I think that a great number of developers generally feel that way.
Bayard Randel
Bayard Randel, what is more elegant in C# than in VB ?
Meta-Knight
I'm curious to what the folks on this thread think about these follow up questions. How come Microsoft doesn't use VB.NET? And why aren't there more open source projects written in VB.NET?
tyndall
Didnt microsoft write the javascript engine in the Silverlight plugin in VB.Net? Yes they did: http://blogs.msdn.com/b/bethmassi/archive/2007/05/25/siverlight-javascript-compiler-written-in-vb-net.aspx
Stefan
+4  A: 

Not looking for argument but as an old VB.NET fan:

3 . With statement, Handles statement, Module statement, XML literals, case-insensitivity...
4 . My namespace, Microsoft.VisualBasic namespace, all the "sugar-coating"
5 . Late-binding support and COM components interoperability
6 . Ermmmm..... (finger-crossed) readability?

As said, I'm not trying to be argumentative and I'm a big fan of C# but just that there is more to having VB6 programmers in a company to standardize on VB.

For example, COM interoperability could easily be a "show stopper" if you standardize in C# and your business depends on a lot of COM components...

And the sugar-coating support mentioned is rather huge (I miss them all the time writing C# code). I feels like there are more tooling support from the VB.NET team than the C# team while the C# team focus their efforts on more language features.

chakrit
+1 With statement I like. I could do without Modules and XML Literals. Modules actually teaches you bad habits. If the "My" namespace was so cool it wouldn't have been a VB.NET only thing. And with Extension methods you can now build your own "quick dial" functionality. Late-binding is cool, but I guess that won't matter with .NET 4.0 right.
tyndall
More here: http://jcoehoorn.vox.com/library/post/why-i-like-vbnet-over-c.htmland here:http://jcoehoorn.vox.com/library/post/vbnet-vs-c-round-2-partial-namespaces.html
Joel Coehoorn
I'm not really a fan of With or the MS.VB namespace, and Module maps closely to a C# static class. COM interop is a bid deal though and I like Handles.
Joel Coehoorn
"If the "My" namespace was so cool it wouldn't have been a VB.NET only thing." That's funny way to look at it, and you can say it for language specific stuff including IDE features. "My" is bloody good. What's wrong with that? It just works, saves your time, what can be wrong? Is it buggy? no? Does it save your time? Yes. Is it bad programming Practice? No? So?
dr. evil
Handles caused me lots of problems when they started disappearing in one of my ASP.Net 2002 projects. The clicks would mysteriously stop working. That and the inline compiler started to act up as well. Those caused me to stop using VB.Net.
Min
Module not that close to a Static class. It promotes the functions into the containing Namespace. That drives me crazy.
tyndall
Speaking as someone who maintains delphi code written by other programmers: "with" blocks can be very very bad for readability. Especially if they are nested and contain lots of code. I always find myself wondering which object I'm working "with".
Wim Coenen
A: 

I would say 80% of those developers do not know what an OOD pattern is

Given the premise that a majority of the VB.NET developers transitioned from VB6 to VB.NET; I would say this is because VB6 was not an Object Oriented language and therefore has not become a tool in the VB.NET (post VB6) developers toolbox.

Gavin Miller
That's the problem. Most VB6 folks never changed mindsets because they treated VB.NET 1.0 like it was VB7. A lot of these folks just don't treat software development like its a craft.
tyndall
+6  A: 

To learn to be good VB.NET programmer you don't need to learn it from a VB.NET resource learning from C# resource is perfectly fine. If you can't even translate a C# code to VB.NET you got bigger problems anyway.

Almost all decent+ VB.NET programmers can read and decently write C# due to the things you just said, because otherwise you can't learn new stuff easily.

Finally, the people who are crap, are not crap because they are VB.NET programmers, that's just VB.NET is easy to code and it's not a bad thing! Also it's been said that most of these people coming from Classic ASP and VB6 background, which are again really low entrance threshold languages. After a week any decent computer user can code in those languages. But most of the C# developers coming from Java and C/C++ background. Especially Java side got lots OO in it. After all especially C is not easy to learn, most of the people either learned in the school or in a long course, or from bunch of books.

When it comes to a why company uses VB.NET it's mostly because of legacy reasons. Also some companies who jumped .NET 1.0 from VB6 thought that VB.NET will be the major language, which turned out to be a big mistake after couple of years.

dr. evil
I understand writing code in F#, PowerShell, IronRuby and IronPython these languages are actually offering something different. I don't get reading C# then writing in VB.NET. I do agree it can be done.
tyndall
+1 It did seem for about a year or two that VB.NET might be the major language. And crappy programmers are crappy programmers. Just why are there so many crappy ones?
tyndall
Reason is obvious because most of the code out there is C#, so If you can't read it, you can't use those code samples, open source libraries etc. For a .NET developer learning how to read C# should not take more than 2 days. It's just syntax, nothing else. I'm coming from a mixed background I coded C/C++/JS/PHP and I coded ASP/VbScript/VB in different companies. Maybe that's why it's so natural to me read/write C# code. But I think most of the other VB.NET developers are like that as well.
dr. evil
@Tyndall "Just why are there so many crappy ones?" I blame the language makes programming too easy. So you don't need to understand too many stuff before actually producing something. This allows non-programmer materials to be a programmer. And somehow they made their ways into the companies and there you go :) I just don't like the fact that people blaming VB.NET. VB6 was utterly rubbish but VB.NET is beautiful and getting better.
dr. evil
@fm I'm one... Seriously, most of the time I look at examples is because I want to know if there is a class and/or methods in the framework that can do what I want... and even as a pure-VB developer before jumping to C#... I can find out those info from a C# example *just fine*... I don't think it's such a big matter at all. After all C# or VB.NET, we're still targeting the same framework.
chakrit
Having said that, I've gotta add whenever a newbie asks me to choose between 2 languages I always say C# without thinking twice for the reasons listed in here. But as a person who worked on products in C# and VB.NET I'd rather write in VB.NET because I like the syntax and the way it works.
dr. evil
+1 for pointing out that being more accessible to low-level programmers is good.
Joel Coehoorn
+3  A: 

I'm currently working with a customer who is in the process of standardizing on VB.NET.
The main reason is, as you mentioned, the fact that the majority of the employees have 10+ years of experience with VB and COM.
They feel that going to VB.NET makes the most sense as a career path, even though they're well aware that very little of their existing knowledge base can be leveraged going forward.
Given this fact, they also considered moving to C#, which indeed seems to be the most used language on the .NET platform today. However, given the great amount of new knowledge they already have to learn in order to start using .NET, they preferred to go for a language with a familiar synthax.

In my opinion this proves exactly the purpose of VB.NET. That is to help bring the large base of VB developers in the world over to .NET, giving them the ability to use a language that "feels" familiar to them.
Also, the backwards compatibility layer built in VB.NET makes it possible to port existing (large) applications written in VB to new platform one piece at a time, while keeping them running.

Enrico Campidoglio
+1 Pragmatic points you bring up: Porting large code bases and keeping large groups of developers comfortable.
tyndall
+1  A: 

Yes, there are more C# books, and the C# community is more active, but at the same time both languages use the same framework, and have mostly the same features, which means a VB.NET programmer can pick up a C# book and understand it with no problem if he knows the C# syntax (which is close to many other languages' syntax).

At the end of the day there is no BIG advantage of choosing one language over the other. Because of the reasons you mentioned, I'd choose C# if your team had no preference, but if most came from a VB6 background, I'd see no problem choosing the VB language.

That's what happened in my organization. Most of our software was written in VB6 before so they decided to go with the syntax that the team was already familiar with, and I don't have a problem with that.

Meta-Knight
I think it depends too on what type of company it is. My company doesn't have any interest in being really good at software development. So they just throw any old kind of developer at a problem. And then tell the developer "as long as its Microsoft technology".
tyndall
So at a minimum I think companies should standardize on one or the other. It does make me wonder how the majority of companies are going to approach F#, IronRuby, and IronPython. But at least these languages are different. Is VB.NET different enough from C#?
tyndall
+6  A: 

The only argument I have to keep using VB.net is:

  1. I hate case-sensitive languages (like C#)

It is dumb, the first thing after creating a case sensitive language is creating a best-practice "Do not use the same variable name with different case ever"

I know they want to copy Java case-sensitivity, but was really a dumb decision.

Eduardo Molteni
I'm not exactly fond of case-insensitive languages either. I like VB.Net because it fits in the middle. String comparisons ARE case sensitive by default. That language/IDE itself is case-aware, in that will correct your identifiers to always use the _original_ case. That's a HUGE difference from a a completely case-insensitive approach.
Joel Coehoorn
You are right, and you are empathizing my point: We have to rely on the IDE to be aware of the case.
Eduardo Molteni
I like the case sensitivy. Sometimes it keeps me from having to come up with dumb names for variables. So I can write a method declaration like public void DoSomething(StreamReader streamReader) I don't do it all the time but it can be handy. Other than that you just get used to it. Esp. if you are curious and have gone on to learn other case sensitive languages.
tyndall
I was curious, and while learning Java I learn to hate case sensitive languages.
Eduardo Molteni
+2  A: 

I'm sure there are a lot more VB.NET developers buying books to learn C# than vice versa. They know they'll get more respect (reasonably or not) if they switch.

le dorfier
Good point: follow the money.
Joel Coehoorn
The truth is they will get more respect because C# is nicer to write clean, well designed APIs. The whole Shared/Module thing makes me stay away from it.
tyndall
One thing I do like in VB.NET is the String.Split can be written a cleaner than "foo1,foo2".Split(new char[] { ',' });
tyndall
+1  A: 

I worked for a small company with an existing ASP/VB6 codebase, built by several different devs, each with their own "stamp" to put on it.

Like many, BASIC was my first language in the early 80's, but I "graduated" to assembly (6502 and x86), and have wandered through many languages to what I hope is strength in C/C++ (tho' I always have more to learn). I'm very much a "right tool for the job" kind of guy, so I even learned (and learned to hate) VB, from 3 up through 6 and VBScript.

I picked up C# fairly easily, and was slowly working on converting my ratty old codebase to C#, when the company was purchased. $corporate_owner has standardized on VB.Net. The things that drive me nuts about VB are some of the same things that others love, namely all the syntactic sugar (excess verbosity).

There's also the dislike of VB among "real" programmers that Jeff has written about before.

All in all, VB.net just isn't "cool". However, it does have many advantages (syntactic sugar, familiarity, ease of learning); I know of at least one college that has a VB.net course as part of their required CS and CIS curricula.

Anyway, because of its ease-of-use, and the relatively straightforward upgrade path, I don't see it going away any time soon. At least it's not as brain-damaged as it used to be.

Adrien
curricula is the plural :)
Russ Cam
Thank you, sir!
Adrien
Wait, did I confuse myself? I think I may have meant to put this in the other thread.
Adrien
I agree not as brain damaged as it used to be. I think some of the syntactic sugar is bogged down by the verbose nature of it. I believe that people should be exposed to it... but that they should know the dirty little secret is that all the mind share is in C#. +1
tyndall
A: 

I'm only now making the switch to .NET, after having maintained existing VB6 code for a number of years following the advent of .NET. I believe I'm justified in considering myself a VB6 expert. My current employer is standardized on VB.NET.

For a number of reasons I find that I have some slack time in which to learn the new language. I'm using an ASP.NET book that has all code in both, and while I'm typing in the VB I'm making a point of reading the C# as I go.. There are a few things I've seen that one language does "better" than the other (a subjective call...), going both directions.

My sense so far is that by the time I finish this process I'll be able to go back & forth with a reasonable degree of comfort. I'm certainly not incurious--if I were, would I be here are SO?

RolandTumble
Just curious. But why did the company take so long to move from VB6 to VB.NET? I'm always chomping at the bit to use any piece of technology that can make my job easier. For example I ran from .NET 2.0 to get into .NET 3.5's lambdas, LINQ, and extension methods.
tyndall
Two words: State government.
RolandTumble
+1  A: 

I think you will find its not the language but the people that use it. Forcing these people to use C# wont solve the core problem.

However if you do program in C# chances are you are more likely to get a better class of programmer next time you hire if they have this as an existing skill. (This is not to say there are no good VB.net programmers, as i have known some great VB.Net programmers. Or even that all C# programmers are great.)

However in my experience the poorer skilled programmers tend to stick with VB and VB.Net and don't even want to look at C# or any other language outsite VB/VB.Net

Audioillity
Forcing them to do something different may solve the problem. If a developer with 30 yrs exp who currently writes VB.NET (like its 1997 VB6) gets frustrated and quits... I would hire a cheaper C# developer.
tyndall
+1 for your last comment.
tyndall
Your right on forcing them to try something different, but the best results will come from the VB Devs. wanting to try something different and improve their skill set.
Audioillity
+3  A: 

This doesn't pertain to the question but to the comments being made to the questions

Reading this comments reminds me of back in the 70s and 80s when I read about people using any high level programming versus assembly. The assembly programmer had an 'elite' status compared to those who used high level languages like ... C!

And it was baloney then and it still baloney now that it is C# vs VB.NET.

Experienced programmers like using C# because it terse. There less damn typing involved. I rarely see new languages where they to try expand the amount of typing you have to do. C# is no exception.

But... there a problem with this. The problem of maintainability. The more terse a language is the harder it is to go back 5 years, 10 years later and read what you were doing. Which is why I use VB.NET in preference to C# or other C style language. And before you bust my chops about being a VB programmer I maintain software simulations of various historical spacecrafts in C++. I use both styles extensively.

Now it not a dramatic difference. But combine experienced programmers with the religious attachment many have to their favorite language it no wonder question like Tyndall comes up.

QuickBASC/PDS/Visual Basic family of languages continue to sell for Microsoft because they are not terse. Because they are more readable. While this feature doesn't appeal to many experienced programmers it does appeal to many starting out. Combined with the religious attachment many develop toward their tools they stick with it throughout their careers. Plus the Visual BASIC has a populist aura about it that is appealing to many.

Like most things with populist appeal is looked down on by the elites. Conversely it gives the language a lot of users. So it not likely that it will be axed by Microsoft any time soon.

RS Conley
This argument falls apart assembly and C are very different. And if I ran a company and someone was trying to write assembly or C "Line of Business" applications I would fire them. VB.NET and C# are very similar. I would also fire someone for not writing documentation, Tests, UML or Class Diagrams, etc... C# is a little more terse than VB.NET, but readable. Perl is terse and unreadable a few years after you write it.
tyndall
I don't want Microsoft to axe it. But please make it harder for developers who write in it to make mistakes. And if it is worthy of being a separate language go nuts with the pragmatic features. Make it very different than C#.
tyndall
+1. You are correct it has a popular appeal by "people who write programs" not developers.
tyndall
@Tyndall -That true for today. But circa 1980 the vast majority of personal computer software was written in assembly. When PC became capable enough running a HLL, the older programmer sneered at those writing in them. The most popular HLLs were BASIC, C, and Pascal.As for the readbility difference between C# and VB while there is a different in my opinion it not significant. The fact both use the .NET framework dwarfs the issues of langauge syntax.
RS Conley
@Tyndall Well then if you want to make it different quit letting the C# developer steal VB's features. Also make it harder to make mistakes? Come on who are you trying to kid? There nearly a 1 for 1 correspondence between the two. One may leapfrog the other but every version of Visual Studio both VB and C# wind up implementing the other's feature. The only feature that been persistently C#'s is the ability to run unsafe code.
RS Conley
+5  A: 

As a VB.NET developer, here's what I don't like about C#, granted my experience is from reading C#, not writing it so much:

1) No edit and continue. - I've seen arguments that Edit and Continue is a bad thing and that it encourages bad coding habits. It reminds me of 25 years ago my project mgr telling me that my love of what was at that time an advanced debugger, was a "crutch" and that it encouraged bad programming habits. Sorry, I didn't by it then, I ain't buying it now-or at the very least, the advantages outweigh the disadvantages 10:1.Once C# gets this feature, you'll appreciate it more and really approeciate it if you ever have to code w/o itagain.

2) The language is case sensitive.- IMHO, this is pure evil. Would people agree that it is bad to have two variables in the same scope that vary only by case? if so, why allow it? Yuck.

3) Background compilation and hence better design-time feedback of errors. - A mixed blessing, as this slows down the IDE. But with 2008, performance is better and is probably a time saver. Course, this is not a factor of the language itself, just the dev environment.

4) Braces {}{} - Reminds me of my LISP days where you can tell a LISP programmer from other programmers: Theyre the ones with their fingers on the screens trying to match up parens.

I find the following VB code easier to read and less likely to contain

If condition1 then

  truestatement1
  truestatement2
else
  falsestatement1
  falsetatement2
end if

If (condition1) then {
  truestatement1;
  truestatement2;
  } //if (cond)
else
  {
  falsestatement1;
  falsetatement2;
  } //else (Condition)

All those braces with lack of auto-indent are just begging for compile time or run-time errors. And as the nested ifs get complex, the braces just add to it. In place of the 4 braces in the C# example, the VB code has just one END IF statement, but C# programmers that comment like to add optional comments as to what block the brace is end bracket is terminating. The VB code is self documenting with less typing-the IDE even adds the END IF for you when you type in the IF condition line. So, in the end, I am missing the brevity simplicity/benefit here that C# loves claim. The } might be more terse than the End If, but I'm suggesting that the overall structure is more unnecessarily complex. Granted, this all isn't that big of a deal, but as a novice C# coder I feel like it is a lot easier to mess up the nested conditions than it is to use VB.

Velika
1) "Edit and Continue" has been introduced in C# 2.0 (2005)3) Background compilation for C# has been added in Visual Studio 2008
Enrico Campidoglio
Frederik Gheysels
I don't do much in C#, but I get the impression that the Edit and the Continue doesn't work as well in VS2008 for C# as it does for VB.NET.
Velika
"No edit and continue", "no background compilation", "lack of auto-indent"... Seems like you're comparing VB-by-VS to C#-by-notepad. VS has all of these features. The braces are exactly the same as end-if - as long as you have your IDE settings defined properly they shouldn't be any more confusing. A VB programmer would usually like the format where braces are kept on the same line as the rest of the code - then you can pretty much ignore them and understand the code.
configurator
+1  A: 

Paul Vick, who was the language architect for VB.NET at the time, wrote this in 2008.

Our users [VB developers] run the gamut from people who are picking up a programming tool for the first time to industry veterans building large-scale commercial applications. The key to designing a framework that appeals to Visual Basic developers is to focus on allowing them to get the job done with the minimum of fuss and bother... A framework that uses the minimum number of concepts is a good idea [for VB.NET developers] not because VB developers can't handle concepts, but because having to stop and think about concepts extraneous to the task at hand interrupts workflow. The goal of a Visual Basic developer usually is not to learn some interesting or exciting new concept... but to get the job done and move on.

From the .NET Framework Design Guidelines 2nd Edition page 10.

MarkJ
+1. Good points. Should Microsoft build more VB "templates" into the framework to keep VB code written - standard, clean, testable, supportable? This would help developers avoid "having to stop and think about concepts...".
tyndall
That's "having to stop and think about concepts *extraneous to the task at hand*" - I think the words were chosen carefully.
MarkJ
I keep talking to the Microsoft guys about putting code into Visual Studio so that I manager can enforce a coding style, templates, patterns, defaults, etc... on his junior developers.
tyndall
A: 

There are lots of good answers here already, but my take on the original question is that what really needs to be answered is not why people stick with VB.NET, but rather what makes C#.NET the language of choice for .NET books, samples and toolsets?

I think there are three things operating here:

1. The first people into C#.NET were curious by nature - that's why they went for the new language rather than sticking with something interesting. So yes, it did get more curious people at first ;D

2. C#.NET was Microsoft's way of attracting Java programmers into the .NET world, and it worked pretty well. Many of the best ideas in .NET have been ported from Java, and hence get ported into C#.NET first. They only end up in VB.NET after they go mainstream. See this article for an example of how C#.NET was seen as a reaction to the failure of Microsoft to have their own Java version.

One reaction to it is telling:

"I'm not a MS programmer, but if I'm ever forced to move there from Java, I know I won't be totally lost and useless now that they have C#."

3. VB.NET programmers are as smart and curious as any other programmer, so when they see a C#.NET book that deals with a topic they find interesting they buy it and convert what they need to know to VB.NET - or even just implement it in a separate C#.NET DLL in their VB.NET projects.

Falkayn
A: 

It sounds to me like the programming language isn't your company's main problem. If I worked in your company I would set the priority on bringing the 80% who don't know what an OOD pattern is up to snuff.

Good code is good code, whether it's written in C# or VB.NET.

Walter