Is It Possible at All to Discuss Language Wars without Starting One?

The title comes from an astute commenter named Frank on my last post, Your Ignorance Does Not Make a Programming Language Suck. Many of the comments on the post and the comments on Reddit quickly devolved into precisely the kind of language war I spoke against.

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.

For the masochists, you can read more on this topic with Mark-Jason Dominus’s great article, Why I Hate Advocacy.

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.

5 Responses to “Is It Possible at All to Discuss Language Wars without Starting One?”

  1. ScooterDude Says:

    As a .NET developer trying to break into the Python language, I agree that it’s difficult to discuss with my .NET coworkers what I am learning in Python without them totally missing the point and focusing on my new “fad”. If they would look past the difference in languages they might see that Python is forcing me to think outside the (.NET) box. It’s giving me a perspective on an entirely different culture and allowing me to step outside my statically typed safety zone into a more dynamic realm.

    Great post.

    Mark

  2. Mike Warot Says:

    I think that the basic issue here is one of expectations. We expect certain behavior from programming languages, and it’s been pounded into our heads that any language is equivalent to any other, and only the syntax varies.

    Pascal, Basic, Assembler all act the same when it comes to strings… and Python comes along and won’t let you modify the value of a string… and you get a bit confused… and shocked… and it’s unpleasant at best… you might get lucky and get insight later… but that takes a lot of work and some luck.

    –Mike–

  3. machine head Says:

    Humans are not as optimized yet as to be able to percieve things in an undistorted way.
    If you say “chocolate ice-cream”, it is bound to trigger some piece of code in my system, bringing that code up and running it.
    The predictable result is that I then blame you for the result the execution of the program produced, instead of taking the responsibillity of debugging my own code.
    There are ofcourse exceptions; people who have, to a larger extent, managed to debug their own software and is aware of this phenomena.
    Enjoy life and coding!

  4. Bob Gneu Says:

    Its really a terrible thing that this type of argument is so difficult to have between seemingly rational people. It’s a bit too common for my own tastes. There is, unfortunately a reason they are called Religious arguments through.

    The only thing i have been able to do to change any of this is that i habitually tell all developers in my company and at school not to camp, and that seems to be having a good effect. Its still quite sad that the great majority of people out there tend to choose to be offended at the prospect of their chosen language being inefficient at doing anything. I work at a place that totes a huge Perl & MS C# flag which unfortunately leads to some very serious performance issues, not to mention the fact that they have to contract their work out all of the time to get anything done.

    Great post regardless. bravo.

  5. Bob Gneu Says:

    I have got 16 languages under my belt and i cant say that ive ever been deceived into believing they all served the same purpose. This is especially relevant when learning the quirks of any language. Perl’s list swapping procedure, php’s crazy library of functions, interactions with databases across the board. Languages all have their niche and I dont know that we have all been conditioned to believe all languages are the same or naive enough to believe that something like lisp is identical to Python.

    BTW – Al, this anti spam procedure is very cool.

Leave a Reply

free blog themes