A Philosophy of Software Design
Author: John Ousterhout
Contents
- Introduction (It’s All About Complexity)
- The Nature of Complexity
- Working Code Isn’t Enough
- Modules Should Be Deep
- Information Hiding (and Leakage)
- General-Purpose Modules are Deeper
- Different Layer, Different Abstraction
- Pull Complexity Downwards
- Better Together Or Better Apart?
- Define Errors Out Of Existence
- Design it Twice
- Why Write Comments? The Four Excuses
- Comments Should Describe Things that Aren’t Obvious from the Code
- Choosing Names
- Write The Comments First
- Modify Existing Code
- Consistency
- Code Should be Obvious
- Sofware Trends
- Designing for Performance
- Conclusion
- Summary of Design Principles
- 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:
- CS 190: Software Design Studio (Winter 2021)
- On the criteria to be used in decomposing systems into modules - Summary
- On the criteria to be used in decomposing systems into modules - Paper
Introduction (It’s All About Complexity)
Definitions:
Summary:
Notes:
Resources: