Elecia White posed a question that I enjoyed thinking through, and I wanted to share my answer here.
Here’s my list of 10, presented in no particular order.
- Systemantics (The Systems Bible) by John Gall
- Thinking in Systems by Donella Meadows
- Timeless Laws of Software Development by Jerry Fitzpatrick (Embedded Artistry Notes)
- Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems by David Agans (Embedded Artistry Notes)
- Making Embedded Systems: Design Patterns for Great Software, 2nd edition, by Elecia White
- Better Embedded System Software by Phil Koopman
- A Philosophy of Software Design by John Ousterhout
- Working Effectively with Legacy Code by Michael Feathers
- Refactoring: Improving the Design of Existing Code by Martin Fowler
- Test Driven Development for Embedded C by James Grenning
It’s hard to limit myself here – I’ve read so many great books. I’m more comfortable with 15 that I’d put a hard yes to, which would leave a great mix of practical, insightful, enjoyable, and reference material.
- The Art of Electronics by Paul Horowitz and Winfield Hill
- Practical UML Statecharts in C/C++ by Miro Samek
- Just Enough Software Architecture: A Risk-Driven Approach by George Fairbanks
- Small Memory Software: Patterns for Systems with Limited Memory by James Noble and Charles Weir (Online version)
- The Art of Readable Code by Dustin Boswell and Trevor Foucher
As for where to put the books, I’d put them right next to the coffee machine or next to the door of the engineering area. I want it to be seen frequently!
The Full List
Of course, there are many other excellent books I’d want to have (and do have!) on our library shelf:
- Documenting Software Architectures: Views and Beyond by Clements et al.
- Becoming a Technical Leader by Gerald Weinberg
- Programming Beyond Practices by Gregory T. Brown
- Head First Design Patterns by Eric Freeman and Elisabeth Robson
- The Pragmatic Programmer by David Thomas and Andrew Hunt
- Embedded Software Design by Jacob Beningo
- Reusable Firmware Development: A Practical Approach to APIs, HALs, and Drivers by Jacob Beningo
- Patterns in the Machine : A Software Engineering Guide to Embedded Development by John Taylor and Wayne Taylor
- Computer Organization and Design by David Patterson and John Hennessy
- The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change by Camille Fournier
- The Unwritten Laws of Engineering by James Skakoon
- “Looks Good to Me:” Constructive Code Reviews by Adrienne Braganza
- A Tour of C++ by Bjarne Stroustrup
- Real-Time C++ by Christopher Kormanyos
- Effective Modern C++ by Scott Meyers

Excellent list. I like your inclusion of systems & management books, that’s the real world. I’ve followed the blog for years, it’s clear that you live in the real world.
If I had to make any changes*, I’d:
replace “The Art of Electronics” with “Teach Yourself Electricity and Electronics, 7th Ed” (Gibilisco)
delete the 2 Beningo books (replace them with the 2 below)
add another debugging book (BTW Agans is great!) — “If I Only Changed the Software, Why is the Phone on Fire?: Embedded Debugging Methods Revealed: Technical Mysteries for Engineers” by Lisa Simone
another book on C++ / Embedded — “C++ in Embedded Systems: A practical transition from C to modern C”
Sorry I didn’t include links but anyone reading this comment knows how to use Google & Amazon
Thanks again for your list. I think it can be useful to a lot of engineers.
I wish we (the U.S.) would operate budgets this way — if you want to increase spending on X, you have to decrease spending on Y & Z by the same amount. Our $39T debt is crushing to young people, really to everyone in the U.S. Not political, not right or left, just common sense IMO.
P.S. Also there were many books (which will remain anonymous) that I feared you might include that you didn’t, impressed by that. For example, K & R’s book on C (I learned on that), for some reason people worship it but it’s really not that good, and it’s outdated. Cargo cult book. Others will remain in the shadows unless someone recommends them, then I’ll have to voice my respectful dissent.
P.P.S. Man, I can’t help myself. If I could add one more, I’d add an RTOS book… either Labrosse/Micrium’s book on uC/OS-III, or Lamie’s book “Real-Time Embedded Multithreading Using ThreadX” (3rd ed)
There’s one book that I really enjoyed that it seems few people have heard of. The original title was “The Dog Barks When the Phone Rings: An Engineer’s Guide to Solving Problems” but the re-print just has it as “An Engineer’s Guide to Solving Problems”, by Bob Schmidt. It’s a great text for those entering any field that requires problem-solving, but especially technical fields. I took away so many excellent practical tips from this (which I originally read while in college), the biggest ones being to write stuff down more often, and to approach problems with a fixed list of questions in mind, which are iterated on as more about the problem is revealed.