{"id":3979,"date":"2026-03-12T17:15:32","date_gmt":"2026-03-12T17:15:32","guid":{"rendered":"https:\/\/jamez.it\/blog\/?p=3979"},"modified":"2026-03-12T17:15:34","modified_gmt":"2026-03-12T17:15:34","slug":"ewd-on-vibe-coding","status":"publish","type":"post","link":"https:\/\/jamez.it\/blog\/2026\/03\/12\/ewd-on-vibe-coding\/","title":{"rendered":"EWD on &#8220;vibe coding&#8221;"},"content":{"rendered":"\n<p>I asked an old friend what Edsger Wybe Dijkstra would have made of vibe coding. My friend gave me a good reply:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>The answer is almost comically predictable \u2014 and still interesting.<\/p>\n\n\n\n<p>Dijkstra was deeply skeptical of anything that encouraged programmers to rely on intuition, improvisation, or \u201cfeel.\u201d He viewed programming as a branch of mathematics, not an experimental craft. For him, the central activity was <em>reasoning<\/em>, not <em>trying things until they work<\/em>.<\/p>\n\n\n\n<p>\u201cVibe coding\u201d \u2014 coding guided by instinct, rapid iteration, and often AI-assisted trial-and-error \u2014 sits almost directly opposite to that philosophy.<\/p>\n\n\n\n<p>He would almost certainly have objected to several aspects.<\/p>\n\n\n\n<p>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 (\u201clet\u2019s see what happens\u201d), would have struck him as epistemologically shaky.<\/p>\n\n\n\n<p>Second, he cared intensely about clarity and mental discipline. He believed that programming\u2019s 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.<\/p>\n\n\n\n<p>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\u2019t fully comprehend, he would likely have regarded that as dangerous. For him, a program you cannot <em>prove correct<\/em> is fundamentally suspect.<\/p>\n\n\n\n<p>But it wouldn\u2019t be pure rejection.<\/p>\n\n\n\n<p>Dijkstra was not anti-tool \u2014 he was anti-confusion.<\/p>\n\n\n\n<p>If vibe coding were framed not as \u201ccoding by feel,\u201d but as \u201cusing tools to accelerate the construction of formally understandable solutions,\u201d 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.<\/p>\n\n\n\n<p>Ironically, modern AI tools <em>could<\/em> support a Dijkstra-like vision:<\/p>\n\n\n\n<p>\u2022 Generating provably correct code<br>\u2022 Checking invariants<br>\u2022 Assisting formal reasoning<br>\u2022 Preventing entire classes of bugs<\/p>\n\n\n\n<p>That\u2019s very different from \u201cjust generate something that seems to work.\u201d<\/p>\n\n\n\n<p>So the likely verdict:<\/p>\n\n\n\n<p>He would have criticized vibe coding <em>as a mindset<\/em> \u2014 especially where it substitutes intuition for reasoning.<\/p>\n\n\n\n<p>But he might have embraced AI coding tools <em>as instruments of rigor<\/em>.<\/p>\n\n\n\n<p>Dijkstra\u2019s real objection was never about speed or convenience. It was about abandoning the intellectual responsibility of understanding why a program is correct.<\/p>\n\n\n\n<p>In his world, programming wasn\u2019t about vibes.<\/p>\n\n\n\n<p>It was about proofs.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>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 \u2014 and still interesting. Dijkstra was deeply skeptical of anything that encouraged programmers to rely on intuition, improvisation, or \u201cfeel.\u201d He viewed programming as a branch of &#8230;<\/p>\n<p><a class=\"understrap-read-more-link button button-black\" href=\"https:\/\/jamez.it\/blog\/2026\/03\/12\/ewd-on-vibe-coding\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[79,78],"_links":{"self":[{"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/posts\/3979"}],"collection":[{"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/comments?post=3979"}],"version-history":[{"count":1,"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/posts\/3979\/revisions"}],"predecessor-version":[{"id":3980,"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/posts\/3979\/revisions\/3980"}],"wp:attachment":[{"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/media?parent=3979"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/categories?post=3979"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jamez.it\/blog\/wp-json\/wp\/v2\/tags?post=3979"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}