The Pragmatic Programmer: Your Journey to Mastery, 20th Anniversary Edition
Rate it:
Open Preview
83%
Flag icon
Requirements rarely lie on the surface. Normally, they’re buried deep beneath layers of assumptions, misconceptions, and politics. Even worse, often they don’t really exist at all.
83%
Flag icon
Programmers Help People Understand What They Want
Mauricio Chirino
Alongside “managing complexity”, these are our most important responsibilities
83%
Flag icon
initial statement of need is not an absolute requirement. The client may not realize this, but it is really an invitation to explore.
83%
Flag icon
That’s what we do. When given something that seems simple, we annoy people by looking for edge cases and asking about them.
Mauricio Chirino
Ask until you irritate or exhaust all your doubts. Whatever comes later
83%
Flag icon
the reality is that all of the work we do is actually some form of mockup. Even at the end of a project we’re still interpreting what our client wants.
84%
Flag icon
We believe that the best requirements documentation, perhaps the only requirements documentation, is working code.
84%
Flag icon
You might think that a single index card can’t hold the information needed to implement a component of the application. You’d be right. And that’s part of the point. By keeping this statement of requirements short, you’re encouraging developers to ask clarifying questions. You’re enhancing the feedback process between clients and coders before and during the creation of each piece of code.
84%
Flag icon
Create and maintain a project glossary—one place that defines all the specific terms and vocabulary used in a project. All participants in the project, from end users to support staff, should use the glossary to ensure consistency. This implies that the glossary needs to be widely accessible—a good argument for online documentation.
84%
Flag icon
It’s hard to succeed on a project if users and developers call the same thing by different names or, even worse, refer to different things by the same name.
86%
Flag icon
The developer acting as typist must focus on the low-level details of syntax and coding style, while the other developer is free to consider higher-level issues and scope.
Mauricio Chirino
Proper pair programming
87%
Flag icon
A team that doesn’t continuously experiment with their process is not an agile team.
87%
Flag icon
good design makes things easy to change. And if it’s easy to change, we can adjust, at every level, without any hesitation. That is agility.
88%
Flag icon
quality can come only from the individual contributions of all team members. Quality is built in, not bolted on.
88%
Flag icon
Trying to get things done “whenever there’s a free moment” means they will never happen.
88%
Flag icon
Too many teams are so busy bailing out water that they don’t have time to fix the leak. Schedule it. Fix it.
Mauricio Chirino
Be critical about what sticks and what doesn’t and continuously improve
88%
Flag icon
There is a simple marketing trick that helps teams communicate as one: generate a brand.
Mauricio Chirino
This helps building the team’s identity
89%
Flag icon
programmers who are two or three levels removed from the actual users of their code are unlikely to be aware of the context in which their work is used. They will not be able to make informed decisions.
89%
Flag icon
You need the ability to see beyond the existing rules and exploit possibilities for advantage. That’s a very different mindset from “but Scrum/Lean/Kanban/XP/agile does it this way…” and so on. Instead, you want to take the best pieces from any particular methodology and adapt them for use.
Mauricio Chirino
Don't just follow dogmas
90%
Flag icon
Civilization advances by extending the number of important operations we can perform without thinking. Alfred North Whitehead
90%
Flag icon
Whether it is the build and release procedure, testing, project paperwork, or any other recurring task on the project, it has to be automatic and repeatable on any capable machine.
90%
Flag icon
Many developers test gently, subconsciously knowing where the code will break and avoiding the weak spots. Pragmatic Programmers are different. We are driven to find our bugs now, so we don’t have to endure the shame of others finding our bugs later.
91%
Flag icon
A bug-free system that answers the wrong question isn’t very useful. Be conscious of end-user access patterns and how they differ from developer test data
91%
Flag icon
After you have written a test to detect a particular bug, cause the bug deliberately and make sure the test complains. This ensures that the test will catch the bug if it happens for real.
91%
Flag icon
Once you are confident that your tests are correct, and are finding bugs you create, how do you know if you have tested the code base thoroughly enough? The short answer is “you don’t,’’ and you never will.
91%
Flag icon
If a bug slips through the net of existing tests, you need to add a new test to trap it next time.
91%
Flag icon
Once a human tester finds a bug, it should be the last time a human tester finds that bug. The automated tests should be modified to check for that particular bug from then on, every time, with no exceptions, no matter how trivial, and no matter how much the developer complains and says, “Oh, that will never happen again.”
92%
Flag icon
Our goal as developers is to delight users. That’s why we’re here. Not to mine them for their data, or count their eyeballs or empty their wallets.
92%
Flag icon
How do you unearth their expectations, then? Ask a simple question: How will you know that we’ve all been successful a month (or a year, or whatever) after this project is done?
92%
Flag icon
developers, who are exposed to many different aspects of an organization, can often see ways of weaving different parts of the business together that aren’t always obvious to individual departments.
92%
Flag icon
Even though your title might be some variation of “Software Developer” or “Software Engineer,” in truth it should be “Problem Solver.” That’s what we do, and that’s the essence of a Pragmatic Programmer. We solve problems.
92%
Flag icon
Your signature should come to be recognized as an indicator of quality. People should see your name on a piece of code and expect it to be solid, well written, tested, and documented. A really professional job. Written by a professional.
93%
Flag icon
We have a duty to ask ourselves two questions about every piece of code we deliver: Have I protected the user? Would I use this myself?
99%
Flag icon
Never store a phone number in a numeric field.
1 2 3 5 Next »