The Pragmatic Programmer: From Journeyman to Master (Paperback)

Andrew Hunt, David Thomas





"If I'm putting together a project, it's the authors of this book that I want. . . . And failing that I'd settle for people who've read their book." -- Ward Cunningham

Straight from the programming trenches, The Pragmatic Programmer cuts through the increasing specialization and technicalities of modern software development to examine the core process--taking a requirement and producing working, maintainable code that delights its users. It covers topics ranging from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse. Read this book, and you'll learn how to

  • Fight software rot;
  • Avoid the trap of duplicating knowledge;
  • Write flexible, dynamic, and adaptable code;
  • Avoid programming by coincidence;
  • Bullet-proof your code with contracts, assertions, and exceptions;
  • Capture real requirements;
  • Test ruthlessly and effectively;
  • Delight your users;
  • Build teams of pragmatic programmers; and
  • Make your developments more precise with automation.

Written as a series of self-contained sections and filled with entertaining anecdotes, thoughtful examples, and interesting analogies, The Pragmatic Programmer illustrates the best practices and major pitfalls of many different aspects of software development. Whether you're a new coder, an experienced programmer, or a manager responsible for software projects, use these lessons daily, and you'll quickly see improvements in personal productivity, accuracy, and job satisfaction. You'll learn skills and develop habits and attitudes that form the foundation for long-term success in your career. You'll become a Pragmatic Programmer.

Table of Contents

1. A Pragmatic Philosophy.

The Cat Ate My Source Code.
Software Entropy.
Stone Soup and Boiled Frogs.
Good-Enough Software.
Your Knowledge Portfolio.

2. A Pragmatic Approach.

The Evils of Duplication.
Tracer Bullets.
Prototypes and Post-it Notes.
Domain Languages.

3. The Basic Tools.

The Power of Plain Text.
Shell Games.
Power Editing.
Source Code Control.
Text Manipulation.
Code Generators.

4. Pragmatic Paranoia.

Design by Contract.
Dead Programs Tell No Lies.
Assertive Programming.
When to Use Exceptions.
How to Balance Resources.

5. Bend, or Break.

Decoupling and the Law of Demeter.
Temporal Coupling.
It's Just a View.

6. While You Are Coding.

Programming by Coincidence.
Algorithm Speed.
Code That's Easy to Test.
Evil Wizards.

7. Before the Project.

The Requirements Pit.
Solving Impossible Puzzles.
Not Until You're Ready.
The Specification Trap.
Circles and Arrows.

8. Pragmatic Projects.

Pragmatic Teams.
Ubiquitous Automation.
Ruthless Testing.
It's All Writing.
Great Expectations.
Pride and Prejudice.

A Resources.

Professional Societies.
Building a Library.
Internet Resources.

B Answers to Exercises.