Cover image for Code Simplicity

Book description

Good software design is simple and easy to understand. Unfortunately, the average computer program today is so complex that no one could possibly comprehend how all the code works. This concise guide helps you understand the fundamentals of good design through scientific laws—principles you can apply to any programming language or project from here to eternity.

Whether you’re a junior programmer, senior software engineer, or non-technical manager, you’ll learn how to create a sound plan for your software project, and make better decisions about the pattern and structure of your system.

  • Discover why good software design has become the missing science
  • Understand the ultimate purpose of software and the goals of good design
  • Determine the value of your design now and in the future
  • Examine real-world examples that demonstrate how a system changes over time
  • Create designs that allow for the most change in the environment with the least change in the software
  • Make easier changes in the future by keeping your code simpler now
  • Gain better knowledge of your software’s behavior with more accurate tests

Table of Contents

  1. Code Simplicity
  2. Preface
    1. Definitions, Facts, Rules, and Laws
    2. Conventions Used in This Book
    3. Attribution and Permissions
    4. Safari® Books Online
    5. How to Contact The Author
    6. How to Contact O’Reilly
    7. Acknowledgments
    8. Content Updates
      1. June 13, 2012
  3. 1. Introduction
    1. Why Simplicity?
    2. Software Design
  4. 2. The Purpose of Software
    1. Real-World Application
  5. 3. The Future
    1. The Equation of Software Design
      1. Value
        1. Probability of value and potential value
        2. Balance of harm
        3. The value of having users
      2. Effort
      3. Maintenance
      4. The Full Equation
      5. Reducing the Equation
      6. What You Do and Do Not Want
    2. The Quality of Design
    3. Unforeseeable Consequences
  6. 4. Change
    1. Change in a Real-World Program
    2. The Three Flaws
      1. Writing Code That Isn’t Needed
      2. Not Making the Code Easy to Change
      3. Being Too Generic
    3. Incremental Development and Design
  7. 5. Defects and Design
    1. If It Ain’t Broken...
    2. Don’t Repeat Yourself
  8. 6. Simplicity
    1. Simplicity and the Equation of Software Design
    2. Simplicity Is Relative
    3. How Simple Do You Have to Be?
    4. Be Consistent
    5. Readability
      1. Naming Things
      2. Comments
    6. Simplicity Requires Design
  9. 7. Complexity
    1. Complexity and Purpose
    2. Bad Technologies
      1. Survival Potential
      2. Interoperability
      3. Attention to Quality
      4. Other Reasons
    3. Complexity and the Wrong Solution
      1. What Problem Are You Trying to Solve?
    4. Complex Problems
    5. Handling Complexity
      1. Making One Piece Simpler
      2. Unfixable Complexity
    6. Rewriting
  10. 8. Testing
  11. A. The Laws of Software Design
  12. B. Facts, Laws, Rules, and Definitions
  13. About the Author
  14. Copyright