19 Dec

# Chapter 5: Solve the Problem

Here are four steps for general problem solving (though of course we have programming in mind).

1. List the starting ingredients
2. State the desired results
3. Break the journey from step 1 to step 2 into subproblems
4. Put the subproblem solutions together

This is a recursive algorithm — we do the same four steps on each of the subproblems, and on their subproblems.

I’m guessing that this is how almost all problems are solved — mostly subconsciously.

## Breaking Up

The hard part is step 3 (but sometimes step 2 is murky). This is another case of abstraction, of carving up reality. There may be multiple possible combinations of subproblems — your task is to create a reasonable combination.

Avoid feeling that you must solve the whole thing in one go. That’s the recipe for being overwhelmed and stuck.

Our natural inclination is to go from beginning to end when breaking up a problem. If that is not bearing fruit, try working backwards from the end.

The more you practice breaking a problem into subproblems, the better you get at it. This is important enough to practice deliberately.

This section should be surrounded by flashing lights. Breaking a problem into pieces seems to be the central block with programming for most people.

Great acts are done by a series of small deeds

## Surprise is Good

The act of breaking the problem apart can highlight connections.

## If It’s Not Working

Two things to try if you are not getting your problem solved:

• walk
• sleep

Humans evolved as nomads, our brains work best when we are walking.

Sleep allows us to lay down memories, sort possibilities, and have a brain ready for active duty.

## Opponent

• Chapter 6: Don’t Solve the Problem
• Chapter 55: Climb Above the Solution
• Chapter 41: Give Up Control