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.
Right?
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.
Right?
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.
Right?
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.
Use the form below to leave a comment.
- Of Gravatars and Robohashes
- Optimizing VP$IP
- A Question of VP$IP
- John Carmack: Script Interpreters Considered Harmful
- Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters
- BROWSE ALL POSTS
Subscribe to Coding the Wheel over email or through any RSS reader. Coding the Wheel has been published since 2008.
- How I Built a Working Online Poker Bot, Part 1, 2, 3, 4, 5, 6, 7, 8
- Summoning the Harry Potter MMORPG
- Are Commercial Databases Worth It?
- 21 and the Monty Hall Paradox
- Online Poker and the Multi-Tabling Effect (34)
talia wrote: Ping G15 Fairway Wood Mizuno MP 53 Irons Mizuno MP 68 Irons Mizuno MX 1000 Irons ... - Online Poker and the Multi-Tabling Effect (34)
talia wrote: Ping G15 Fairway Wood Mizuno MP 53 Irons Mizuno MP 68 Irons Mizuno MX 1000 Irons ... - The Coin Flip: A Fundamentally Unfair Proposition? (92)
carla wrote: great post Thanks for sharing! [mutui][1] [1]: http://www.finmutui.it/ "mutui" ... - Summoning the Harry Potter MMORPG (1593)
AmberTheHarryPotterNumber1Fan wrote: Oh Does anyone know when it will come out? - Full Tilt Color Coding In Twenty Minutes or Less (34)
Timber Decking wrote: [url=http://www.deck-max.com.au/]Timber Decking[/url] [url=http://www.timberdeckingsydney.net.au/]Timber ... - Summoning the Harry Potter MMORPG (1593)
Tekken9 wrote: There is no game, at least not yet. - The Programming Aphorisms of Strunk and White (90)
parkeren wrote: So that we will follow and what shall be the first step to do so, because everyone will like this software ... - Online Poker and the Multi-Tabling Effect (34)
Anonymous wrote: This was an entirely new concept that Titleist Japan & Titleist US worked together on to create. They ... - Summoning the Harry Potter MMORPG (1593)
AmberTheHarryPotterNumber1Fan wrote: How do i play the Game? ;{ - The Coin Flip: A Fundamentally Unfair Proposition? (92)
maria wrote: i like this article and got info.this is very nice and popular site ,it site have informative and intrusting ... - The Coin Flip: A Fundamentally Unfair Proposition? (92)
Brian wrote: This is fascinating. I wonder if there's a similar bias vis a vis the coin flip during a football ... - Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters (14)
Brian wrote: This is certainly not a hollywood blockbuster [dating site][1] [1]: http://www.basecandy.com/ ... - Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters (14)
Brian wrote: Singles looking for [dating websites][1] can join now. [1]: http://www.basecandy.com/ ... - Full Tilt Color Coding In Twenty Minutes or Less (34)
Photo booth san diego wrote: Appreciate your making the effort to discuss this, I find myself strongly about this and love mind ... - Of Gravatars and Robohashes (20)
rake wrote: [rake][1] you provide the nice information , gravaters are amazing [1]: http://www.rakebackrage.com/ ... - The Programming Aphorisms of Strunk and White (90)
Steve Waters Vancouver wrote: A random act of kindness! - Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters (14)
Bradly wrote: Battle: LA was a great movie (the new one that is). I have noticed a lot of very similar movies, mostly ... - Summoning the Harry Potter MMORPG (1593)
Shawn wrote: Haha, these photos are classic! I'm actually not a fan of the Harry Potter movies but I do play ... - A Word About Authenticity (57)
Shawn wrote: Being authentic is very important. If I'm playing poker against a bot and it goes all in on a 2, ... - Coding the Tweet: Building a Custom Branded Twitter Application (71)
Shawn wrote: Using Twitter to promote a business is extremely popular today. I actually found a place to train ...

8 comment(s)
I just stumbled upon your site, and really enjoy reading your work. I am fairly new as far as programming as a career (I graduated about a year ago). I completely agree with you about choosing a language to fit the needs of a project and not picking it just because.
Although to me it is somewhat difficult to compare languages. Where do you start? I am sure it is due to my inexperience in the field, but how would you do it? I would be interested to read a blog about how to choose the language that best suits the project at hand.
Thanks again for your blog!
Jacob -
The best advice I know of for that is simply to learn lots of languages. Ideally, lots of different languages, with different characteristics. (The way I've found useful for doing that is to read enough about the language to get a sense of what it's good for, pick a project that seems like a good fit, and write it with lots of looking at the man page while you do it.)
This also has other advantages, in expanding the ways that you think about how programs are structured. For a simple example, back when I was writing programs in Fortran 77 (which is the version of Fortran that actually deserves the bad reputation; later versions are vastly better), I remember writing a nice simple recursive routine for a key cornerstone of a program. Thing is, Fortran 77 doesn't actually support recursion, so I had to manually create a variable stack and so forth -- but, because I knew what recursion was and how it worked from writing programs in languages that did support it, it was pretty simple to map that into something that worked in Fortran 77. There are many, many other things like that, and the more you learn, the more you can do.
I love this post. It's so very true and something I've have already aligned my outlook with when it comes to programming. The more the merrier!
Jacob: I had an experience just yours when trying to come up with a good solution to formalizing the use of assertions in a language that didn't offer them. The point being, the more well-traveled a programmer you are, the more expressive and creative you can be in other environments where someone with less experience might be a bit more stifled.
Joel Spolsky also wrote to this end I think. I wish more people had this point of view, but honestly it really just comes down to how passionate people are when it comes to their craft. If a single programmer just really doesn't care that much about what they're doing, you can't expect them to just jump outside of their relative zone of comfort to find new learning experiences.
But if you find/meet those people, hold onto them in whatever capacity you can!
I'm not a fan of language wars, but one thing I dislike from those who spite language wars like myself is when they adamantly claim that a good developer with sound engineering principles can transition to any language quickly and write good code.
I don't disagree 100%, but these types tend to reduce similar languages (ex: all object-oriented languages) down to a lowest common denominator and their code ends up ignoring a lot of the rich features of the specific language, like when a C++ programmer ignores the power of coroutines in C#, or when a Java programmer ignores the power and simplicity of static polymorphism in C++ and the whole idea of separating algorithms from data structures, or when a C++ programmer ignores the power of introspection in Java.
That's not to say that sound engineering principles are not important, they are most important, but languages need to be taken individually and one needs to spent a great deal of time mastering that specific language.
I find this type of thinking particularly prominent in the object-oriented realm, especially by those who think that reading about design patterns will make them a good developer in any language that supports object-oriented programming.
This is Joel Spolksy's post on language wars - interesting that he says choice of language isn't that important, and that if your head architect wants to use a certain language, then you probably should use it. http://www.joelonsoftware.com/items/2006/09/01.html
Very nice article. Thanks fro this!
Fbf Scam
afasf
thanks for sharing,i like your blog