A long-term collection of texts I revisit.
Five layers: Programming (implementation), Tests (quality) , Engineering Process (structure), Culture (foundation), and Others (misc high-quality references).
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.
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
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 Configuration Complexity Clock
- Cognitive Load (GitHub)
- Agile Was Never Your Problem
- You Are Not Refactoring
- Fast (Catherine Jue) — speed as process philosophy.
- Refactoring English – Essays That Shaped Me
- Six Programmers and Type System
Culture
The base that supports everything else.
- Le Guin Precepts
- 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
Others
High-quality references that don’t fit perfectly elsewhere
- A Distributed Systems Reading List
- Brendan Gregg - Linux Performance
- Mitchell Hashimoto – As Code
- Eaton Phil – DB I/O
- Memory Allocation — visualizing allocators.
- Linux is Not an Operating System
- C Isn’t a Programming Language Anymore
- Beej Guides — C, networking, Git.
- Jepsen – TigerBeetle
- How Go Memory Works
- Building S3
- Be Simple (Rust Example)
- Programming Languages (Pierce)
- Oxide’s Rust Cancel Safety
- The Copenhagen Book — fundamentals of auth design.
- Renting Is for Suckers
- Algorithms for Modern Hardware
- MLOps (Huyen Chip)
- SRE Google - Example Postmortem
- How to Scale Your Model (JAX Book)
- CPU (Gamozo)
- How Memory Works
- Programming Feedback for Advanced Beginners
- Notes and Impact — discussions on impact.
- Scalability! But at what COST?