Lhotka's Labrynth

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.

About the Author

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.

Reader Comments:

Fri, Dec 19, 2008 erked

I can't read these comments thry're so frikkin small. get agrip on thi ngs and put them where they belong.

Thu, Dec 18, 2008 Andrew Cambridge UK

Thanks to Dave for his carefully reasoned comments. :|

Tue, Dec 16, 2008 Dave

I can't wait till the day that VB is gone...you're right, they both do the same. But not in the same way in terms of syntax. If they both do the same then get rid of VB so we can all enjoy a much cleaner syntax once and for all.

Tue, Dec 16, 2008 Dave

>>>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.

You're missing the point. VB is a verbose pile of sh**

Tue, Dec 16, 2008 Dave

this article is gay

Tue, Dec 16, 2008 Dave

Whatever dude. VB Sucks. Verbose pile of sh**

Sun, Jul 13, 2008 David J Dachtera Chicago

Unfortunately, you spoke of OpenVMS in the past tense. Now, while it is true that HP is doing everything it can to kill it, the truth is that OpenVMS in all its flavors - VAX, Alpha and I64 - will be around so long as it has a user base. And it has a user base, even if its vendor doesn't want it to.

In this day when every hacker, cracker and script-kiddie is trying to bring the Windows world to its knees, the time has never been better to give Redmond the "boot(strap)", and spread OpenVMS - the only o.s. ever banned from hacker conventions as uncrackable - to every corner of the EDP world.

Fri, Jun 6, 2008 Anonymous Anonymous

thankssssssssssssssssssssssssssssssssssssssssssssss

Sun, Jun 1, 2008 Akash Kava India

.Net Needs stability and it needs to work as expected.

With all respect to Microsoft, Microsoft's way of twisting general computer programming fundamentals to make developer completely depend on whole MS platform has created beginning of end of .Net platform.

.Net platform with recent last few updates, gave so many new features and technologies but not one good enough to be used in production use.

.Net Platform needs too much of investment and understanding of .NET + Business Layer Controls (MS Partners), comparing to powerbuilder or RAD developer tools, they were much easier, better to develop apps faster and manage them.

Unfortunately, there is no one to call and ask for support for one problem, because you have 10 vendors tied up with your apps and each one blaming other for bug.

New Language, Innovation and Better New Platforms are still yet to come, .NET is not End of Language Innovation. We are now fed up with it, so I agree everyone else is too.

Fri, Feb 29, 2008 Stanley F. Quayle

You didn't mention that different languages interoperate seamlessly on OpenVMS. Fortran calling C, calling Cobol, calling Basic, etc. I have lots of VMS code that's scattered across several languages.

And OpenVMS isn't a "was". It's still be actively developed, and is now on the Intel Itanium processor.

Tue, Feb 26, 2008

For .NET to attain the perfection of OpenVMS, much more is required than just language independance. OpenVMS can't be beaten in availability (it can easily run without having to restart for several years), security (due to the beauty of the kernel's access mode structure).

A former Digital instructor on VMS internals

Peter

Fri, Feb 22, 2008 solak

The power in VMS is in Architecture.

Every part of the OS has been designed to allow general-purpose use by

other parts. In particular, the ability to easily use multiple

languages, even within the same application, is due to the Architecture

of the Calling Standard. The mechanism used to pass parameters and

control to and from a routine is the same for all compilers, so inter-

language calls only require compatible declarations of the interface in

all source modules. The object file format is the same for all

compilers, so one linker can combine code from any source language into

one executable file. Sharable images or RTLs (called APIs or DLLs on

other platform) have the same interface no matter which language was used

to write the code.

This same power of Architecture in other parts of the system is the

reason why VMS is so crash-resistant and secure. I think that more has

to happen besides the mere existence of the .NET "platform" before it has

that power, because the power of an architecture is based on whether it

can be and is universally used. So long as .NET has incompatible

competitors (alternate calling mechanisms and object file formats) on the

operating system, there will be weakness in every connection that cannot

be made. I'll stay on VMS, thank you, where this all works already,

today.

Thu, Feb 21, 2008 Jason

It should be illegal to mention C# without the word Java in the same sentence. .NET is not even close to VB all grown up. .NET is Microsoft saying, "We want that and we want it better." Business programmers given the choice between VB and Java generally took that later. I see C# as Microsoft's was to real these developers back in. And it's working.

Wed, Feb 20, 2008

