Three Foundational Ideas That Shaped Software Engineering
Description
Alfred North Whitehead once remarked, "Civilization advances by extending the number of important operations which we can perform without thinking about them." This talk explores three foundational research papers in software engineering – each more than half a century old – that have shaped how we design, reason about, and collaborate on large-scale software systems. These works have enabled programmers to operate at higher levels of abstraction, leading to scalable and intelligible software development.
The first paper, by D. L. Parnas (1972), introduced the principle of "information hiding" for decomposing a large scale software project into modules which have an interface that reveal as little as possible about its inner workings. This approach allows for independent evolution of components, improving both maintainability and clarity. Inspired by this idea, B. Liskov and S. Zilles (1974) later formalized the concept of Abstract Data Types (ADTs), enabling programmers to reason about data structures through well-defined operations rather than through a long sequence of low level machine instructions to fetch, update and store smaller units of a data structure. Together, these ideas laid the groundwork for building complex software systems using composable and comprehensible modules.
The second group of papers liberated programmers from the need to consume "spaghetti" code generated by the need to sprinkle "go to" statements in a program code to realise desirable control flow. Böhm and Jacopini (1966) mathematically proved that any computable function can be implemented using just three control structures: sequence, selection (e.g. if … else), and repetition (e.g. for loop). This formal result supported E. W. Dijkstra’s (1968) influential call to abolish "go to statement" from "everything except … plain machine code". Although high-level constructs like loops and conditionals are still compiled to low-level jumps (e.g., JMP), these papers empowered developers to operate at a higher level of abstraction where control flow of a computer program was more intelligible.
The third set of papers were intended to address the challenge of modelling and understanding naturally occurring complex processes. "How complex or simple a structure is depends critically upon the way in which we describe it." wrote H. A. Simon (1962) to make a case for finding the "right representation" to describe complex systems. Simon’s key insight was to view a complex system as a hierarchical structure composed of subsystems (or modules) which interact more internally than externally. Subsystems at higher levels were derived from subsystems operating at lower levels of the hierarchy. To model real-world processes, Dahl and Nygaard (1967) pioneered object-oriented modeling by representing processes as a set of interacting objects – each encapsulating state and behavior—and organizing them hierarchically through inheritance. These insights emphasized modularity, hierarchy, and abstraction as essential tools for managing complexity and continue to underpin modern programming paradigms.
[ References ]
Herbert, Simon. "The architecture of complexity." Proceedings of the American Philosophical Society 106, no. 6 (1962): 467-482.
Simon, Herbert A. “The Architecture of Complexity: Hierarchic Systems”. In The Sciences of the Artificial, 183–216, MIT Press, 2019.
Parnas, David L. “On the Criteria to Be Used in Decomposing Systems into Modules”. In Software fundamentals: collected papers by David L. Parnas, Addison-Wesley, 2001.
Parnas, David L. "On the criteria to be used in decomposing systems into modules." Communications of the ACM 15.12 (1972): 1053-1058.
Dijkstra, Edsger W. "Letters to the editor: go to statement considered harmful." Communications of the ACM 11, no. 3 (1968): 147-148.
Böhm, Corrado, and Giuseppe Jacopini. "Flow diagrams, turing machines and languages with only two formation rules." Communications of the ACM 9, no. 5 (1966): 366-371.
Liskov, Barbara, and Stephen Zilles. "Programming with abstract data types." ACM Sigplan Notices 9, no. 4 (1974): 50-59.
Dahl, O.-J., & Nygaard, K. “Class and subclass declarations.”, Norwegian Computing Center, presented at IFIP Working Conference on Simulation Languages, Oslo, May 1967 . (1967).
Files
adutta-usrse25-talk.pdf
Files
(1.5 MB)
| Name | Size | Download all |
|---|---|---|
|
md5:f749bc7d79495a3c78a637481bccf0af
|
1.0 MB | Download |
|
md5:b69e9e8050cd87fdfc878d748b82e75b
|
403.0 kB | Preview Download |
Additional details
Funding
Dates
- Accepted
-
2025-07-14
- Other
-
2025-10-08Talk at USRSE-25