Separation of Concerns¶
Different aspects of a problem should be addressed in distinct sections of code so that each section can be understood and modified independently
Tension Addressed¶
Simplicity vs. Capability
Recognizable As¶
Layered architectures; aspect separation (logging, security, business logic); MV* patterns; separation of policy from mechanism; clear boundaries between "what" and "how"
Canonical Sources¶
Dijkstra, "On the Role of Scientific Thought" (1974); Parnas, "On the Criteria for Decomposing Systems into Modules" (1972)
Transfers To¶
Writing (section organization), Government (separation of powers), Manufacturing (assembly lines), Hardware (OSI model)
The key insight is that human cognitive limits require decomposition - we cannot hold entire systems in mind. Concerns provide natural decomposition boundaries.