Your article implies that C++ has faded away. NOT TRUE!! There are many of us that develop for .Net using Visual C++ (C++/CLR) dispite Microsoft's desire to (arguably) replace it with C#. Why learn a new language when the old one works? What's the advantage?

Tue, Feb 19, 2008 Ziggy

Interesting comments. Please keep in mind that VB is only case insensitive if you want it that way. You can choose the desired options to tighten any way you like. Good code is good, bad code is bad. You can accomplish that in any language.

Mon, Feb 18, 2008 Ian Miller

HP OpenVMS is still the best operating system on the planet. One of the differences is the language neutral calling standard and run time support enabling a program to be written in several languages but VMS has other unique attributes.

Fri, Feb 15, 2008

foo is right. Most VB developers come from a non CS background and therefore do not write tight applications. This is not to say that you could not write great VB apps, just that the language allowed sloppy coding. Good example was the VARIANT datatype - a major bug contributor . Joe, the case insensitive feature of VB to me is a crutch that can lead to sloppy coding - I have seen it personally.

Fri, Feb 15, 2008

The language wars will never be over until there is one language to rule them all, and THAT is not ever going to happen.

With languages like Python and Ruby (dynamic languages) and the different thought processes that facilitate, the argument over developer productivity relative to language choice is going to take a new dimension.

Part of the problem with the language wars is folks comparing apples to oranges. VB IS the best tool for the job, depending on what the job is. Too often, developers with different jobs are comparing and contrasting language choices that aren't even relevant to their situation.

Fri, Feb 15, 2008 joe kansas

foo, you make valid points...but you've still got the '90's on your brain. VB developers less skilled/experienced? Back then, true. Today, no. Funny how fast 10 years can go by. Personally, I prefer the fact that vb isn't case sensitive. What productivity gain do you get from case sensitivity? none. C++, and all it's derivatives, are the dinosaurs now.

Wed, Feb 13, 2008 Yort NZ

Sadly, there seems to be an ever growing split between VB and C#, and interestingly C# seem to be the poorer cousin. We've been getting this language neutrality story from MS for some time now, but it isn't always true. I'd kill for VB's Dynamic interfaces in C#, but I can't have them. Apparently there are also things you can do in VB with LINQ that aren't supported by C#. The VB team seems to be adding more and more language features, while the C# guys add only the biggies.

Worse, the IDE support for the two languages (which REALLY, REALLY should be language independant) keeps changing too. In VS 2005, VB.NET snippets could automatically add references to your project, but not in C#... why ? Also, VB had edit and continue long before C# did, etc.

Yes, the languages are much closer now than they ever have been... but MS need to be careful to keep it that way.

Tue, Feb 12, 2008 foo bar

Having done Windows programming in C, C++ and VB, then in C# and VB.NET, most of what is said here make a certain amount of sense.

One of the factors, a big factor actually, is not the technical aspects of the toolset, but the cultural aspects of the tool users.

The so called 'productivity' advantage of VB was always an oversimplification. Productivity, like 'performance' or 'optimisation', is not a very meaningful term devoid of context.

The success of VB was due to enabling less experienced and less skilled programmers generate good enough Windows apps somewhat quickly.

One side effect was that a VB constituency emerged, both developers and 'business' stakeholders, who lost sight of the fact that there really was tradeoff between the RAD model and deeper quality measures.

Yes, VB got more powerful over time, but the fact remained that those apps and those tools didnt' scale. If you wanted to do sophisticated things and scalability and robustness really mattered, then eventually you had to get your hands dirty with C or C++.

I speak from exerience in more than one shop, and more than once rewrote legacy VB code in C++ resulting in faster, more reliable, and easier to maintain code.

I'm not trying to gratuitously 'diss' the VB community. But there is a difference in skill level and sophistication between the average VB developer and the average C++ developer (and yes there are plenty of exceptions in both directions).

This fact should not be denied, but rather accepted and treated as a growth oppurtunity. To some extent, .NET forced traditional VB programmers to change, and MSDN has been providing more substantive design and architectural content for a while now, and all this is good.

The end of language wars would be a good thing, but the end of cultural wars even better. There's always more to learn, and a clear understanding of the trade-off between 'high' and 'low' level tools is always needed.

There will always be appropriate contexts for both.

Tue, Feb 5, 2008

Couldn't agree more. Ultimately all .NET languages compile down to IL. And providing you do things "the .NET way" should produce the same (or very similar) products

Add Your Comments Now:

Your Name:(optional)
Your Email:(optional)
Your Location:(optional)
Comment:
Please type the letters/numbers you see above