
“Remembering the genius for some context”
As I was having lunch conversation with my colleagues today, we were gleefully discussing about stalwarts in areas of Computer Science and Physics. A person who can hardly be ignored in the field of Computer Science is the towering figure of Edsger W. Dijkstra.
I now want to focus on the W. (his middle initial) and what would this colossal figure of Computer Science have thought — about the term _Vibe_. Interestingly (perhaps ironically or even unfortunately), the W. in his name — “Wybe” rhymes with “Vibe” as well! 😂
Fiercely opinionated as Prof. Dijkstra was, as can be gleaned from many of his famous EWD¹ papers (well archived by the University of Texas at Austin), my eyes fell on EWD667 — On the foolishness of natural language programming
The Humble Programmer² (his 1972 Turing Award Lecture) had reminded us of three key points (there’s a lot more wisdom in that talk alone. I just arbitrarily picked three):
\[1\] The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague
\[2\] Programming will remain very difficult, because once we have freed ourselves from the circumstantial cumbersomeness, we will find ourselves free to tackle the problems that are now well beyond our programming capacity.
\[3\] His lament — “the tools we are trying to use and the language or notation we are using to express or record our thoughts, are the major factors determining what we can think or express at all”
Talking of Vibe coding…
Now in the era of vibe-coding, what is the relevance of \[2\] and \[3\] -
In EWD667, he mentions “…Programming remained the use of a formal symbolism and, as such, continued to require the care and accuracy required before…”
Also noting (in the context of \[3\]) that “…In order to make machines significantly easier to use, it has been proposed (to try) to design machines that we could instruct in our native tongues. this would, admittedly, make the machines much more complicated, but, it was argued, by letting the machine carry a larger share of the burden, life would become easier for us. _It sounds sensible provided you blame the obligation to use a formal symbolism as the source of your difficulties_. But is the argument valid? I doubt…”
It is worthwhile noting here that OpenAI, Llama, DeepSeek etc. are not built because programming is _difficult_. The purpose is way too larger than that. Be that as it is, his contention has consistently been that “Natural Language Encourages Ambiguity” and “Formalism Enforces Clarity”. There is no argument about this (we keep hearing about hallucination, non-determinism etc. in this context anyways).
Clearly, the perceived ‘naturalness’ of human languages stems from our comfort in making and tolerating errors within them. This ‘naturalness’ is misleading when applied to programming, where errors can have significant consequences. He implores that Formalism has to be appreciated as a privilege (and not as a burden). He underscores that programming is a form of communication that demands exactness, which natural language cannot reliably provide due to its inherent ambiguities (Recall the seminal 1948 work³ of Claude E Shannon — Mathematical theory of Communication).
Dijkstra firmly rejects the notion that programming should be made more like natural language, asserting that such efforts are misguided and counterproductive. This is particularly important. I hear lot of glib talk about “Programming dying with the advent of GenAI” — this is an extremely loaded statement. It may get easier — probably; but dying — hardly!
Finally, Dijkstra calls for programmers to exercise intellectual discipline and embrace the formal methods that facilitate precise and error-free programming, rather than seeking comfort in the familiarity of natural language.
Final thoughts…
While Dijkstra’s strong opinions were from a different era, it behooves us well to be guarded against wishful thinking about GenAI as a silver-bullet for everything. We shouldn’t seek Vibe-coding as the “shortest path” to success (pardon the pun of using Dijkstra’s 1959 epic paper on the Shortest path algorithm)⁴ 😜
References:
- The EWD Archives — https://www.cs.utexas.edu/~EWD/
- The Humble Programmer — https://www.youtube.com/watch?v=9hWv2ECXHng
- A Mathematical Theory of Communication — C. E. Shannon
- A Note on Two Problems in Connexion with Graphs — https://www.cs.yale.edu/homes/lans/readings/routing/dijkstra-routing-1959.pdf
