Computer programmers are exceptional thinkers. By which I don’t necessary mean they are “exceptional” in the sense of “outstanding” (although no doubt some are). I mean they are trained to think about exceptions (to the rule), about what might happen.
Computer programmers, in general, think about all the possible paths a system could take. When creating email software, they have to think about all the possible ways a user might use the software. There are the obvious actions the user is supposed to perform to read or write email. But there are also “What happens if I click this?” moments to consider.
It’s not about just of the “correct” ways but also about the “incorrect” ways!
A sensible person might look at a situation and think, “Oh, that will never happen. No one would do that.” A programmer looking at that same situation knows that somewhere, someone will do that. One comic example: a “Wet Paint!” sign is all but a guarantee that someone will touch the paint. (“I just wanted to see if it was dry!”)
Programmers have to think about the “This never happens” moments. I can’t count the number of times, in design sessions, I’ve actually had to say, “It’s not about what’s supposed to happen, it’s about what could possibly happen. Anything that’s not literally impossible has to be treated as, well, possible.”
One part of writing robust code is writing code that reacts gracefully to impossible conditions (or, rather, conditions the programmer is assuming are impossible).
[The recent Heartbleed bug leveraged code that was stupid about assumptions.]
The real key today is the idea that programmers (such as yours truly) either came to the craft with an exception-seeking mind or learned it on the job. Either way, programmers — Engineers, really — are people who look at things in terms of what can go wrong, what can be the exceptions.
It often makes Engineering types seem overly critical — that’s an accusation I’ve heard many times in the past. But it’s not meant as a tool of cruelty or merely to demonstrate special knowledge. It’s meant to improve the system, to make it better.
People often give lip service to the idea that ‘every challenge is an opportunity’ (while secretly hating the hassle of challenges), but Engineers really do see problems — even potential ones — as opportunities for improvement.
Engineers are a bit like coaches who spot your flaws and push you to improve them. Engineers naturally see exceptions and think about ways to address them. There is a specific training in looking for those exceptions to the usual case and asking “what about this?”
It isn’t that we’re so critical (not in a mean way). We’re just trying to help make things perfect!