The Hardest Part of Using AI Is Knowing What You Truly Understand
Summary
This essay argues that the hardest part of using AI for programming is knowing whether a developer truly understands a design or merely recognizes quality in AI-generated code. The author frames programming expertise as tacit knowledge built through apprenticeship: experience teaches developers which boundaries, states, abstractions, and risks matter in a particular domain. AI can now produce convincing code in many paradigms, including object-oriented, functional, and domain-driven styles, and can often outperform the author on implementation details when given a specification. This exposes programmers to far more approaches than they might encounter through years of jobs and projects, but it also creates an illusion of mastery. The author distinguishes recognition from generation: a person may identify misplaced responsibility, missing branches, or a clean Result and union-type design without being able to choose the states, invariants, and ownership boundaries from a blank screen. AI-assisted development therefore shifts work toward decomposing problems, expressing constraints, reviewing output, testing it, and directing multiple agents, making judgment speed more important than typing speed. The author accepts that this can dramatically accelerate shipping, but warns that gradually delegating increasingly difficult work can quietly erode the ability to design systems independently. The essay compares this risk to managers losing touch with frontline work after leaving it for too long. It does not reject AI; instead, it records the concern that approving excellent output may feel like authorship while the underlying programming mental model slowly atrophies.