- Introduction
- Act with Prudence
- Apply Functional Programming Principles
- Ask "What Would the User Do?" (You Are not the User)
- Automate Your Coding Standard
- Beauty Is in Simplicity
- Before You Refactor
- Beware the Share
- The Boy Scout Rule
- Check Your Code First before Looking to Blame Others
- Choose Your Tools with Care
- Code in the Language of the Domain
- Code Is Design
- Code Layout Matters
- Code Reviews
- Coding with Reason
- A Comment on Comments
- Comment Only What the Code Cannot Say
- Continuous Learning
- Convenience Is not an -ility
- Deploy Early and Often
- Distinguish Business Exceptions from Technical
- Do Lots of Deliberate Practice
- Domain-Specific Languages
- Don't Be Afraid to Break Things
- Don't Be Cute with Your Test Data
- Don't Ignore that Error!
- Don't Just Learn the Language, Understand its Culture
- Don't Nail Your Program into the Upright Position
- Don't Rely on "Magic Happens Here"
- Don't Repeat Yourself
- Don't Touch that Code!
- Encapsulate Behavior, not Just State
- Floating-point Numbers Aren't Real
- Fulfill Your Ambitions with Open Source
- The Golden Rule of API Design
- The Guru Myth
- Hard Work Does not Pay Off
- How to Use a Bug Tracker
- Improve Code by Removing It
- Install Me
- Inter-Process Communication Affects Application Response Time
- Keep the Build Clean
- Know How to Use Command-line Tools
- Know Well More than Two Programming Languages
- Know Your IDE
- Know Your Limits
- Know Your Next Commit
- Large Interconnected Data Belongs to a Database
- Learn Foreign Languages
- Learn to Estimate
- Learn to Say "Hello, World"
- Let Your Project Speak for Itself
- The Linker Is not a Magical Program
- The Longevity of Interim Solutions
- Make Interfaces Easy to Use Correctly and Hard to Use Incorrectly
- Make the Invisible More Visible
- Message Passing Leads to Better Scalability in Parallel Systems
- A Message to the Future
- Missing Opportunities for Polymorphism
- News of the Weird: Testers Are Your Friends
- One Binary
- Only the Code Tells the Truth
- Own (and Refactor) the Build
- Pair Program and Feel the Flow
- Prefer Domain-Specific Types to Primitive Types
- Prevent Errors
- The Professional Programmer
- Put Everything Under Version Control
- Put the Mouse Down and Step Away from the Keyboard
- Read Code
- Read the Humanities
- Reinvent the Wheel Often
- Resist the Temptation of the Singleton Pattern
- The Road to Performance Is Littered with Dirty Code Bombs
- Simplicity Comes from Reduction
- The Single Responsibility Principle
- Start from Yes
- Step Back and Automate, Automate, Automate
- Take Advantage of Code Analysis Tools
- Test for Required Behavior, not Incidental Behavior
- Test Precisely and Concretely
- Test While You Sleep (and over Weekends)
- Testing Is the Engineering Rigor of Software Development
- Thinking in States
- Two Heads Are Often Better than One
- Two Wrongs Can Make a Right (and Are Difficult to Fix)
- Ubuntu Coding for Your Friends
- The Unix Tools Are Your Friends
- Use the Right Algorithm and Data Structure
- Verbose Logging Will Disturb Your Sleep
- WET Dilutes Performance Bottlenecks
- When Programmers and Testers Collaborate
- Write Code as If You Had to Support It for the Rest of Your Life
- Write Small Functions Using Examples
- Write Tests for People
- You Gotta Care about the Code
- Your Customers Do not Mean What They Say