Search icon CANCEL
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Conferences
Free Learning
Arrow right icon
Arrow up icon
GO TO TOP
Understanding Software

You're reading from   Understanding Software Max Kanat-Alexander on simplicity, coding, and how to suck less as a programmer

Arrow left icon
Product type Paperback
Published in Sep 2017
Publisher Packt
ISBN-13 9781788628815
Length 278 pages
Edition 1st Edition
Arrow right icon
Author (1):
Arrow left icon
Max Kanat-Alexander Max Kanat-Alexander
Author Profile Icon Max Kanat-Alexander
Max Kanat-Alexander
Arrow right icon
View More author details
Toc

Table of Contents (15) Chapters Close

1. Table of Contents
2. Understanding Software FREE CHAPTER
3. Credits
4. About the Author
5. www.PacktPub.com
6. Customer Feedback
7. Foreword
8. One. Principles for Programmers 9. Two. Software Complexity and its Causes 10. Three. Simplicity and Software Design 11. Four. Debugging 12. Five. Engineering in Teams 13. Six. Understanding Software 14. Seven. Suck Less 15. Index

Table of Contents

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