Or: why “vibe coding” gets the human-AI collaboration story backwards
Press enter or click to view image in full size
In 1997, Garry Kasparov lost to Deep Blue. The world declared chess dead as a human endeavor. Kasparov, to his credit, disagreed. He proposed something more interesting: what if the best chess wasn’t human or computer, but human and computer? He called it Advanced Chess. The internet calls it Centaur Chess — half human, half machine, and surprisingly, stronger than either alone.
Here’s the part they don’t put in the press releases: in Centaur Chess tournaments, the strongest human players don’t always win. Sometimes they lose to mediocre players with weaker machines. Not because chess skill became irrelevant — but because the skill required changed. The grandmaster who trusts his intuition over the computer’s evaluation loses to the club player who knows exactly when to defer and exactly when to override. The centaur’s strength comes from the partnership, not from either partner dominating the other.
This brings me to “vibe coding.”
Andrej Karpathy coined the term — affectionately, I think — to describe a mode of programming where you describe what you want, accept what the AI generates, and mostly don’t look too closely at the internals. You’re riding the AI. Which is fun, and often surprisingly effective, until it isn’t.
The problem with “vibe coding” isn’t that it’s wrong. It’s that it tells the wrong story. It frames human-AI programming as trust and surrender: you bring the vibes, the AI brings the code. The human’s job is to stay out of the way.
Centaur Programming tells a different story. The human isn’t a passenger. The human is the strategic half of a partnership — setting direction, catching errors, knowing when the AI’s confident stride is heading off a cliff. The AI isn’t a magic box you prompt and hope. It’s the tactical engine that can search deeper than any human, faster than any human, and still occasionally hallucinate an entire API that doesn’t exist.
The centaur paradox applies directly. The programmer who knows too much about how code should be written will sometimes override the AI when they shouldn’t — adding unnecessary abstractions, rejecting idiomatic generated code because it doesn’t match their mental model. Meanwhile the programmer who has learned to direct and verify — who asks “does this actually work?” rather than “would I have written it this way?” — wins. Not because their programming skill became irrelevant, but because it got redirected.
What does Centaur Programming look like in practice?
- Writing a precise prompt and reading the output skeptically
- Running the tests, not just accepting the code because it looks plausible
- Knowing which parts of the problem are too subtle to delegate, and which are boilerplate the AI will handle better than you anyway
- Understanding what the AI generated well enough to maintain it
That last point matters more as AI-generated codebases grow. Readability is the new writability. The centaur that can’t read the code its AI half generates is not a centaur — it’s a rider who dropped the reins.
“Vibe coding” is a great description of the experience of using a good AI coding tool for the first time. It’s a terrible model for the skill that separates the programmers who will thrive in this new era from those who won’t. The best Centaur Chess players aren’t the ones who vibe with their engine. They’re the ones who understand when to trust it, when to push back, and when to take the reins entirely.
The centaur was never just a horse with a human on top. It was a single organism — stronger for the fusion, not despite it.