Monday, January 28, 2013

The Codist

A treatise on the oft misunderstood and much maligned programmer.

To most non-programmers the art of making a computer do something can seem like black magic, but its really just a mixture of art and engineering. To be sure programmers, especially if they are good, are a special breed. They usually have certain aptitudes and abilities that can't be learned. Of coarse this in no way discounts the part that experience and hard work play in making an excellent coder or application architect, but just as is true of great artists, athletes or scientists there is an element of raw talent that must be there.

This aptitude is usually accompanied by certain personality traits. Its as if the same hard wiring that imparts the mental ability to code also creates a certain kind of personality. Perhaps this accounts for some of the stereotypical traits of a programmer such as being aloof, less able to communicate with non-programmers, irritable when interrupted, working alone in long stretches of 12-14 hours while paying little attention to normal human activities such as eating properly or bathing. For the record I shower regularly and do not subsist on Twinkies and pizza, although I do often appear aloof and prefer to work without interruption for long stretches of time. However there is another reason why programmers exhibit these traits: The task of designing and coding an application requires you to work in just such a way.

What I mean is a computer program is often very complex and requires the programmer to load and hold in his mind all its moving parts at once. This takes time and the slightest interuption can cause you to loose that mental model and have to start all over loading each class, method and variable into your brain. For those who aren't programmers and don't have experience with this imagine you're building a house of cards one card at a time, you've built it five layers high and someone comes along and bumps you and the whole thing comes tumbling down. If that was your job, you'd be in a basement, away from others where no one could interrupt you too.

The creative aspect of designing and coding an application can also require long stretches of uninterrupted time thinking about or examining different approaches to a problem domain. Like an artist or a scientist, programmers are often deep inside their heads even when they are surrounded by others. This can make them appear aloof to others. I've even noticed in my own experience some people becoming offended or irritated believing I was intentionally ignoring them, when in reality I was just so consumed with the creative idea I was exploring that I was barely aware of their presence.

The truly great programmers and designers are driven people. They can be bold and daring. They also tend to be extremely honest and unrelentingly logical. As such they may not consider others feelings to the degree they should and are sometime perceived as rude. They may also appear to have a one track mind. Seeing the problem they are working on from all angles draws their full attention, as a consequence everything else in their life can become neglected, even the a fore mentioned eating and bathing. All these traits though they may make them a brilliant engineer can often estrange them from the general population.

Because of being so focused on whatever project they are working on they can often lack skill in social situations simply because they have neglected to exercise such skills. After a period of time, especially if they are not around people who understand them they can become uncomfortable and just choose to avoid such situations all together. When this happens you end up with the stereotypical nerd, geek or whatever epithet society gives to the intellectually gifted yet socially inept.

Not all programmers fit this stereotype, in fact no one fits any stereotype exactly because we are all individuals with free will and a complex personality that emerges from both our genetics and our experiences. However understanding why some of these traits exist in programmers or by extension artists, scientists, mathematicians, etc. helps us to see them for who they truly are and not just who the seem to be.