Nine lines. Fifty-three stops.

The Pragmatic Programmer · 20th Anniversary Edition

Each line is a reading path for a situation you might be in, and each stop is a topic, numbered as in the book. Every topic sits on exactly one line, so no two lines share a station.

  1. Joining a New Team 6 stops · It’s Your Life to Pride and Prejudice

    The people, the unwritten rules, and the history are as unfamiliar as the code.

    1. Topic 1 It’s Your Life
    2. Topic 2 The Cat Ate My Source Code
    3. Topic 4 Stone Soup and Boiled Frogs
    4. Topic 7 Communicate!
    5. Topic 22 Engineering Daybooks
    6. Topic 53 Pride and Prejudice
  2. Working with Uncertainty 6 stops · Tracer Bullets to The Essence of Agility

    A new project, unfamiliar scope, or conflicting descriptions of the same problem.

    1. Topic 12 Tracer Bullets
    2. Topic 13 Prototypes and Post-it Notes
    3. Topic 45 The Requirements Pit
    4. Topic 46 Solving Impossible Puzzles
    5. Topic 47 Working Together
    6. Topic 48 The Essence of Agility
  3. Maintainable Software Systems 7 stops · DRY—The Evils of Duplication to Pragmatic Teams

    A codebase is hard to change, or must not become that way.

    1. Topic 9 DRY—The Evils of Duplication
    2. Topic 10 Orthogonality
    3. Topic 28 Decoupling
    4. Topic 30 Transforming Programming
    5. Topic 40 Refactoring
    6. Topic 41 Test to Code
    7. Topic 49 Pragmatic Teams
  4. Building a Dependable Personal Toolkit 6 stops · The Power of Plain Text to Text Manipulation

    Friction in the daily workflow, or a new environment slowing you down.

    1. Topic 16 The Power of Plain Text
    2. Topic 17 Shell Games
    3. Topic 18 Power Editing
    4. Topic 19 Version Control
    5. Topic 20 Debugging
    6. Topic 21 Text Manipulation
  5. Making Failure Visible and Bounded 7 stops · Design by Contract to Stay Safe Out There

    Reliability, security, resource use, or code that hides invalid states.

    1. Topic 23 Design by Contract
    2. Topic 24 Dead Programs Tell No Lies
    3. Topic 25 Assertive Programming
    4. Topic 26 How to Balance Resources
    5. Topic 27 Don’t Outrun Your Headlights
    6. Topic 42 Property-Based Testing
    7. Topic 43 Stay Safe Out There
  6. Designing Event-Driven and Concurrent Systems 5 stops · Juggling the Real World to Blackboards

    Events, asynchronous work, or shared state make behavior surprising.

    1. Topic 29 Juggling the Real World
    2. Topic 33 Breaking Temporal Coupling
    3. Topic 34 Shared State Is Incorrect State
    4. Topic 35 Actors and Processes
    5. Topic 36 Blackboards
  7. Keeping Design Choices Reversible 6 stops · The Essence of Good Design to Naming Things

    Abstractions, interfaces, configuration, or names that may outlive the task.

    1. Topic 8 The Essence of Good Design
    2. Topic 11 Reversibility
    3. Topic 14 Domain Languages
    4. Topic 31 Inheritance Tax
    5. Topic 32 Configuration
    6. Topic 44 Naming Things
  8. Developing Engineering Judgment 5 stops · Software Entropy to Algorithm Speed

    Something feels wrong, a solution works for unexplained reasons, or a claim needs evidence.

    1. Topic 3 Software Entropy
    2. Topic 6 Your Knowledge Portfolio
    3. Topic 37 Listen to Your Lizard Brain
    4. Topic 38 Programming by Coincidence
    5. Topic 39 Algorithm Speed
  9. Shipping Work People Can Use 5 stops · Good-Enough Software to Delight Your Users

    Planning releases, balancing polish against time, or improving delivery practices.

    1. Topic 5 Good-Enough Software
    2. Topic 15 Estimating
    3. Topic 50 Coconuts Don’t Cut It
    4. Topic 51 Pragmatic Starter Kit
    5. Topic 52 Delight Your Users