Table of Contents
It is one of the most common and most frustrating experiences in learning maths or coding. You read a worked solution, and every step makes sense. You watch a teacher solve a problem, and you follow all of it. Then you face a similar problem on your own, and your mind goes blank. It feels like you understood, so why can you not do it?
The answer is not that you are bad at the subject. It is that understanding a solution and producing one are two different skills, and most study habits only train the first. This guide explains the difference, why it catches almost everyone, and a practical method to build the second skill, with examples from both maths and programming.
Why understanding is not the same as solving
When you read a solution, someone else has already made all the hard decisions: which method to use, what to do first, what to ignore. You only need to check that each step follows from the last. That is recognition, and it is much easier than recall. When you solve a problem yourself, you have to make those decisions from nothing, with a blank page and no hints, while holding the whole plan in your head.
Psychologists have studied this gap for decades. Asher Koriat and Robert Bjork described "illusions of competence", where people judge how well they have learned something by how easy it feels while studying, and those judgements are often wrong. Reading a clear solution feels easy, so it feels like learning. But the ease comes from the solution being in front of you, not from anything you could now do alone.
A simple test
After reading any solution, close it and try to write it out again from a blank page. If you cannot, you recognised it but did not learn it. That is not failure. It is information about what to practise.
Why it happens so often
- Most studying is reading. Rereading notes, watching videos and going through solutions are all recognition. They are comfortable, which is why they are so popular.
- Solutions hide the search. A finished solution shows the path that worked, not the three dead ends the expert tried first. So you never practise the part that is hard: choosing a direction when you do not know which is right.
- Practice is often labelled. A worksheet headed "quadratic equations" tells you the method before you start. Exams and real problems do not.
- AI and answer keys make it worse. When the solution is one click away, it is tempting to look after thirty seconds instead of struggling for ten minutes. Our guide on using ChatGPT to study without cheating covers how to avoid this.
The close-the-book method
- Attempt first, for real. Give it 10 to 15 minutes before looking at anything, even if you get nowhere. Research on the testing effect, including a well-known 2006 study by Henry Roediger and Jeffrey Karpicke, found that students who practised recalling material remembered much more of it a week later than students who spent the same time rereading it. Struggling first also makes the solution more meaningful when you see it.
- Read the solution carefully, asking at each step: why this, and why now? What would have made me think of it?
- Close it completely. Not face down on the desk. Away.
- Recreate it from a blank page. Write out the whole solution from memory. Where you get stuck is exactly the part you had not really learned. Look back only at that point, then close it again.
- Return later. A day or a week later, try a similar but different problem. This is where recognition finally becomes the ability to produce.
The method is slower than reading ten solutions. It is also the reason it works. Robert Bjork calls effort like this a "desirable difficulty": practice that feels harder in the moment but leads to much better long-term learning.
Fading: a bridge between reading and solving
When a topic is completely new, jumping straight to blank-page solving can be too much. Learning researchers such as Alexander Renkl have studied a gentler approach called fading: start with a full worked example, then hide the last step, then the last two, and so on, until you are solving the whole thing yourself. Here is a tiny program that does exactly that for an equation, which you can adapt to any subject:
solution = [
"Problem: solve 3x + 7 = 25",
"Subtract 7 from both sides: 3x = 18",
"Divide both sides by 3: x = 6",
"Check: 3 x 6 + 7 = 25, correct",
]
def faded(steps, hidden):
"""Show a worked solution with the last `hidden` steps blanked out."""
shown = len(steps) - hidden
return [s if i < shown else " ... (your turn)" for i, s in enumerate(steps)]
for hidden in (0, 1, 2, 3):
print(f"--- stage {hidden + 1}: {hidden} step(s) hidden")
for line in faded(solution, hidden):
print(" ", line)
--- stage 1: 0 step(s) hidden
Problem: solve 3x + 7 = 25
Subtract 7 from both sides: 3x = 18
Divide both sides by 3: x = 6
Check: 3 x 6 + 7 = 25, correct
--- stage 2: 1 step(s) hidden
Problem: solve 3x + 7 = 25
Subtract 7 from both sides: 3x = 18
Divide both sides by 3: x = 6
... (your turn)
--- stage 3: 2 step(s) hidden
Problem: solve 3x + 7 = 25
Subtract 7 from both sides: 3x = 18
... (your turn)
... (your turn)
--- stage 4: 3 step(s) hidden
Problem: solve 3x + 7 = 25
... (your turn)
... (your turn)
... (your turn)
You can do the same thing on paper with a sheet of card, covering one more line each time. It works just as well for code: read a complete program, then rewrite it with the last function missing, then the last two.
Examples: maths and coding
In maths
Say you read a worked solution for finding the area of an L-shaped room and it all makes sense. Close it. On a blank page, draw a different L-shape with different measurements and solve it. If you get stuck deciding how to split the shape, that decision is the real lesson, far more than the multiplication. Our guide to area and perimeter has worked examples to practise on.
In coding
Say you follow a tutorial that reverses a list, and every line makes sense. Close it. Open an empty file and write it again. Then change the problem slightly: reverse only the first half, or reverse words in a sentence. The moment you cannot continue without looking is the moment you are learning. Our basic Python programs are graded so you can practise this way.
How to tell which skill you are practising
| Feels productive, mostly recognition | Feels harder, builds solving |
|---|---|
| Rereading notes and solutions | Recreating a solution from a blank page |
| Watching someone solve problems | Attempting before looking |
| Practice sheets labelled by topic | Mixed problems where you choose the method |
| Nodding along to an explanation | Explaining it yourself, out loud |
Mix your practice
Once you know several methods, practise with mixed problem sets where the topic is not labelled. Choosing which method to use is a skill of its own, and it is exactly what exams test. Our post on moving from USACO Bronze to Silver shows the same idea in competitive programming.
A note for parents
If your child says "I understood it in class but couldn't do the homework", believe them. It is a real and common experience, not an excuse. The most helpful response is not to explain the solution again, which trains recognition, but to ask them to try the first step and talk through what they are thinking. Our guide to helping with maths homework without solving it has questions that work well here.
Understanding a solution is watching someone else drive. Solving a problem is being handed the keys.
How we teach it
This is the gap our classes are built around. The principles on our how we teach page include deriving a rule yourself before seeing it written down, staying with one idea until it genuinely clicks, and students explaining their thinking in every lesson. They apply in our live maths classes and our coding courses alike, one to one or in small groups of 5 to 10.
Frequently asked questions
Because understanding a given solution and producing one are different skills. Reading a solution is recognition: the method is chosen for you. Solving requires recall and choosing a method from a blank page. Practising by attempting first and recreating solutions from memory builds the second skill.
Yes, very. In class the teacher chooses the method and shows each step, so it feels clear. At home you must choose the method yourself. This gap is a normal part of learning and closes with the right kind of practice.
About 10 to 15 minutes of genuine effort is a good guide for most homework and practice problems. Struggling first makes the solution more meaningful and improves memory, as long as you do not give up in frustration.
It is the feeling that you have learned something because it seems easy while you are studying it, for example when rereading notes or following a solution. That ease comes from the material being in front of you, so it often overestimates what you can do alone.
It is a worked solution where later steps are progressively hidden, so you complete more of the solution yourself each time. It is a gentle bridge between reading full solutions and solving problems independently.
Only a little on its own. Tutorials build recognition. To build the ability to write code, close the tutorial and rewrite the program from memory, then change it and solve the new version yourself.
Practise the way exams work: mixed problems, no notes, a blank page and a time limit. The more often you have produced solutions from nothing during practice, the less unfamiliar that feeling is in the exam.