The Spectrum Dispatch News

technology

Dijkstra Argues Against Natural Language Programming (1978)

In a foundational critique, computer scientist Edsger Dijkstra contends that designing machines to accept instructions in native language would increase complexity without

Dijkstra Argues Against Natural Language Programming (1978)

In a 1978 essay, computer scientist Edsger Dijkstra argues against the growing proposal to design computing machines that accept instructions in natural human language, rather than formal programming languages.

Dijkstra Argues Against Natural Language Programming (1978)

Dijkstra acknowledges the historical frustration with programming’s requirement for precision and formal symbolism. Since early computing, practitioners have wished machines could understand instructions with the flexibility of natural speech rather than the strict obedience demanded by machine code and formal languages. High-level programming languages emerged partly to address this desire, offering some protection against errors by generating error messages instead of silently producing wrong results.

However, Dijkstra challenges the underlying assumption that shifting the burden of precision from programmer to machine would simplify human work. He argues that interface design is not a fixed division of labor. According to his analysis, the work involved in communicating across an interface must be added to both sides, and changing an interface can easily increase the total amount of work required—sometimes drastically. This observation leads him to favor “narrow interfaces” that minimize communication overhead.

To support his position, Dijkstra draws on the history of mathematics. He notes that Greek mathematics stalled because it remained primarily verbal and pictorial. Islamic algebra, after attempting symbolism, declined when it returned to rhetorical style. Modern mathematics and science advanced only when Western Europe adopted carefully designed formal symbolisms from figures like Vieta, Descartes, Leibniz, and Boole. These formal systems, Dijkstra argues, require only simple manipulation rules and effectively eliminate nonsense that natural language almost inevitably permits.

Dijkstra reframes the use of formal symbols not as a burden but as a privilege—one that allows modern students to accomplish what required genius in earlier eras. He criticizes an author who, in 1977, claimed to avoid standard logical symbols “for the sake of clarity,” viewing this as a fundamental misunderstanding of formal language’s purpose.

Dijkstra concludes with a thought experiment: if native language had been the only interface for computers from the start, computer science would likely consist mainly of the difficult work of bootstrapping from that verbal foundation to a sufficiently formal system. He speculates this process would require immense intellectual effort and, given human history, possibly thousands of years to achieve adequately.

Key facts

  • Dijkstra argues that natural language programming interfaces would not simplify programming but would increase complexity on both sides of the human-machine divide.
  • He contends that formal symbolism enables mathematical and computational progress, pointing to the history of mathematics as evidence.
  • Dijkstra emphasizes that formal systems’ virtue lies in their restrictive manipulation rules, which prevent the logical nonsense that natural language easily permits.
  • He notes that the work of communication across an interface must be added to labor calculations, contradicting the assumption that shifting burden to machines reduces total work.

Sources

← All posts