# Problem-Solving Made Simple

By: Amy M Haddad

Most programmers want to get better at problem-solving. So they default to repetition.

I refer to this approach as the “problem-solving treadmill.” And, in my experience, it doesn’t work.

I was on the treadmill myself when I began to program. I was working really hard by solving a lot of problems. But I was going nowhere.

I’m not alone.

Research on top performance reveals that **repetition isn’t enough**. Solving problem after problem isn’t going to separate you from the pack. Rather, the *quality* of your practice matters when it comes to building a skill and getting better.

Looking back is an alternative approach to consider. It’s an efficient and effective way to get better at solving problems.

## The Struggle Was Real

I struggled tremendously with problem-solving when I began to program. I knew problem-solving was a critical skill to develop, but didn’t know how to go about it. So I defaulted to the problem-solving treadmill.

I’d dive into a problem full-speed without a plan, intent, or strategy. Then I’d find myself spinning my wheels and hitting roadblocks on the simplest of problems. If I did solve a problem, I’d rush off to the next one because I was so focused on quantity.

**In retrospect, this quantity mentality was one of my biggest mistakes**.

That’s because I’d attempt to re-solve a previously solved problem or I’d work on a problem related to a previously solved problem and get really stuck. I’d have no idea what to do or how to proceed.

When related concepts re-appeared in future problems I found that mistakes were made, concepts were confused, and progress was stalled.

Furthermore, the quality of my code was suspect. I was so focused on quantity that I sacrificed on quality: I never took the time to refine and really understand my solutions.

Eventually, I saw the error of my ways.

Repetition isn’t enough; **the quality of your practice matters when it comes to building a skill and getting better**. So I began to look back at my solutions. Only then did I begin to see the results I was after.

### Looking Back at the Problems You Solve

Getting the right answer is only part of the problem-solving process. Then, in the words of mathematician George Pólya, it’s time to “look back” at the completed solution: learn from it, improve it, and consolidate your knowledge. It’s the step to take once you’ve solved a problem but before you move along to the next one.

Looking back will help you enhance the quality of your problem-solving practice, which can enhance your learning, help you retain the information, and improve the quality of your solutions. You’ll learn to write effective solutions, not just correct ones. And this is a key difference between the best problem-solvers and the rest.

**Great problem-solvers write effective solutions**. An effective solution is correct: the program does the thing it’s supposed to do. But that’s just the start. Effective solutions can also be clear, meaningful, perform well, and adaptable, among many other factors.

And they can write effective solutions because they’ve taken time to enhance the quality of their practice. They understand how their solution works and why. As a result, they see alternatives and make tradeoffs, which ultimately enables them to write effective solutions.

**Our aim as programmers is to write effective solutions**. We can get there by enhancing the quality of our practice, which looking back can help us do. That’s why I got off of the problem-solving treadmill and began to look back at my solutions. Only then did I begin to see the improvement I was after.

## Problem-Solving for Programmers

Problem-solving is challenging, even for the best of the best. But—and this is the important point—the process itself doesn’t have to be so hard. **Although problem-solving isn't easy, there are simple and concrete ways to get better at it**.

That’s what inspired me to write *Problem-Solving for Programmers*. This eBook contains seven approaches you can apply to the problems you solve. These approaches incorporate principles from recent research on learning and top performance; they also incorporate this idea of looking back.

*Problem-Solving for Programmers* takes a different view toward problem-solving. Instead of hacks and tricks, it reveals specific and actionable steps to take to get better at solving problems. As a result, you’ll become a better problem solver. You’ll also strengthen core programming skills: reading and reviewing code, writing code, and thinking in new and creative ways.

In this eBook, you’ll learn about seven approaches you can apply to the problems you solve. In the process, you’ll learn how to consider and apply different problem-solving approaches and constraints, read the code of others, and “recycle” your problems by resolving them with a new intent.

However, you learn best by doing. So throughout *Problem-Solving for Programmers* you’ll find five exercises. I provide code solutions and written explanations so you understand what’s happening and why each step of the way.

Use the approaches discussed in this eBook in your day to day work as a programmer during code reviews, as well as when you get feedback from pull requests, prepare for code interviews, write quality code on the job, and read source code. Or apply them as you practice on your own time.

Programming is problem-solving. So we know that sharpening this skill matters. At last, there’s a simple and concrete way to get better at it. After all, your problem-solving process will be far more efficient and effective, not to mention a lot more fun, once you routinely look back at the problems you solve.

← back to all posts