← LibraryBlog · Productivity

On AI Coding and Its Discontents

Cal Newport
✓ Source-grounded

While AI coding tools offer a seductive illusion of 10x velocity, they risk 'deskilling' the practitioner by replacing deep mental models with a 'vibe coding' workflow that makes it impossible to understand the very systems you are building.

Read the original

In one sentence

The danger of AI-assisted coding is not that the tools don't work, but that they encourage a "vibe coding" workflow where you outsource the thinking required to build a mental model of your own work, eventually leading to a loss of professional agency and skill.

Why read this (and who it's for)

This is for software engineers, technical writers, and any knowledge worker who feels they are becoming a "tool operator" rather than a creator. It solves the problem of "productivity traps"—where you are producing more output but losing the ability to explain, debug, or architect the systems you produce. After reading this, you will be able to identify when to use AI as a "scaffolding" tool versus when to rely on it as a "thinking" substitute.

The big idea

The "honeymoon phase" of AI coding is characterized by a stunning increase in speed: tasks that took a week can suddenly be done in two days. However, this speed comes with a hidden cost. Because AI-generated code often looks reasonable but can contain "hard-to-spot bugs," the burden of review becomes immense. Because you didn't write the code yourself, it is "famously hard" to understand, making it easy to "blow off" the necessary review.

The core problem is cognitive offloading. When you outsource the understanding of a system to an LLM, you stop performing the "mental curl-ups" required to maintain a mental model of the software. This leads to "deskilling"—a state where you can no longer perform the task without the tool. To remain a high-level engineer, you must ensure that you still understand the "why" and "how" of every line of code, even if the AI helped generate the "what."

Key ideas

The Illusion of Velocity

The "Hard-to-Spot" Bug Problem

Deskilling and "Never-skilling"

The Loss of Agency (Tool Operator vs. Creator)

The Importance of Mental Models

The "Greenfield" Exception

Frameworks & tools

The Balanced Integration Model

To use AI without losing your skills, follow this hierarchy of involvement:

  1. Human-Led Architecture: You must speak to stakeholders, customers, and designers to design a high-level solution before touching the AI.
  2. AI-Assisted Scaffolding: Use AI for "low-risk, annoying" tasks (e.g., writing tests, throw-away scripts, or scaffolding DTOs).
  3. Manual Mental Model Building: When you encounter a concept or method you don't understand, stop the AI. Use search and discussion to build a "sound mental model" before asking the AI to write the code.
  4. The "Review" Rule: Never accept a change from an AI that you cannot explain to a colleague in a 1:1 meeting.

Memorable examples & stories

The "Fired" Warning

A senior engineer initially loved Claude Code but was told by his boss that if the AI-generated code crashed the product one more time, he would be fired. The AI's "reasonable-looking" code had caused catastrophic production issues. Lesson: Speed without understanding is a liability.

The "Mental Curl-ups"

A junior engineer realized they were "never-skilling" because they were reaching for AI too quickly instead of spending the time being "uncomfortable" during deliberate practice. Lesson: The "uncomfortable" part of the work is where the actual skill is built.

The "Automated Train" Analogy

The author compares domain-specific automation to a train: "Automated trains on the DC Metro are great for local travel, but... I can’t use a train as a chatbot for dinner recipes." Lesson: AI should be a specialized tool with clear bounds, not a general-purpose replacement for human thought.

Key quotes

"The coding harnesses are useful and make life as a developer easier... but they also encourage laziness." Why it matters: It warns us that the ease of the tool can become a trap for our own professional growth.

"The difference hits home when things go wrong... the difference is the cognitive offloading to technology, not just of semantic knowledge, but of understanding." (paraphrased) Why it matters: It distinguishes between knowing "what" to do and "understanding" why it works.

"I’m going back to coding by hand... Reviewing LLM written code, no matter how carefully, just doesn’t result in me developing the mental model of the code that I need to have to be an effective engineer." (paraphrased) Why it matters: It highlights the danger of "passive" learning vs. "active" mastery.

How to apply it

This week

Ongoing

Common pitfalls

Connects to

If you remember only three things

Internalize it

Fidelity note

This summary is based strictly on the provided text. I am highly confident in the distinction between "vibe coding" and "mental models." The text does not provide a specific "how-to" guide for every programming language, but rather focuses on the philosophical and professional risks of AI integration. Readers should verify the specific examples of "Claude Code" and "Cursor" as they are specific tools mentioned in the source material.

Keep going — related reads

More from Cal Newport