While I agree some of the points about people having innate perfectionist tendencies, to me the key point of this essay is that it captures the extent to which Programming reinforces a way of approaching problems that can be both good and bad:
Programming presents you with a problem and allows you to eventually solve it provided you don’t quit. A solution is out there somewhere. Make enough attempts and chances are you’ll eventually prevail. Aren’t computers great? They afford a large degree of freedom in problem solving. If nothing else, you are able to make as may attempts as you please and it will happily execute each one. This instills in you a sense that failure is not final. Any obstacle can be hurdled. This is not true in the real world. While you may find second chances now and again, the wheels that turn in the big blue room are largely unforgiving.
For me this has proven a very hard lesson to learn -- and it's one of the real (few?) dangers of being an independent programmer and not working with a larger team that has to meet production deadlines and make compromises.
But it's this paragraph that most struck home with me:
When faced with an interesting programming problem your mind will chew it over in the background. Maybe it’s an algorithm you need to develop, maybe it’s a tricky architecture problem, maybe it’s data that needs to be modeled. It doesn’t matter. Your mind will quietly work the problem over in search of a solution. The “ah-ha!” moment will come when you’re in the shower, or playing Tetris. This practice of constant churning will slowly work its way into the rest of your life. Each problem or puzzle you encounter will start it’s own thread; the toughest and most troubling of which will be blocking.
i'm not sure that *all* programmers suffer from this, but speaking for myself it seems that every day i have a few ideas that my brain just begs me to sit down and spend a few hours (or days or months) working on. It's hard to read about anything without thinking of new ideas that i'd love to be able to sit down and chew on for a while. And sometimes i feel like each of these project ideas is churning away in the background of my mind making it harder to concentrate on what i'm *supposed* to be working on.
I have developed strategies for this kind of thing. One of my most common strategies is something like "programming in my head" -- if i get an idea for an algorithm or program that i'd like to write, i can often stave off my desires to actually program it (which would take weeks) by allowing myself to sit down and sketch out the program or just think about it while falling asleep, and try to satisfy the crave that way. In other words, i can "virtually" write the program quickly and then push it off the stack of ideas occupying the back of my mind.
Another thing which i do now and i love, was inspired by the
GTD discussions we've had, which is to write down all ideas.. basically to offload them from my mind onto an organized collection. That seems to greatly relieve the need that the brain might otherwise have to keep it active in my mind.
ps. It needs to be said that i don't know any programmer, especially not me, who would for one minute give up any of these patterns of thinking, I/we love them. I just think it's interesting to reflect on how programming can reinforce some patterns of thinking that may be incompatible with the illogical real world.