Programmers are, by and large, slightly strange people. Programmers (coders) know it although tend to be fairly normal in lots of ways (they play sports, drink beer go snowboarding and watch TV like other mortals). Unlike other people though they have a suitable outlet for their obsessive compulsive disorder(OCD)/anal retentive tendencies and thus can embrace it without anyone knowing about it. They do this by naming the parts of things they work with in a very anally retentive fashion.
Before I go too much further I have to explain a little bit about how modern programming (referred to as “languages” because, like the real world they require work to understand and each do things differently) works:
- software has a name (e.g. “Microsoft word”)
- there are bits of smaller software that make up “big” software
- those smaller bits have names (e.g. “Spell checker”, “Printing”, “Page formatting”)
- those smaller bits are made of still smaller bits of software
- those smaller smaller bits have names (e.g. “getSpellingErrorsInText”, “sendJobToPrinter”, “showFuckingAnnoyingPaperClip”)
- and so on (get the picture)
As a little aside: by “modern programming” I mean any programming language in the last 3 decades and generally written by people that you can at least begin to vaguely have a conversation with. If this doesn’t apply: you’ve either found yourself what’s called an “assembly language coder”, “Linux hacker” or a “system administrator”. WARNING: Back quietly away and don’t go down into the sub sub basement again. Those guys aren’t allowed to know the world above ground is still accessible or they might not do all the work that the rest of us IT folk depend upon but really aren’t that crazy to be able to do. They’re like the abattoir workers of the IT world those assembly, Linux and Unix admin guys. It’s messy work, needs high degree of skill, patience and a strong stomach and strange brain that most people aren’t up for (but still want to have hamburgers, steaks etc). You could also be talking to a Cobol or mainframe coder: they’re more like the undertakers of society, used to dealing with decaying stuff that most of us would be fighting a vomit impulse. Now you know what working in IT in a lot of banks is like. Not that banks really do much work these days, seems like they just sit around waiting for government guarantees so they can, like a poker machine addicted gambling addict they can joyfully rush off to the local hotel to find something else stupid to risk their money with.
But I digress, back to explaining how coders embrace their OCD-ness.
An exercise in naming
Does anything bother you about the following list:
- oneFineDayMonday
- anotherFineDayTuesday
- PerhapsAGoodDayWednesday
- definitelyABadDayThursday
Yes? No?
If you’re not from a programming background the subtle difference is the upper case on the third item’s first letter. Yep, that’s right: workplace wars are fought over whether to capitalise the first letters of various types of names.
The great sin of inconsistent naming
What really tends to drive clean coders up the wall is a lack of consistency. It’s best to have good naming and consistent, bearable if you’re bad in your names but consistently bad. But to be inconsistent is pretty much an unforgivable sin in coding. Why is this?
My current thinking on this is that it is a greater sin because it means that instead of the coder having their brain in the zone of “conceptual models” of what it is you’re working on. Software engineering is quite a visualisation heavy process (it’s all pretty pictures in their heads, honest!), despite outward appearances of “reams of dull incomprehensible gobbledegook” to lay people). Not quite what you see in the movies with various 3D flying through funky looking cities stuff, but hey, more that than the text on the screen.
So with a good consistent naming scheme the task of finding existing and adding new names to whatever you’re working on in the pretty pictures in your head: you have to switch from the “creative” mode back to the part of your brain that deals with text pattern “detection”. So if everything is consistent the brain can just stay in auto-pilot obsessive compulsive mode.
Imagine if we are walking through a building talking about something interesting and if each and every door had a different way of opening it. You’d have to break your conversation to give focus to the door handle, rather than just letting your subconscious “door opening routine” do its thing.
So from a practical aspect changing the door knob on each door boils down to inconsistency in names in things like:
- upper or lower case of start letters, subsequent words
- separation of individual words. Many many wars have been fought over whether to use the underscore “_” or a thing called “camel case” which is to capitalise the words of a sentence and chop out the spaces e.g. mySquashedLookingSentenceInCamelCase
- to abbreviate or not to abbreviate. One of those grey areas: no one wants to write war and peace every time they want to add two numbers together, but go too crazy and you’re dealing with names that need to buy a vowel more than a small welsh village.
And just like living in one of those old houses with strange locks and catches: after a while you can learn them all and then to change them would probably mean you have to think about getting through the door again, so sometimes you just have to live with it.
Perhaps that explains a bit about some techie types you know and perhaps that’s why they, unlike yourself, don’t appear to exhibit too much OCD in day to day life outside the office: but relax, they have lots of it at work. But quietly check how they name their word docs, email attachments and desktop folders next time it comes up. Or watch them twitch after you rename their folders in an inconsistent manner.

[...] “Software Engineering is a visualisation heavy process” (see earlier post: “Explaining IT geeks for normal people: naming stuff” [...]
[...] (For the non techies: ruby is a computer programming language. Have a read of my earlier post on Explaining IT geeks for normal people as background). [...]
In programmers, there’s the kind that names their variables sequentially.. *shudder*
String name = getString(“firstName”);
String name1 = getString(“lastName”);
gaahh!!!!
yeah, calling everything var1, var2 etc..
There’s the guide to writing unmaintainable code which recommends things like “use a baby names book opened at random for variable names”.
My personal peeve though is inconsistency.. MyVariable then theStrPtr or myID and myOtherId.. Or worse: a mix of underscores and camel case.