On Religious Wars in Software

0 comments suggest edit

Toy Soldier With Bazooka No, this isn’t a revisionist history account attempting to insert the role of software in the Crusades. Today we take a look at Religious Wars in software. Sometimes also referred to as “Flame Wars” and “Holy Wars”.

A religious war is a very passionate conflict or argument in which each side is absolutely convinced of the objective truth of his or her own position on a matter of personal preference. These are typically very heated arguments over very trivial matters in which the only truth is that there is no objectively correct answer. These arguments would make an outsider wonder if we should all be locked up in straight jackets.

Spaces or Tabs

One good example, and I hesitate to even mention it, is the topic of using spaces or tabs for indenting code. True software developers know there is only one right answer and they’ll defend the truth of that answer till they are blue in the fingers, making sure to spread the “One True Indenting Style“ to every forum in every nook and cranny of cyberspace. Obviously I know what the real answer is and that answer is…

Kinda puts the “anal” in anal retentive obsessive compulsive doesn’t it?

Private Member Prefix

Sometimes we lob grenades over a single character or two. Make sure to prefix private member variables with an underscore or be burned at the stake in one camp. Use an m_ prefix or be flayed alive by another camp. Don’t use an underscore at all in yet another camp or be drawn and quartered. I’ve seriously thought of joining the camp that wants to prefix member variables like so:

string HEYThisIsAPrivateMemberVariable___someVariable;

How is that for being explicit? Of course the true code warrior will notice I didn’t explicitely mark the member as private and already has a sniper laser scope aimed at my head.

Holy War Phoenix

The real beauty of religious wars is that they never go away. Sure they’ll sometimes flame out a bit and lie smoldering just under the radar. But wait long enough and they’ll spring back to life in full force. Just look at the Edit and Continue debate in Atwood’s blog.

Another example of a holy war that never seems to die is the VB.NET vs C# debate. This is an interesting one because VB.NET and C# are really good buddies who like to have a pint at the pub together every now and then. They don’t have a beef with each other. It’s certain camps that use these languages who like to beat each other with flames and misinterpreted arguments that thrust these languages into an all out religious war.


At the forefront of these religious wars are the crusaders. I won’t link or call out any in particular lest my blog become the next battleground for the faithful holy warriors. But you recognize them when you see them. They can be found in the trenches of the newsgroups, blog comment sections, and in their own blogs, fighting for the cause with a single minded determination.

They rarely give an inch to the oppositions viewpoint, lest they come across as weak. You are either with them, or against them.

Well Known Religious Wars

No discourse on religious wars would be complete without a list. This list is by no means complete, but simply a list of well known holy wars in software that I can recall. Please contribute others in the comments and I will keep this updated.

  1. Spaces vs Tabs for indenting code
  2. Curly braces on their own line or not
  3. Private Member Prefixes…or not
  4. private keyword or just omitting it
  5. Managed Languages vs Unmanaged
  6. Edit and Continue or Not Edit and Continue
  7. BDUF vs Iterative Design
  8. Interpreted and dynamic languages vs Compiled
  9. VB.NET vs C#
  10. Java vs .NET
  11. vi vs emacs
  12. Windows vs Linux
  13. Tastes Great vs Less Filling

Got any others?

Found a typo or error? Suggest an edit! If accepted, your contribution is listed automatically here.



