Programming Bottom-Up
Paul Graham’s essay Programming Bottom-Up argues that experienced Lisp programmers build the language upward toward the problem.
The Fundamental Principle
While top-down design breaks problems into subroutines, bottom-up design lets programmers “write operators” as needs emerge. Language and program evolve together.
Not Just Reordering
Bottom-up design produces “a larger language with more abstract operators, and a smaller program written in it. Instead of a lintel, you’ll get an arch.”
Four Advantages
- Efficiency: Smaller, more agile programs with fewer error connection points
- Reusability: Utilities become assets for future projects
- Readability: General-purpose abstractions are easier to understand
- Clarity: Identifying recurring patterns reveals simpler design possibilities
Why Lisp
Lisp enables broader language augmentation than other languages, making bottom-up design central to Lisp programming culture.
My Takeaway
The best programs transform the language to match the problem domain. This requires thinking in two directions at once.
Do you use bottom-up design in your work? I’d love to hear at persdre@gmail.com.