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.
-
Joining a New Team
The people, the unwritten rules, and the history are as unfamiliar as the code.
- Topic 1 It’s Your Life
- Topic 2 The Cat Ate My Source Code
- Topic 4 Stone Soup and Boiled Frogs
- Topic 7 Communicate!
- Topic 22 Engineering Daybooks
- Topic 53 Pride and Prejudice
-
Working with Uncertainty
A new project, unfamiliar scope, or conflicting descriptions of the same problem.
- Topic 12 Tracer Bullets
- Topic 13 Prototypes and Post-it Notes
- Topic 45 The Requirements Pit
- Topic 46 Solving Impossible Puzzles
- Topic 47 Working Together
- Topic 48 The Essence of Agility
-
Maintainable Software Systems
A codebase is hard to change, or must not become that way.
- Topic 9 DRY—The Evils of Duplication
- Topic 10 Orthogonality
- Topic 28 Decoupling
- Topic 30 Transforming Programming
- Topic 40 Refactoring
- Topic 41 Test to Code
- Topic 49 Pragmatic Teams
-
Building a Dependable Personal Toolkit
Friction in the daily workflow, or a new environment slowing you down.
- Topic 16 The Power of Plain Text
- Topic 17 Shell Games
- Topic 18 Power Editing
- Topic 19 Version Control
- Topic 20 Debugging
- Topic 21 Text Manipulation
-
Making Failure Visible and Bounded
Reliability, security, resource use, or code that hides invalid states.
- Topic 23 Design by Contract
- Topic 24 Dead Programs Tell No Lies
- Topic 25 Assertive Programming
- Topic 26 How to Balance Resources
- Topic 27 Don’t Outrun Your Headlights
- Topic 42 Property-Based Testing
- Topic 43 Stay Safe Out There
-
Designing Event-Driven and Concurrent Systems
Events, asynchronous work, or shared state make behavior surprising.
- Topic 29 Juggling the Real World
- Topic 33 Breaking Temporal Coupling
- Topic 34 Shared State Is Incorrect State
- Topic 35 Actors and Processes
- Topic 36 Blackboards
-
Keeping Design Choices Reversible
Abstractions, interfaces, configuration, or names that may outlive the task.
- Topic 8 The Essence of Good Design
- Topic 11 Reversibility
- Topic 14 Domain Languages
- Topic 31 Inheritance Tax
- Topic 32 Configuration
- Topic 44 Naming Things
-
Developing Engineering Judgment
Something feels wrong, a solution works for unexplained reasons, or a claim needs evidence.
- Topic 3 Software Entropy
- Topic 6 Your Knowledge Portfolio
- Topic 37 Listen to Your Lizard Brain
- Topic 38 Programming by Coincidence
- Topic 39 Algorithm Speed
-
Shipping Work People Can Use
Planning releases, balancing polish against time, or improving delivery practices.
- Topic 5 Good-Enough Software
- Topic 15 Estimating
- Topic 50 Coconuts Don’t Cut It
- Topic 51 Pragmatic Starter Kit
- Topic 52 Delight Your Users