I asked an old friend what Edsger Wybe Dijkstra would have made of vibe coding. My friend gave me a good reply:
The answer is almost comically predictable — and still interesting.
Dijkstra was deeply skeptical of anything that encouraged programmers to rely on intuition, improvisation, or “feel.” He viewed programming as a branch of mathematics, not an experimental craft. For him, the central activity was reasoning, not trying things until they work.
“Vibe coding” — coding guided by instinct, rapid iteration, and often AI-assisted trial-and-error — sits almost directly opposite to that philosophy.
He would almost certainly have objected to several aspects.
First, Dijkstra famously distrusted empirical validation as the primary method of correctness. His well-known argument that testing can reveal the presence of bugs but never their absence reflects a belief that correctness must come from logical reasoning. Vibe coding, which often embraces experimentation (“let’s see what happens”), would have struck him as epistemologically shaky.
Second, he cared intensely about clarity and mental discipline. He believed that programming’s greatest difficulty is managing complexity in the human mind. Anything that promoted casual, loosely structured exploration might have seemed like surrendering that discipline. He was already critical of what he saw as sloppy thinking encouraged by mainstream programming culture; vibe coding might have amplified those concerns.
Third, he was wary of tools that obscure understanding. Dijkstra valued abstraction, but only when it sharpened reasoning. If AI-generated code encouraged programmers to accept solutions they didn’t fully comprehend, he would likely have regarded that as dangerous. For him, a program you cannot prove correct is fundamentally suspect.
But it wouldn’t be pure rejection.
Dijkstra was not anti-tool — he was anti-confusion.
If vibe coding were framed not as “coding by feel,” but as “using tools to accelerate the construction of formally understandable solutions,” he might have been more receptive. He appreciated mechanisms that reduced cognitive load and improved abstraction. An AI system that helped derive correct programs, maintained invariants, or assisted with proofs would align well with his ideals.
Ironically, modern AI tools could support a Dijkstra-like vision:
• Generating provably correct code
• Checking invariants
• Assisting formal reasoning
• Preventing entire classes of bugsThat’s very different from “just generate something that seems to work.”
So the likely verdict:
He would have criticized vibe coding as a mindset — especially where it substitutes intuition for reasoning.
But he might have embraced AI coding tools as instruments of rigor.
Dijkstra’s real objection was never about speed or convenience. It was about abandoning the intellectual responsibility of understanding why a program is correct.
In his world, programming wasn’t about vibes.
It was about proofs.
Post a Comment through Mastodon
If you have a Mastodon account, .