For some reason there seems to be the impression amongst ‘programmers’ (those that program a computer at various levels of competence) that they think somehow ‘differently’ as compared to ordinary mortals.
At the same time this myth has been repeated so often by now that even non-programmers are starting to buy into it.
As far as I know, there is absolutely nothing unique about the way programmers think (and I’m saying that as a programmer, so my perspective is probably slightly skewed but I’m trying hard to keep an even keel here).
Programming tends to select for the following ‘habits’:
Whether they’re ranked in order of importance is probably up for debate, but let’s look at those in turn to see how they apply to programming and how they apply to the world outside programming.
Analysis means to observe a system and to figure out its workings coupled with the making of predictions about what will happen when the situation changes in a predictable way. Typically, this relates to modeling the workings of a program whilst looking at its source code and trying to compare that with the desired effects the program should have.
Logic deals with ‘arguments’, typically used to deduce whether something is either true or false, and why it is true or false. It’s no coincidence that pretty much every computer programming language has some form or representation for ‘true’ and ‘false’, there are in fact whole languages dedicated to these concepts (logic programming).
Finally, obsession. Obsession means to be totally absorbed by something, to the point of exclusion of all or most other things. While obsession is generally thought to be a negative trait, when you’re busy with computers it can actually be quite handy to be totally immersed and absorbed in what you’re doing. In most other professions that would likely get you killed or injured, but computers are relatively safe from a handling perspective so you don’t need to look ‘left’, ‘right’ or behind you while driving one, all the action is on the screen in front of you. Computer programmers even have a word for this mental state, which is to be in the ‘zone’, the state of mind where the world seems to disappear and all you sense is the dialogue with the machine.
So, what other professions have a predisposition for this sort of thing?
Analysis is important in any form of science where people are trying to figure out how things work, it is one of the cornerstones of the scientific method. It is also pretty handy when you’re an engineer, working in chemistry, biology or any other field where things can get complicated and you’re trying to figure out what is going on. In fact, I’d go so far as to say that analysis is important for all of us, from a baby that holds up a toy and drops it and observes its fall, sooner or later taking account of gravity in its model of the world to that same baby thirty five years later working on some space program. Analysis is our constant companion when we observe the world around us and we use it to predict our future to a limited extent. Train approaching, don’t cross, probably you’ll be hamburger if you do.
Logic is actually in its formal form a branch of mathematics, so any mathematician will - besides analysis - have logic in his or her arsenal of tools. But logic and ‘logical thinking’ have wide application outside of maths and programming, every police officer that interrogates a suspect will be using it to figure out which parts are true and which parts are not, lawyers use it when they try to convince the judge or the jury that their client, and not the other guys’, is in the right. Children use it to figure out who is fibbing. Logical thought is, just like analysis, our constant companion, and this goes for just about everybody in every profession or trade to some extent and our every day lives as well. If you’re better at it than most people you might find certain tasks easier, but everybody is capable of it to some extent.
Finally, obsession. That’s a tough one because most examples from ‘outside’ the world of computers tend to be negative, but I’ll try to put a positive spin on it. If a scientist (or a detective for that matter) is hot on the trail of something and they can’t sleep because they keep thinking about the problem that’s the same kind of obsession. Typically, in computing this happens when writing code or when debugging, but hardware engineers, writers and plenty of other people experience this in stronger or less strong ways.
Scoring on the high end of the scale for all three of these traits may predispose you towards a programming career, but the best programmers that I know are actually people that have these in moderation. They didn’t forget what it’s like to be human, they don’t converse with others in nothing but jargon and they don’t believe their brains are ‘better’ or ‘different’ than the ones owned by others. Programming is - just like everything else - something you do because you enjoy it, hopefully, not something that you are forced into because of the shape of some lobes in your brain.
And everybody - even those that have never written a line of code - can learn how to program to some extent, I’ve seen many claims to the contrary but personally I’ve yet to find an individual that I could not teach the basics of programming in a few weeks provided that they were:
(a) willing to learn
(b) willing to put the time in
In a classical setting that may be difficult, but on an individual basis I’m sure that it can be managed.
Obviously there are people that are mentally handicapped and in those cases it might be impossible but to categorically divide the world into those that ‘can program’ and those that ‘will never program’ to me is several steps too far. Programming is a skill that can be learned, you may not be the next Linus Torvalds, but you’ll be able to achieve your goals if you’re patient enough and persevere.
Programmers do not think different from other people.