Top positive review
Just wanted to add another 5-star rating for this book
February 14, 2012
There's not much to say that previous reviewers haven't already mentioned, but I'll say them anyway because I love this book. I'm in awe at the way this book presents the most useful concepts from many of the other seminal works (GoF Design Patterns, the Effective C++ series, Code Complete, etc.) and distills them into readable, understandable design practices in each and every chapter. It doesn't replace the other books if you need extensive details or background theory, but for experienced C++ programmers this book encapsulates the most-commonly-used daily techniques. Like another reviewer notes, the book's title is 'API Design' but don't let that fool you into thinking this book is about creating libraries. The reality is that good programming practice involves creating interfaces (APIs) to blocks of modular re-usable code and then tying those blocks together into a functional application. Even if your code will never be seen by a third party, the concepts in this book will help you write far more maintainable, re-usable in-house code.
This book is also chock-full of little gems of knowledge that typically require scouring the web and then sorting the wheat from the chaff. For example, pages 195-197 contain a concise list of the C++ operator syntax, showing the operator name, the typical syntax, and the recommended operator declaration to use (both free-function and member forms) if you want to overload that operator while maintaining compatibility with the standard C/C++ usage of that operator. This is the table that should have been included in Stroustrup's 'The C++ Programming Language' but wasn't.
Last but not least, the breadth of topics discussed is outstanding. Everything from how to begin the design of an interface (API), through the most commonly-used implementation design patterns, coding conventions, version numbering, performance, documentation, testing, script binding and plugin architectures, to creating library packages on all three major architectures (Linux, Mac and Windows). All three major platforms are discussed in equal depth when appropriate, eg.,the different debugging tools available on each platform, but this book isn't platform-specific. Most of my coding is for embedded systems on Linux, and I didn't feel slighted in the least by the content in this book.
This is not a beginner's book for learning C++. It's also not going to replace the need for the GoF Design Patterns book or teach you template meta-programming. It's for experienced C++ programmers with a project or two under their belt, and for those folks it's probably not going to teach them something they didn't already know. What this book does is remind you--that experienced C++ programmer--of all those things you've forgotten, those good practices you knew you should have used on that last project but didn't, or show you why the way you've been doing it really isn't the best approach. This book reminds you to be a better programmer.