Firmware developer's essential reading list
Confessions of a Used Program Salesman, Will Tracz. This is one of the best books about reuse. Presented in a fun, readable, and very accessible manner.
Debugging by David Agans. Most of us have an ad hoc approach to finding bugs. Agans lays out a step-by-step approach. I disagree with his assessment that we must read the databook cover to cover first; with some parts having a 5,000-page datasheet, that's impractical. But this other ideas are gems.
Object-Oriented Software Construction, Bertrand Meyer. Hands down the best book about OO around. Meyer takes the reader through the entire process of writing object-oriented code. The book is brilliantly-written and deserves a Pulitzer of tech writing. Alas, he does teach Eiffel in it, but all of the ideas scale to C++.
An Embedded Software Primer by David E. Simon. It's aimed at the novice or nearly novice embedded person, one with experience in C but little feel for the unique issues of embedded systems. The book starts with the standard introduction to microprocessor hardware (which could have been left out), but quickly moves on to a very good description of interrupts; this section alone is quite worthwhile. And from there it delves into one of the best discussions of RTOSes anywhere.
Computer Approximations, by John Hart. The art of computer approximations is establishing a balance between accuracy and computational burden. Nearly all commonly used approximations do use polynomials. The trick is figuring out the best mix of coefficients and terms. This is the best book on the subject, although it offers little in terms of theoretical insight. The meat is in it's Tables of Coefficients. There you'll find 150 pages of polynomial coefficients for square and cube roots, exponentials, trig and inverse trig, and logs. The coolest part of this is the large number of solutions for each function: do you want a slow accurate answer or a fast fuzzy one? Hart gives you your choice.
It's not the easiest book to use. Hart assumes we're all mathematical whizzes, making some of it heavy going. Do skim over the math section, and figure out Hart's basic approach to implementing an approximation. His notation is quite baffling: until I figured out that (+3) +.19400 means multiply .194 times 10**3, none of my code worked.
eXtreme Programming Explained. Kent Beck's book is a classic of agile programming. Very readable, very interesting, and full of good ideas. I don't buy into it all, but Beck is thought-provoking and might change some of your approach to development.
Balancing Agility and Discipline, Barry Boehm and Richard Turner. Some of the agile pronouncements are a bit hard to buy for firmware. Zealots on both sides muddy the issues. In this book the authors define five parameters that help one make an engineering decision about where to be in the agile vs. plan-driven approaches.
Jack G. Ganssle is a lecturer and consultant on embedded development issues. He conducts seminars on embedded systems and helps companies with their embedded challenges, and works as an expert witness on embedded issues. Contact him at firstname.lastname@example.org. His website is www.ganssle.com.