It's the Platform Stupid

Back when people still programmed in assembly, life was easy. The language was simple and there was no API(Application Programmable Interface) to speak of. In pascal it's more or less the same. The language isn't too complicated and the standard API isn't that big. It's largely rememberable anyway. In those "old-style" languages, you could really say "I'm a pascal programmer" or whatever the language was you used. Today it's totally different. The language doesn't mean zip anymore. What's a language anyway? Just a syntactic thing. If you know one language, you know them all. What it really is you have to learn, is the platform that's bound to the language. Look at Java. Java is a fairly simple language. If you know another object-oriented language, you will learn Java in a couple of hours. The real trouble is getting to know the huge amount of platform APIs that come with it. Today, if you say "I'm a Java programmer" we assume that you know the Java platform; whether you actually know the language is not interesting. That's also why I've been sceptic about .NET's common language nature. The platform is the same, but the languages differ. Because the languages have to fit in the .NET platform, they're basically all the same. What's the difference between VB.NET and C#, really?

People often ask "what language should I use/learn?" That's only a valid question if you're some kind of academic that wants a new language to play with. I, for example, really liked learning Python, because it has some interesting things such as metaclasses, some functional programming features and just generally is a very nice and clean object-oriented dynamic language. But does all that matter when you need to get things done? Little, I'm affraid.

In most cases developing an application isn't much more than dragging a GUI together, developing a data model and generally using the platform you're programming on as effectively as possible. "PHP":http://www.php.net became as popular as it is, not because the language is so beautiful and elegant (it isn't), but because it comes with a huge pool of functions that aid you in rapidly developing web applications.

When choosing a development platform, it's not the language that matters, it's the platform's APIs.

OK, that being stated, let's now nuance the hell out of what I just said. Languages, of course do matter. Just less than the platform. The platform should be your first selection criterium. The language comes after that. If I'm looking for a productive web-application development platform I might choose "Ruby":http://www.ruby-lang.org over "Python":http://www.python.org, just because there's "Ruby On Rails":http://www.rubyonrails.org, not because I prefer Ruby over Python (because believe me, I don't).

What's nice about .NET is that if you chose .NET as your platform, the choice of language is still open. The VB.NET/C# debate isn't interesting as they're semantically equivalent. But since other languages are ported/written for .NET, it gets more interesting. For some parts of your software a "functional language":http://research.microsoft.com/projects/ilx/fsharp.aspx might be a good choice. In other cases you'll be more productive with a "dynamic language":http://www.ironpython.net. You can choose anything you like, because whatever you choose, even if it's COBOL, the platform APIs will be available to you.