DEV Community

Sho Naka
Sho Naka

Posted on

AI Coding Doesn't Remove the Beginner Wall: Practice Decomposition Before Syntax

This English adaptation was rewritten and reviewed by AI from the author's already-published Japanese article under a standing delegation for English-market publication. The author's observations and conclusion are preserved; the English framing and prose were AI-assisted. #ABotWroteThis

I've watched a lot of people get stuck learning to program. Some finish a Scratch book in a weekend and start remixing what they made. Others open the same book, follow the first chapter, and quietly stop opening the file after a week.

The difference isn't English, math, or talent. It's whether they already know how to break a task into steps a computer can actually run. Everything downstream — syntax, error messages, framework choice, "should I use AI for this" — sits on top of that one habit.

TL;DR

  • The real wall for programming beginners isn't syntax or environment setup. It's decomposing intent into steps a machine can execute.
  • People who already break tasks down in daily life (recipes, teaching a child, planning a trip) may pick up tools like Scratch quickly. Making the tool easier does not, by itself, teach that habit.
  • AI code generation doesn't remove the wall — it moves it. You still have to decompose your intent to prompt effectively and to fix what the model gets wrong.
  • If you're teaching: watch whether the learner can describe what they want in ordered steps before you show them any code.

Quick answer: what makes learning to code hard?

Not the code. The invisible prerequisite: taking a fuzzy goal ("I want a button that does something nice") and turning it into a sequence of concrete, ordered instructions. That skill has a name — computational thinking — and it's independent of any programming language. A learner who already has the habit may pick up Scratch in an afternoon; making the interface easier does not automatically build the habit.

The stuck-place is usually misdiagnosed

Ask people who bounced off a programming book why they quit, and the answers rhyme: "I couldn't get the environment set up." "The book was in English." "The instructor lost me." Real experiences, all of them, but symptoms — not the underlying condition.

The actual failure mode looks like this: the learner follows step-by-step instructions, everything works, they close the book feeling like they got it, and then they can't write a single line for a project of their own. Not because they forgot the syntax — because they never built the mental move the syntax was expressing.

Most introductory books teach how to arrange the blocks to reproduce the example game. They don't teach how to decide which blocks when the game only exists in your head. The learner reproduces a recipe without ever practicing the thinking that produced it. Python and JavaScript intro books have the same problem; Scratch just makes it visible earlier because the visual blocks strip away the excuse of "I got confused by the syntax."

Three patterns in people who get stuck

Watching enough beginners, the same three patterns show up:

One: they don't feel the gap between what they mean and what the computer can do. "I want the button to feel snappy" is a fine sentence for another human. The computer has no interpreter for "snappy." Turning intent into structure is the writer's whole job, and beginners often don't realize they've been handed that job.

Two: when an error appears, they can't trace it back to which of their assumptions broke. Errors aren't obstacles — they're a map showing where the mental model diverged from the actual behavior. Most beginners see the red text and stop thinking, instead of reading it as a hint.

Three: they try to hold the whole finished thing in their head at once. "First the character moves, then collision, then scoring" is workable. "The whole game, working" is not — and the moment that's the target, the hand freezes.

None of these are about talent. They're about a habit of decomposition that either exists from other parts of life or doesn't.

AI code generation doesn't dissolve any of this

AI genuinely lowers several sub-barriers that used to cause dropout:

  • Syntax recall is now cheap. You no longer have to memorize whether Python uses elif or elseif.
  • Boilerplate (project scaffolding, argparse, standard error handling) writes itself.
  • Environment setup, a common early point of friction, can often be resolved dialogically with a chat window.
  • Reading unfamiliar code has a running translator attached.

For a beginner who would have quit at "install Node.js and add it to your PATH," those are real wins. But once the goal is more specific than "make me a snake game," the model cannot infer every unstated preference. Turning "make it feel snappy" into a spec is still your job, as is judging the gap between the generated result and what you wanted.

The wall didn't disappear. It moved. It used to sit between "understanding the goal" and "typing the code." Now it sits between "understanding the goal" and "specifying it well enough that generated code can be judged." Same material — decomposition — with a slightly different address.

Computational Thinking, with a citation

The habit has an academic name. Jeannette Wing's March 2006 Communications of the ACM article helped bring computational thinking into broad computing-education discussion, arguing that it should benefit everyone, not only future computer scientists.

Wing's paper does not define a canonical four-part curriculum. The compact teaching shorthand below combines recurring ideas in K-12 resources from the Computer Science Teachers Association and Computing At School. Their frameworks are not identical and often include additional practices; these four are a useful introduction, not an official universal taxonomy:

  • Decomposition — cut a fuzzy goal into concrete parts. Not "make a game" but "move the character; detect wall collisions; show the score."
  • Abstraction — drop what doesn't matter yet. "Character color can wait; right now I only care about how it moves."
  • Pattern recognition — spot when two problems have the same shape. "This collision check has the same structure as the one I wrote last time."
  • Algorithm design — assemble the steps in an order a computer can follow.

These are moves humans made long before computers existed. Programming is those same moves sharpened until they're precise enough for a machine to execute. That framing matters: "learning to program" is, at its core, learning to raise your ordinary decomposition habit to machine-executable resolution.

Scratch's own creative-learning philosophy describes projects as a way for learners to break problems apart, debug, iterate, and express ideas — not merely to practice syntax. Mitchel Resnick, who led Scratch's development at MIT Media Lab, develops that broader creative-learning argument in Lifelong Kindergarten.

An illustration: two hours from zero to a working Scratch game

Concrete case, offered as illustration rather than evidence. n=1, not a study.

