Tenderfoot: Recommended Reading
Twenty years ago I read Code Complete by Steve McConnell. And then read it again. And again. And again. Of all the books I have read during my career, I believe this was the book that catapulted me from a young electrical engineer to a young and aspiring embedded software engineer. So to all the ‘tenderfoots’ embarking upon an embedded systems and especially embedded software and firmware career, this entry is for you.
First, I would certainly recommend that all engineers read and read often. Blogs are great and should certainly be a part of exposing ourselves to new ideas and material, but it is hard to argue with the benefits of a well thought out, reviewed, edited, and published book. Furthermore, I love my Kindle, but if I expect a book to be a valuable partner in my engineering travels, then my preference is for real physical paper, the kind with some margins to scratch notes upon. So, here is a partial list of books that have influenced my career and expanded my engineering and software capabilities.
As already mentioned, Code Complete was an early addition to my bookshelf and a substantial early contributor to my general software development skillset. This is the book where we learn the difference between poor and good coding styles, the dangers of deep code nesting, table driven methods, information hiding, an introduction to estimating software schedules, and much more. Recall that I was an electrical engineering graduate with only a single computer science class under my belt when I first tackled this book. The contents rapidly helped morph me into a professional software engineer. I also own and enjoyed Code Complete 2, but I have to admit, I still have a preference for the original edition.
Practical Statecharts, and the 2nd edition Practical UML Statecharts in C/C++: Event-Driven Programming for Embedded Systems introduced me to one of my most valuable and long running embedded software and firmware design techniques. I still remember, many years ago, obtaining my first copy of Samek’s book and (gasp) allowing my lovely wife to drive during a road trip, giving me extra time to read and take notes. I truly experienced an Eureka! moment while reading this book. Suddenly, many of the design problems we were struggling with at the office had a clear solution. My first sketch of our system’s primary application state machine, sketched while cruising down the interstate after reading Samek’s book, survived a decade of product development, six generations of SoCs changes, multiple vice presidents, three corporate reorganizations, and 20+ embedded software engineers banging away and maintaining the code. To this day, it is nearly impossible for me to consider a flat state machine design: hierarchical state machines rule-the-day. Not sure what a “statechart” or “hierarchical state machine” is? Grab a copy of Samek’s book, or head over to his website for details! Once absorbing the materials of the master, take a look at a few of my notes too. Nice to see Samek contributing to embeddedrelated.com as well!
Another excellent book, that I must have loaned out, as it seems to have disappeared from my bookshelf. Pragmatic Programmer hits upon many practical tips and hard earned wisdom. Of all the points presented by this book, the primary influencing point for me was and is the principle of “DRY—Don’t Repeat Yourself”. This pragmatic recommendation is critical to high quality software, software designs, architectures, and maintainable software. It would serve many engineers to be a bit religious on this point. This bit of wisdom has served my career nicely and represented a critical principle for my efforts when architecting large and complex embedded software designs.
Another McConnell book! Another excellent book. When a software engineer’s career moves into or towards leadership roles, this book is highly recommended. This was another McConnell book that I kept close at hand and referred to many times when planning large embedded software projects. My boss bought a copy. And then my boss bought a copy for his boss. Covering topics such as lifecycle planning, software schedule estimation, customer-oriented practices, teamwork, high-performance teams, project recovery options, and much more, this book will expose software engineers to many software project planning and management topics, creating better leaders and project planners. In particular I loved reading the “Classic Mistakes” and “Case Studies” through-out the book.
Grenning’s book is the newest in my list, yet I already know that Grenning’s guidance will serve my embedded software engineering efforts for years to come. If not yet familiar with Test Driven Development (TDD), grab a copy of Grenning’s book and hit google and learn more. Having now used this approach on two projects, I now find it awkward to work on a software project not using a TDD methodology. It was Grenning’s book that first inspired me to lead a firmware project using TDD. Try it, and feel the courage! As Grenning has noted: “You can run a project with TDD or DLP(Debug Later Programming)”. My recommendation is TDD!
Ok, I’m cheating. This isn’t a book, this is a person. Although Ganssle has authored various books, in this case I am simply pointing out Ganssle’s influence on my career through his many articles in the now defunct Embedded Systems Programming magazine. Thankfully, Ganssle maintains an archive on his website. Recommended reading!
Ok, I would love to say more about various C++ authors, the importance of C++11 and beyond, project management authors, and other embedded topics, but this is enough for today. Let’s open up for comments and hear from other readers on which books they recommend to the ‘tenderfoots’ in our audience.
From Twitter user Hassin Ayaz (https://twitter.com/ayz3mbedded) I received the following comment:
"What about "making embedded sytems by elicia white" @logicalelegance .. i found the 3 diagram approach to start firmware design very helpful"
To post reply to a comment, click on the 'reply' button attached to each comment. To post a new comment (not a reply to a comment) check out the 'Write a Comment' tab at the top of the comments.
Please login (on the right) if you already have an account on this platform.
Otherwise, please use this form to register (free) an join one of the largest online community for Electrical/Embedded/DSP/FPGA/ML engineers: