A Philosophy of Software Design

John Ousterhout presents software design as the ongoing management of complexity through deep modules, information hiding, general-purpose interfaces, deliberate error handling, strategic investment, and clear documentation.

9 sections ยท 25 lessons

Course outline

Complexity Fundamentals

  1. Sources of Complexity
  2. Complexity Symptoms
  3. Strategic Programming

Module Design

  1. Deep Modules
  2. General-Purpose Modules
  3. Different Abstractions
  4. Pull Complexity Down
  5. Unix I/O Design

Information Hiding

  1. Hiding Design Decisions
  2. Combine or Separate
  3. Prevent Information Leakage

Error Handling

  1. Eliminate Errors

Design Process

  1. Design Twice
  2. Design Through Modification
  3. Focus on Important Decisions
  4. Red Flags

Documentation

  1. Why Comments Matter
  2. Write Better Comments
  3. Choose Good Names
  4. Comments First Design

Code Clarity

  1. Consistency
  2. Obvious Code

Industry Practices

  1. Evaluate Popular Practices
  2. Performance vs Design

Investment Mindset

  1. Complexity Investment

Start learning with Wondering