Grady Booch recently reminded us of Edsger W. Dijkstra’s essay EWD 667. It raises a question that feels especially relevant now: if we can tell an AI assistant what we want in plain English, will we eventually stop using programming languages?
Suppose I ask an AI assistant to add a discount to an order:
Give returning customers a 10% discount on orders over €100.
It can write the C# code in seconds. But several questions remain. Does “over €100” mean before or after tax? Does the discount apply to shipping? Who counts as a returning customer?
The assistant has to choose an interpretation. So would a developer. The difference is that an assistant can produce a complete implementation before anyone notices that a choice was made.
What Code Makes Visible
The discount rule might eventually become a method with explicit inputs, a defined calculation, and tests for the boundary cases. Code does not guarantee that we chose the right rule. It does, however, make our chosen rule inspectable.
For example, a condition such as order.Total > 100 forces us to ask what Total contains. A test for an order worth exactly €100 forces us to decide whether “over” includes the boundary. Neither question disappears because an AI assistant wrote the method.
This is how I understand Dijkstra’s point about formal notation. Its value is not that symbols automatically produce correct answers. Writing a rule precisely exposes decisions that an informal description can leave hidden.
Natural language is still useful. It lets us describe a goal, discuss alternatives, and tell an assistant what to try. I expect to do more programming through conversations like that. But the result needs a form in which its behaviour can be examined and checked. Today that usually means code and tests. In the future, some of those checks might take other forms.
So I can imagine writing less code by hand. I have a harder time imagining software development without precise rules. Someone still has to decide what happens to that €100 order.