The End of the Language Wars
.NET developers, regardless of whether they use VB or C#, realize that the .NET platform is far more important than the language they choose.
Language wars, huh, yeah. What are they good for? Absolutely nothing, uh-huh.
(With apologies to Edwin Starr.) People have found something to fight about for as long as I've been in the computer industry. My OS is better than your OS. My platform is better than your platform. My language is better than your language.
There can be no doubt that Digital's OpenVMS was the best operating system ever invented. With that out of the way, let's talk about programming languages. Like OpenVMS, the .NET platform is language neutral. Both platforms support many different languages, and almost all of the languages on either platform can be used to do almost anything. Both platforms provide a rich set of services, allowing the languages to focus primarily on enabling a developer to access the platform.
Throughout the '90s in the Microsoft world, there was a clear delineation between C++ and VB (or similar business-focused tools like PowerBuilder, Delphi, and so on). The C++ language was geared toward low-level Windows platform access, and C++ was the primary Windows development language. Most business developers found that low-level access to be unproductive, and tools like VB provided not only a language, but an abstraction layer so the developer didn't have to deal with Windows itself to do most common tasks. The result: C++ and VB had different roles and different constituencies.
Then came .NET, a platform that is an abstraction layer. My good friend Billy Hollis often says that .NET is just the VB runtime all grown up and made language neutral. And there's a lot of truth to that. The .NET platform provides the benefits of the VB runtime (and many more), but with language neutrality. However, with the language neutrality came the latest iteration of the language wars: VB vs. C# in a battle to the death!
There were no such wars on OpenVMS. People chose languages because of familiarity with syntax, or due to existing bodies of code, or because a specific language had features particularly good at solving a problem. For instance, FORTRAN was far better at solving mathematical problems than other languages, both because it had powerful syntax for that purpose, and because it had the most amazing optimizing compiler!
I think the language wars in .NET occur because of the cultural baggage from the '90s. Most early adopters of C# came from C++, and brought with them an outdated idea that semi-colons automatically meant better performance and lower-level platform access. Most early adopters of VB came from VB, and brought with them an outdated idea that VB was the only realistic language for the productive development of business applications.
But it turns out that C# is not about low-level access. Rather, it's about business productivity. And it turns out that VB is no longer the only business-productivity language. Moreover, VB has the same low-level features as C#. All of a sudden, two different constituencies, with two different worldviews and a decade's worth of biases collided on the same turf. It takes time for people to fully appreciate any new reality, and in the meantime --unfortunately - -there's often a lot of strife.
Today I think most experienced .NET developers, regardless of whether they use VB or C#, realize that the .NET platform is far more important than the language they choose. In a few more years, I hope that the Microsoft world can achieve equality with the OpenVMS world, where there are no language wars. It should be a world where your programming language is chosen because of your syntax preferences, or due to existing bodies of code, or because a given language has some specific feature that applies to a given requirement. For example, I hear that F# is particularly good at solving mathematical problems on multi-core machines because it has a powerful syntax for that purpose.
Rockford Lhotka is the author of several books, including the Expert VB and C# 2005 Business Objects books and related CSLA .NET framework. He is a Microsoft Regional Director, MVP and INETA speaker. Rockford is the Principal Technology Evangelist for Magenic, a Microsoft Gold Certified Partner.