Modularity reduces complexity by isolating components and allowing for reuse. It is difficult to achieve true modularity due to dependencies between modules, lack of clear specifications, and assumptions that will break over time. The document outlines the history of modularity in programming languages from the 1960s to present day, and recommends using functional programming techniques like typeclasses, effects, and wiring libraries to help achieve modularity. It acknowledges modularity is complicated and there are no silver bullets, but emphasizes controlling dependencies, separating building from use, and using the type system to help manage complexity.
11. “Any organization that
designs a system will
produce a design whose
structure is a copy of the
organization's
communication structure.”
Conway’s law
53. Why is it so hard?
Denial
The butterfly effect Lack of specifications
A modularity language
Extending is hard
We keep changing the techno!
Mutable state, still
Data is infectious
Assumptions will break!
55. A short historyA short, incomplete historyA short, incomplete and imprecise history
1958
Lisp
1967
Simula
1960
ALGOL
1978
ADA
1983
C++
1977
Modula
1995
Java/Python/Ruby
1984
SML
1998
Haskell
57. Class Glyph;
Virtual: Procedure print Is Procedure print;;
Begin
End;
Glyph Class Char (c);
Character c;
Begin
Procedure print;
OutChar(c);
End;
Glyph Class Line (elements);
Ref (Glyph) Array elements;
Begin
Procedure print;
Begin
Integer i;
For i:= 1 Step 1 Until UpperBound (elements, 1)
Do elements (i).print;
OutImage;
End;
End;
End;
1967
Objects