O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Understanding Software

Book Description

Software legend Max Kanat-Alexander shows you how to succeed as a developer by embracing simplicity, with forty-three essays that will help you really understand the software you work with.

About This Book

  • Read and enjoy the superlative writing and insights of the legendary Max Kanat-Alexander
  • Learn and reflect with Max on how to bring simplicity to your software design principles
  • Discover the secrets of rockstar programmers and how to also just suck less as a programmer

Who This Book Is For

Understanding Software is for every programmer, or anyone who works with programmers. If life is feeling more complex than it should be, and you need to touch base with some clear thinking again, this book is for you. If you need some inspiration and a reminder of how to approach your work as a programmer by embracing some simplicity in your work again, this book is for you.

If you're one of Max's followers already, this book is a collection of Max's thoughts selected and curated for you to enjoy and reflect on. If you're new to Max's work, and ready to connect with the power of simplicity again, this book is for you!

What You Will Learn

  • See how to bring simplicity and success to your programming world
  • Clues to complexity - and how to build excellent software
  • Simplicity and software design
  • Principles for programmers
  • The secrets of rockstar programmers
  • Max's views and interpretation of the Software industry
  • Why Programmers suck and how to suck less as a programmer
  • Software design in two sentences
  • What is a bug? Go deep into debugging

In Detail

In Understanding Software, Max Kanat-Alexander, Technical Lead for Code Health at Google, shows you how to bring simplicity back to computer programming. Max explains to you why programmers suck, and how to suck less as a programmer. There's just too much complex stuff in the world. Complex stuff can't be used, and it breaks too easily. Complexity is stupid. Simplicity is smart.

Understanding Software covers many areas of programming, from how to write simple code to profound insights into programming, and then how to suck less at what you do! You'll discover the problems with software complexity, the root of its causes, and how to use simplicity to create great software. You'll examine debugging like you've never done before, and how to get a handle on being happy while working in teams.

Max brings a selection of carefully crafted essays, thoughts, and advice about working and succeeding in the software industry, from his legendary blog Code Simplicity. Max has crafted forty-three essays which have the power to help you avoid complexity and embrace simplicity, so you can be a happier and more successful developer.

Max's technical knowledge, insight, and kindness, has earned him a status as a code guru, and his ideas will inspire you and help refresh your approach to the challenges of being a developer.

Style and approach

Understanding Software is a new selection of carefully chosen and crafted essays from Max Kanat-Alexander's legendary blog call Code Simplicity. Max's writing and thoughts are great to sit and read cover to cover, or if you prefer you can drop in and see what you discover new every single time!