Someone with no coding background sat down with a Scratch tutorial book. Roughly two hours later, they had a working game — a character sprite, movement, scoring, win condition. Not the tutorial's example project. Their own idea.

Someone else picked it up, poked at it, and found a shortcut: "if I do this, I win instantly." Demonstrated it. The author watched the exploit, thought about it, and rearranged blocks so the shortcut no longer worked.

What's interesting isn't the game. It's what the author didn't do:

  • No debugger opened.
  • No documentation past the tutorial book consulted.
  • No forum questions asked.
  • No line of text-based code written.

Just blocks and a mental model of what the game should do. What they were doing without naming it was decomposition — decide the motion first, then the win condition, then patch the edge case the tester found.

That sequence isn't a programming skill. It's the same sequence anyone uses to write a recipe, run a household budget, or teach a child a card game. What compressed the timeline to two hours wasn't learning to think — it was learning how to express thinking they already had, in the vocabulary of Scratch blocks.

Give the same book to someone without that habit and the result may be very different. The book can assume a prerequisite it does not teach. This n=1 anecdote does not establish how common that pattern is; it illustrates the hypothesis the rest of the article asks teachers and learners to test in their own setting.

The grain shift: why experienced professionals stall too

This is the observation that made me finally believe the framing wasn't just "for beginners."

You would expect experienced professionals — the ones who write clear planning docs, run cross-functional projects, give coherent presentations — to pick up beginner programming easily. They have "logic" and "structure." Most do. Some stall exactly where a total beginner stalls, and the reason took me a while to see clearly.

The gap has a name: grain.

"Logical enough for a colleague to act on" and "logical enough for a computer to execute" are both logical, but they operate at different resolutions. A colleague fills in gaps. They know what "reasonable defaults" means, that "when the user isn't logged in, redirect them somewhere sane" implies a login page, that "handle errors gracefully" doesn't need to be spelled out. A computer fills in nothing. Every branch has to be named. Every default has to be picked. Every implicit assumption has to be made explicit.

The professionals who stall aren't unable to think logically. They're being asked to think at a resolution their day job never requires. Human collaborators absorb ambiguity; computers refuse it.

Once you see that as the actual barrier, the ordering of learn-to-code advice inverts. Environment setup, syntax, framework choice — all downstream. Practicing "specify at machine-grain resolution" — in plain language, before you touch a keyboard — is upstream and portable across every language and every AI model.

What this means if you're teaching or learning

If you're teaching — the diagnostic isn't "can they write code." It's "can they describe what they want, decomposed into steps, in plain language, before touching any tool?" If yes, any tool will do. If no, no tool will save them, no matter how visual or beginner-friendly.

If you're learning and stuck — stop and check whether the thing you can't figure out is the code, or the underlying spec. If you cannot give a clear ordered description of what should happen, write that out (on paper, in prose) before you touch the editor.

Concrete example. Say the goal is "a login page that redirects to a dashboard." Written at colleague-grain, that's a complete task. Written at machine-grain, it decomposes into something like:

1. Show a form: email input, password input, submit button.
2. On submit:
   2a. Reject if either field is empty (show inline error, stay on page).
   2b. Send credentials to the auth endpoint.
   2c. If auth returns success: navigate to /dashboard.
   2d. If auth returns invalid-credentials: show "email or password wrong" (do not say which).
   2e. If auth returns any other error: show "something went wrong, try again"
       and log the actual error for us.
3. If the user is already logged in when they hit /login: skip step 1, go straight to /dashboard.
Enter fullscreen mode Exit fullscreen mode

Every gap a colleague would silently fill is written down. That plain-text scaffold is the actual work. Once it's in front of you, the code — in any language, with or without an AI assistant — is transcription. Skip this and you'll be staring at a blinking cursor wondering why the tutorial made it look simple.

Try it with one feature you actually want to build: do not start coding until every branch, default, and error path is explicit in plain language.

Reframe errors

One more thing worth internalizing early: an error message isn't a report card. It's the computer telling you the exact place your mental model and reality parted ways. Read it as "here's the mismatch," look at what you thought was going to happen there, and ask what you assumed that turned out to be wrong.

Same move you make in the kitchen when a dish comes out too salty. Not "I failed" — "I now know when to add less next time."

Why programming education hasn't fixed this

Many introductory materials are organized around tool use: Scratch's interface, Python syntax, VS Code shortcuts. Those are necessary and easy to demonstrate. Decomposition, however, grows through repeated practice and feedback; it cannot be finished in one chapter. A learner can compensate by asking at every step: "Am I decomposing this myself, or reproducing the example's shape?"

FAQ

Should a beginner start with Scratch, Python, or an AI code generator?

If you're teaching yourself and you already break tasks down naturally, start with whatever tool matches your goal — Python for scripts, JavaScript for web, Scratch if you want fast visual feedback. If you notice you keep stalling on "what should happen next," step away from the tool and practice writing plain-language step-by-step descriptions of small goals. That's the actual prerequisite.

Doesn't AI code generation make this argument obsolete?

No. Models shift the work from typing syntax to specifying and evaluating behavior. Both still require decomposition.

How do I know if I have the decomposition habit?

Rough test: pick a small everyday task (making pasta, packing for a two-day trip) and describe it in ordered steps that would work for someone who's never done it. If you find yourself writing "then, adjust to taste" — you're relying on the reader to fill in ambiguity. A computer won't fill it in. The habit is being able to notice when you're doing that and drop to the next level of detail.

Is computational thinking taught anywhere well?

Current K-12 standards and teaching resources, including CSTA and Computing At School, address it explicitly. Coverage in self-directed courses varies. If you're picking a resource, look for whether it makes you describe problems before it makes you write code.

References

Top comments (0)