Ology

Learning to Code Without Handing Over the Thinking

Using AI coding assistants to learn programming through explanations, practice, independent problem-solving, and code verification

5 sessions · 10 readings · 3 views

Curated by Martin Kessler

The Two Clockssession 1Friction by Designsession 2A Hint Is an Interfacesession 3Debugging Without the Agentsession 4Passing Isn’t Knowingsession 5

Opening

AI coding tools have moved from offering a line of autocomplete to explaining unfamiliar code, proposing incremental hints, running tests, and making multi-file changes. That changes the learning problem: the question is no longer simply whether a tool can produce working code, but what a learner has to do—and still gets to do—while using it.

Recent work starts to separate outcomes that are easy to conflate. Anthropic’s controlled study examines immediate mastery while learning a new Python library; JetBrains researchers trace how students use in-IDE hints; product teams describe tutoring modes built to prompt rather than simply answer. Each illuminates a different part of the learning process, but none settles what works for whom over time.

The tension is practical as well as cognitive. Asking for a full solution can erase the very decisions a beginner needs to practice; withholding help can leave someone stuck or shut out. And passing tests is useful evidence that code behaves as expected, not proof that the person who wrote—or accepted—it understands why.

This seminar follows those tensions from skill acquisition, through tutor and hint design, to debugging and verification. Its central question is: How can AI help learners make progress without taking away the practice that makes progress durable?

Five questions worth arguing about

  1. 1When does assistance that improves immediate task completion undermine the practice needed to learn unfamiliar APIs?
  2. 2Should learners tolerate more frustration before asking an assistant, or should systems reduce friction with adaptive tutoring?
  3. 3Do incremental IDE hints preserve learner agency better than chat, or merely disguise a solution handoff?
  4. 4Can deliberate debugging practice survive when agents increasingly inspect, diagnose, and repair failures for us?
  5. 5If tests pass and reviews look clean, what evidence should count as proof that the learner understands the change?

The Sessions

1Session 1start here

The Two Clocks

The problem

A task completed quickly and a skill acquired well are different outcomes. Anthropic’s randomized study examines developers learning an unfamiliar Python library, then tests their understanding shortly afterward. Its results make the speed–mastery tradeoff concrete, but the short assessment and small, mostly junior sample limit what it can establish about long-term skill.

Anthropic’s workplace study offers a contrasting view: engineers describe learning unfamiliar parts of their codebase and broadening their work, alongside worries about losing practice in deeper skills. Those interviews and usage data illuminate work as it happens, not causal effects on learning. Read together, the pieces ask whether AI changes the pace of practice, the breadth of what people attempt, or both—and set up the question of how assistance might be designed to support learning rather than merely output.

2Session 2

Friction by Design

The problem

If productive effort matters, should an assistant answer less, or answer differently? OpenAI’s Study Mode describes a product strategy built around guiding questions, scaffolded responses, and knowledge checks. It explains the design intent, while noting that the early version depends on system instructions and can behave inconsistently; it is not evidence that the mode improves programming skill.

JetBrains’ advice for novice programmers puts more weight on the learner’s own habits: plan before coding, notice when AI is doing the thinking, and sometimes turn off inline completions. That is practical guidance, not a controlled comparison of learning strategies. Together, the readings frame a design tension: can a tutor reliably preserve active effort, or does that depend on learners choosing when to accept help? The next session narrows this broad question to a concrete interface: the hint.

3Session 3

A Hint Is an Interface

The problem

A hint can be a nudge toward the next step, a partial code change, or a solution in disguise. JetBrains describes an in-IDE system that combines LLM-generated suggestions with IDE analysis, code-quality checks, and controls over hint size. This is an engineering approach to making assistance more contextual and incremental—not proof that the resulting hints produce durable learning.

A later JetBrains study observes how students actually respond: some accept hints, while others adapt fragments, revise their code, or combine information from several attempts. These traces and interviews show varied interaction strategies, but they do not establish which strategy causes better learning. The contrast between intended scaffolding and observed use matters: a system’s “hint” may become material for independent reasoning—or a shortcut. That makes the learner’s next debugging move, not just the interface, the subject of the next session.

4Session 4

Debugging Without the Agent

The problem

Debugging is both a route to working code and a way to learn how code behaves. Microsoft Research’s Debug-gym builds an environment for AI coding tools to seek information interactively while debugging, rather than immediately generating a fix. It studies how to train agents, not how human learners acquire debugging skill; its value here is as a technical account of the information-gathering and iteration that one-shot fixes can bypass.

GitHub’s advice for junior developers suggests keeping access to explanations and debugging help while temporarily turning off inline completion during new learning. That is a workflow recommendation, not an experimental result. Put beside Debug-gym, it raises a useful question: can tools preserve diagnostic steps for people, or do they mainly automate those steps for agents? Even a learner who debugs actively still needs to judge whether a proposed fix works—and whether “works” is enough.

5Session 5finish here

Passing Isn’t Knowing

The problem

Tests, automated review, and code reading can all help catch mistakes, but they answer different questions. OpenAI’s account of code verification at scale describes a reviewer designed to surface actionable issues while acknowledging evaluation limits and the danger of treating a clean review as a guarantee. It is an engineering account of oversight, not a study of learning.

JetBrains’ framework argues that reviewing AI-generated code is also a problem of trust calibration: reviewers need ways to allocate attention to the riskiest parts of large changes. That framework comes from practitioner design research, not a validated teaching method. Together, these readings sharpen the seminar’s final distinction: tools may help verify an artifact, but the learner’s understanding needs its own evidence—especially evidence that holds beyond the immediate task.