The Pragmatic Programmer: From Journeyman to Master is a classic software development book written by Andrew Hunt and David Thomas. First published in 1999, it has become a cornerstone of modern software engineering and has still relevance today. The book provides a collection of practical tips and techniques for software developers to become more effective and productive in their work. While Code Complete was always my favorite programming book (probably followed by Clean Code), i never really was equally inspired by The Pragmatic Programmer when i first read it some 10 years ago. However, given its widespread acclaim and considering the authors were involved in the agile manifesto, i recently decided to re-read it. In all fairness compared to these other titles, The Pragmatic Programmer is more a book on mindset or methodology rather than hands-on coding.
As the title hints at one of the key concepts in the book is pragmatism, which emphasizes the importance of being practical and effective in software development. In other words, developers should focus on finding practical, real-world solutions, rather than trying to adhere to rigid rules or dogma. This aligns well with the values and principles of agile software development, which both authors were involved in shaping. Andrew Hunt was a signatory of the Agile Manifesto, while David Thomas contributed to the discussions that led up to its creation. “The Pragmatic Programmer” is often cited as an influential book that helped shape the ideas and principles of the Agile Manifesto. So what traits are typical of a pragmatic programmer?
-
Open to new ideas and approaches: Pragmatic developers are willing to experiment with new tools, technologies, and methodologies in order to find what works best for their particular project or team.
-
Take a flexible approach to software development: Pragmatic developers are willing to adjust their plans and processes as needed to accommodate changing requirements or circumstances.
-
Mindful of the trade-offs involved in software development: Pragmatic developers are aware that every decision involves trade-offs, and strive to find the best balance between competing priorities such as functionality, performance, maintainability, and cost.
-
Focus on the end-user: Pragmatic developers prioritize the needs of the end-user, and strive to create software that meets their needs in a timely and efficient manner.
-
Embrace simplicity: Pragmatic developers strive to keep things simple and avoid unnecessary complexity, in order to reduce the likelihood of errors and improve maintainability.
Other key concepts in the book that remain relevant today include the DRY principle, which emphasizes avoiding duplication of effort, and the importance of keeping components of a system separate and independent, known as orthogonality. The authors also emphasize that code should be written with the idea that it is a form of communication between developers, and that it should be clear and easy to understand. The book encourages developers to seek out rapid feedback on their work, and to focus on delivering software that meets the needs of users in a timely and efficient manner.
All of these concepts were impactful on the agile manifesto and the evolution of agile practices:
-
Pragmatism and the Agile Manifesto: The concept of pragmatism is reflected in the Agile Manifesto mainly in “working software over comprehensive documentation” and “responding to change over following a plan.”
-
The DRY Principle and Agile: The Don’t Repeat Yourself (DRY) principle, is related to the agile practice of continuous integration. By using tools like automated testing and build systems, teams can ensure that their code is always up-to-date and avoid wasting time on repetitive manual tasks.
-
Orthogonality and Agile Architecture: The concept of orthogonality, which promotes keeping components of a system separate and independent, is a key principle of agile architecture. By designing systems in a modular and flexible way, teams can respond to changing requirements and scale their software more easily.
-
Code as Communication and Agile Collaboration: The idea that code is a form of communication among team members is closely related to the agile principle of collaboration. By writing code that is clear and easy to understand, developers can thereby collaborate more efficiently, focus on delivering value and avoid writing documentation.
-
Rapid Feedback and Agile Testing: The book emphasizes the importance of seeking out rapid feedback on produced work, which is a core principle of agile testing. By continuously testing and validating their code, teams can catch and fix problems faster and avoid costly delays. More importantly is that this process produces working software that can be put in front of customers more quickly which in turn yields valuable feedback.
In total, “The Pragmatic Programmer” puts emphasis on practicality, clarity, and communication. Consequently it has become a somewhat timeless guide to software development in general and agile-driven software development in particular.