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.



「如果我正在組織一個專案,我想要的就是這本書的作者......如果做不到,我會滿足於那些讀過他們書的人。」—— Ward Cunningham

《The Pragmatic Programmer》直接從程式設計的戰壕中脫穎而出,突破了現代軟體開發日益專業化和技術性的障礙,探討了核心流程——從需求到產出令使用者滿意的可維護程式碼。本書涵蓋了個人責任和職業發展到保持程式碼靈活易於適應和重用的架構技巧等各種主題。閱讀本書,您將學會以下技能:

- 對抗軟體腐敗;
- 避免重複知識的陷阱;
- 撰寫靈活、動態和適應性強的程式碼;
- 避免巧合式編程;
- 通過合約、斷言和異常來保護程式碼;
- 捕捉真實需求;
- 進行徹底有效的測試;
- 令使用者滿意;
- 建立實用程式設計師團隊;
- 通過自動化使開發更精確。



1. 實用哲學

- 貓吃了我的原始碼
- 軟體熵
- 石頭湯和煮青蛙
- 足夠好的軟體
- 您的知識組合
- 溝通!

2. 實用方法

- 重複的邪惡
- 正交性
- 可逆性
- 追蹤子彈
- 原型和便利貼
- 領域語言
- 估算

3. 基本工具

- 純文字的力量
- Shell 遊戲
- 強大的編輯器
- 原始碼控制
- 調試
- 文字處理
- 程式碼生成器

4. 實用偏執狂

- 契約設計
- 死程式不會說謊
- 斷言式程式設計
- 何時使用異常
- 如何平衡資源

5. 彎曲或折斷

- 解耦和德米特法則
- 元程式設計
- 時間耦合
- 它只是一個視圖
- 黑板

6. 編碼時

- 巧合式編程
- 演算法速度
- 重構
- 易於測試的程式碼
- 邪惡巫師

7. 專案之前

- 需求陷阱
- 解決不可能的謎題
- 不要急於行動
- 規格陷阱
- 圓圈和箭頭

8. 實用專案

- 實用團隊
- 無所不在的自動化
- 徹底測試
- 一切都是寫作
- 偉大的期望
- 自豪與偏見

A 資源