Andrew Koenig and Barbara E. Moo: Accelerated C++, Addison-Wesley, ISBN 0-201-70353-X, 326 pages.
A year ago I reviewed an utterly incompetent C++ book, the start of Addison-Wesley's new "C++ In-Depth Series" edited by Bjarne Stroustrup. We were puzzled and appalled that the principal designer of C++ and author of superb textbooks, would associate himself with a book so potentially harmful to future practitioners of his own programming language.
It's a relief and a pleasure to report that the latest volume in that series is a significant contribution to the huge body of C++ literature. Koenig and Moo's work is highly recommended for experienced C++ programmers. I disagree sharply with the authors, however, about its suitability for beginners.
Under "a new approach to C++ programming" the preface asserts:
We concentrate on solving problems, rather than on exploring
language and library features. We explain the features, of course,
but we do so in order to support the programs, rather than using
programs as an excuse to demonstrate features.
We wholeheartedly endorse that sentiment, although we might question
how "new" it is. Alas, the issue is: In object-oriented
programming what do we consider a problem?
The essence of OOP is not developing complete programs but developing components or tools to be used in multiple applications. An OOD/OOP practitioner thinks bottom-up a great deal of the time.
Accelerated C++, on the other hand, takes the opposite view, devoting roughly the first half to writing executable programs before explaining constructors and private member data in chapter 9.
Koenig and Moo share many other writers' preoccupation with
containers and the STL, ignoring
application-domain data, except for a somewhat shaky
While the STL offers powerful tools, an awful lot of application programming has little or nothing to do with containers. Business application programmers need to manipulate amounts of money, dates, and various kinds of composite (record) data. Scientific or engineering application programmers need to manipulate complex numbers and units of distance, volume, mass, force, time, energy, velocity, temperature, etc. Such data are ideally suited to the encapsulation and type-safety inherent in OOP.
Instead of such immediately practical examples, however, Accelerated C++ asks the reader to confront namespaces, template declarations, iterators, and, yes, other language and library features.
I thoroughly enjoyed reading Accelerated C++, and enthusiastically recommend it as a second or third C++ book in a professional's library. The explanations are clear and the tone is friendly. It's an excellent and concise introduction or refresher on the STL.
I wouldn't choose Accelerated C++, however, as a course textbook. The student has to memorize too much on faith1 before he or she grasps the underlying concepts. Koenig & Moo claim that works well in their course at Stanford, but it wouldn't work for the students in my own highly object-oriented C++ courses.
Return to book reviews.
Return to IDI home page.