When this book hit my desk a sinking feeling went through me because I know the author well and have a very high regard for his writing and technical knowledge. The reason for my reaction is because, as quite a few of you know, I have finally got down to writing the book for novices that I have long promised. I feared that Nico my have stolen the very readership at which I am aiming. I tell you this because I think you are entitled to know that I might not be entirely free from bias.
What worried me was the following paragraph from the Preface:
The result is a book for all beginners who want to learn and understand how to program in C++ as well as those programmers who want to get the overall picture and take advantage of the standardized C++ language and its standard library.
I had not read very far into this book before I relaxed and realised that I had nothing to worry about. This quotation under the heading 'Prerequisites' in chapter 1 makes it clear (at least in my view) that the above paragraph is an excessive claim:
The principal prerequisite for understanding this book is a degree of familiarity with the concepts of higher-level programming languages. It is assumed that the reader already knows terms such as loop , procedure or function , statement , variable , etc.
I do not think any reader can be familiar with such terms and still be a beginner at programming. They might well be newcomers to Object Orientation and/or to C++, but anyone with such familiarity is surely not a newcomer to programming.
In fact this is a well-written, technically correct but very traditional book on OO with C++. Indeed, I would question the OO claim as it is very much a book about C++ programming. Another claim that I think highly debatable is found under How Should You Read this Book :
As this book introduces all language features and their applications gradually, beginners should simply read the book from cover to cover.
Note that the author covers templates in 44 pages. That may well be adequate for an experienced programmer who already has some grasp of generic programming, but in my opinion such coverage has little place in a book aimed at genuine newcomers. Note that the author claims to give complete coverage of C++ (which, of course, he does not) in a book whose page count is 70% of Bjarne Stroustrup's The C++ Programming Language ' 3ed. And the pages are less densely packed with text (which makes the book less daunting) so I guess that the book is actually about half the size.
The book originated in German in 1994, and went to a second and substantially revised edition before being translated to English. At the time of the original German first edition I guess that it was a much better presentation of C++ than anything then available in English (the main contenders would have been the second editions of Stroustrup's The C++ Programming Language and the second edition of Stan Lippman's C++ Primer . However putting a translation phase into this book means that it now lags (in my opinion) behind such works as Koenig and Moo's Accelerated C++ .
There is another weakness in using this book as a study text; it has no exercises. Novices need exercises to help them consolidate on their learning.
Perhaps you now understand why I felt it essential to declare my interest before launching into this review.
This book is a technically solid, excellently written introduction to C++ for those with more than a little programming expertise in one or more other languages. It would make a good text to accompany a course on C++ but I do not think that it is adequate for the solo student trying to learn to program in C++. Despite the author's claim it is fast paced and covers an immense amount. I think he probably does not recognise just how much ground is covered and just how much demand it places on the reader's prior experience.
On thinking about it, I have reached the conclusion that the ideal reader will be one who has acquired a smattering of knowledge of C++ from other sources (such as bad courses, poor books etc.) and knows that s/he needs to start afresh to correct and consolidate their knowledge and understanding. That, of course, means that it has a vast potential readership. Regretfully many of them will not recognise that this book is exactly what they need to remedy the damage that has been done to them by earlier misguided efforts to learn C++. I think I might well suggest that those struggling with university courses purporting to teach them C++ might be particular beneficiaries of this book. There the lack of exercises and relatively high pace would be advantageous. For the rest, first time students of C++ with a programming background I would still recommend Accelerated C++. Those who know nothing about programming will have to be patient.