Locke, Abstraction, and the Programmer’s Toolbox
Chapter 1 of the widely adopted Structure and Interpretation of Computer Programs by Abelson, Sussman, and Sussman opens with a passage from John Locke’s 1689 Essay Concerning Human Understanding1, highlighting three fundamental acts of the mind: combining ideas to form more complex ones, identifying relations between them, and abstraction, the act of separating ideas from their particular context to form general concepts:
The acts of the mind, wherein it exerts its power over simple ideas, are chiefly these three: Combining several simple ideas into one compound one, and thus all complex ideas are made. The second is bringing two ideas, whether simple or complex, together, and setting them by one another so as to take a view of them at once, without uniting them into one, by which it gets all its ideas of relations. The third is separating them from all other ideas that accompany them in their real existence: this is called abstraction, and thus all its general ideas are made.
Composition, relation, and abstraction are indeed central to the craft of programming. A skilled programmer recognizes relationships between subproblems, composes solutions into larger structures, and abstracts those solutions into reusable forms. Every successful abstraction becomes a new building block for the next layer of complexity, enabling systems to grow while freeing the developer from rethinking solved details. Composition and relation matter, but abstraction is the engine that lifts everything one level higher.
John Locke. An Essay Concerning Human Understanding, 1689.↩︎