
The Pragmatic Programmer

DRY is about the duplication of knowledge, of intent. It’s about expressing the same thing in two different places, possibly in two totally different ways.
David Thomas • The Pragmatic Programmer
People find it easier to join an ongoing success. Show them a glimpse of the future and you’ll get them to rally around.[7]
David Thomas • The Pragmatic Programmer
Meyer’s Uniform Access principle, described in Object-Oriented Software Construction [Mey97], which states that All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.
David Thomas • The Pragmatic Programmer
Concurrency is when the execution of two or more pieces of code act as if they run at the same time. Parallelism is when they do run at the same time.
David Thomas • The Pragmatic Programmer
The Requirements Myth In the early days of software, computers were more valuable (in terms of amortized cost per hour) than the people who worked with them. We saved money by trying to get things correct the first time. Part of that process was trying to specify exactly what we were going to get the machine to do. We’d start by getting a specifica
... See moreDavid Thomas • The Pragmatic Programmer
We strongly believe that 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.
David Thomas • The Pragmatic Programmer
Look for the important requirements, the ones that define the system. Look for the areas where you have doubts, and where you see the biggest risks.
David Thomas • The Pragmatic Programmer
If you are doing very detailed implementation and coding, read a book on design and architecture. If you are doing high-level design, read a book on coding techniques.
David Thomas • The Pragmatic Programmer
We strongly believe that the only way to build software is incrementally. Build small pieces of end-to-end functionality, learning about the problem as you go. Apply this learning as you continue to flesh out the code, involve the customer at each step, and have them guide the process.