0%

Book Description

Seriously Good Software is a handbook for any professional developer serious about improving application quality. It explores fundamental dimensions of code quality by enhancing a simple implementation into a robust, professional-quality application. Questions, exercises, and Java-based examples ensure you’ll get a firm grasp of the concepts as you go. When you finish the last version of the book’s central project, you’ll be able to confidently choose the right optimizations for your code.

Table of Contents

  1. Copyright
  2. Brief Table of Contents
  3. Table of Contents
  4. Foreword
  5. Preface
  6. Acknowledgments
  7. About This Book
  8. About the Author
  9. About the Cover
  10. Part 1. Preliminaries
    1. Chapter 1. Software qualities and a problem to solve
      1. 1.1. Software qualities
      2. 1.2. Mostly external software qualities
      3. 1.3. Mostly internal software qualities
      4. 1.4. Interactions between software qualities
      5. 1.5. Special qualities
      6. 1.6. The recurring example: A system of water containers
      7. 1.7. Data model and representations
      8. 1.8. Hello containers!    [Novice]
      9. Summary
      10. Further reading
    2. Chapter 2. Reference implementation
      1. 2.1. The code    [Reference]
      2. 2.2. Memory requirements
      3. 2.3. Time complexity
      4. 2.4. Applying what you learned
      5. Summary
      6. Answers to quizzes and exercises
      7. Further reading
  11. Part 2. Software Qualities
    1. Chapter 3. Need for speed: Time efficiency
      1. 3.1. Adding water in constant time    [Speed1]
      2. 3.2. Adding connections in constant time    [Speed2]
      3. 3.3. The best balance: Union-find algorithms    [Speed3]
      4. 3.4. Comparing implementations
      5. 3.5. And now for something completely different
      6. 3.6. Real-world use cases
      7. 3.7. Applying what you learned
      8. Summary
      9. Answers to quizzes and exercises
      10. Further reading
    2. Chapter 4. Precious memory: Space efficiency
      1. 4.1. Gently squeezing    [Memory1]
      2. 4.2. Plain arrays    [Memory2]
      3. 4.3. Forgoing objects    [Memory3]
      4. 4.4. The black hole    [Memory4]
      5. 4.5. Space-time trade-offs
      6. 4.6. And now for something completely different
      7. 4.7. Real-world use cases
      8. 4.8. Applying what you learned
      9. Summary
      10. Answers to quizzes and exercises
      11. Further reading
    3. Chapter 5. Self-conscious code: Reliability through monitoring
      1. 5.1. Design by contract
      2. 5.2. Designing containers by contract
      3. 5.3. Containers that check their contracts    [Contracts]
      4. 5.4. Containers that check their invariants    [Invariants]
      5. 5.5. And now for something completely different
      6. 5.6. Real-world use cases
      7. 5.7. Applying what you learned
      8. Summary
      9. Answers to quizzes and exercises
      10. Further reading
    4. Chapter 6. Lie to me: Reliability through testing
      1. 6.1. Basic testing notions
      2. 6.2. Testing containers    [UnitTests]
      3. 6.3. Testability    [Testable]
      4. 6.4. And now for something completely different
      5. 6.5. Real-world use cases
      6. 6.6. Applying what you learned
      7. Summary
      8. Answers to quizzes and exercises
      9. Further reading
    5. Chapter 7. Coding aloud: Readability
      1. 7.1. Points of view on readability
      2. 7.2. Structural readability features
      3. 7.3. Exterior readability features
      4. 7.4. Readable containers    [Readable]
      5. 7.5. Final thoughts on readability
      6. 7.6. And now for something completely different
      7. 7.7. Real-world use cases
      8. 7.8. Applying what you learned
      9. Summary
      10. Answers to quizzes and exercises
      11. Further reading
    6. Chapter 8. Many cooks in the kitchen: Thread safety
      1. 8.1. Challenges to thread safety
      2. 8.2. Dealing with deadlocks
      3. 8.3. Thread-safe containers    [ThreadSafe]
      4. 8.4. Immutability    [Immutable]
      5. 8.5. And now for something completely different
      6. 8.6. Real-world use cases
      7. 8.7. Applying what you learned
      8. Summary
      9. Answers to quizzes and exercises
      10. Further reading
    7. Chapter 9. Please recycle: Reusability
      1. 9.1. Establishing boundaries
      2. 9.2. The general framework
      3. 9.3. A generic container implementation
      4. 9.4. General considerations
      5. 9.5. Recovering water containers    [Generic]
      6. 9.6. Social network posts
      7. 9.7. And now for something completely different
      8. 9.8. Real-world use cases
      9. 9.9. Applying what you learned
      10. Summary
      11. Answers to quizzes and exercises
      12. Further reading
  12. Appendix A. Code golf: Succinctness
    1. A.1. The shortest I came up with    [Golfing]
    2. Further reading
  13. Appendix B. The ultimate water container class
    1. B.1. Readability enhancements
    2. B.2. Reliability enhancements
  14. The programmer’s journey
  15. A list of the main classes from each chapter
  16. Index
  17. List of Figures
  18. List of Tables
  19. List of Listings
18.221.41.214