Click here to Skip to main content
16,004,184 members
Articles / Programming Languages / Visual Basic
Article

Not Another C# Versus VB Article

Rate me:
Please Sign up or sign in to vote.
3.88/5 (251 votes)
20 May 200521 min read 1.1M   73   450
It's not about feature support. It's about culture.

Contents

Introduction

This article explains the benefits of a Microsoft .NET application development organization coding in C# versus coding in VB.

It's common knowledge that VB.NET and C# are functionally equivalent. Hence a frequently-heard argument for choosing one or another is that because they are functionally equivalent, neither poses a clear advantage. This argument has merit, but because it attempts to be diplomatic and avoids subjective opinion, it fails to get to the heart of the matter.

This article does not simply consider objective arguments. Rather, I attempt to explore some of the highly subjective factors which influence developers working in VB versus C#. These subjective factors taken collectively over time contribute to a certain culture. The VB culture is different from the C# culture.

By examining the history of the two cultures and their current trends, we can make predictions about how the choice of one language or another might influence the production of quality code in a production shop.

The culture of Visual Basic

The purpose of Visual Basic was to create a mass market for software development tools. Prior to Visual Basic, application development languages were viewed as complex and restricted to the domain of skilled programmers. Visual Basic was syntactically simple, and it enabled virtually anyone with a few hours of time to learn how to create simple applications. In the days when software development was seen as more of a black art than an engineering discipline, the ability to be able to join the ranks of “software developers” was a powerful aphrodisiac for many computer users.

And join they did. Millions of “power users” of computers became millions of “software developers”. It happened that Visual Basic came along just as the demand for new software applications was escalating rapidly, driving demand and hence higher salaries for software developers.

The fact that Visual Basic was lacking in the fundamental building blocks of object oriented programming didn’t matter much at the time. Software was still relatively simple. Distributed application development was client-server at best. The web was so new that application development models for it had barely started to evolve—the business world didn’t even know where the web was going, so how could developers possibly know how to program for it? Web applications were hacked together, and it didn’t matter. To compound the hacking methodology, the sheer demand for web applications began to accelerate at a pace that exceeded even the wildest expectations by an order of magnitude. Application developer salaries skyrocketed, demand continued to increase, and the perceived need for a sane, sustainable application development model was left trailing far behind.

The peak of this trend coincided with the peak of the Internet boom. Vast armies of grossly under skilled developers were paid enormous sums of money and elevated to cult-like status to hack together anything that would even remotely resemble a software application. And Visual Basic, with its lack of formality and constraints that might slow down the hacking process, was just the right food for the frenzy.

Visual Basic was launched in March of 1991. In 2000 Microsoft announced .NET. in a move that swept the slate clean and replaced Visual Basic with what was in effect an entirely new development paradigm. The underlying classes against which programmers developed were completely replaced by the .NET Framework. The kludgy third party tools were swept aside and replaced by a clean third party tool model. The lack of inheritance and the limited implementation of polymorphism enforced for so many years by the underlying limitations of the Visual Basic engine architecture was overcome by throwing the old engine out completely.

With these changes, Visual Basic was reborn as a powerful new development platform, functionally equivalent to C#, J# and Java. In fact, of the Visual Basic of the 90’s, only two things remain today; the culture and the syntax. The culture of Visual Basic is the culture of the 90’s: build it fast, hype it up, sell it, and don’t worry about whether the story will hold together tomorrow, or even hold together at all.

To grasp how this culture affected trends in software development, it’s instructive to hear what Niklaus Wirth had to say about it in 1997. Niklaus Wirth is one of the most influential thinkers in the software world. A professor at ETH Institute in Zurich, Wirth designed Pascal, Modula 2 and Oberon. In the early 1970s, he was one of the people who proposed program development by stepwise refinement. He's the author of many important books, including "Algorithms + Data Structures = Programs" (Prentice Hall, 1975) and "Systematic Programming" (Prentice Hall, 1973) He was awarded the Turing Prize in 1984, and has also received five honorary doctorates and several other awards.

In a well known interview with Dr. Carlo Pescio, published in Software Development, June 1997, Pescio asks Wirth:

You probably know about the 'good enough software' concept popularized by Yourdon. In many senses, it's just a rationalization of what's happening in the software world: the first company hitting the market with a feature-rich product is more likely to win the battle than the careful, quality-seeking company. Do you think there is anything developers and software organizations can do about that? I guess many developers would be happy to be given more time to develop better software, but at the same time they are rushed in the name of corporate survival. 'Educating the users' seems more a wild dream than a possibility.

to which Wirth replies:

'Good enough software' is rarely good enough. It is a sad manifestation of the spirit of modern times, in which an individual's pride in his/her work has become rare. The idea that one might derive satisfaction from his or her successful work, because that work is ingenious, beautiful, or just pleasing, has become ridiculed. Nothing but economic success and monetary reward is acceptable. Hence our occupations have become mere jobs. But quality of work can be expected only through personal satisfaction, dedication and enjoyment. In our profession, precision and perfection are not a dispensable luxury, but a simple necessity.

