- 2.1. Chapter 1: Clean Code
- 2.2. Chapter 2: Meaningful Names
- 2.3. Chapter 3: Functions
- 2.3.1. Small!
- 2.3.2. One Level of Abstraction per Function
- 2.3.3. Switch Statements
- 2.3.4. Use Descriptive Names
- 2.3.5. Function Arguments
- 2.3.6. Have No Side Effects
- 2.3.7. Error Handling
- 2.3.8. How Do You Write Functions Like This?
- 2.4. Chapter 4: Comments
- 2.5. Chapter 5: Formatting
- 2.6. Chapter 6: Objects and Data Structures
- 2.7. Chapter 7: Error Handling
2.8. Chapter 8: Boundaries
- 2.9. Chapter 9: Unit Tests
- 2.10. Chapter 10: Classes
- 2.11. Chapter 11: Systems
- 2.12. Chapter 12: Emergence
- 2.13. Chapter 13: Concurrency
- 2.14. Chapter 14: Successive Refinement
2.15. Chapter 15: JUnit Internals
2.16. Chapter 16: Refactoring SerialDate