1. Introduction
  2. Chapter 1: Clean Code
  3. Chapter 2: Meaningful Names
  4. Chapter 3: Functions
    1. Small!
    2. One Level of Abstraction per Function
    3. Switch Statements
    4. Use Descriptive Names
    5. Function Arguments
    6. Have No Side Effects
    7. Error Handling
    8. How Do You Write Functions Like This?
  5. Chapter 4: Comments
  6. Chapter 5: Formatting
  7. Chapter 6: Objects and Data Structures
  8. Chapter 7: Error Handling
  9. Chapter 8: Boundaries
  10. Chapter 9: Unit Tests
  11. [DRAFT] Chapter 10: Classes
  12. Chapter 11: Systems
  13. Chapter 12: Emergence
  14. Chapter 13: Concurrency
  15. [DRAFT] Chapter 14: Successive Refinement
  16. Chapter 15: JUnit Internals
  17. Chapter 16: Refactoring SerialDate
  18. Drafts