Recently I read a final report of a research project funded by the Swiss National Science Foundation. The project's naive goals were identified as follows: First, how can easy programming be achieved (in particular, for non-experts)? Second, how can a mechanism be realized that allows hiding the difficult parts of parallel programming? After more than 30 years of programming we ought to know that the design of complex software is inherently difficult. This despite of the fact that, for decades, the industry has been advertising programmers' positions by claiming that programming is easy. Later on, when doubts arose even to the advertisers, they switched to promising a wide variety of tools to facilitate the arduous tasks. Tools became the slogan; the right tools, paired with clever tricks and serious management methods, would work wonders. Then Edsger Dijkstra called Software Engineering 'Programming in spite of the fact that you can't'.

Indeed, the woes of Software Engineering are not due to lack of tools, or proper management, but largely due to lack of sufficient technical competence. A good designer must rely on experience, on precise, logical thinking, and on pedantic exactness. No magic will do. In the light of all this it is particularly sad that in many informatics curricula, programming in the large is badly neglected. Design has become a non-topic. As a result, software engineering has become the El Dorado for hackers. The more chaotic a program looks, the smaller the danger that someone will take the trouble of inspecting and debunking it."

In a minute, we’ll look at how the culture of Visual Basic affects the quality of code produced, even today, and how the last remaining vestige of Visual Basic, the syntax, unfortunately continues to reinforce the culture.

But first, let’s review the culture of C#.

The culture of C#

To understand the culture of C# is to understand the story of Anders Hejlsberg, its chief architect. Hejlsberg deeply admired Niklaus Wirth. Wirth created the Pascal language from Algol, the first high-level language with a readable, structured and systematically defined syntax. Hejlsberg created the world’s first compiler for Pascal, and extended the language to include object-oriented capabilities (Object Pascal). Both were focused on the language’s elegance, at least in part because the language was designed as a teaching tool for students of programming languages to learn structured, and later object-oriented, development techniques.

Pascal was first embedded in a commercial development environment by Borland, with the release in November 1983 of Turbo Pascal, which employed Hejlsberg’s compiler on a licensing arrangement. Hejlsberg worked for Borland for thirteen years from 1983 to 1996 during which time he was the chief architect of Turbo Pascal and later Delphi.

Delphi, a direct competitor to Visual Basic, was regarded as vastly superior technically, even by Microsoft, who routinely plundered its inventions. To preview some of the features of each successive version of Visual Basic, it was generally recognized that one only had to look at the current version of Delphi.

Delphi, however, was hampered by a relatively insignificant development and advertising budget. While Microsoft plowed hundreds of millions of dollars into promoting Visual Basic, Borland had to rely primarily on technical excellence to drive usage through word of mouth. Hejlsberg knew his work would never achieve mainstream adoption while he remained at Borland. At the same time, Microsoft gradually came to realize that Visual Basic would never achieve the technical excellence of Delphi without Hejlsberg.

About the time when these two forces were starting to draw Hejlsberg and Microsoft together, a thunderbolt hit that would dramatically accelerate the fusion. That thunderbolt was Marc Andreessen’s endorsement of a brand new language (or at least one with a brand new name): Java.

Java’s precursor was developed by Sun’s Patrick Naughton, Mike Sheridan, and James Gosling in 1990-92, who had the far-reaching notion of connecting together small devices, such as video recorders and televisions, in cyberspace with a common programming language. The first version of Java was called “Oak” and was architecture-neutral, distributed, portable, object-oriented and secure. Although these qualities turned out to be just the qualities needed to develop applications for the web, the adoption of Oak for the web would have to wait until 1994. But the fact that Oak’s true potential would take several years to recognize was much less important than the culture in which it was born. For in 1990, Naughton, annoyed with the disparate directions in which Sun was heading, nearly quit and took his work to the more idealistic and focused neXT, owned by Steve Jobs. It was only because Sun’s CEO, Scott McNealy, solicited a report on the failings of Sun from Naughton, and heeded the report, that Naughton stayed. McNealy agreed Naughton would be allowed to create a small team of engineers outside of mainstream Sun in order to “do fewer things better."

Designed by a small team dedicated to technical excellence, Oak/Java was the antithesis of Visual Basic. Yes, it was more difficult to learn, but it was more powerful. And the proof was in the pudding. Java applications, when architected and built by skilled Java developers, were more powerful and feature-rich than the vast majority of Visual Basic applications.

Marc Andreessen, CEO of Netscape and therefore the “God of the Internet” at the time, was one of those who saw the potential of this new language. In 1994 he told the San Jose Mercury News: "What these guys are doing is undeniably, absolutely new. It's great stuff."

Coming from most people, such an endorsement would have been just another spark. Coming from Andreessen, it was the thunderbolt that shocked the world into a near-frenzied adoption of Java, and ultimately brought Microsoft and Hejlsberg together.

For Java was not perfect either, and by then the brilliant Hejlsberg was envisioning the next generation of application development language. Hejlsberg envisioned a language which would fully embrace the emerging component model for application development by making the three key constructs of component development—properties, methods and events—first class elements of the language.

