Large-Scale C++ Software Design: John Lakos
Nick Wheeler, one of my favorite professors, liked to say that the best books about physics and mathematics were "short works by masters." Ideally, a book should be about a big idea, written by someone with a virtuoso's grasp of the subject and the talent to pare it down to its simplest form. This is a huge book about a medium-sized idea.
To be fair, this book plugs a gap in the literature on software design. When you read, say, Booch or Meyers, when they say "design", they mean exclusively logical design. They're entirely concerned with the relationships between the modules and classes you're working with. This book is the only one I know of that comprehensively deals with physical design: how those classes are physically laid out in source files, and the consequences for development efficiency. Anyone who has ever spent 5 hours of an 8 hour day actually programming, and the other 3 hours waiting for the program to compile knows that those consequences can be huge.
Unfortunately Lakos spends endless pages devoted to subjects that anyone who's ever written code for a living should either a) already know or b) instantly grasp in a sentence or two. At 800+ pages, the only non-reference books on my shelf that compare to it in length are McConnell's phone books and the three volumes of Knuth. If we were to assign elements to these to indicate information density, Lakos is lithium, McConnell iron, and Knuth is somewhere in the transuranic portion of the periodic table. As such, the book is probably best suited for someone who has done plenty of coding, but needs to work on their discipline a little bit, i.e. students taking their first professional job.
Luckily, the author has provided an out. If you turn to page 815 (!), you will find in Appendix D a list of all of the aphorism, principles, and tips from the main text. It's like a list of koans that distill the entire book down to a manageable length. If you squint at these 17 pages just right, this is a small book by a master. I promise you, reading these will give you 80+% of the value of the entire book. There are page references with each tip in case the meaning isn't instantly apparent.
Recommended if you are about to begin working on your first large software project, or if the compiles on your current project are taking more time than it takes to get to Starbucks and back. Make sure to buy a used copy though, Powell's will frequently have them in stock.
