Dijkstra: Natural language programming is a fool's errand

The foolishness of "natural language programming" (1978)

In this 1978 note (EWD 667), Edsger Dijkstra argues that making machines understand our native tongues would not simplify programming but make it harder. Formal symbolism, he contends, is not a burden but a privilege: its few simple manipulation rules rule out the nonsense that everyday language almost inevitably invites. He points to Greek mathematics, Moslem algebra, and medieval scholasticism as cautionary tales, and predicts that machines programmed in natural language would be as damned difficult to build as to use.

When all is said and told, the "naturalness" with which we use our native tongues boils down to the ease with which we can use them for making statements the nonsense of which is not obvious.
  1. tempodox

    Nature mints new fools every single day and they all know better than to be informed by past mistakes or — god forbid — anyone using their brains.

  2. benrutter

    I think this essay has aged pretty well and remains pretty spot on.

    Some people will push back that agent development is "natural language programming" but I don't think that's right. I think in that case the agent is the one programming, and the programming still always happens in a deterministic language like Rust/Python/Typescript/etc. Maybe that'll change, but to me at least the other way would be a disaster.

    The best exception I know of though, is definitely the Inform 7 language which is for writing text adventures[0]. It has a lot of fans, and I've never gone deep with it, but seems to do a pretty elegant job or marrying up natural language and programming together in a unique way.

    Either way, definitely a must-check-out for any language-geeks interested in natural language programming.

    [0] https://ganelson.github.io/inform-website/

  3. nickm12

    I send this article to everyone who tells me how English is now a high-level programming language, the next level of abstraction up the chain from machine language to <their favorite language>. This analogy tends to be followed by "Just like most programmers never look at assembly code, looking at higher-level source code is going to become something only a few people do".

    Dijkstra's arguments tend not to change their minds. I think the analogy takes hold because there is a kernel of truth in it. AI models now give us the magical ability to program in natural language, but the implication that an AI model is a form of compiler is deeply flawed. AI models don't replace compilers, they replace software developers. The reason software developers rarely look at assembly code is that compilers (and emulators and VMs) are able to precisely preserve the semantics of the original program.

    A natural language spec is not a program, and there are many possible programs that can meet the spec. Software engineers and AI models turn specs into code, but the code is not the spec I think the analogy clouds our thinking about the value of programming languages as a tool for formally describing what the computer should do and enforcing properties of the program that should not be left to either humans or AI models to uphold.

  4. froh

    I think the difference is between communicating to a purely mechanical being versus communicating to an intelligent entity: unlike programs, which are purely formal languages, we write textbooks and papers in a mix of human language and formal language. often we introduce "just formal enough" notations. and the intelligent reader will read in-between, inter legere literally means just that: reading in between. filling the gaps, connecting the dots.

    and in practice I find it _very_ effective to express key ideas with some formal language where applicable. a little ebnf here, some snippets of python or prolog there or other languages there. and I find llms wonderful at filling in the dots and, and that's the topic here, to translate our semi formal conversation into rigorous, formal language.

    and I dare one step further: I also find llms useful in formulating and refining technical proposals, for human peer review and llm driven implementation, and of course these proposals mix natural language prose with semi-formal and formal detail. think PEP-12 and PEP-1 style. and these then get work packages which each loop in a spec as in sdd.

    seems to work just fine so far :-)

  5. uriegas

    I've had the same view since coding agents appeared. LLMs are good for summarizing, thus I tend to use them to understand code. However, the more I understand a code base the more I tend to be more picky with the agent. While the less I know about the code base, the more open I am to let it do its thing.

    I've realized that the agent doesn't write 'good' code, instead my vague understanding of what I expect makes me think it does. When I look at the AI code, I see that there are more nuances and decisions that needed to be taken before writing the code. One would say that a spec would suffice, but then I remember TLA+, developed by Leslie Lamport to help developers think critically about their programs/algorithms. Sitting down and formally writing what I want to do helps me better understand the problem and come up with a real -not vaguely defined- solution.

  6. wawhal

    This feels so incredibly relevant for today.

    This also makes me think about the cognitive delegation problem - structured interfaces in machines and structured methodologies in mathematics helped humans build structured thoughts to express abstract intuition. With machines starting to speak natural language, it's probably not too far fetched to say that humans will eventually stop organising their thoughts, which will turn their thoughts into a kind of brain fog.

  7. GianFabien

    Natural language is full of nuances and implicit cultural and domain specific connotations. LLMs work because they have been trained on massive corpus of materials that encode some (but not all) of those hidden meanings.

    With specification driven development, the prompts need to be very detailed in order to produce exactly what is required.

  8. piro0919

    I built a music player by talking to Claude Code in Japanese, and I can barely remember a time when words failed and I had to fall back to code. For example, I asked it to "keep the sidebar's shape, but add margin on the top, left and bottom so it looks like it's floating a bit — you know what I mean?" and it got it right on the first try.

More from this day

2026-10-23