HAPPY BOOKSGIVING
Use code BOOKSGIVING during checkout to save 40%-55% on books and eBooks. Shop now.
This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
Also available in other formats.
Register your product to gain access to bonus material or receive a coupon.
“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
A summary of all the tips on a pull-out card inside the back cover of the print edition can be accessed at pragprog.com/tips.
Please visit the authors' site at https://pragprog.com/titles/tpp20.
Foreword xi
Preface to the Second Edition xv
From the Preface to the First Edition xix
Chapter 1: A Pragmatic Philosophy 1
Topic 1. It's Your Life 2
Topic 2. The Cat Ate My Source Code 3
Topic 3. Software Entropy 6
Topic 4. Stone Soup and Boiled Frogs 8
Topic 5. Good-Enough Software 11
Topic 6. Your Knowledge Portfolio 14
Topic 7. Communicate! 20
Chapter 2: A Pragmatic Approach 27
Topic 8. The Essence of Good Design 28
Topic 9. DRY–The Evils of Duplication 30
Topic 10. Orthogonality 39
Topic 11. Reversibility 47
Topic 12. Tracer Bullets 51
Topic 13. Prototypes and Post-it Notes 56
Topic 14. Domain Languages 60
Topic 15. Estimating 66
Chapter 3: The Basic Tools 73
Topic 16. The Power of Plain Text 74
Topic 17. Shell Games 78
Topic 18. Power Editing 81
Topic 19. Version Control 84
Topic 20. Debugging 88
Topic 21. Text Manipulation 97
Topic 22. Engineering Daybooks 100
Chapter 4: Pragmatic Paranoia 103
Topic 23. Design by Contract 104
Topic 24. Dead Programs Tell No Lies 112
Topic 25. Assertive Programming 115
Topic 26. How to Balance Resources 118
Topic 27. Don’t Outrun Your Headlights 125
Chapter 5: Bend, or Break 129
Topic 28. Decoupling 130
Topic 29. Juggling the Real World 137
Topic 30. Transforming Programming 147
Topic 31. Inheritance Tax 159
Topic 32. Configuration 167
Chapter 6: Concurrency 171
Topic 33. Breaking Temporal Coupling 172
Topic 34. Shared State Is Incorrect State 176
Topic 35. Actors and Processes 183
Topic 36. Blackboards 189
Chapter 7: While You Are Coding 195
Topic 37. Listen to Your Lizard Brain 196
Topic 38. Programming by Coincidence 201
Topic 39. Algorithm Speed 207
Topic 40. Refactoring 213
Topic 41. Test to Code 218
Topic 42. Property-Based Testing 228
Topic 43. Stay Safe Out There 235
Topic 44. Naming Things 242
Chapter 8: Before the Project 249
Topic 45. The Requirements Pit 250
Topic 46. Solving Impossible Puzzles 258
Topic 47. Working Together 262
Topic 48. The Essence of Agility 265
Chapter 9: Pragmatic Projects 269
Topic 49. Pragmatic Teams 270
Topic 50. Coconuts Don’t Cut It 276
Topic 51. Pragmatic Starter Kit 280
Topic 52. Delight Your Users 287
Topic 53. Pride and Prejudice 288
Postface 291
Bibliography 295
Possible Answers to the Exercises 299
Index 313