Writing code is easy. After a few years of practice, a programmer can solve any given problem in a variety of ways. It’s almost automatic.
Thinking is not so easy. Thinking takes effort. Think is not automatic. Thinking forces us to evaluate our assumptions. Sometimes we don’t want our assumptions questioned. We want to just start “work”. “The sooner I start coding the sooner I can get this feature/bug finished” - or so we tell ourselves. In reality we don’t want to think about all things we want to ignore. We just want to code. We want to get “something” finished.
Unfortunately if we don’t think about the problem we are about to solve, we’ll never completely solve it. There’ll always be “holes” in our logic.
I’ve been trying to spend more time thinking about a problem before diving into code the solution. The results have been really great. I understand the problem more and ask more of the “right” questions. I spend time thinking of the different implementation options and their pros and cons. The time spent thinking actually speeds up the coding process. Since I know exactly what has to be done, all that remains is for me to code the solution. Simple. :)