225 of 235 people found the following review helpful
on June 24, 2000
I bought this on a friend's recommendation, but expected yet another book rehashing the same standard rules: write comments, don't duplicate code, have plans for your projects, eat your vegetables.
Hunt and Thomas vastly exceeded my expectations. This book is never dry, often humorous, and always educational. They don't always say what you expect them to say (e.g., about commenting code), and I didn't always agree with them, but every sentence is full of thoughtful analysis.
One of the best features is their incredibly practical advice -- while yes, this book does teach philosophy and encourages thought, it also provides many immediately-implementable suggestions.
If you aren't a programmer with 10 years experience, buy it anyway -- it is not just for experienced programmers. While you will absorb less of the book, there is still enough to learn, and it's a great book to keep and re-read.
The book includes a pull-out card of the pithy sayings the authors use to sum up each section. Perhaps my mind just doesn't work the way theirs does, but I didn't find their summations to be helpful all the time -- I found myself frequently having to flip back to the section to remember what a particular phrase meant. But it's still useful.
117 of 125 people found the following review helpful
on March 6, 2001
Most software engineers don't have the opportunity to spend time with their colleagues and just talk about the craft of software development. While you can't have a conversation with a book, Andrew Hunt and David Thomas will talk if you will listen--and listen you should.
The Pragmatic Programmer is a collection of ideas, observations, and recommendations for software developers. Throughout the book, they highlight these notions in a set of numbered tips, about 70 of them, which are collected on a single tear-out card situated in the back of the book. Just reading the tips, without reading the text of the book, might make these gems seem trite, empty, and obvious. But, they're not!
Many of the tips actually build upon previous ones, like tip 4: "Don't live with broken windows", which urges programmers to fix problems and clean up messes, and tip 20: "Keep knowledge in plain text." With some books like this you can skip around--but this one is better read from beginning to end.
There is plenty of ideas to consider, agree with, and, perhaps, disagree with, too. You can also feel a little passion. "Conventional wisdom says that once a project is in the coding phase, the work is mostly mechanical, transcribing the design into executable statements. We think that this attitude is the single biggest reason that many programs are ugly, inefficient, poorly structured, unmaintainable, and just plain wrong." Hooray for authors who take a stand and then back it up with well reasoned arguments!
Reading this book isn't a substitute for having that conversation with a colleague about the craft. But, The Pragmatic Programmer is worth listening to in the mean time. It is a good, solid, fun read.
69 of 72 people found the following review helpful
on May 31, 2000
This is, simply, a wonderful book. It is a book that celebrates the real depth of great programming -- something that is too often forgotten or ignored. This is not an idiot's guide to anything -- it is a remarkably entertaining set of dozens of tips to becoming better at what you do, especially if that happens to be programming.
The tips are deceptively simple at times, but only a truly naive or inexperienced reader would miss the rich depth that their combination presents. In fact, that is the real beauty of this book -- it does not present some short-lived miracle-cure approach -- instead, it weaves together small bits of wisdom and practical advice into a powerful work-style.
They have some controversial views -- these authors are witty and opinionated -- but agreeing or disagreeing with each individual idea is not the point -- "seeing the forest" is.
There are numerous specific code examples, but the book is a fun and easy read -- strangely, I also think it would be a wonderful book for someone who is NOT a programmer, but who works with them, perhaps a business manager having a major system built. Even skipping all the really technical parts, it would be a wonderful set of benchmarks to assess how good your programmers really are -- much more powerful than "he has 3 years of C++, 2 years of Linux"...
I am hoping this writing team will follow this book with some specific guides as well, but this one is destined to be a classic. These guys really know what they are talking about, and, as a wonderful bonus, they are terrific writers, as well!
The book has gotten great reviews on slashdot, as well as a couple of programming magazines, including Dr Dobbs and Software Development -- they were well deserved. Buy IT!
143 of 156 people found the following review helpful
on February 3, 2009
Well, after reading most of the glowing reviews here, I was pretty interested in the book. I thumbed through it at a bookstore, and ended up buying on Amazon (kudos for the lower price). I read the book, and became confused. I made sure the reviews matched the book title. I read the book again. Quite frankly, I don't see what makes this book so great- not that it is bad and/or a waste of money (though it is on the pricey side given how little you get- big font and big line spacing, like a 7th-grade term paper)- it just isn't the greatest thing since sliced bread.
The authors have compiled a list of several tips to keep in mind while programming. Ultimately, I think this is their answer to Fred Brooks' searching for a silver bullet in The Mythical Man-Month, based on their years of experience in the field. It ends up being a lot of "eating your own dog food," in my humble opinion. Just because they met with success using a certain method/tool (usually on financial software) doesn't mean you will. Not all programming practices transcend all boundaries and are generally applicable to all programming problems. Some people are faster and more capable (and more comfortable) with an IDE than with a plain text editor; get off your high horse. I don't agree with most of the tips. Some, however, are absolutely necessary, such as version control. Every tip is tied to an analogy or some story outside of programming- which may be nice to some, but I see it as an insult to a reader's intelligence. Every single tip? Really? Not necessary....really.
The majority of the book is language-independent, which is nice. There are a few humorous moments spread throughout the book, and it is overall a very easy read- not at all like reading a technical work, despite the content. I think the book is definitely worth a read...the tips are all rooted in common sense (or pragmatism, if you will). The advice is sage-like, which to me means listen up and listen closely, but take it with a grain of salt and adapt the morals of the story to your own coding practices.
29 of 29 people found the following review helpful
on June 30, 2015
This book provides sound, practical advice that makes sense on almost any development project. The Pragmatic Programmer is not limited to a specific niche or language – any developer can take and apply these principles. It employs a good, familiar writing style which makes the book easy to digest, and the material is quick to absorb and apply.
Thomas and Hunt present content that is useful for everyone from the novice to the expert. They organize their advice into approximately 46 topics that cover a wide range of programming best practices. The tips build on each other throughout and are loosely categorized so that tips on similar themes are grouped together. To get the most out of it, I suggest reading the whole book, or at least sizeable sections, beginning to end to clearly see how they integrate. However, because there are so many tips, integrating them all at once initially may be difficult. It’s easy to bite off more than you can chew here, so perhaps a good starting point is to begin with the tips that are most relevant for you and branch out from there. A couple of sections resonated strongly with me:
1) A useful practice that I operate by and push my developers to operate by is refactoring (Chapter 6 – “While You Are Coding”, p. 184). This book provides a framework for the appropriate mindset to take on how to handle and maintain a code base. In refactoring, you don’t relate the software so much to a construction project but to creating and maintaining a garden – code is dynamic and its environment is ever changing. You’ll need to adapt and adjust code as the project moves along, and developers need to operate from the mindset that they’ll need to change things and adapt their code as they proceed.
2) Another practice that I follow extensively is Design by Contract (Chapter 4 – “Pragmatic Paranoia”, p. 109), or the idea that you build/structure elements to a defined contract. This could be a contract between systems, classes, or even functions. I use this approach with both my local developers and external developers, and this book gives a good framework and guidelines on how applications and classes need to work. For example, I can define a contract for how a base class and its subclasses need to work and interact, and then work with a developer to provide the specific implementation for that class. I also use this approach for APIs when coordinating with an external team to handle an exchange of data.
I’m a software architect and developer with over 20 years of industry experience across a number of languages and systems, and I’ve completed hundreds of projects both individually and with technical and cross-disciplinary teams of varying sizes. Most of the subjects covered in this book are best practices I look for or insist on establishing on my projects to ensure work moves along smoothly during development. This book covers the spectrum – it’s equally useful to me, my project managers and developers, and those just getting into our industry. It’s a solid book to return to every once in a while to make sure you’re in alignment with best practices. I highly recommend it to both new and experienced developers. I hope it helps you as much as it’s helped me.
37 of 39 people found the following review helpful
on June 3, 2000
...and what's the difference? I've often felt that the difference was attitude. Programmers (or "professionals" if you prefer) were continually thinking about what they did, why they did it and how they could do it better. And I don't just mean searching for a new language ("maybe I should learn Java this week?").The rest of us are just tooling around doing the best we can and wondering why it sometimes doesn't work.
"The Pragmatic Programmer" is clearly written by and for professional programmers. Reading it with attention will force you to think deeply about the way you develop software. If your first response is "but this isn't pragmatic" or "I don't have time to do these things" then I encourage you to think again. Perhaps the barrier is change itself. Sure, applying the practices in this book may slow you down in the short term (you always go slower when you're learning a new skill) but the benefits to establishing these practices as habits are enormous.
We are working through this book as part of a weekly study group at our office. This seems to be a great way to investigate things you're uncomfortable. And I don't agree with every practice in this book, but please think about them as deeply as you can before you reject them!
Whenever I interview someone I ask them what book has most influenced the way they develop software. If they answer "The Pragmatic Programmer" (or "Zen and the Art of Motorcycle Maintenance") then they have the job!
45 of 49 people found the following review helpful
As a programmer, I like to think of myself as pragmatic. Programming is the most precise discipline there is and justifies the cynical joke, "How many character changes does it take to turn `success' into `failure'? Answer: Only one if you are a programmer." However, pragmatic is a very subjective word, so the obvious question that any reader interested in this book would ask is, "So what criteria do the authors use to define a pragmatic programmer?"
In listing the criteria and explaining their reasoning, the authors show their depth of understanding of what is both right and wrong with the current state of the development art. Every keystroke or mouse click that we perform has a consequence, not only today, but in the future. When performing them, we should always be looking ahead to the future, whether that be thinking about how the code will be maintained, how the users will respond to what they find or how your current skill set is expanding or contracting. This eye on the future is the primary theme of the book.
The tips are kept simple, which is effective and is consistent with the secondary theme of the book. Complex systems are what we build, but in totality we cannot comprehend them. Only by breaking a project down into manageable parts can we hope to interact with it in an effective manner. Furthermore, the inertia against changes is much less severe when they are small and simple. Whether it be Ockham's razor, Einstein's statement about the simplicity of theories or simply reciting the KISS (Keep It Simple Stupid) mantra, reducing complexity is effective.
Some very good analogies are used to explain the principles, with my favorite being the broken window tale. The basic story is simple, abandoned buildings or automobiles on the street remain untouched until a window is broken. Left unrepaired, this sends a message that the object is fair game so within a very short time, vandals destroy the rest. The same thing happens in software development. Once a subpar feature is passed as acceptable, the signal to everyone is clear, and the quality of the remaining work suffers.
Granted, most of us in development are severely time challenged and have little to spare to either read or perform code clean ups. However, this is a book where the interest paid over the short and long term will dominate the initial investment. Applying even a few of these principles will help reduce the load in the future as you begin spending less time in all phases of the software cycle. It takes approximately a one percent increase in efficiency to save a half hour a week. This is a book that should be read by all programmers, especially those who wish to control their own destiny.
30 of 32 people found the following review helpful
on November 2, 1999
Someone said to me today:
"Humans have been humans for a long time now, but we don't seem to be getting any better at it."
The statement struck me because it is clear, concise, and absolutely true; So is this book. What's more, this book tells you how to be a better human.
The Pragmatic Programmer explains, step by step, how to master the craft of programming. It describes tricks, techniques, but more importantly *attitudes* that most people learn the hard way over several decades- if at all. What's more, it lays it all out in a neat, approachable, and immediately applicable way that is independent of specific technologies and languages.
I've been looking for many years for a book like this to give students. Now I've got it. It'll go on my shelf next to "The Mythical Man Month" and will probably be popular and applicable for just as long.
16 of 16 people found the following review helpful
A friend of mine recommended this book to me a year ago and I finally got around to reading it. Not only do I wish I had taken him up on his recommendation immediately, I wish that I had read it years earlier. The book's subtitle "from journeyman to master" really sums it up nicely.
The book contains practical advice from experienced programmers that will help you become a more effective software developer. Unlike many books which dogmatically preach a specific methodology, this book focuses on (not-so-)common sense practices that are simple yet effective, as well as highlighting potential pitfalls to be avoided. Many of them can be applied to your own development process without requiring radical changes, while others will require team- or project-wide changes. Fortunately the nature of the recommended practices is such that you don't have to adopt all of them to be effective. You can pick and choose which ones are most appropriate and gradually incorporate them into your development process.
The range of topics covered is fairly broad, but the important themes are writing easy-to-maintain, reusable code, identifying and adjusting requirements quickly and effectively, managing large projects, and avoiding bad habits and developing good attitudes. Although I don't absolutely agree with everything the authors present, the justification they provide is thought stimulating and will probably change how you do things even if you don't consciously decide to adopt any of their practices.
I found the exercises (and their accompanying solutions) scattered throughout the book to be extremely useful in internalizing the principles being taught, as well as gauging how well I approach problem-solving. I'd highly recommend working through them as you read the book.
Finally, it's worth mentioning how enjoyable this book is to read. The authors' sense of humor and sprinkling of anecdotes make this an easy read without in any way detracting from the content.
If you're a brand new programmer, you probably won't appreciate many of the ideas presented in this book, but come back after you have a year or two of experience. Successful, experienced programmers will find that this book confirms many of the things you're already doing, while providing a lot of useful ideas to become even better. Even if you're not a programmer, but manage or otherwise work with programming teams, you'll find a lot of helpful information here. If there were one book I could require all of my coworkers to read, this would be it.
16 of 16 people found the following review helpful
on November 1, 1999
First, I should tell you that I did review this book... I got to read it and write a document about my opinion of the book, and it is excellent. There are many books on the market that push one technology or philosophy... this book has a collection of honed practices. It contains sections on your programming tools, code design, project management (among other topics). In short, it is a book that talks about how to become better at what you do for a living. This advice is coupled with excellent examples and stories that make for interesting and memorable reading.
I can't emphasize this point enough. This book isn't a collection of stories that support the author's methodology or design technique. It isn't a book designed to sell his software tools. It is a book that will teach you to work more effectively. It talks about practical tips for prototyping projects (different ways to prototype, which is appropriate when, how to justify the time and expense to your manager), how to deal with and communicate effectively with customers, co-workers and managers.... if it sounds like The Pragmatic Programmer covers a lot of topics, that's because it does.
If you work with software or manage people who do, you owe it to yourself to read this book! I've been writing code (and reading these types of books) for nearly 10 years, and this is the best one I've ever read.