This is an excellent piece with a couple of important lessons on how to think effectively:
- The ability to think creatively
- The ability to substitute initially attractive moves with well thought out log-term effective ones.
However on the other side of the coin is what we hackers face more often - Analysis Paralysis.
Once you fall into the Analytical Mindset, there is such a thing as being too analytical. Sometimes if it feels right you just go ahead and F*ing do it.
Otherwise the fear of making a wrong decision will paralyze you into inaction - which is worse than a screw-up (usually). So it is a balancing act - think enough but not too much. Analyze but not to the point of paralysis.
Totally agree, however most of the times people designing programs can go back and fix what they did, while a chess player can't. So one may try to understand what's all this focus on getting it right the first time when the topic is programming? I mean, it is not a good idea to do the first silly thing, but something that looks pretty sane after some non trivial analysis, is probably a good path. Well IMHO the reason most of the times is "fear". Fear of wasting work, fear of other programmers looking at our code and realize it is suboptimal, fear of not being totally "Right". However because of this fear what gets lost is huge.
"Well IMHO the reason most of the times is "fear". Fear of wasting work, fear of other programmers looking at our code and realize it is suboptimal, fear of not being totally "Right""
This really resonated with me. I personally struggle with this on and off. I just call it the programmer's curse. I sometimes wonder where this "fear" originally came from. Did I pick it up from other developers? Did it evolve over time from seeing the mistakes of others? Somehow I came to associate this fear as something good developers are suppose to feel. Indeed I probably need a little bit of this or I might make some really dumb mistakes. But sometimes it really is paralyzing. It can be really hard at times to let go and convince myself that I don't have to find the perfect solution for every challenge. More specifically, I get hung up trying to predict future problems and solve them. Sometimes you just won't know what will be thrown at you and your code later. It probably goes along with what you described as wasting work. I really don't like the idea of solving very similar problems with duplicated or redundant solutions/code. In end though we often have time constraints and failures beyond on control.
I feel like I had a better grasp on this when I worked for others. But now that I work full-time on my own startup I tend to be even harder on myself.
(Completely unrelated, but I just wanted to say ciao. I saw you're based in Sicily :) My mother is from Milano. I lived there for a couple of years as well. Oh how I miss the blood oranges...)
Perhaps it has something to do with the imposter syndrome[0]. Feeling like you're not a "real" programmer who doesn't "deserve" to have the position you do would (I'd wager) cause that phenomenon of analysis paralysis; it would cause us to want to get it right or we'd be "found out" for the "frauds" we are.
I hate it, and I've found personally using the techniques like Pomodoro[1] has helped immensely with just doing something! along with TDD coupled with exploratory programming.
Analyzing for a fixed duration and then going with your gut is what I've tried. However, I still get that nagging feeling sometimes that I'm not sure about a decision. In these cases, I either ask someone for their opinion or simply defer the decision, hoping I'll think of the right answer in the shower. Of course, I still need to work on discipline. It's very easy to spend a while on a decision because you can't get away from it until you feel you have a right answer.
Hi vyrotek (Ciao!), maybe this fear has something to do with the fact that we operate on a field where there is no obvious "right way", but is always full of tradeoffs, so deciding between many degrees of good and bad is non trivial.
Neither can an airline pilot, and they work in situations where both making the decision correctly and arriving at the decision quickly is extremely important - and here it's not just the fate of a chess game, but the lives of several hundred people.
on the other side of the coin is what we hackers face more often - Analysis Paralysis
Underlying analysis paralysis is often tunnel vision or lack of flexibility with regard to figuring out cost/benefit. Taking a piece without realizing there was a better move is not being flexible with the cost/benefit analysis. So is interminably spending time getting the optimal solution in 12 different dimensions.
Comments
This is an excellent piece with a couple of important lessons on how to think effectively:
- The ability to think creatively
- The ability to substitute initially attractive moves with well thought out log-term effective ones.
However on the other side of the coin is what we hackers face more often - Analysis Paralysis.
Once you fall into the Analytical Mindset, there is such a thing as being too analytical. Sometimes if it feels right you just go ahead and F*ing do it.
Otherwise the fear of making a wrong decision will paralyze you into inaction - which is worse than a screw-up (usually). So it is a balancing act - think enough but not too much. Analyze but not to the point of paralysis.
Edit: Spelling
Totally agree, however most of the times people designing programs can go back and fix what they did, while a chess player can't. So one may try to understand what's all this focus on getting it right the first time when the topic is programming? I mean, it is not a good idea to do the first silly thing, but something that looks pretty sane after some non trivial analysis, is probably a good path. Well IMHO the reason most of the times is "fear". Fear of wasting work, fear of other programmers looking at our code and realize it is suboptimal, fear of not being totally "Right". However because of this fear what gets lost is huge.
"Well IMHO the reason most of the times is "fear". Fear of wasting work, fear of other programmers looking at our code and realize it is suboptimal, fear of not being totally "Right""
This really resonated with me. I personally struggle with this on and off. I just call it the programmer's curse. I sometimes wonder where this "fear" originally came from. Did I pick it up from other developers? Did it evolve over time from seeing the mistakes of others? Somehow I came to associate this fear as something good developers are suppose to feel. Indeed I probably need a little bit of this or I might make some really dumb mistakes. But sometimes it really is paralyzing. It can be really hard at times to let go and convince myself that I don't have to find the perfect solution for every challenge. More specifically, I get hung up trying to predict future problems and solve them. Sometimes you just won't know what will be thrown at you and your code later. It probably goes along with what you described as wasting work. I really don't like the idea of solving very similar problems with duplicated or redundant solutions/code. In end though we often have time constraints and failures beyond on control.
I feel like I had a better grasp on this when I worked for others. But now that I work full-time on my own startup I tend to be even harder on myself.
(Completely unrelated, but I just wanted to say ciao. I saw you're based in Sicily :) My mother is from Milano. I lived there for a couple of years as well. Oh how I miss the blood oranges...)
Perhaps it has something to do with the imposter syndrome[0]. Feeling like you're not a "real" programmer who doesn't "deserve" to have the position you do would (I'd wager) cause that phenomenon of analysis paralysis; it would cause us to want to get it right or we'd be "found out" for the "frauds" we are.
I hate it, and I've found personally using the techniques like Pomodoro[1] has helped immensely with just doing something! along with TDD coupled with exploratory programming.
How does everyone else deal with it?
[0] http://en.wikipedia.org/wiki/Impostor_syndrome
[1] http://en.wikipedia.org/wiki/Pomodoro_Technique
Analyzing for a fixed duration and then going with your gut is what I've tried. However, I still get that nagging feeling sometimes that I'm not sure about a decision. In these cases, I either ask someone for their opinion or simply defer the decision, hoping I'll think of the right answer in the shower. Of course, I still need to work on discipline. It's very easy to spend a while on a decision because you can't get away from it until you feel you have a right answer.
Hi vyrotek (Ciao!), maybe this fear has something to do with the fact that we operate on a field where there is no obvious "right way", but is always full of tradeoffs, so deciding between many degrees of good and bad is non trivial.
http://www.cs.yale.edu/quotes.html
Neither can an airline pilot, and they work in situations where both making the decision correctly and arriving at the decision quickly is extremely important - and here it's not just the fate of a chess game, but the lives of several hundred people.
on the other side of the coin is what we hackers face more often - Analysis Paralysis
Underlying analysis paralysis is often tunnel vision or lack of flexibility with regard to figuring out cost/benefit. Taking a piece without realizing there was a better move is not being flexible with the cost/benefit analysis. So is interminably spending time getting the optimal solution in 12 different dimensions.
The important lesson is the value of individual instruction.