Edsger W. Dijkstra’s EWD 667 defends formal notation as a tool for thinking. His argument starts with programming languages and reaches a broader design problem: a friendlier interface can increase the total work required to use a system.
- Errors caught early are progress. Higher-level languages turned some clerical mistakes into error messages. Dijkstra notes that users sometimes resented those messages more than silently wrong answers.
- An interface adds work of its own. Communication and coordination sit on top of the underlying task. Moving more work to the machine can still leave the human with more work too.
- Narrow interfaces constrain confusion. A small, well-defined set of rules makes legitimate operations easier to check and meaningless statements harder to express.
- Notation extends what people can do. Dijkstra treats symbolic mathematics as an example: a designed language makes difficult reasoning teachable and repeatable.
For API and configuration design, familiarity is a poor substitute for clear semantics. A larger vocabulary can leave users guessing which interpretations the system accepts. Explicit types, constrained inputs and actionable errors can reduce that guessing.
The essay’s sweeping historical claims deserve skepticism. Its interface argument stands on firmer ground: judge an abstraction by the reasoning and coordination it saves across the whole system.