Introduction
This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first introduces the fundamental problem in software design, which is managing complexity. It then discusses philosophical issues about how to approach the software design process, and it presents a collection of design principles to apply during software design. The book also introduces a set of red flags that identify design problems. You can apply the ideas in this book to minimize the complexity of large software systems, so that you can write software more quickly.
Contents
- Preface
- Chapter 1 Introduction
- Chapter 2 The Nature of Complexity
- Chapter 3 Working Code Isn’t Enough
- Chapter 4 Modules Should Be Deep
- Chapter 5 Information Hiding (and Leakage)
- Chapter 6 General-Purpose Modules are Deeper
- Chapter 7 Different Layer, Different Abstraction
- Chapter 8 Pull Complexity Downwards
- Chapter 9 Better Together Or Better Apart?
- Chapter 10 Define Errors Out Of Existence
- Chapter 11 Design it Twice
- Chapter 12 Why Write Comments? The Four Excuses
- Chapter 13 Comments Should Describe Things that Aren’t Obvious from the Code
- Chapter 14 Choosing Names
- Chapter 15 Write The Comments First
- Chapter 16 Modifying Existing Code
- Chapter 17 Consistency
- Chapter 18 Code Should be Obvious
- Chapter 19 Software Trends
- Chapter 20 Designing for Performance
- Chapter 21 Conclusion
- Summary