I’m a software engineering student and I’m always annoyed by how much my program touts that it teaches problem-solving skills yet we are never explicitly taught any problem-solving techniques. Maybe they mean that by solving a lot of problems, such as textbook questions, assignments, and tests, we’ll have the skills to solve new problems but this is a poor way of learning. It assumes that the learner will somehow pick up the skills to solve problems by doing many examples and while this does sort-of happen, it’s inefficient and error-prone.
Artificial neural networks (ANN) are a great example of this flaw, the flaw that learning from many examples will somehow generalize to understanding. While ANNs do sometimes generalize from what they’ve learnt, they are notoriously difficult to train properly as they tend to learn the input distribution rather than how the input leads to the output.
Going back to the problem of solving problems, one approach is to first understand the problem and then to break it down into smaller problems. While this reductionist approach is helpful, it isn’t detailed enough to help move towards a solution. How should I break a problem down? Into what parts? An interesting and more meaningful approach to problem-solving is one introduced by Herbert Simon and Allen Newell in their program “General Problem Solver”. They introduce a notice of “distance” between the problem and the solution where distance is the number of steps needed to go from the problem to the solution.
For example, the problem “2 + 2 = ?” has a distance of one because only one step is needed to add the two numbers to get the answer. The problem “(4 * 5) + (9 / 3) = ?” has a distance of three because three steps are needed to solve the problem.
The approach to problems that I’m introducing in this post is the idea that problems have weak points. The notice of distance is a great analogy because finding a problem’s weak points translates to finding the shortest distance from the problem to the solution. Providing a measure is important because “If you can’t measure it, you can’t improve it.” The goal is to attack problems where they are weakest and a measure lets us judge whether we are proceeding along a weak point.
An example of applying this weak point approach is to suppose that you wanted to climb a mountain. One path is to climb the mountain up in a spiral but this isn’t the shortest path. While this path does increase the altitude slowly, it also increases the distance travelled. An alternative path is to just head straight up the mountain at the cost of rapidly increasing the steepness. It’s the same idea as using the stairs versus the ramp to go up.
Another example, that comes from the Eragon book series, is how to efficiently kill someone with magic. The naive approach would be to crush their body or to set them on fire but this costs a lot of energy. A more efficient approach comes from understanding the weak points of the human body and by attacking those points. These points include pinching a vital artery going to the brain or severing the nerves in the spine. Joints are also notorious for being weak points of human bodies due to their exposure of nerves and lack of bone.
The general idea behind this approach is to find weak points, chinks in the armor, and to exploit those points. However, searching for these points is difficult. One strategy is to use statistics and logic.
For example, during World War II, the military wanted to know where to reinforce their planes to prevent them from being damaged so they asked a statistician. The statistician’s initial approach was to look at the planes returning from battle and to reinforce the locations with bullet holes but this is wrong. It’s wrong because the planes that made it back only represent the sample of planes that didn’t go down due to an attack. The weak points of the plane were attacked by the enemy so those planes didn’t make it back to be analyzed. This is also known as survivorship bias and shows how attempting a variety of attacks and analyzing the problem’s response is a valid method of identifying weak points.
Another strategy involves looking at the fundamentals or core pillars of a problem and attacking those. A real-life example might be the problem of how to talk with your significant other after an argument. You might start by using your knowledge of their favorite food or movie and approaching them with it. By understanding the core of a person, whether that be their preferences, personality, or desires, one can increase the chances of solving the problem.
However, sometimes the only way to identify weak points is through experience. The experience of a variety of solutions to many different problems leads to general patterns that aid in problem-solving. Patterns that act as shortcuts, escalators in a world of stairs. This is what happens when we’re told to solve many problems in school.
There are many applications of this weak points approach. Some other ones include blowing up a building so you place the bombs on the foundation, evolution exploiting how increasing the number of neurons in the brain increases intelligence, or identifying a business competitor’s lack of features and including such features in your own product.
The takeaway from this post is that it pays to take a step back when faced with a problem, to spend some time thinking of a better way to the solution, because problems make some solutions harder while giving way to other solutions. Problems, like the human body, buildings, and planes, have weak points.