Notes on Structured Programming
By Edsger Dijkstra · 1969
An account of how structured program design, mathematical reasoning and progressive refinement can make software easier to understand, verify and modify.
Dijkstra examines how to build programs that remain understandable and reliable as they grow. He argues that testing alone cannot establish correctness and that program structure should support mathematical reasoning. The starting point is the limited human capacity to follow complex computations.
Using worked examples, including a program for generating prime numbers, he develops solutions through successive refinements. Abstraction allows programmers to separate what an operation must achieve from how it is implemented. He explains how sequences, conditional choices and loops can make the relationship between program text and execution easier to understand.
The notes also consider families of related programs, data representation and trade-offs between storage and speed. Dijkstra argues that structure should accommodate future changes, not merely satisfy an immediate task. Efficiency remains important, but improvements should preserve clarity and manageability. Programming is presented as the disciplined organisation of complexity.