A Philosophy of Software Design
John Ousterhout presents software design as the ongoing management of complexity through deep modules, information hiding, general-purpose interfaces, deliberate error handling, strategic investment, and clear documentation.
9 sections ยท 25 lessons
Course outline
Complexity Fundamentals
- Sources of Complexity
- Complexity Symptoms
- Strategic Programming
Module Design
- Deep Modules
- General-Purpose Modules
- Different Abstractions
- Pull Complexity Down
- Unix I/O Design
Information Hiding
- Hiding Design Decisions
- Combine or Separate
- Prevent Information Leakage
Error Handling
- Eliminate Errors
Design Process
- Design Twice
- Design Through Modification
- Focus on Important Decisions
- Red Flags
Documentation
- Why Comments Matter
- Write Better Comments
- Choose Good Names
- Comments First Design
Code Clarity
- Consistency
- Obvious Code
Industry Practices
- Evaluate Popular Practices
- Performance vs Design
Investment Mindset
- Complexity Investment