In Java, for instance, properties don’t really exist. They’re “faked” by using the get xxx and set xxx syntax. In a property inspector they show up as “xxx” and you have to know that you put the get and set in the right places. This and other anomalies made Hejlsberg the perfectionist uncomfortable. He felt that the ideal language would require no such kludges or workarounds, but should instead roll all of the core constructs right into the syntax, giving the programmer a “one stop” experience. The problem was that this would require fundamental rewiring of the compiler, and significant research and development expense.

With Java rapidly gaining ground, by 1996 Microsoft was getting very concerned. They were taken off guard by the fact that an elegant, precise language that required a significant degree of programming skill and dedication to use effectively was making headway against Visual Basic. They also recognized that they needed more than just some reworking of the Visual Basic engine. They needed fundamental change. They made Hejlsberg an offer he couldn’t refuse. If he would come to Microsoft, he would be given a clean slate and a massive budget to create a “perfect” version of Java. In 1996 Hejlsberg began work on Microsoft’s J++ 6.0 and WFC, the Windows Foundation Classes for Java, as chief architect of both.

Microsoft J++ 6.0 and the WFC, born out of intense desire by the world’s most qualified software architect to make the very good Java even better, were the successors to Object Pascal and the Delphi Visual Component Library. And soon they would become the precursors to C# and the .NET Framework.

For in 1997, Sun sued Microsoft over the changes it was making to Java, stopping the work cold.

Undeterred, with massive financial reserves, and wanting to get even with Sun, Microsoft upped the ante. It gave Hejlsberg an even cleaner slate, the mandate to write a new language that would be better than Java, and backed by a programming toolkit that would be better than Java’s.

The result, born in a culture that puts technical excellence first, unfettered by prior constraints and guided by the wisdom not only of Hejlsberg’s years of experience with Turbo Pascal and Delphi, but also by the wisdom gleaned from Java, is the C# language.

Syntax, semantics and cultural persistence

We've seen that the cultures of VB and C# are very different. And we've seen that this is no fault of the programmers who use them. Rather this is a product of the combination of factors that collectively could be called their upbringing—business environment, target market, integrity and background of the original language developers, and a myriad other factors.

One factor, however, that seems to have a greater effect on the culture than others, is the syntax and semantics of the language.

To what extent do syntax and semantics play a part in the culture that builds up around a language and to what extent, vice versa, do the syntax and semantics depend on the culture in which the language was created?

The truth is, both—just as spoken languages both grow out of culture and influence culture. For instance, in the far north the language syntax has evolved several words for the different types of snow. Interactions then use the language to express nuances of snow, creating a more snow-centric culture.

So in Visual Basic, the decision to include in the syntax and semantics the ability to assign numbers directly to strings and vice versa was a result of the designers’ desire to attract a broad base of developers who would probably not understand the notions of strongly typed variables. Once the syntax permitted it, such assignment became widespread, reinforcing the designers’ original premise.

Once this cycle of self-reinforcement begins, the cultural habits quickly become entrenched and widespread, and are extremely resistant to change. Minds tend to gravitate to like minds. User groups tend to attract homogenous followings. Visual Basic instructors tend to propagate what their instructors taught them.

This awareness of the immense inertia of embedded culture is precisely the brilliant insight that caused Microsoft to keep Visual Basic and to make it nearly 100% backward compatible at the syntax level. They recognized that trying to get legions of developers to abandon their old cultural norms and adopt new ways was foolhardy.

The brilliant insight Microsoft had was not to support multiple languages—if this was the case then surely it would not have bothered with J#, which is syntactically so close to C# that support for language’s sake alone would be ridiculous. The insight Microsoft had was to support multiple cultures.

In concrete terms

What does this mean in concrete terms? What impact does this have on today’s application development? How does the decision to adopt Visual Basic or C# affect programs written today and tomorrow?

  1. 80% of C# programmers are good, while 80% of VB programmers are not good. This is not to say that everyone who programs in VB is less skilled than everyone who programs in C#. This is to say that:
    1. the VB syntax and semantics is designed to attract less skilled programmers and, in combination with other factors examined above, this has created a culture that is populated with less skilled programmers.
    2. and because VB syntax and semantics make it more difficult to avoid common programming errors and hence to program well.
  2. Hiring a good C# programmer is easier than hiring a good VB programmer. This is because of (1).
  3. Hiring the average C# programmer costs more than hiring the average VB programmer. This is because the average C# programmer is a better programmer than the average VB programmer, and this is because of (1).
  4. Hiring a good VB programmer costs the same as hiring a good C# programmer. There are many good VB programmers, and some of them are much better than some C# programmers. However this is the exception, not the rule.
  5. A good programmer accomplishes two to ten times what an average programmer accomplishes, and causes 90% less bugs and headaches.
  6. At the time of writing there are probably almost as many good VB programmers as there are C# programmers. This is because there are many more VB programmers than C# programmers. The 20% of VB programmers who are good is about same number as the 80% of C# programmers who are good.
  7. In the near future, there will be less good VB programmers than C# programmers. This is because many of the good VB programmers are switching to C#. This is partly because they like the language better, but mostly because they like the culture better. As the cultural separation becomes more evident and self-reinforcing, it will accelerate until there are very few good VB programmers left.
  8. VB programmers, on the average, know less about good object-oriented, distributed, loosely coupled application design and development than C# programmers, on average. This is because their language has not supported these notions, so their culture has grown without them. Although these notions are supported now in VB, they are more slowly being adopted than in the C# culture because of cultural inertia.

