O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

The Pragmatic Programmer: your journey to mastery, 20th Anniversary Edition, 2nd Edition

Book Description

"One of the most significant books in my life." —Obie Fernandez, Author, The Rails Way

"Twenty years ago, the first edition of The Pragmatic Programmer completely changed the trajectory of my career. This new edition could do the same for yours." —Mike Cohn, Author of Succeeding with Agile, Agile Estimating and Planning, and User Stories Applied

". . . filled with practical advice, both technical and professional, that will serve you and your projects well for years to come." —Andrea Goulet, CEO, Corgibytes, Founder, LegacyCode.Rocks

". . . lightning does strike twice, and this book is proof." —VM (Vicky) Brasseur, Director of Open Source Strategy, Juniper Networks

The Pragmatic Programmer is one of those rare tech books you'll read, re-read, and read again over the years. Whether you're new to the field or an experienced practitioner, you'll come away with fresh insights each and every time.

Dave Thomas and Andy Hunt wrote the first edition of this influential book in 1999 to help their clients create better software and rediscover the joy of coding. These lessons have helped a generation of programmers examine the very essence of software development, independent of any particular language, framework, or methodology, and the Pragmatic philosophy has spawned hundreds of books, screencasts, and audio books, as well as thousands of careers and success stories.

Now, twenty years later, this new edition re-examines what it means to be a modern programmer. Topics range from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse. Read this book, and you'll learn how to:

  • Fight software rot
  • Learn continuously
  • Avoid the trap of duplicating knowledge
  • Write flexible, dynamic, and adaptable code
  • Harness the power of basic tools
  • Avoid programming by coincidence
  • Learn real requirements
  • Solve the underlying problems of concurrent code
  • Guard against security vulnerabilities
  • Build teams of Pragmatic Programmers
  • Take responsibility for your work and career
  • Test ruthlessly and effectively, including property-based testing
  • Implement the Pragmatic Starter Kit
  • Delight your users

Written as a series of self-contained sections and filled with classic and fresh anecdotes, thoughtful examples, and interesting analogies, The Pragmatic Programmer illustrates the best approaches and major pitfalls of many different aspects of software development. Whether you're a new coder, an experienced programmer, or a manager responsible for software projects, use these lessons daily, and you'll quickly see improvements in personal productivity, accuracy, and job satisfaction. You'll learn skills and develop habits and attitudes that form the foundation for long-term success in your career.

You'll become a Pragmatic Programmer.

Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.

Table of Contents

  1.  Foreword
  2.  Preface to the Second Edition
    1. How the Book Is Organized
    2. What’s in a Name?
    3. Source Code and Other Resources
    4. Send Us Feedback
    5. Second Edition Acknowledgments
  3.  From the Preface to the First Edition
    1. Who Should Read This Book?
    2. What Makes a Pragmatic Programmer?
    3. Individual Pragmatists, Large Teams
    4. It’s a Continuous Process
  4. 1. A Pragmatic Philosophy
    1. Topic 1. It’s Your LifeIt’s Your Life
    2. Topic 2. The Cat Ate My Source Code
    3. Topic 3. Software Entropy
    4. Topic 4. Stone Soup and Boiled Frogs
    5. Topic 5. Good-Enough Software
    6. Topic 6. Your Knowledge Portfolio
    7. Topic 7. Communicate!
  5. 2. A Pragmatic Approach
    1. Topic 8. The Essence of Good Design
    2. Topic 9. DRY—The Evils of DuplicationDRY—The Evils of Duplication
    3. Topic 10. Orthogonality
    4. Topic 11. Reversibility
    5. Topic 12. Tracer Bullets
    6. Topic 13. Prototypes and Post-it Notes
    7. Topic 14. Domain Languages
    8. Topic 15. Estimating
  6. 3. The Basic Tools
    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
    7. Topic 22. Engineering Daybooks
  7. 4. Pragmatic Paranoia
    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 HeadlightsDon’t Outrun Your Headlights
  8. 5. Bend, or Break
    1. Topic 28. Decoupling
    2. Topic 29. Juggling the Real World
    3. Topic 30. Transforming Programming
    4. Topic 31. Inheritance Tax
    5. Topic 32. Configuration
  9. 6. Concurrency
    1. Topic 33. Breaking Temporal Coupling
    2. Topic 34. Shared State Is Incorrect State
    3. Topic 35. Actors and Processes
    4. Topic 36. Blackboards
  10. 7. While You Are Coding
    1. Topic 37. Listen to Your Lizard Brain
    2. Topic 38. Programming by Coincidence
    3. Topic 39. Algorithm Speed
    4. Topic 40. Refactoring
    5. Topic 41. Test to Code
    6. Topic 42. Property-Based Testing
    7. Topic 43. Stay Safe Out There
    8. Topic 44. Naming Things
  11. 8. Before the Project
    1. Topic 45. The Requirements Pit
    2. Topic 46. Solving Impossible Puzzles
    3. Topic 47. Working Together
    4. Topic 48. The Essence of Agility
  12. 9. Pragmatic Projects
    1. Topic 49. Pragmatic Teams
    2. Topic 50. Coconuts Don’t Cut ItCoconuts Don’t Cut It
    3. Topic 51. Pragmatic Starter Kit
    4. Topic 52. Delight Your Users
    5. Topic 53. Pride and Prejudice
  13. 10. Postface
  14. A1. Bibliography
  15. A2. Possible Answers to the Exercises