Puzzling and Programming

Recently I began working on a large puzzle. Through the process, I found many similarities between puzzling and programming and wanted to draw some parallels between them.

1. Explore vs Execute

The explore vs. exploit conundrum is common across many different kinds of work. Should you start by exploring and finding all the particular pieces for a segment of the problem, or should you settle at some point and begin executing the work? At what point should you begin executing?

If you start executing too soon, you don’t have all the information to make the right decisions quickly.

If you start executing too late, you spend too much time searching and this can prove highly inefficient. For example, if you were to search through 900 pieces searching for the final border piece, that would be a huge waste of time!

This same issue arises all the time in programming: how much research about a new technology should I do before writing my first line of code? How long should I spend diving into how this legacy system works before I begin refactoring it?

2. Brute Force

Sometimes when you’re stuck on a small segment of the problem, it helps to use a brute force approach. Just try everything, doing it very slowly and meticulously, until you end up with a solution that works.

This may not be the most elegant solution, but you can always make changes later and it always helps to get past a rough patch.

3. Pattern Recognition

Although brute force is surely sometimes necessary, it’s much more helpful to have enlist a systematic approach to solving your problem. A few examples that apply to both puzzling and programming:

  • Start with the edges or a broad outline of the outer segments and then fill the detailed middle in later

  • Compare the proposed solution (the puzzle box, the product specs) with the tiny segment you are currently working on

  • Group the large, intractable issue into small workable chunks

  • Start with the part that you know, then fill in the pieces around it

4. Attention To Detail

In both puzzling and programming, you can make a small and seemingly innocuous decision that will come back to haunt you later.

On strategy to prevent this, besides being insanely meticulous with checking your own work, is to enlist the help of a partner to take a look at your solution with a pair of fresh eyes.

5. Take Breaks

On the subject of fresh eyes, one of the biggest productivity hacks for both activities is taking enough breaks. Without giving your brain and retinas a respite from the intense focus, your eyes can start to glaze over and you can begin missing easy wins or making crucial mistakes.

Taking short breaks can help alleviate this problem, bringing you back to the same point with a renewed energy. Often I find that just a quick stop can turn a seemingly difficult task into child’s play.

6. Deep Focus

Both puzzling and programming require one to identify patterns, spot small details, and tie these understandings into a larger mental model of the problem. To accomplish these tasks requires deep focus, a trait to be cherished in today’s world of constant stimulation.

You cannot hope to do two things at the same time without sacrificing the quality of your work, so both qualify as excellent activities for training the mind and developing deep concentration.

Have you ever encountered any activities that drew easy