Propagation of the culture in .NET

Under .NET, the VB language retains constructs that support the existing (old) VB culture. This was done, of course, in order to avoid alienating the culture’s members. Many of these constructs are still used by VB programmers, even though they should be avoided. Others are not harmful except in as much as they continue to provide cultural reinforcement of habits, including those that are harmful. Examples of key differences are listed below. These are simply examples and not an exhaustive list:

  1. VB by default allows support for late binding. Although it can be turned off with Option strict, the culture is such that it’s usually left on. This leads to numerous difficulty to catch errors. C# binding is always early.
  2. VB still supports the old On error goto construct. This leads to sloppy or non-existent error handling. C# supports only the superior trycatch error handling.
  3. VB supports optional parameters. Although VB developers often list this as an advantage, it is a disadvantage because the use of optional parameters weakens the contract between the caller and the method, allowing the developer to slacken his analysis and get away with it until bugs creep in. [Note: C# param array construct is not the same as optional params]
  4. VB supports the legacy VB functions, with reference to Microsoft.VisualBasic.dll. Many of these functions are slow and they should all be avoided in favor of the .NET Framework. However many VB programmers still use them. In new VB projects, this dangerous namespace is included by default.
  5. VB allows implementation of interfaces with methods of different names, making it confusing and difficult to find the implementation. C# does not.
  6. VB supports background compilation. While this speeds the development cycle for small projects, it slows down the IDE in large projects, contributing at least in part to the culture tending to gravitate toward small projects.
  7. C# namespaces are managed in way that makes programmers aware of namespaces and their importance. VB namespaces are managed in a way that hides them from the programmers by default. Careful attention to namespace management is a fundamental tenet of strong application design and its importance cannot be overestimated.

Conclusions

Conventional arguments between Visual Basic and C# focus on the functionality differences. Since these differences are minimal, it is argued that the choice of VB or C# should remain a matter of personal preference.

These arguments fail to take into account the deep cultural differences between the VB and C# camps.

The truth is that while there are some exceptional VB teams that write exceptional quality code, this is the exception, not the rule. Most VB teams have trouble writing high quality code, and this trait is ingrained deeply into their culture by environmental factors beyond their control, and continues to be propagated by the VB syntax and semantics in Microsoft .NET.

Therefore:

  • If an organization is content to write average quality software and has average VB developers, there may be no benefit in switching to C#.
  • If an organization has an exceptional VB team and wants to continue to improve, there is a real danger in continuing in VB. The danger is that the programmers will leave for opportunities in C#. Once even one top developer does this, the polarization of the group towards the old VB culture may accelerate, thus accelerating the attrition.
  • An organization with an exceptional VB team should switch to C#. The exceptional VB team will have no problem learning the new syntax, so there is no danger. The team will then reap the benefits of the C# syntax, semantics and culture for years to come.

Revision history

  • April 19th, 2005: Minor grammar fixed and removed reference to an internal project in our shop that is meaningless to the broader audience. Clarified several sections that might be taken to be slights against VB developers to indicate that it's not VB developers that are the problem. It's the upbringing of the language in the context of the environment... i.e. its culture. Removed section of additional benefits of C# since it's orthogonal to the point.
  • April 19th, 2005. I apologize to anyone who is or was offended by this article. Please read it carefully. If after reading it carefully you think that it slights good VB developers, please let me know exactly where/how and I'll fix up the article. My intention is not to slight any good developer, or even a bad one who's trying. Criticizing the factors that lead to a culture that makes it difficult for developers to be good... now that I have no problem doing.
  • April 22nd, 2005: I'm getting so many comments about how I say that C# is a better language than VB (even though I never say this) that I edited paragraph 2 to reflect that they are functionally equivalent.
  • May 10th, 2005: DotNetRocks' Carl Franklin read my article and commented on it in a recent issue of DotNetRocks, which you can download here: .NET Rocks! - Kimberly Tripp on SQL Server 2005. Being pro-VB, Carl was pretty negative on the article. I would have no problem with that except that I thought that he also missed the point and tried to ridicule the article by taking excerpts out of context. But you be the judge. I've transcribed his comments word for word in a comment slot below, so you can read them, comment, and, of course, rate his comments.
  • May 20th, 2005: Some posters have asked me to indicate that this article, and in particular the 80/20 comment, are based on my opinion and not on empirical or statistical data. They are my opinion.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
President Exia Corp.
Canada Canada
I grew up in a small town outside Montreal, Canada, where I grew to appreciate the Francophone culture, the hospitality of rural Quebec and the awesome skiing of the Eastern Townships. I studied Computer Science at the University of Waterloo, Classical Guitar at the University of Toronto, Electrical Engineering at the University of Ottawa, and earned an MBA at Queen's University.

I'm a partner in Exia Corp, developers of The Exia Process for better software project management.

Comments and Discussions

 
GeneralRe: It's dribble like this that deters me from contributing to CodeProject... Pin
Giancarlo Aguilera20-Apr-05 4:16
Giancarlo Aguilera20-Apr-05 4:16 
GeneralRe: It's dribble like this that deters me from contributing to CodeProject... Pin
Christian Graus20-Apr-05 13:07
protectorChristian Graus20-Apr-05 13:07 
GeneralNot an impartial article Pin
Joshua Quick16-Apr-05 18:24
Joshua Quick16-Apr-05 18:24 
GeneralRe: Not an impartial article Pin
Rei Miyasaka16-Apr-05 22:56
Rei Miyasaka16-Apr-05 22:56 
GeneralExcellent, Nigel! Pin
pbromberg16-Apr-05 15:31
pbromberg16-Apr-05 15:31 
GeneralRe: Excellent, Nigel! Pin
Igor Brejc17-Apr-05 21:37
Igor Brejc17-Apr-05 21:37 
GeneralRe: Excellent, Nigel! Pin
Nigel Shaw18-Apr-05 10:59
Nigel Shaw18-Apr-05 10:59 
Questionwhat response do expect from me? Pin
Giancarlo Aguilera16-Apr-05 15:10
Giancarlo Aguilera16-Apr-05 15:10 
Nigel Shaw wrote:
"Visual Basic was syntactically simple, and it enabled virtually anyone with a few hours of time to learn how to create simple applications."

Sure thing dude, and C# has followed that exact same path. Or what? Do you honestly think that, because C# has a C style syntax, it is just as difficult as C++? Don't kid yourself. C# is cake. Furthermore, it's not the language per se that makes developing simple applications easy with VB or C#; it's the environment that hosts the language. Otherwise, you're stuck writing your app with Notepad. Sure, BASIC syntax for some folks is easier to read than C syntax, the obvious reason being that BASIC is much more verbose and always uses words rather than non alphabetic characters as tokens. Again, it's more the "visual" part that simplifies development, not the language. Had VB 1 not had the form designer the developer would have been forced to use the Win 16 API to do anything at all, in which case C++ would have clearly been an easier alternative, since working with the Win API is much easier to do in C++ than in VB. Can you tell me why? Probably not, since it's obvious to me after having read this ill formatted article that you know nothing about VB.

Nigel Shaw wrote:
"In 2000 Microsoft announced .NET. in a move that swept the slate clean and replaced Visual Basic with what was in effect an entirely new development paradigm."

Entirely new programming paradigm? What is your definition of a programming paradigm? To me a programming paradigm is just a fancy way of referring to a particular programming style. Given this definition I fail to see how VB.NET introduced an entirely NEW programming paradigm. Let me guess, are you referring to OOP? If so, then once again I am further convinced that you are completely ignorant about VB, since VB has supported OOP since version 4. All .NET did was replace VB's underlying plumbing via the CLR and FCL, just like COM replaced VB's internals when it made the move from version 3 to version 4. Furthermore, not even AOP is COMPLETELY new; after all, COM types can also be decorated with certain predefined attributes that result in the provision of various services. Do yourself a favor and don't believe all the hype.

Nigel Shaw wrote:
"The kludgy third party tools were swept aside and replaced by a clean third party tool model."

I have no clue about the "kludgy" third party tools you were using before .NET, but most of the COM tools I used were excellent (Infragistics, Farpoint, etc...). No doubt the .NET component model is cleaner than what was available to vendors in COM, mainly I think because of the wonders of attributes/reflection, but please don't over exaggerate; otherwise, I'm lead to believe you work for MS's marketing department.

Nigel Shaw wrote:
"The lack of inheritance and polymorphism enforced for so many years by the underlying limitations of the Visual Basic engine architecture was overcome by throwing the old engine out completely."

Wow! What a statement! I'll let the lack of inheritance slip, because I assume you're referring to implementation inheritance as opposed to interface inheritance, which VB COM has supported since version 4, although I'm not sure I should make such assumptions regarding your knowledge of VB, since it's obvious to me that such knowledge does not even exist, so how can I make assumptions about it. Please tell me, where do you get the nerve to say that prior to .NET VB lacked polymorphism? Either you don't know anything about VB, which is obvious, or you don't know anything about COM, which is possible but not probable, or both. Just the mere fact that VB(4-6) is based on COM should be an obvious heads up that the language must allow types defined by it to exibit polymorphic behavior. My friend, ever heard of the IUnknown interface? What's your definition of polymorphism? To me it simply means the ability to treat objects of different types identically via a common interface. Was this possible in VB prior to .NET? Again, there was no choice in the matter given how COM worked (interface based), just like now in .NET every type ultimately derives from Object.

Nigel Shaw wrote:
"Recently I read a final report of a research project funded by the Swiss National Science Foundation. The project's naive goals were identified as follows: First, how can easy programming be achieved (in particular, for non-experts)?"

Why research? Buy VS.NET! D'Oh! | :doh:

Nigel Shaw wrote:
"This despite of the fact that, for decades, the industry has been advertising programmers' positions by claiming that programming is easy."

The industry? What industry are you referring to? Who said my job is easy? Don't know many people I've met that thought programming was easy. Where are your references?


Nigel Shaw wrote:
"Tools became the slogan; the right tools, paired with clever tricks and
serious management methods, would work wonders. "

It's always and always will be about the tools buddy. What would us programmers do without tools.

Nigel Shaw wrote:
"Indeed, the woes of Software Engineering are not due to lack of tools, or proper management, but largely due to lack
of sufficient technical competence. "

Lack of competence is something all fields share, not just software. Just look at the US president.

Nigel Shaw wrote:
"and how the last remaining vestige of Visual Basic, the syntax, unfortunately continues to reinforce the culture. "

Last remaining? Again, ignorant to believing that VB.NET provides features totally new, never seen before, although sure it's a whole lot better, but nothing new here, since subsequent versions of any language usually, if not always, are better than prior versions. Syxtax reinforcing culture? I repeat, syntax? I repeat, syntax? Will the real slim shaddy please stand up! Explain to me please the cause and effect relationship between syntax of any language and the quality of systems produced by that language? I am going to have to once again make assumptions on what you are trying to say here. I think, not sure, what you meant to say is that VB's support for programming styles other than OO results in bad code. Perhaps you meant that features native to the language, for example, the ability to create global modules, leads to below quality systems. For the most part, I agree, although I refuse to ever make any type of programming decision without knowing the context I find myself. It's one thing to say in theory, like I always do, that every system should be the result of proper object oriented design, analysis, and implementation. However, in practice "other factors" usually come into play that, if not taken into account, living by the theory may end up taking a negative toll timely delivery. Is there time to do it right? If the answer yes, go for it! If the answer is no, well then some tradeoffs needs to be made.

Nigel Shaw wrote:
Delphi, a direct competitor to Visual Basic, was regarded as vastly superior technically, even by Microsoft

No??? Really???? D'Oh! | :doh: No doubt Delphi was superior than VB COM, just like C++ was, at least from a programmer's perspective, although certainly the same thing can't always be said from a business perspective.

Nigel Shaw wrote:
To preview the features of each successive version of Visual Basic, it was generally recognized that one only had to look at the current version of Delphi.

The man in charge of any language is a fool if he does not take into account the good and the bad of other languages around him when preparing it for a new version, and no doubt the VB team has no fools within it. From an environment/"visual" perspective, however, VB was and continues to be KING! And please don't tell me that the Delphi environment, or any other IDE, was not influenced by the VB environment, because surely they have, including C#.

Nigel Shaw wrote:
"Hejlsberg knew his work would never achieve mainstream adoption while he remained at Borland."

You must know the guy! Please send my regards Laugh | :laugh:

Nigel Shaw wrote:
"At the same time, Microsoft gradually came to realize that Visual Basic would never achieve the technical excellence of Delphi without Hejlsberg. "

I didn't know you worked at MS! Why didn't you say so! Seriously, had Hejlsberg refused MS's offer, I have no doubt whatsoever MS would have hired some other genious.

Nigel Shaw wrote:
"Java applications, when architected and built by skilled Java developers, were more powerful and feature-rich than the vast majority of Visual Basic applications. "

You don't say? Give me the links where you obtained this information. Also, when you say feature rich and powerful, you're not talking about the user's perception, are you?


Nigel Shaw wrote:
"Coming from Andreessen, it was the thunderbolt that shocked the world into a near-frenzied adoption of Java, and ultimately brought Microsoft and Hejlsberg together. "

Really? That's what brought them together? And all this time I thought it was the money that lured Hejlsberg to MS. What was I thinking! D'Oh! | :doh:

Nigel Shaw wrote:
"Hejlsberg envisioned a language which would fully embrace the emerging component model for application development by making the three key constructs of component development, properties, methods and events,
first class elements of the language. "

Of course these constructs first class members of VB since it's COM days. Nothing new to VB.

Nigel Shaw wrote:
"For instance in Java properties don’t really exist, they’re “faked” by using the “get xxx” and “set xxx” syntax. In a property inspector they show up as “xxx” and you have to know that you put the get and set in the right places. "

So what! C does not have the notion of a class explicitly defined within its grammar but does that mean you can't do OOP in C? Of course not! Want proof?

Nigel Shaw wrote:
"This and other anomalies made Hejlsberg the perfectionist uncomfortable. "

Don't forget to send him my regards! Ask him if he's willing to come to CA and have a beer with me.

Nigel Shaw wrote:
"With Java rapidly gaining ground, by 1996 Microsoft was getting very concerned."

I wonder if the profits showed this concern? Probably not, since VB probably made up for any losses, but then again I don't have access to this type of inside information the way you do, so don't listen to me.

Nigel Shaw wrote:
"Once the syntax permitted it, such assignment became widespread, reinforcing the designers’ original premise. Once this cycle of self-reinforcement begins, the cultural habits quickly become entrenched and widespread, and are extremely resistant to change. Minds tend to gravitate to like minds. User groups tend to attract homogenous followings. Visual Basic instructors tend to propagate what their instructors taught them. "

In your time in college did you take any critical thinking courses? I'm sure you have. Have you ever heard of the slippery slope fallacy? You just fell to it. There may be a correlation, but certainly not a cause.

Nigel Shaw wrote:
"This awareness of the immense inertia of embedded culture is precisely the brilliant insight that caused Microsoft to keep Visual Basic and to make it nearly 100% backward compatible at the syntax level."

Tell this to the VB COM guys that are petitioning VB COM support in VS.NET.

Nigel Shaw wrote:
"They recognized that trying to get legions of developers to abandon their old cultural norms and adopt new ways was foolhardy. "

Foolhardy? You don't have to be a genius to figure that one out.

Nigel Shaw wrote:
"Hiring good C# programmers is easier than hiring good VB programmers.
This is because 80 of C# programmers are good, while 80% of VB programmers are not good."

Total bullshit, hiring a good programmer is NEVER easy. First, there are many good programmers from which to choose. Second, where did you get these figures from? My advice to you next time you write an article like this, that is, one that strikes contraversy, is to include a detailed references section that points to all these numbers you present.

Nigel Shaw wrote:
"Hiring the average C# programmer costs more than hiring the average VB programmers. This is because the average C# programmer is a better programmer than the average VB programmer. "

Show me the money! Show me the money! Seriously, give me the link that backs this claim up. Also, an average is just that, an average programmer, does not matter what language he or she uses. I myself am an average programmer.

Nigel Shaw wrote:
"Hiring a good VB programmer costs the same as hiring a good C# programmer."

How dare that damn VB programmer charge the same amount of money as that C# programmer! That's just crazy! Laugh | :laugh:

Nigel Shaw wrote:
"A good programmer accomplishes two to ten times what an average programmer accomplishes"

2 to 10??? Quite a range there, don't ya think!


Nigel Shaw wrote:
"In the near future, there will be less good VB programmers than C# programmers."

Really? You can see the future as well? Very cool dude! Can you give next week's lotto numbers. I really could use an early retirement.

Nigel Shaw wrote:
"This is because all the good VB programmers are switching to C#. "

I haven't switched, nor have many others, many of which are CP homies. Then again I'm just an average programmer, completely fluent in both C# and VB.

Nigel Shaw wrote:
"This is partly because they like the language better, but mostly because they like the culture better. As the cultural separation become more evident and self-reinforcing, it will accelerate until there are very few good VB programmers left."

You've been hanging around CG lately, haven't you? Good move! He's an excellent programmer which I have the utmost respect for.

Nigel Shaw wrote:
"VB programmers, on average, make more errors regarding object assignment and clean-up, threading control, connection management, state management,
and the other types of errors highlighted in “Social Development Canada ROEWeb – TIGER Team (Code Review) Version 3.7
April 07 2005”. C# programmers, because their culture is conversant in these topics, tend to make these mistakes less. "

Lordy, lordy, lordy, lordy! Laugh | :laugh: Don't worry, I understand, that is, I understand that you're completely ignorant regarding VB. First of all dude, VB has never had to worry about memory leaks, other than those caused by circular references back in the COM days. Threading? Back up a minute here again and remember that prior to .NET VB was COM based, so what does that tell you about threading? Yeah, I know who listen to rules, but in any case, threading in VB was easy! Just write a COM component in C++ and expose it to the VB client, or just download one from CP. Finally, tell me exactly what a C# programmer needs to know about object clean up? Other than disposing of resources, not much, but really what else is there. Also, how tough is it to create a threaded app in C#, VB, or any .NET language? Not tough at all.

Nigel Shaw wrote:
"The VB language retains constructs that support the existing (old) VB culture. This was done, of course, in order to avoid alienating the culture’s members. Many of these constructs are still used by VB programmers, even though they should be avoided."

Be specific, which ones are you talking about? Please, enlighten me with your knowledge of VB.

Nigel Shaw wrote:
"VB by default allows support for late binding. Although it can be turned off with “Option strict”, the culture is such that it’s usually left on. This leads to numerous difficult to catch errors. C# binding is always early. "

I use late binding all the time when working with COM; it's proved invaluable. There's a time and place for everything, including late binding.

Nigel Shaw wrote:
"VB still supports the old “On error goto” construct. This leads to sloppy or non-existent error handling. C# supports only the superior try…catch error handling. "

VB also supports structured exception handling. The other form is there to accomodate existing code. VB was not born yesterday you know, C# was. VB has production code to support. Someone have a gun against your head that's forcing you to use "on error etc.."?

Nigel Shaw wrote:
"VB supports optional parameters. Although VB developers often list this as an advantage, it is a disadvantage because the use of optional parameters weakens the contract between the caller and the method, allowing the developer to slacken his analysis and get away with it until bugs creep in. [note: C# param array construct is not the same as optional params]"

Nothing wrong with optional parameters, although I prefer method groups. C++ has them. Does that make C++ bad?

Nigel Shaw wrote:
"VB supports the legacy VB functions, with reference to Microsoft.VisualBasic.dll. Many of these functions are slow and they should all be avoided in favor of the .NET framework. However many VB programmers still use them. In new VB projects, this dangerous namespace is included by default. "

Since you're here giving advice, how about being a bit more specific as to which functions are slow. IsNumeric is slow, but it sure as hell is convenient to use at the windows UI level, and I'm going to continue to use it.

"VB allows implementation of interfaces with methods of different names, making it confusing and difficult to find the implementation. C# does not. "

So what? And C# requires name mapping when implementing interfaces, whether explicitly or implicitly. Whereas VB allows the programmer to declaratively hook a method to an interface member via implements, which IMHO is far better.

Nigel Shaw wrote:
"C# namespaces are managed in way that makes programmers aware of namespaces and their importance. VB namespaces are managed in a way that hides them from the programmers by default. Careful attention to namespace management is a fundamental tenet of strong application design and its importance cannot be overestimated."

The only difference is that VB allows the root namespace to be defined at the project level and also allows any namespace to be included at the project level as well. C# on the other hand requires that any namespaces be explicitly included in the source file. Good or bad? Depends

Nigel Shaw wrote:
"C# is one step ahead in language features, and probably will remain so. Currently C# supports operator overloading, which VB won’t support until the next release. The next version C# will support generics, anonymous methods and partial types. These will not all be in the next version of VB. "

Err! The only language features C# will have that VB won't in 2.0 are iterators and anonymous methods.

Nigel Shaw wrote:
"C# supports XML comments which enable the automatic generation of comprehensive system documentation (Figure 2). "

In 2.0 they will be available. Now you can just use an add in. No biggie

Nigel Shaw wrote:
"C# code is clearer and easier to read because the braces enforce white space and provide a strong visual cue to the start and end of logical blocks. This makes the code easier to understand, leading to fewer instances of common errors such as logic in the wrong section of a method, forgetting to end a logical block, and so on. "

What a bunch of crap! What makes code easy or hard to read is the design the code implements. If you're reading VB code in which global modules and variables are used all over the place, well then sure things are going to get tough to read.

Enough already, I must say the amount of trash presented in this article has overwhelmed me. No offense bud, but certainly you should have expected remarks like the ones I've made, given the content you have presented.

Finally, what's up with the section header colors? I know this article is unedited but please try to abide by the CP style.
AnswerRe: what response do expect from me? Pin
Luis Alonso Ramos16-Apr-05 16:18
Luis Alonso Ramos16-Apr-05 16:18 
GeneralRe: what response do expect from me? Pin
Cory Smith16-Apr-05 20:15
Cory Smith16-Apr-05 20:15 
GeneralRe: what response do expect from me? Pin
Luis Alonso Ramos16-Apr-05 20:51
Luis Alonso Ramos16-Apr-05 20:51 
AnswerRe: what response do expect from me? Pin
Cory Smith16-Apr-05 20:14
Cory Smith16-Apr-05 20:14 
AnswerRe: what response do expect from me? Pin
Rei Miyasaka16-Apr-05 22:44
Rei Miyasaka16-Apr-05 22:44 
GeneralRe: what response do expect from me? Pin
Giancarlo Aguilera17-Apr-05 20:31
Giancarlo Aguilera17-Apr-05 20:31 
GeneralRe: what response do expect from me? Pin
Rei Miyasaka17-Apr-05 21:34
Rei Miyasaka17-Apr-05 21:34 
AnswerRe: what response do expect from me? Pin
Nigel Shaw17-Apr-05 2:44
Nigel Shaw17-Apr-05 2:44 
GeneralRe: what response do expect from me? Pin
Giancarlo Aguilera17-Apr-05 20:56
Giancarlo Aguilera17-Apr-05 20:56 
GeneralWhoa... I read all that?! Pin
Rei Miyasaka16-Apr-05 13:25
Rei Miyasaka16-Apr-05 13:25 
GeneralRe: Whoa... I read all that?! Pin
Nigel Shaw20-Apr-05 10:33
Nigel Shaw20-Apr-05 10:33 
GeneralInteresting... Pin
malawto16-Apr-05 12:56
sussmalawto16-Apr-05 12:56 
GeneralRe: Interesting... Pin
Nigel Shaw18-Apr-05 10:58
Nigel Shaw18-Apr-05 10:58 
GeneralGreat!! Pin
Luis Alonso Ramos16-Apr-05 12:11
Luis Alonso Ramos16-Apr-05 12:11 
GeneralRe: Great!! Pin
Nigel Shaw18-Apr-05 10:57
Nigel Shaw18-Apr-05 10:57 
GeneralVery nice Pin
Larsenal16-Apr-05 11:18
Larsenal16-Apr-05 11:18 
GeneralRe: Very nice Pin
Nigel Shaw16-Apr-05 11:57
Nigel Shaw16-Apr-05 11:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.