Two craftsmen make chess sets. Beautiful chess sets. One craftsman uses old style tools: chisels, files, hammers of all sizes. His preferred material is stone; he carefully carves the pawns, the queen, the rooks and the knights with exquisite detail, like his father, and like his father’s father. Another craftsman uses more modern technology to melt and mold metals. He uses fire, molds, and tools that can withstand tremendous heat and pressure. His boards are different colored metals. His pieces are just as exquisite, just as delicate, just as beautiful as the other craftsman.
Whose method is better?
Both craftsmen produce a thing of value, a thing of beauty. Both craftsmen worked hard to create. Ultimately, your purchase decision will be driven by factors beyond their control: individual taste, for example. You may prefer an old-style soapstone chess board. You might like cold, heavy metal in your hand. Your choice has nothing to do with the methods used by the craftsmen and everything to do with what they produced. You only care about the finished product.
Despite the opinions of the long comment at the end of this post, at the end of the day, most people never see or care about programming languages.
The fight over programming languages is similar to one craftsman berating another for his particular chosen medium. And even though the craftsman who uses stone may think it to be a superior medium than using metal, arguing about it is a truly pointless task: both methods create value, both methods ultimately lead to a similar outcome, and both methods are useful.
My problem with debating languages is that it takes time away from doing what’s truly important: creating things of value. Instead of spending time innovating and inventing, we spend time having petty discussions about “this language is better because…” or “PHP sucks; Rails is awesome!” These discussions do little to change anyone’s mind, but they do prevent us from doing productive things like creating new products and inventing new solutions.
For years, the Socorro code included a Python backend and a PHP front end. Even though many of my coworkers detest PHP, these solutions worked together for years, until we moved to a new Python-based web framework last year. That decision wasn’t made because PHP is evil; it was made out of other considerations like developer skill set, the aging out of the PHP framework in use (which would have required a rewrite) and preference. Even with the move to Python for the web framework, Socorro still contains bits of other code from other languages.
Software languages are meant to be used for innovating. They’re meant to be a tool. I’m glad that I have learned multiple languages and several different ways to accomplish the same thing. Every developer should. But the day a developer starts thinking that their chosen language is superior over another is the day they should remember the story of the craftsmen.
Languages don’t matter. What you do with them does.