Log In
Or create an account -> 
Imperial Library
  • Home
  • About
  • News
  • Upload
  • Forum
  • Help
  • Login/SignUp

Index
Foreword Preface
Who Should Read This Book? What Makes a Pragmatic Programmer? Individual Pragmatists, Large Teams It's a Continuous Process How the Book Is Organized What's in a Name?
Source Code and Other Resources Send Us Feedback Acknowledgments
Chapter 1. A Pragmatic Philosophy
The Cat Ate My Source Code
Take Responsibility
Related sections include: Challenges
Software Entropy
Putting Out Fires Related sections include: Challenges
Stone Soup and Boiled Frogs
The Villagers' Side
Related sections include: Challenges
Good-Enough Software
Involve Your Users in the Trade-Off Know When to Stop
Related sections include: Challenges
Your Knowledge Portfolio
Your Knowledge Portfolio Building Your Portfolio Goals Opportunities for Learning Critical Thinking
Care and Cultivation of Gurus
Challenges Communicate!
Know What You Want to Say Know Your Audience
Figure 1.1. The wisdom acrostic—understanding an audience
Choose Your Moment Choose a Style Make It Look Good Involve Your Audience Be a Listener Get Back to People
E-Mail Communication
Summary
Related sections include: Challenges
Chapter 2. A Pragmatic Approach
The Evils of Duplication
How Does Duplication Arise? Imposed Duplication Inadvertent Duplication Impatient Duplication Interdeveloper Duplication
Related sections include:
Orthogonality
What Is Orthogonality?
A Nonorthogonal System
Benefits of Orthogonality
Gain Productivity Reduce Risk
Project Teams Design
Figure 2.1. Typical layer diagram
Toolkits and Libraries Coding Testing Documentation Living with Orthogonality
Related sections include: Challenges
Exercises
Reversibility
Reversibility Flexible Architecture
Related sections include: Challenges
Tracer Bullets
Code That Glows in the Dark Tracer Bullets Don't Always Hit Their Target Tracer Code versus Prototyping
Related sections include:
Prototypes and Post-it Notes
Things to Prototype How to Use Prototypes Prototyping Architecture How Not to Use Prototypes
Related sections include:
Exercises
Domain Languages
Domain-Specific Errors
Implementing a Mini-Language
Data Languages and Imperative Languages Figure 2.2. Windows .rc file Stand-Alone and Embedded Languages Easy Development or Easy Maintenance? Related sections include: Challenges
Exercises Estimating
How Accurate Is Accurate Enough? Where Do Estimates Come From?
Understand What's Being Asked Build a Model of the System Break the Model into Components Give Each Parameter a Value Calculate the Answers Keep Track of Your Estimating Prowess
Estimating Project Schedules What to Say When Asked for an Estimate
Related sections include: Challenges
Exercises
Chapter 3. The Basic Tools
The Power of Plain Text
What Is Plain Text? Drawbacks The Power of Text
Insurance Against Obsolescence Leverage
The Unix Philosophy
Easier Testing Lowest Common Denominator
Related sections include: Challenges
Shell Games
Shell Utilities and Windows Systems
Using Unix Tools Under Windows
Related sections include: Challenges Power Editing
One Editor Editor Features Productivity
Figure 3.1. Sorting lines in an editor
Where to Go from Here What Editors Are Available?
Challenges
Source Code Control
Source Code Control and Builds
But My Team Isn't Using Source Code Control Source Code Control Products
Related sections include: Challenges
Debugging
Psychology of Debugging A Debugging Mindset Where to Start Debugging Strategies
Bug Reproduction
Visualize Your Data Figure 3.2. Sample debugger diagram of a circular linked list. The arrows represent pointers to nodes. Tracing
Corrupt Variables? Check Their Neighborhood
Rubber Ducking Process of Elimination The Element of Surprise Debugging Checklist
Related sections include: Challenges
Text Manipulation
Related sections include:
Exercises Code Generators
Passive Code Generators Active Code Generators
Figure 3.3. Active code generator creates code from a database schema Figure 3.4. Generating code from a language-neutral representation. In the input file, lines starting with 'M' flag the start of a message definition, 'F' lines define fields, and 'E' is the end of the message.
Code Generators Needn't Be Complex Code Generators Needn't Generate Code
Related sections include:
Exercises
Chapter 4. Pragmatic Paranoia
Design by Contract
DBC
DBC and Constant Parameters
Implementing DBC
Assertions Language Support
DBC and Crashing Early
Who's responsible?
Other Uses of Invariants
Loop Invariants Semantic Invariants
Dynamic Contracts and Agents
Related sections include: Challenges
Exercises Dead Programs Tell No Lies
Crash, Don't Trash
Related sections include:
Assertive Programming
Leave Assertions Turned On
Assertion and Side Effects
Related sections include: Exercises When to Use Exceptions
What Is Exceptional? Error Handlers Are an Alternative
Related sections include: Challenges
Exercises
How to Balance Resources
Nest Allocations
Objects and Exceptions Balancing and Exceptions
Balancing Resources with C++ Exceptions Balancing Resources in Java
When You Can't Balance Resources Checking the Balance
Related sections include: Challenges
Exercises
Chapter 5. Bend or Break
Decoupling and the Law of Demeter
Minimize Coupling The Law of Demeter for Functions
Figure 5.1. Law of Demeter for functions
Does It Really Make a Difference?
Physical Decoupling
Related sections include: Challenges Exercises Metaprogramming
Dynamic Configuration Metadata-Driven Applications
Business Logic
When to Configure
An Example: Enterprise Java Beans
Cooperative Configuration
Don't Write Dodo-Code
Related sections include: Challenges
Exercises Temporal Coupling
Workflow
Figure 5.2. UML activity diagram: making a piña colada
Architecture
Figure 5.3. OLTP architecture overview
Design for Concurrency
Cleaner Interfaces
Deployment
Related sections include: Challenges
It's Just a View
Publish/Subscribe
Figure 5.4. Publish/subscribe protocol
Model-View-Controller
The CORBA Event Service
Java Tree View Beyond GUIs
Figure 5.5. Baseball reporting, Viewers subscribe to models.
Still Coupled (After All These Years)
Related sections include:
Exercises Blackboards
Figure 5.6. Someone found a connection between Humpty's gambling debts and the phone logs. Perhaps he was getting threatening phone calls. Blackboard Implementations
Organizing Your Blackboard
Application Example
Related sections include: Challenges
Exercises
Chapter 6. While You Are Coding
Programming by Coincidence
How to Program by Coincidence
Accidents of Implementation Accidents of Context Implicit Assumptions
How to Program Deliberately
Related sections include:
Exercises
Algorithm Speed
What Do We Mean by Estimating Algorithms? The O() Notation
Figure 6.1. Runtimes of various algorithms
Common Sense Estimation Algorithm Speed in Practice
Best Isn't Always Best Related sections include: Challenges
Exercises
Refactoring
When Should You Refactor?
Real-World Complications
How Do You Refactor?
Automatic Refactoring
Related sections include: Exercises Code That's Easy to Test
Unit Testing Testing Against Contract Writing Unit Tests Using Test Harnesses
Ad Hoc Testing
Build a Test Window A Culture of Testing
Related sections include:
Exercises Evil Wizards
Related sections include: Challenges
Chapter 7. Before the Project
The Requirements Pit
Digging for Requirements Documenting Requirements
Sometimes the Interface Is the System
Figure 7.1. Cockburn's use case template Figure 7.2. A sample use case Use Case Diagrams Figure 7.3. UML use cases—so simple a child could do it! Overspecifying Seeing Further Just One More Wafer-Thin Mint… Maintain a Glossary Get the Word Out
Related sections include: Challenges
Exercises Solving Impossible Puzzles
Degrees of Freedom There Must Be an Easier Way! Challenges
Not Until You're Ready
Good Judgment or Procrastination?
Challenges
The Specification Trap
Related sections include: Challenges
Circles and Arrows
Do Methods Pay Off? Should We Use Formal Methods?
Related sections include: Challenges
Chapter 8. Pragmatic Projects
Pragmatic Teams
No Broken Windows Boiled Frogs Communicate Don't Repeat Yourself Orthogonality Automation Know When to Stop Adding Paint
Related sections include: Challenges
Ubiquitous Automation
All on Automatic Compiling the Project
Generating Code Regression Tests
Recursive make
Build Automation
Final Builds
Automatic Administrivia
Web Site Generation Approval Procedures
The Cobbler's Children
Related sections include: Challenges
Ruthless Testing
What to Test
Unit Testing Integration Testing Validation and Verification Resource Exhaustion, Errors, and Recovery Performance Testing Usability Testing
How to Test
Design/Methodology Testing
Regression Testing Test Data Exercising GUI Systems Testing the Tests Testing Thoroughly When to Test Tightening the Net
Related sections include: Challenges
It's All Writing
Comments in Code Executable Documents
What if My Document Isn't Plain Text?
Technical Writers Print It or Weave It Markup Languages
Related sections include: Challenges
Great Expectations
Communicating Expectations The Extra Mile
Related sections include: Challenges
Pride and Prejudice
Appendix A. Resources
Professional Societies Building a Library
Periodicals Weekly Trade Papers Books Analysis and Design Teams and Projects Specific Environments The Web
Internet Resources
Editors Emacs
[URL l] The Emacs Editor [URL 2] The XEmacs Editor
vi
[URL 3] The Vim Editor [URL 4] The elvis Editor [URL 5] Emacs Viper Mode
Compilers, Languages, and Development Tools
[URL 6] The GNU C/C++ Compiler [URL 7] The Java Language from Sun [URL 8] Perl Language Home Page [URL 9] The Python Language [URL 10] SmallEiffel [URL 11] ISE Eiffel [URL 12] Sather [URL 13] VisualWorks [URL 14] The Squeak Language Environment [URL 15] The TOM Programming Language [URL 16] The Beowulf Project [URL 17] iContract—Design by Contract Tool for Java [URL 18] Nana—Logging and Assertions for C and C++ [URL 19] DDD–Data Display Debugger [URL 20] John Brant's Refactoring Browser [URL 21 ] DOC++ Documentation Generator [URL 22] xUnit–Unit Testing Framework [URL 23] The Tcl Language [URL 24] Expect—Automate Interaction with Programs [URL 25] T Spaces [URL 26] javaCC—Java Compiler-Compiler [URL 27] The bison Parser Generator [URL 28] SWIG—Simplified Wrapper and Interface Generator [URL 29] The Object Management Group, Inc.
Unix Tools Under DOS
[URL 30] The UWIN Development Tools [URL 31 ] The Cygnus Cygwin Tools [URL 32] Perl Power Tools
Source Code Control Tools
[URL 33] RCS—Revision Control System [URL 34] CVS—Concurrent Version System [URL 35] Aegis Transaction-Based Configuration Management [URL 36] ClearCase [URL 37] MKS Source Integrity [URL 38] PVCS Configuration Management [URL 39] Visual SourceSafe [URL 40] Perforce
Other Tools
[URL 41] WinZip—Archive Utility for Windows [URL 42] The Z Shell [URL 43] A Free SMB Client for Unix Systems
Papers and Publications
[URL 44] The comp.object FAQ [URL 45] eXtreme Programming [URL 46] Alistair Cockburn's Home Page [URL 47] Martin Fowler's Home Page [URL 48] Robert C. Martin's Home Page [URL 49] Aspect-Oriented Programming [URL 50] JavaSpaces Specification [URL 51] Netscape Source Code [URL 52] The Jargon File [URL 53] Eric S. Raymond's Papers [URL 54] The K Desktop Environment [URL 55] The GNU Image Manipulation Program [URL 56] The Demeter Project
Miscellaneous
[URL 57] The GNU Project [URL 58] Web Server Information
Bibliography
Appendix B. Answers to Exercises
  • ← Prev
  • Back
  • Next →
  • ← Prev
  • Back
  • Next →

Chief Librarian: Las Zenow <zenow@riseup.net>
Fork the source code from gitlab
.

This is a mirror of the Tor onion service:
http://kx5thpx2olielkihfyo4jgjqfb7zx7wxr3sd4xzt26ochei4m6f7tayd.onion