Name
A Philosophy of Software Design
Author
John Ousterhout
Date Published
2018-04-10
Date Read
2024-12-12
Bookshelves
Have Read
Genres
Computers
Software
Summary of design principles
  1. Complexity is incremental; you have to sweat the small stuff (see p. 11)
  2. Working code isn’t enough (see p. 14).
  3. Make continual small investments to improve the system design (see p. 15).
  4. Modules should be deep (see p. 23).
  5. Interfaces should be designed to make the most common usage as simple as possible (see p.27).
  6. It’s more important for a module to have a simple interface than a simple implementation (see pp. 61, 74).
  7. General-purpose modules are deeper (see p. 39).
  8. Separate general-purpose and special purpose code (see pp. 45, 68).
  9. Different layers should have different abstractions (see p. 51).
  10. Pull complexity downward (see p. 61).
  11. Define errors out of existence (see p. 81).
  12. Design it twice (see p. 91).
  13. Comments should describe things that are not obvious from the code (see p. 101).
  14. Software should be designed for ease of reading, not ease of writing (see p. 151).
  15. The increments of software development should be abstractions, not features (see p. 156).
  16. Separate what matters from what doesn’t matter and emphasize the things that matter (see p. 171).
Summary of red flags