essay · forgetting programming

Forgetting Programming Syntax Isn't the Real Problem

You wrote a working recursive function two weeks ago. Today you stare at a blank editor and can't remember how the base case even starts. This isn't a character flaw. It's what happens when you learn something once and never load it back into your head on purpose.

The googling-the-same-method-for-the-third-time feeling

You know the shape of the problem. You solved it before. You might even remember the variable names you picked last time. But the actual syntax, the thing your fingers need to type, isn't there. So you open a new tab, search the same phrase you searched two weeks ago, click the same Stack Overflow answer, copy the same three lines.

This happens to people who studied hard. It happens after finishing a bootcamp, after grinding a course, after building a real project that shipped. Knowing the concept and being able to produce the syntax under pressure are different skills, and most learning paths only build the first one.

The interview version of this is worse because there's an audience. You freeze on .reduce() syntax you've used a dozen times, not because you don't understand reducers, but because your brain filed the concept and let the exact call signature evaporate. Then the anxiety compounds it. You start doubting the concept too, even though the concept was never the problem.

Why "just build projects" doesn't fix retention by itself

"Build more projects" is true advice and also incomplete advice. Projects are how you first encounter a pattern in context, which matters. But a project only revisits the syntax you happen to need for that project. If your app never needs a decorator, a generator, or a specific regex pattern, you don't touch it again, and it fades on schedule whether you built ten projects or one.

Projects give you breadth of exposure. They don't give you a mechanism for deciding what to revisit and when. You finish the project, ship it, move to the next one, and the syntax you used three files ago quietly leaves working memory. Nobody schedules a return trip. That's the actual gap, not lack of effort.

Concepts vs. syntax is a false choice — you need both under pressure

A lot of advice tells you not to worry about syntax because you can look it up, or because Copilot will autocomplete it for you. That's true when you have time and a tool open. It's not true in a live coding interview, a whiteboard round, a pairing session where someone's watching your screen, or a production incident where you need to move fast without leaning on autocomplete for basic control flow.

Understanding what a hash map does conceptually is necessary. It is not the same skill as being able to declare one, populate it, and iterate it correctly in the language you're using, cold, in thirty seconds. Both skills matter. The concept gets you the plan. The syntax gets you the working code. Interviews test both, and so does real engineering work when the tool assist isn't available or isn't trustworthy for what you're doing.

What active recall actually looks like for code (not flashcards with text)

Active recall means retrieving the answer from your own head before you check it, instead of rereading the answer and feeling like that counts as review. Rereading a tutorial chapter a second time feels productive. It mostly isn't, because recognizing correct code when you see it is a much easier task than producing it from nothing.

For code specifically, the useful version of active recall isn't a flashcard with a definition on one side. It's: here's a function signature or a stub, type the actual working implementation from memory, run it, see if it executes correctly. The gap between "I recognize this" and "I can produce this" is the same gap between reading someone's join query and writing your own from a blank query editor. Recall closes that gap. Recognition doesn't.

This is also why "watch a video again" doesn't fix syntax retention. Watching is recognition. Typing the loop yourself, closing the tab, and rebuilding it from memory a week later is recall. It's a slower, less comfortable way to study, and it's the part that actually sticks.

Where spaced repetition fits after a bootcamp or course ends

Spaced repetition is just a schedule for when to retrieve something again, timed to when you're about to forget it, not before and not too long after. It's well known in language learning through tools like Anki, and it applies just as directly to code, though almost nobody operationalizes it that way. Most advice threads mention "spaced repetition" as a footnote and then drop it, without saying what you'd actually schedule or how.

This is where I built FlashCode. It's spaced-repetition practice where you type real code from memory instead of rereading it, backed by a custom SM-2 engine that decides when a given snippet comes back around based on how well you did last time. It runs in a browser IDE across Python, JavaScript, TypeScript, and Java, with 1,180+ snippets across 260+ cookbooks. It's not a replacement for a bootcamp or LeetCode. It's what you use after you've already learned something, so the course you finished doesn't quietly decay over the following six months.

The gap between "I finished the course" and "I can still write it cold"

Finishing a course proves you could follow along with someone else's structure at that moment. It doesn't prove retention six weeks later when there's no instructor, no starter file, and no partial credit for remembering the general idea. That gap is normal. It's not a sign you learned wrong or that you're not cut out for this. It's a sign that learning and retaining are two separate jobs, and most paths only do the first one on purpose.

The fix isn't shame, and it isn't "just look it up" either, because looking it up during an interview isn't an option. The fix is treating retention like a training problem: pick what to revisit, revisit it before you fully forget it, and produce it from memory instead of recognizing it on a page. That's a system, not a mood. Once you have the system, "I finished the course" and "I can still write it cold" stop being two different sentences.