The Language Wars
Anybody who’s ever seen Full Metal Jacket will remember the U.S. Marine Corps Rifleman’s Creed:
This my rifle. There are many like it but this one is mine. It is my life. I must master it as I must master my life. Without me my rifle is useless. Without my rifle, I am useless. I must fire my rifle true. I must fire straighter than the enemy who is trying to kill me.
But what most people don’t know is that programmers live by a similar creed, albeit one that requires less courage:
This is my programming language. There are many like it, but this one is mine. It is my life. I must master it as I must master my life. Without me my language is useless. Without my language, I am useless. I must code my language true. I must code straighter than the enemy who is trying to take my job.
If you’re a programmer, you’re no stranger to the Language Wars.
- C# vs. Java
- C++ vs. C++/CLI
- PHP vs. Ruby
- VB.NET vs. C#
And if you’ve done any time “in country” then you know what there’s only one way to treat programmers of other languages: with poisonous rancor, sadistic undercutting, and general disdain.
Everybody knows that Visual Basic programmers are inferior, because Visual Basic for the longest time didn’t support object-oriented programming, or many of the abstractions that first-rate programmers require.
Everybody knows that C++ programmers are dinosaurs, clinging to an outmoded development paradigm, pointing out the useless performance of their language in an era when hardware has made most performance concerns moot.
And as for PHP programmers… don’t even get me started.
No matter who you are, or what language you program in: your stuff is better than the other guy’s stuff. At least, that’s the unspoken (or explicitly stated) assumption among many software developers, especially developers of the “guru” variety.
It’s also an assumption which is guaranteed to make you a poor programmer.
I’ve remarked before that technology is really just a way to help people instantiate ideas in a concrete form, through the process of what I like to call “reality engineering”. Every programming language ever invented is a means to that end, as is every screwdriver. So what do we achieve by religiously worshipping one particular programming language to the exclusion of all others?
We severely limit our options for the fluent and intuitive expression of our ideas.
In game terms, this would be like sitting down to a game of chess, across from a noted Grandmaster…
…and deciding, “Eh. I’m not going to use my Bishops. I don’t like Bishops, my organization doesn’t like Bishops, my fans don’t like Bishops. Rooks are much stronger.”
There are few technical decisions which are more important than the choice of language. It’s not enough to choose Language X because your organization is a political advocate for Language X. It’s not enough to choose Language X because that’s what the head architect wants to use. Choosing the right language is so helpful, and choosing the wrong language is so expensive, that the decision has to be made on the basis of its technical merits alone. What’s more: the choice of language has to be re-evaluated for every new project in your pipeline.
Otherwise you’re costing yourself and your organization time and money.