One of Dijkstra's main questions was:
"Can the programmer arrange his activity in such a way that his growing product remains firmly in his intellectual grip, that he continues to understand what he is doing?" [EWD303]
To write structured programs, Dijkstra proposed five well-known techniques:
- operational abstraction
- representational abstraction
- configurational abstraction (cf. layered software)
- textual encapsulation (cf. modularity)
The latter two are discussed here.