Table of Contents

  1. Understanding Software
    1. Table of Contents
    2. Understanding Software
    3. Credits
    4. About the Author
    5. www.PacktPub.com
      1. eBooks, discount offers, and more
        1. Why subscribe?
    6. Customer Feedback
    7. Foreword
    8. One. Principles for Programmers
      1. 1. Before You Begin…
        1. If You're Going To Do It Then Do it Well
      2. 2. The Engineer Attitude
      3. 3. The Singular Secret of the Rockstar Programmer
      4. 4. Software Design, in Two Sentences
    9. Two. Software Complexity and its Causes
      1. 5. Clues to Complexity
      2. 6. Ways To Create Complexity: Break Your API
      3. 7. When Is Backwards-Compatibility Not Worth It?
      4. 8. Complexity is a Prison
    10. Three. Simplicity and Software Design
      1. 9. Design from the Start
        1. Starting the Right Way
      2. 10. The Accuracy of Future Predictions
      3. 11. Simplicity and Strictness
      4. 12. Two is Too Many
        1. Refactoring
      5. 13. Sane Software Design
        1. The Wrong Way
          1. Analysis of The Wrong Way
          2. Bringing It To a Group
        2. The Right Way
        3. We followed all the Laws Of Software Design
    11. Four. Debugging
      1. 14. What is a Bug?
        1. Hardware
      2. 15. The Source of Bugs
        1. Compounding Complexity
      3. 16. Make It Never Come Back
        1. Make it Never Come Back – An Example
        2. Down the Rabbit Hole
      4. 17. The Fundamental Philosophy of Debugging
        1. Clarify the Bug
        2. Look at the System
        3. Find the Real Cause
        4. Four Steps
    12. Five. Engineering in Teams
      1. 18. Effective Engineering Productivity
          1. So What Should You Do?
        1. The Solution
          1. Credibility and Solving Problems
          2. The Blocker
          3. Moving Towards the Fundamental Problem
      2. 19. Measuring Developer Productivity
          1. The Definition of "Productivity"
          2. Why Not "Lines of Code?"
          3. Determining a Valid Metric
          4. What About When Your Product Is Code?
          5. What about People Who Work on Developer Productivity?
          6. Conclusion
      3. 20. How to Handle Code Complexity in a Software Company
        1. Step 1 – Problem Lists
        2. Step 2 – Meeting
        3. Step 3 – Bug Reports
        4. Step 4 – Prioritization
        5. Step 5 – Assignment
        6. Step 6 – Planning
      4. 21. Refactoring is about Features
        1. Being Effective
          1. Setting Refactoring Boundaries
        2. Refactoring Doesn't Waste Time, It Saves It
        3. Refactoring To Clarity
        4. Summary
      5. 22. Kindness and Code
        1. Software is about People
          1. An Example of Kindness
          2. Be Kind, and Make Better Software
      6. 23. Open Source Community, Simplified
        1. Retaining Contributors
          1. 1. Don't freeze the trunk for long periods
          2. 2. Turnover is inevitable
          3. 3. Respond to contributions immediately
          4. 4. Be extremely kind and visibly appreciative
          5. 5. Avoid personal negativity
        2. Removing the Barriers
          1. 1. A list of easy starting projects
          2. 2. Create and document communication channels
          3. 3. Excellent, complete, and simple documentation, describing exactly how a contribution should be done
          4. 4. Make all this documentation easy to find
        3. Getting People Interested
          1. Be a super-popular product
          2. Be written in a popular programming language
        4. Summary
    13. Six. Understanding Software
      1. 24. What is a Computer?
      2. 25. The Components of Software: Structure, Action, and Results
      3. 26. Software Revisited: (I)SAR Clarified
        1. Structure
        2. Action
        3. Results
        4. ISAR in a Single Line of Code
        5. Wrapping SAR Up
      4. 27. Software as Knowledge
      5. 28. The Purpose of Technology
        1. Are there Counter-Examples to this Rule?
        2. Is the Advance of Technology "Good"?
      6. 29. Privacy, Simplified
        1. Privacy of Space
        2. Privacy of Information
        3. A Summary of Privacy
      7. 30. Simplicity and Security
      8. 31. Test-Driven Development and the Cycle of Observation
        1. Examples of ODA
        2. Development Processes and Productivity
          1. The First ODA
      9. 32. The Philosophy of Testing
        1. Test Value
        2. Test Assertions
        3. Test Boundaries
        4. Test Assumptions
        5. Test Design
        6. End to End Testing
        7. Integration Testing
        8. Unit Testing
        9. Reality
        10. Fakes
        11. Determinism
        12. Speed
        13. Coverage
        14. Conclusion – The Overall Goal of Testing
    14. Seven. Suck Less
      1. 33. The Secret of Success: Suck Less
        1. Why is it that this worked?
      2. 34. How We Figured Out What Sucked
      3. 35. The Power of No
        1. Recognizing Bad Ideas
        2. Having No Better Idea
        3. Clarification: Acceptance and Politeness
      4. 36. Why Programmers Suck
        1. What to Study
      5. 37. The Secret of Fast Programming: Stop Thinking
        1. Understanding
        2. Drawing
        3. Starting
        4. Skipping a Step
        5. Physical Problems
        6. Distractions
        7. Self-Doubt
        8. False Ideas
        9. Caveat
      6. 38. Developer Hubris
      7. 39. "Consistency" Does Not Mean "Uniformity"
      8. 40. Users Have Problems, Developers Have Solutions
        1. Trust and Information
        2. Problems Come from Users
      9. 41. Instant Gratification = Instant Failure
        1. Solving for the long term
        2. How to Ruin Your Software Company
      10. 42. Success Comes from Execution, Not Innovation
      11. 43. Excellent Software
        1. 1. Does exactly what the user told it to do
        2. 2. Behaves exactly like the user expects it to behave
        3. 3. Does not block the user from communicating their intention
        4. Excellence is senior to (but is not in conflict with) code simplicity
    15. Index