If I were a cynic (and on alternate odd days I am), I would say that it’s an inevitable side effect of the blog-comments medium. You can say, “I like chocolate ice cream” and you’ll get a slew of angry comments, half demanding why you hate chocolate ice cream and the other half demanding why you think chocolate is better than every other flavor.

But it is an interesting question: Is it possible at all to discuss language wars without starting one? Not really. Most reasonable debates about programming languages fail for a number of reasons.

First, the debate is often framed as a contest between one programming language and every other language, rather than putting a programming language in a contest with itself. In other words, the debate is centered on Python vs. PHP, but not PHP vs. what PHP could be. Different programming languages often have different design tradeoffs to make them more applicable to different domains. Talking about Python vs. Java is a near pointless apples-oranges debate.

When we do compare languages in the same domain, we most often we point out a language’s deficiencies by saying language X should be more like language Y, because X and Y are what we know from experience. It is much harder to identify and solve problems in a programming language that haven’t been addressed before. This gives us a propensity for unhelpful apples-oranges comparisons.

Second, we can never agree on what constitutes a relevant factor for comparison. This was the topic of my previous post, but who am I to say how we should judge a language? It’s far too easy to say, “The syntax and feature set are important, so who cares about the documentation for a language?” Of course, documentation is like oxygen and caffeine; it doesn’t seem to matter until you don’t have it. But the question of if these aspects are relevant, and the weight of their relevance, has no consensus.

Third, the plain fact of the matter is that not all programming languages are equal, even when comparing languages in the same problem domain. The “every language is special in its own way” line just doesn’t hold water because the advantages/disadvantages list between languages is sometimes tilted heavily one way or the other. The diplomatic position won’t always do because sometimes a safe middle ground simply doesn’t exist.

The fourth reason we can never have a civil discussion about how to compare programming languages is because it’s one of those things we become irrationally emotional about. Learning a programming language, its syntax and nuances, its libraries and pitfalls, is a form of hazing. And like all hazing, we rationalize the effort we put into it by telling ourselves (deservedly or not) that it was worth it.

The software engineering field’s quick rate of obsolescence makes this all the more looming. I myself never hopped on the Ruby on Rails bandwagon because I didn’t know if it would be The Next Big Thing or just a fad. The opportunity costs are too high. And like religion, the failure and success of a programming language is tied to the number of people supporting it, and the pressure tends to make us edgy and suspicious.

Programming language holy wars will always make me to roll my eyes so fast that the spin causes the earth’s rotation to reverse and time to go back to an era when our petty, stupid differences could be resolved by pistols and fisticuffs at dawn. The low tide of intelligent arguments that the debate tends to produce is even more aggravating than the unnecessary necessary-evil of the debate itself. My two bits on how to resolve this? Good code is the best form of evangelism.

P.S. By previous post was on this topic, and I made the mistake of inserting my opinion on the web. A couple people pointed out that I can’t say PHP sucks because I use WordPress (a PHP blog application) to publish my posts. Yuk yuk yuk. My points still stand: PHP has some fundamental flaws and inconsistencies that result from poor planning, and the fact that I use WordPress doesn’t make these magically go away. To see the absurdity of the argument, extend that line of thinking some more: you can’t complain about life while you are still living.