Codecraft¶
A collection of essays on software architecture and the craft of programming, by Daniel Hardman.
Craft¶
- What Is "Good Code"?
- Good Code Is Balanced
- Good Code Is Optimized
- A Quibble With Martin's "Optimize Later" Notion
- Good Code Is Named Right
- Good Code Plans for Problems
- How to turn coding standards into epic fails — or not
- Flexibility is No Virtue
- // Comments on Comments
- 3 Commandments of Performance Optimization
- The Power of Simplicity
- 6 Strategies to Simplify Software
- Small Files Are Your Friends
- What should code look like when we squint at it?
- Why you should use an IDE instead of vim or emacs
- Why you should be proficient in a tool like vim or emacs
- In Which Warnings Evolve Wings
Languages¶
- What Should Be In The Next C++ Compiler?
- Why Exceptions Aren't Enough
- How Enums Spread Disease — And How To Cure It
- Put Your Const Foot Forward
- How Sutter's Wrong About const in C++ 11
- 3 reasons to prefer references over pointers (C++)
- Programming Language Popularity Index
- My First Tangle With the Tower of Babel
- Headers, babies, and bathwater
- When good comments mean bad language
- Why we need try...finally, not just RAII
- How to make a const-correct codebase in 4300 easy steps
- Lacunas Everywhere
- Thoughts On Bridging the "Lacuna Humana"
- Introducing Marks
- Mountains, Molehills, and Markedness
- Grumpy Old Men, Opacity, and Optimizers
- Exploring the Power of Deixis
- How to point in code
- A better way to put data in code
- Variadic macros tricks
Systems¶
- Decoupling Interfaces As Versions Evolve, Part 1
- Decoupling Interfaces as Versions Evolve, Part 2
- Decoupling Interfaces as Versions Evolve, Part 3
- Big Data In Motion
- The Scaling Fallacy
- Don't forget the circuit breakers
- Big Crud Isn't Big Data
- Why Your Software Should Cry
- Good fences make good neighbors
- Programmers: learn how to "cloudify"
- Features are not chunks of code
- Convoys as a model for distributed architectures
- What are your software's vital signs?
- My first software-defined supercompute cluster
- Add some more extra redundancy again
- Taming Side Agreements
- On pains and brains
Strategy¶
- 6.0 Syndrome
- Are You Designing an Apex Predator?
- Why Cannibalism May Be Smart Business
- Paying Off Technical Debt
- Tech Debt, Leverage, and Grandma's Envelope
- Architects: manage risk like a Vegas bookie
- The third half of computational economics
Process¶
Communication¶
- What makes high-value questions?
- Hair-Raising Words
- Unencapsulate Yourself
- Smart Geeks Think Like Cheerleaders
- Why Software Artisans Should Manage Their Influence
- Are We Smart Enough to Use Kind Words?
Organization¶
- Why Weakened Dev Teams Suffer From NIH Syndrome
- Evolving Software Politics
- Coping With Organizational Alzheimers
- Learned Helplessness, Rats, and People Power
- Are You Losing Enough Battles?
- Encapsulation isn't just for code
- "Rockstar Developers" are a dangerous myth
User Experience¶
- Annotating the Web
- Role-Play Centered Design
- Example RPCD Interaction
- Long-Term Benefits of RPCD
- What Role Are You Playing in RPCD?
- Users Aren't The Only People In Your Software
- Progressive Disclosure Everywhere
- A Comedy of Carelessness
- A grumble about buckets
Learning¶
- Role Models
- Don Kleinschnitz: Put a stake in the ground.
- Steve Tolman: It depends.
- Ken Ebert: Kill three birds.
- Roland Whatcott: Manage momentum.
- Julie Jones: Learn voraciously.
- Six Learning Tips For Tech Folks
- Humility
- Lynn Bendixsen: Listen.
- Book Review: Poke the Box
- Why Mental Models Matter
- All I Really Need To Know I Didn't Learn In Compugarten
- George and the Flood
- Earned Pragmatism
- Interrupting my interruptions
- Book Review: Universal Principles of Design
- Courage Counts
- Know Your Limits
- My Bibifi Adventure
- On Forests and Trees
Reflections¶
- Why People Are Part of A Software Architecture
- What is a "Software Architect?"
- What a Software Architect is NOT
- How Software Is Like Biology
- Manifestos
- The 8th Characteristic
- Why I don't blog about "great code"
- On SEPs, Squirrels, and Meta Questions
- Why
- Farewell to Google Reader
- Do Androids Browse (For Electric Sheep)?
- Adios to "computer programming"
- On bread recipes, maps, and intentions
- A More Important Manifesto