Preface
- Second Edition
- About the Cover
Software Development Axioms
- Terms of Endearment
- Axiom
- Dogma
- Habit
- Introducing the Axioms to a Codebase
- Be Lazy
- What’s Next?
That One’s A “True”
The Egg
Closing Safely
Rube Goldberg 3.0
Unmanaged Code Considered Harmful
No Wonder Software Works Like Shit!
Are You Using Threads for Everything Yet?
Service Container is the Best Thing Since Timesliced Bread
Tales From The Factory
Using Annotations in an IoC Protocol
Code Without Tests is Like a Life Without Sunshine
Don’t Float Away
A Journey into the Depths of Hell, aka Interop
If I See Another NullPointerException I’m Gonna Yak!
PSA For Control Structures
Protect Your Code From “Joey”
Axioms: Input Validation
- Trust No One
- Help Others
- Say Something Righteous!
- Special CLR Section
- Special Javascript Section
- Defense in Depth
- Summary
Axioms: Naming
- Length
- Renaming
Axioms: Guarantee of non-NULL
- Collections
- Object-oriented Programming
Axioms: Immutability and Deep Protection
- Instances
- Collections
- Collection Elements
Axioms: Caller Controls Context
- Technique
- Special .NET Section
Axioms: Error Propagation
- Grrrr, Fire Bad!!!
- Top-Level Contexts
- Don’t make Decisions for the Caller
- Don’t Strip Information
- Fucking and Punching
Axioms: Error Control
- Foreign Code
- Logging
- Special Java Section
- Special IDE Section
- Resources and Error Control
- Another IDE Epic Fail
- Reducing Burden
- Special Java Section
- Don’t Catch
NullPointerException - Visual Aid
Axioms: Intra-function Organization
- Formatting and Whitespace
- Documentation Comments
- Size
- Fail Fast
- Data Flow
- One Line, One Statement
Axioms: Handling Resources
- Using Resources
- Accepting Resources
- RAII Bye Bye
- File Names
- Other Resources
- Format Your Way out of a Paper Bag
Axioms: Lifecycle
- Lifecycle Start
- Lifecycle Stop
- Duals
Axioms: Taint
NULLis Taintunsignedis TaintIDisposable/AutoCloseableis Taint- Special .NET Section:
async/awaitis Taint
Axioms: Multi-threading
- Debugging
- Data flow
- Sharing
- Thread-safety
- Use Platform Tools
- The UI Thread
Axioms: Writing Tests
- Prototyping the Design
- Positive and Negative
- More Greek than Italian
- Three from Column A
- Tests are Code Too
Axioms: Troubleshooting
- Home Sweet Debugger
- Playing Away
- Home Again, Home Again, Jiggity-Jig
- Special .NET Section:
TraceSwitch
Axioms: SQL
- Not String Processing
- Use Parameter Markers
- Use Configuration
- Dynamic
WHERE - Stored Procedures Suck at Dynamic SQL
- SQL Is Code Too!
- Don’t Rewrite History
Axioms: XML
- Use High-level Tooling
- Use Writer Tooling
- Use DOM Tooling
- Use XSL Transforms
List of Axioms
Epilogue
- Second Edition Epilogue