library
A long-term collection of texts I revisit, in five layers. Culture is the foundation; everything else stands on it.
- programming: how we implement ideas
- tests: quality, design, verification
- engineering process: how the work is structured
- culture: the foundation
- others: high quality, fits nowhere else
Programming
How we implement ideas
- Knuth – Programming as an Art
- Peter Naur – Programming as Theory Building
- OSTEP — the definitive OS textbook.
- What Every Programmer Should Know About Memory
- Simple Made Easy
- Joe Armstrong Thesis — concurrency and fault tolerance.
- Peter Norvig – Good Style
- Peter Norvig – Design Patterns
- Armstrong – Why OOP Sucks
- PACELC Theorem — latency vs consistency.
- Tiger Style — system design philosophy.
- 5 Rules Programming (Rob Pike)
- Napkin Math — intuitive performance math.
- Hyrum’s Law
- The Wrong Abstraction
- Write Code That Is Easy to Delete
- Ousterhout – Modular Design
- The Error Model
- Notes on Structured Concurrency
- Wirth – Program Development by Stepwise Refinement
- Perlis – Epigrams in Programming
- Antirez – Code Comments
Tests
Quality: Design, strategy, and verification
- How to Test
- Dirty Database
- Bad Tests
- Unit and Integration Tests
- Don’t Write Bugs
- TODOS Aren’t for Doing
- SMURF – Beyond the Test Pyramid
- Toilet Tests (Risk Driven Testing)
- Test Sizes (Google)
- Testing With Expectations (Janestreet)
- Testing With Expectations 2
- Testing on error handling code
- Catch Flakes on Main
- Write Tests. Not Too Many.
Engineering Process
How we work together to build.
- Effective design docs
- Modern CI
- The Evolution of SRE at Google
- Cognitive Load is What Matters
- How to Communicate in a Remote Startup
- Google Platform Rant
- Performing for the Job Title
- Clean Code, Horrible Performance
- The Only Unbreakable Law
- The Configuration Complexity Clock
- Cognitive Load (GitHub)
- Fast (Catherine Jue) — speed as process philosophy.
- Refactoring English – Essays That Shaped Me
- Six Programmers and Type System
- Google Engineering Practices
- Russ Cox – Our Software Dependency Problem
- Against Innovation Tokens
- Always Be Blaming
- 20 Years of SRE Lessons Learned
- Plan-Execute Pattern
Culture
The base that supports everything else.
- Le Guin Precepts
- Feynman - What Problems to Solve
- Basic Things
- Cold-Blooded Software
- Grug Brain Developer — complexity bad.
- Programming Sucks
- The Importance of Off Topic
- Feynman – Cargo Cult Science
- Feynman Blackboard
- Are You OK
- Most Tech Content is Bullshit
- Imaginary Problems Are the Root of Bad Software
- Chinese Tech Terms
- Oil Shell Blog (Spolsky) — language and clarity.
- Debugging Leadership — people before process.
- Process Debt
- Rocket Science of Meetings — meetings that matter.
- Agile Manifesto
- Engineering Ladders
- Negotiate Anything
- How to Ship
- Antirez – We Are Destroying Software
- Kitchen Sink
- The Cathedral and the Bazaar
- The Best of edw519
- Programming Aphorisms
- Rachel – Scale
- Suspicious Discontinuities
Others
High-quality references that don’t fit perfectly elsewhere
- A Distributed Systems Reading List
- Brendan Gregg - Linux Performance
- Memory Allocation — visualizing allocators.
- Beej Guides — C, networking, Git.
- Programming Languages (Pierce)
- The Copenhagen Book — fundamentals of auth design.
- Algorithms for Modern Hardware
- SRE Google - Example Postmortem
- Scalability! But at what COST?
- Queues Don’t Fix Overload
- CAP Is Nearly Irrelevant
- Meet Alice, Alice Is Impatient
- The Distributed Computing Manifesto (1998)
- Jails – FreeBSD
- A Decade of Major Cache Incidents at Twitter
- Teach Yourself CS
- Software Engineering at Google
- Jepsen – Consistency Models
- Rust Atomics and Locks
More references in my monthly log.