36 responses

  1. Avatar for Marty Thompson
    Marty Thompson February 8th, 2006

    13. Surrogate keys versus natural keys

    14. Hungarian notation(kinda fits in with #3)

    I'd like to mention that anyone who uses spaces instead of tabs for indentation is evil. Same goes for people who don't put a curly brace on its own line. I can tolerate just about anything else. Oh except for VB :)

  2. Avatar for Diego Pires Plentz
    Diego Pires Plentz February 8th, 2006

    15. Ruby versus Python

    16. VB versus Delphi

  3. Avatar for jayson knight
    jayson knight February 8th, 2006

    15. Public fields vs properties.


    17. Dynamic SQL vs Stored Procedures (why this is even debated anymore is beyond me).

    18. United vs Arsenal.

  4. Avatar for Scott
    Scott February 8th, 2006

    I can't believe you limited it to just Windows v. Linux. Heck, it's always Windows v. <OS>. Windows V. Linux, Windows V. Mac. It used to be Windows v. DOS. It's like Manchester U. v. everyone.

  5. Avatar for Alex
    Alex February 8th, 2006

    19. RPC/Encoded vs. Document/Literal

  6. Avatar for pcomeau
    pcomeau February 8th, 2006

    On # 18 (from Mr. Knight)

    you mean that other, lesser United, not Newcastle right? :-)

    Semi-old school:

    com vs corba

    OWL vs MFC

    5 space tab vs 3 space tab

    OO vs Procedural

  7. Avatar for Jeff Atwood
    Jeff Atwood February 9th, 2006

    The best software religious war in recent memory was.. an actual religious war!

    "Are You There, God? It's Me, Microsoft."


  8. Avatar for Greg Milner
    Greg Milner February 9th, 2006

    Oh, yes. And let us not forget:

    Oracle vs SQL Server


    Perl vs Python


    .NET vs Java

  9. Avatar for Haacked
    Haacked February 9th, 2006

    I got one. The "throws" keyword in Java. Better or worse than the C# way.

  10. Avatar for Alex
    Alex February 11th, 2006

    Zero-based vs. One-Based Indices

  11. Avatar for 255
    255 February 12th, 2006

    monolitic vs micro kernels

    perl / php >(perl rullz ;-) )

  12. Avatar for Scott
    Scott February 13th, 2006

    Oh crap, almost forgot about checked vs. non-checked exceptions.

  13. Avatar for jayson knight
    jayson knight February 13th, 2006

    As far as checked exceptions go; Anders doesn't like them, so that's reason enough for me.

  14. Avatar for Haacked
    Haacked February 13th, 2006

    Dynamic SQL vs Stored Procedures

  15. Avatar for Joel
    Joel May 1st, 2006

    The granddad of them all: "High-level language vs Assembly" (though I am assuming that no one was unwilling to fight assembly and hang on to machine code.

  16. Avatar for anonymoose
    anonymoose June 2nd, 2006

    little-endian vs big-endian

  17. Avatar for Paul Coddington
    Paul Coddington June 2nd, 2006

    Extreme Programming vs... (any other method)

  18. Avatar for Anonymous
    Anonymous June 4th, 2006

    Databases are another good reason to start a war.
    - db2 vs oracle
    - postgresql vs mysql
    (Even though the last one is rather strange since only one of those is a database)

  19. Avatar for Dan Fernandez
    Dan Fernandez June 7th, 2006

    Good list, I would add bracing style - K&R vs. Allman
    Debate at:

  20. Avatar for creaothceann
    creaothceann July 10th, 2006

    C/C++ vs. Pascal

  21. Avatar for Blog di lucab
    Blog di lucab May 23rd, 2007

    Windows Vista &#232; il primo sistema operativo Microsoft che &#232; stato lanciato nell'era dei blog.Pertanto

  22. Avatar for Matt
    Matt August 23rd, 2007

    HUGE... object vs procedural

  23. Avatar for pcdinh
    pcdinh August 24th, 2007

    PHP Frameworks vs. ASP.NET. PHP ones are current winners
    Action-based web framework vs. component-based ones. Action-based ones win.
    Eclipse vs. Netbeans

  24. Avatar for james peckham
    james peckham January 14th, 2008

    agile vs waterfall

  25. Avatar for Matthias Hryniszak
    Matthias Hryniszak April 8th, 2011

    REST vs WS-*

  26. Avatar for Skywalker
    Skywalker April 8th, 2011

    - ASP.NET v.s PHP
    - WebForms vs. MVC
    - Handcoded SQL v.s. ORM
    - Inline C# (Razor) v.s. codebehind everything
    - designer v.s. no designer (webforms / mvc, there are actually developers who say MVC is a huge step backwards, the lack of designer support proves this :p. Personally I NEVER want to see WebForms again)

  27. Avatar for Jeremy
    Jeremy April 8th, 2011

    Plural vs. Singular table names.

  28. Avatar for Daniel Butler
    Daniel Butler April 8th, 2011

    Linq vs Entity Framework vs NHibernate

  29. Avatar for Tim Scott
    Tim Scott April 16th, 2011

    GUID vs integer PKs. And even more important: gwid vs. goo-id

  30. Avatar for eti
    eti May 22nd, 2011

    @Marti Thompson: Hungarian notation, as Charles Simonyi intended is very useful ( see http://www.joelonsoftware.com/articles/Wrong.html ) to bad is one of the most misunderstood concept in the field.

  31. Avatar for mwicks1968
    mwicks1968 May 23rd, 2011

    Ah Jeremy, the old Singular/Plural Table names debate! As a recent convert to RoR, this is the one thing about it that Gets my Goat - so you can work out where I stand on the subject. Also as Python programmer I can't be neutral in the Spaces v Tabs debate either!
    But probably in general, if you want to start a total riot and alienate all your work colleagues, start a team meeting by thinking out loud, saying, "I think it's about time we had some Programming/Design Standards in this shop - who wants to chair the Working group?"
    Stand well back from that one!

  32. Avatar for Steve
    Steve May 23rd, 2011

    var vs Object Name

  33. Avatar for Sadegh
    Sadegh May 25th, 2011

    Israel vs World ;) and more important is that Israel is in complete destruction

  34. Avatar for CashCow
    CashCow January 31st, 2012

    UTF-8 vs UNICODE

  35. Avatar for Tony Marston
    Tony Marston June 10th, 2015

    Camel Case vs Snake Case

  36. Avatar for Dartania
    Dartania March 1st, 2018

    Meanwhile too much space between code gives me headaches. And curly brackets on their own lines make the code block look unrelated to the method identifier or if statement or whatever else it is. In short, they make code look really messy.

    And I don't like tabs for interpreted code, because it often gets viewed in multiple ways (View Source, Notepad, Notepad++, IDE, etc), and for some reason even Notepad++ can sometimes get set to 8-space tabs. Notepad is always set to that. CodeWars is set to 2-space tabs. And the browser View Source often sets it to this ridiculous 16-space tabs. So if you use normal spaces, you can always be sure that your code lines up the same way (unless some noob views it in non-monospace, but you can't prepare for everyone). But you can still navigate or modify by groups of four (or whatever spacing it's set to), by clicking tab and shift-tab.

    Not saying you're wrong to do those things. They work for you. But you're wrong to say the other way is evil. Because your way doesn't work for everyone.