A Philosophy of Software Design

Author: John Ousterhout


Contents

  1. Introduction (It’s All About Complexity)
  2. The Nature of Complexity
  3. Working Code Isn’t Enough
  4. Modules Should Be Deep
  5. Information Hiding (and Leakage)
  6. General-Purpose Modules are Deeper
  7. Different Layer, Different Abstraction
  8. Pull Complexity Downwards
  9. Better Together Or Better Apart?
  10. Define Errors Out Of Existence
  11. Design it Twice
  12. Why Write Comments? The Four Excuses
  13. Comments Should Describe Things that Aren’t Obvious from the Code
  14. Choosing Names
  15. Write The Comments First
  16. Modify Existing Code
  17. Consistency
  18. Code Should be Obvious
  19. Sofware Trends
  20. Designing for Performance
  21. Conclusion
  22. Summary of Design Principles
  23. Summary of Red Flags

1. Introduction (It’s All About Complexity)

Preface

Definitions:

  • Problem Decomposition: Taking a complex problem and dividing it up into pieces that can be solved independently.

Summary:

  • Problem Decomposition is the most fundamental problem in Computer Science
    • Reducing complexity is the overall goal
    • Central design task that programmers face everyday
    • Separates great programmers from average ones

Notes:

  • Software design principles in this book are fairly high level and border on the philosophical
  • Learn in an iterative process. Learn the principles and work through a series of projects to assimilate and practice them
  • Write code, make mistakes and then see how these mistakes and subsequent fixes relate to the principles
  • While developing a substantial piece of software from scratch
    • Go through extensive code reviews to identify design problems
    • Revise projects to fix the problems

Resources:

Introduction (It’s All About Complexity)

Definitions:

Summary:

Notes:

Resources: