{"course":{"slug":"how-software-changed","title":"How Software Development Changed","url":"https://addaly.com/learn/how-software-changed","level":"intermediate","track":"work"},"lesson":{"slug":"how-skill-forms","title":"Why the hard part was the part that taught you","url":"https://addaly.com/learn/how-software-changed/how-skill-forms","position":61,"of":87,"minutes":9,"answer":"Learning comes from retrieval under difficulty, and reading generated code substitutes recognition for retrieval while producing the identical feeling of understanding, so the internal signal that used to indicate learning now tracks fluency instead.","keyIdea":"Learning comes from retrieval under difficulty, and reading generated code substitutes recognition for retrieval while producing the identical feeling of understanding, so the internal signal that used to indicate learning now tracks fluency instead."},"body":{"format":"markdown","text":"## Retrieval, not exposure\n\nIn 2006 Roediger and Karpicke gave students a prose passage. One group read it four times. Another read it once, then tried three times to write down everything they could remember, with no chance to re-read. Tested five minutes later, the re-readers did better. Tested a week later the order reversed hard: the recall group retained roughly 61 per cent of the material, the re-reading group roughly 40.\n\n> Figure: Retained a week later. Bars (%): Read it once, then recalled it three times 61; Read it four times 40. Roediger and Karpicke, 2006. Five minutes after studying, the re-readers did better; a week later the order reversed hard. The re-readers had also predicted they would do better, which is the part that matters here.\n\nThe students had also been asked to predict their own performance. The re-readers predicted they would do better. They were confident and they were wrong, and that combination is the reason this lesson exists.\n\n## Producing the answer is what sticks\n\nAn older result points the same way. Slamecka and Graf, 1978: participants shown a cue and asked to produce the target themselves (`hot – c___`) remembered the pair better than participants shown `hot – cold`. Same information, same seconds on the page. The difference was who produced it.\n\nRobert Bjork collected effects like these under the name **desirable difficulties**: conditions that make practice feel slower and worse while making retention better. Spacing sessions out. Interleaving different problem types instead of blocking them. Attempting before being told. Each one degrades performance during practice and improves it afterwards, which means the signal you get while practising points the wrong way.\n\nManu Kapur's work on **productive failure** goes further. Students asked to invent solutions to problems they had not been taught, and who mostly failed, then received the canonical method, and outperformed students who got the method first. The failed attempt built the structure that the explanation then slotted into.\n\n## The mechanism, applied\n\nHere is the specific thing that changed, stated as a mechanism rather than a worry.\n\nWriting a function yourself forces **recall**. You have to retrieve the method name, the argument order, the loop bound, the behaviour when the list is empty. Each retrieval is a repetition, and retrieval under difficulty is what the studies above are measuring.\n\nReading a generated function requires only **recognition**. You see `items.reduce(...)` and you recognise it. Recognition is dramatically cheaper than recall (this is why multiple-choice is easier than short-answer) and, critically, it produces the same subjective feeling. Nothing in your experience of reading fluent code distinguishes \"I could have written this\" from \"I can follow this\".\n\nSo the internal signal that used to tell you whether you had learned something is now measuring the wrong variable. It tracks fluency, and generated code is uniformly fluent.\n\n## What this does not license\n\nAbstinence is the wrong conclusion, and it is the conclusion everyone reaches first.\n\nDeliberate practice has two halves: effortful attempts, and fast accurate feedback. The second half used to be the scarce one. You wrote something, and if you had nobody to review it you might carry a bad habit for years. A model that will critique your code, name the race condition and show three other ways to do it is a feedback device of a kind junior engineers have never had.\n\nThe question is the **order of operations**, not the presence of the tool. Commit to a prediction, then generate. The gap between the two is the lesson, and it exists only if the prediction came first.\n\n## The limits of this evidence, stated plainly\n\nEverything above comes from laboratory work on word lists, prose passages, physics problems and secondary-school mathematics. There is no controlled, multi-year study of programmers learning with and without generation assistance, and there is not going to be one soon, because you cannot randomise people into careers and follow them for a decade.\n\nSo: the mechanism transfers plausibly. The magnitude does not transfer at all. Anyone who tells you that assistants cost juniors a specific percentage of their skill growth has made the number up. Treat this literature as a reason to design your practice carefully, not as a measurement of your situation.\n\n## The free path\n\nNone of this needs paid tooling. Spaced repetition has a free, open-source implementation in Anki, which runs on a phone. The retrieval half needs nothing but a blank file and the discipline to write the signature before you ask for it. A notebook works.\n\n> The feeling of understanding is a measurement instrument. It was calibrated in a world where the only way to read your own code was to have written it. That calibration is gone, and nothing replaced it automatically."},"check":{"question":"An engineer reads generated code carefully, follows every line, and reports feeling that they learned the technique. A week later they cannot write it without help. What is the mechanism?","options":[{"text":"Following code needs recognition, not recall, so nothing was retrieved and nothing strengthened.","correct":true},{"text":"The code was too advanced for their level, so comprehension was superficial from the start.","correct":false,"tempting":"Blames difficulty when the failure occurs with code the person genuinely did follow line by line at the time."},{"text":"They read it too quickly, so the information never reached long-term memory; reading the same code three times would have fixed it.","correct":false,"tempting":"Assumes exposure is the missing ingredient, when the re-reading group in the study was the one that retained less."},{"text":"Generated code uses unusual idioms, so what was learned did not match the patterns they later tried to recall.","correct":false,"tempting":"Points at style when the same gap appears with entirely idiomatic generated code."}]},"prev":{"slug":"the-missing-rung","title":"Juniors, and the rung that went missing","url":"https://addaly.com/learn/how-software-changed/the-missing-rung"},"next":{"slug":"the-competence-illusion","title":"A five-minute test for whether you understood it","url":"https://addaly.com/learn/how-software-changed/the-competence-illusion"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Why the hard part was the part that taught you', in How Software Development Changed. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/how-software-changed/how-skill-forms (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Why the hard part was the part that taught you","courseTitle":"How Software Development Changed","module":{"index":7,"slug":"skill-and-the-missing-rung","title":"Skill, hiring and the missing rung"},"answer":null,"keyIdea":"Learning comes from retrieval under difficulty, and reading generated code substitutes recognition for retrieval while producing the identical feeling of understanding, so the internal signal that used to indicate learning now tracks fluency instead.","hero":{"kind":"figure","figure":{"t":"figure","label":"Figure","figure":{"type":"bars","unit":"%","title":"Retained a week later","series":[{"label":"Read it once, then recalled it three times","value":61,"highlight":true},{"label":"Read it four times","value":40}],"caption":"Roediger and Karpicke, 2006. Five minutes after studying, the re-readers did better; a week later the order reversed hard. The re-readers had also predicted they would do better, which is the part that matters here."},"alt":"Figure: Retained a week later. Bars (%): Read it once, then recalled it three times 61; Read it four times 40. Roediger and Karpicke, 2006. Five minutes after studying, the re-readers did better; a week later the order reversed hard. The re-readers had also predicted they would do better, which is the part that matters here."}},"blocks":[{"t":"h2","id":"retrieval-not-exposure","runs":[{"text":"Retrieval, not exposure"}]},{"t":"p","runs":[{"text":"In 2006 Roediger and Karpicke gave students a prose passage. One group read it four times. Another read it once, then tried three times to write down everything they could remember, with no chance to re-read. Tested five minutes later, the re-readers did better. Tested a week later the order reversed hard: the recall group retained roughly 61 per cent of the material, the re-reading group roughly 40."}]},{"t":"p","runs":[{"text":"The students had also been asked to predict their own performance. The re-readers predicted they would do better. They were confident and they were wrong, and that combination is the reason this lesson exists."}]},{"t":"h2","id":"producing-the-answer-is-what-sticks","runs":[{"text":"Producing the answer is what sticks"}]},{"t":"p","runs":[{"text":"An older result points the same way. Slamecka and Graf, 1978: participants shown a cue and asked to produce the target themselves ("},{"text":"hot – c___","code":true},{"text":") remembered the pair better than participants shown "},{"text":"hot – cold","code":true},{"text":". Same information, same seconds on the page. The difference was who produced it."}]},{"t":"p","runs":[{"text":"Robert Bjork collected effects like these under the name "},{"text":"desirable difficulties","b":true},{"text":": conditions that make practice feel slower and worse while making retention better. Spacing sessions out. Interleaving different problem types instead of blocking them. Attempting before being told. Each one degrades performance during practice and improves it afterwards, which means the signal you get while practising points the wrong way."}]},{"t":"p","runs":[{"text":"Manu Kapur’s work on "},{"text":"productive failure","b":true},{"text":" goes further. Students asked to invent solutions to problems they had not been taught, and who mostly failed, then received the canonical method, and outperformed students who got the method first. The failed attempt built the structure that the explanation then slotted into."}]},{"t":"h2","id":"the-mechanism-applied","runs":[{"text":"The mechanism, applied"}]},{"t":"p","runs":[{"text":"Here is the specific thing that changed, stated as a mechanism rather than a worry."}]},{"t":"p","runs":[{"text":"Writing a function yourself forces "},{"text":"recall","b":true},{"text":". You have to retrieve the method name, the argument order, the loop bound, the behaviour when the list is empty. Each retrieval is a repetition, and retrieval under difficulty is what the studies above are measuring."}]},{"t":"p","runs":[{"text":"Reading a generated function requires only "},{"text":"recognition","b":true},{"text":". You see "},{"text":"items.reduce(...)","code":true},{"text":" and you recognise it. Recognition is dramatically cheaper than recall (this is why multiple-choice is easier than short-answer) and, critically, it produces the same subjective feeling. Nothing in your experience of reading fluent code distinguishes “I could have written this” from “I can follow this”."}]},{"t":"p","runs":[{"text":"So the internal signal that used to tell you whether you had learned something is now measuring the wrong variable. It tracks fluency, and generated code is uniformly fluent."}]},{"t":"h2","id":"what-this-does-not-license","runs":[{"text":"What this does not license"}]},{"t":"p","runs":[{"text":"Abstinence is the wrong conclusion, and it is the conclusion everyone reaches first."}]},{"t":"p","runs":[{"text":"Deliberate practice has two halves: effortful attempts, and fast accurate feedback. The second half used to be the scarce one. You wrote something, and if you had nobody to review it you might carry a bad habit for years. A model that will critique your code, name the race condition and show three other ways to do it is a feedback device of a kind junior engineers have never had."}]},{"t":"p","runs":[{"text":"The question is the "},{"text":"order of operations","b":true},{"text":", not the presence of the tool. Commit to a prediction, then generate. The gap between the two is the lesson, and it exists only if the prediction came first."}]},{"t":"h2","id":"the-limits-of-this-evidence-stated-plainly","runs":[{"text":"The limits of this evidence, stated plainly"}],"role":"limit"},{"t":"p","runs":[{"text":"Everything above comes from laboratory work on word lists, prose passages, physics problems and secondary-school mathematics. There is no controlled, multi-year study of programmers learning with and without generation assistance, and there is not going to be one soon, because you cannot randomise people into careers and follow them for a decade."}]},{"t":"p","runs":[{"text":"So: the mechanism transfers plausibly. The magnitude does not transfer at all. Anyone who tells you that assistants cost juniors a specific percentage of their skill growth has made the number up. Treat this literature as a reason to design your practice carefully, not as a measurement of your situation."}]},{"t":"h2","id":"the-free-path","runs":[{"text":"The free path"}],"role":"free"},{"t":"p","runs":[{"text":"None of this needs paid tooling. Spaced repetition has a free, open-source implementation in Anki, which runs on a phone. The retrieval half needs nothing but a blank file and the discipline to write the signature before you ask for it. A notebook works."}]},{"t":"quote","runs":[{"text":"The feeling of understanding is a measurement instrument. It was calibrated in a world where the only way to read your own code was to have written it. That calibration is gone, and nothing replaced it automatically."}]}],"check":{"question":[{"text":"An engineer reads generated code carefully, follows every line, and reports feeling that they learned the technique. A week later they cannot write it without help. What is the mechanism?"}],"options":[{"text":[{"text":"Following code needs recognition, not recall, so nothing was retrieved and nothing strengthened."}],"correct":true,"tempting":null},{"text":[{"text":"The code was too advanced for their level, so comprehension was superficial from the start."}],"correct":false,"tempting":[{"text":"Blames difficulty when the failure occurs with code the person genuinely did follow line by line at the time."}]},{"text":[{"text":"They read it too quickly, so the information never reached long-term memory; reading the same code three times would have fixed it."}],"correct":false,"tempting":[{"text":"Assumes exposure is the missing ingredient, when the re-reading group in the study was the one that retained less."}]},{"text":[{"text":"Generated code uses unusual idioms, so what was learned did not match the patterns they later tried to recall."}],"correct":false,"tempting":[{"text":"Points at style when the same gap appears with entirely idiomatic generated code."}]}],"order":[2,1,3,0],"why":null},"prev":{"slug":"the-missing-rung","title":"Juniors, and the rung that went missing","minutes":9},"next":{"slug":"the-competence-illusion","title":"A five-minute test for whether you understood it","minutes":9}}}