The work is divided into three main parts, each reflecting the unique insights of its respective author.
1. Edsger W. Dijkstra: Notes on Structured Programming
This section is a profound reflection on the intellectual demands of programming and emphasizes rigorous reasoning, program correctness, and composability. Dijkstra argues that programmers must actively control complexity, particularly as programs scale in size. He introduces structured control flow constructs (e.g., sequences, conditionals, and loops) as essential tools to produce understandable and correct programs. A key contribution is the idea that code should be written in a way that makes correctness proofs possible, supported by examples like invariant maintenance and the use of mathematical induction. Dijkstra's narrative urges programmers to treat program construction as a disciplined mental activity, stressing clarity, reliability, and simplicity.
2. Tony Hoare: Notes on Data Structuring
Hoare shifts the focus to data structures and abstraction. He advocates for the use of abstract data types—sets, sequences, mappings—as aids in problem-solving. He explores various composite data structures such as arrays, unions, sequences, and recursive types, stressing that decisions about how to represent data should be postponed until necessary. The chapter also introduces criteria for selecting data representations based on problem requirements. His method promotes the separation of the logical view of data from its physical implementation, encouraging clean, modular thinking.
3. Ole-Johan Dahl and Tony Hoare: Hierarchical Program Structures
This part extends structured programming to object-oriented concepts. It discusses how programs can be built from hierarchies of modules or components—what would later influence object-oriented programming. Topics include object classes, coroutines, list structures, and program composition. The text demonstrates how top-down and bottom-up programming approaches can coexist, providing practical examples and theoretical insights into modularity and encapsulation. The goal is to manage complexity by decomposing programs into layers of abstraction, with clean interfaces and predictable behavior.
Summary
Together, the three parts present a cohesive philosophy: structured programming is not just about better syntax or tools, but about a disciplined approach to organizing computation and data. The book introduced core ideas—like modularity, abstraction, and verifiable correctness—that became foundational to modern software engineering. Even decades later, its influence persists in both academic thought and practical development methodologies.
“In the development of our understanding of complex phenomena, the most powerful tool available to the human intellect is abstraction.”
Tony Hoare (verified)
• Title: Structured Programming
• Author: Dahl, O., Dijkstra, E., and Hoare, C.A.R.
• Type: Book
• Publisher: Academic Press
• Publication time: June, 1972
• Publication place: London and New York
• ISBN: 0122005503
• Link: https://dl.acm.org/doi/pdf/10.5555/1243380