by godelski | 2026-02-21 00:25:01+00:00
Let's just look at Dijkstra's On the Foolishness of "Natural Language Programming". It really does a good job at explaining why natural language programming (and thus, Vibe Coding) is a dead end. It serves as a good reminder that we developed the languages of Math and Programming for a reason. The pedantic nature is a feature, not a flaw. It is because in programming (and math) we are dealing with high levels of abstraction constantly and thus ambiguity compounds. Isn't this something we learn early on as programmers? That a computer does exactly what you tell it to, not what you intend to tell it to? Think about how that phrase extends when we incorporate LLM Coding Agents.

| The virtue of formal texts is that their manipulations, in order to be legitimate, need to satisfy only a few simple rules; they are, when you come to think of it, an amazingly effective tool for ruling out all sorts of nonsense that, when we use our native tongues, are almost impossible to avoid.
- Dijkstra

All of you have experienced the ambiguity and annoyances of natural language. Have you ever:

- Had a boss give you confusing instructions?
- Argued with someone only to find you agree?
- Talked with someone and one of you doesn't actually understand the other?
- Talked with someone and the other person seems batshit insane but they also seem to have avoided a mental asylum?
- Use different words to describe the same thing?
- When standing next to someone and looking at the same thing?
- Adapted your message so you "talk to your audience"?
- Ever read/wrote something on the internet? (where "everyone" is the audience)

Congrats, you have experienced the frustrations and limitations of natural language. Natural language is incredibly powerful and the ambiguity is a feature and a flaw, just like how in formal languages the precision is both a feature and a flaw. I mean it can take an incredible amount of work to say even very simple and obvious things with formal languages[1], but the ambiguity disappears[2].

Vibe Coding has its uses and I'm sure that'll expand, but the idea of it replacing domain experts is outright laughable. You can't get it to resolve ambiguity if you aren't aware of the ambiguity. If you've ever argued with the LLM take a step back and ask yourself, is there ambiguity? It'll help you resolve the problem and make you recognize the limits. I mean just look at the legal system, that is probably one of the most serious efforts to create formalization in natural language and we still need lawyers and judges to sit around and argue all day about all the ambiguity that remains.

I seriously can't comprehend how on a site who's primary users are programmers this is an argument. If we somehow missed this in our education (formal or self) then how do we not intuit it from our everyday interactions?

[0] https://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667...

[1] https://en.wikipedia.org/wiki/Principia_Mathematica

[2] Most programming languages are some hybrid variant. e.g. Python uses duck typing: if it looks like a float, operates like a float, and works as a float, then it is probably a float. Or another example even is C, what used to be called a "high level programming language" (so is Python a celestial language?). Give up some precision/lack of ambiguity for ease.