1. Managing complexity
“The technique of mastering complexity has been known since ancient times: Divide et impera (Divide and Rule).” —Dijkstra, 1965
“…as soon as the programmer only needs to consider intellectually manageable programs, the alternatives he is choosing from are much, much easier to cope with.” —Dijkstra, 1972
The complexity of the software systems we are asked to develop is increasing, yet there are basic limits upon our ability to cope with this complexity. How then do we resolve this predicament?” —Booch, 1991