How do you solve a problem?

What is it about thinking that makes people feel it is hard work? Me, being a “jelly-spined computer programmer” (as a friend once put it), finds manual labour “hard work”. There is something very obviously “hard work”-ish in say… shifting a load of gravel with a shovel and wheel-barrow. It’s not difficult, but it is physically taxing.

Mental exertion is always somewhat harder to explain and yet it is a very fatiguing thing to do. When it comes to solving mental puzzles (which I am using as a loose approximation of programming) there tends to be three ways to deal with the problem:

  1. Ask someone else how to solve it.
  2. Try the first thing you think of and repeat with “the next idea” until you get it right.
  3. Think about it carefully and work out the solution.

I have arranged these ways of solving the problem in order of least to most mental effort required. Sometimes option 1 is the correct one you should use. When you are a “junior” programmer, you can’t always be expected to know answers to problems. With any luck, you will have a mentor. A good mentor will have the skills to guide you to the solution in such a way that you learn the process you need to use in future situations.

Unfortunately, the second option is employed on a far too regular basis. I must admit there are times when I have used this approach myself. It feels like kicking your brain into neutral and see how much momentum you can build up by rolling with no effort on your behalf. Realistically, it’s more like using a hammer to beat the metaphorical square peg into the round hole. When that doesn’t work, you go look for a bigger hammer…

Option number two is so obviously the wrong way! Somehow, that isn’t enough to stop people using this approach. Some developers spend their entire career developing code in this manner. If patience is your trump card when it comes to programming, then maybe you are in the wrong career. It’s definitely an attribute worth having, but that alone just isn’t good enough.

As I mentioned earlier, I will admit that I have taken this “easy path” at times. Almost as certain, is there will be days in the future where I do so as well. So the point to make is:

“We are human. We will try to do things as lazily as possible. Thinking hard is just a requirement of the job. Don’t try and avoid it”.

Memorise it, print it out and stick it on your monitor I don’t care! Just promise me you will reflect on it if you find yourself “coasting along in neutral” when trying to solve a programming puzzle. Then move on to option three and just do it!