This book is a strong contender for my 'C/C++ Book of 2000'
This is the book that I have been waiting for, for far too long. I have probably become boring when reviewing introductory texts for C++ with my repetitive complaint that the authors introduce C++ in the context of C. This book does not.
The co-authors of this book are highly accomplished writers with a long track record of writing technical articles that are clear, accurate and a pleasure to read. In addition both have an extensive understanding of C++ and how the language has been designed. They have also a wealth of experience of presenting training in C++ to bright students who have never been corrupted by learning C.
Their technical knowledge coupled with their writing skills absolve this reviewer from any need to write about that. You can take it as a given that this book, like all others from the keyboards of these authors, is technically correct and highly readable.
What you may not instantly realise is how radical their approach to learning C++ would be. The declared target readership is those that are either very quick studies, or who have prior experience of some form of programming.
They have undertaken a fundamental review of the needs of the newcomer to C++.
Who else would have even considered teaching template functions before addressing user-defined types. Yet chapter 8 is about template functions (and here we have one of the very few places that I disagree with the authors, they use 'class' instead of 'typename' to declare type parameters). User defined types are not introduced until chapter 9, and enums are left until the very end of the book.
Whilst the full range of the Standard C++ Library is introduced early and on a basis of need (and that includes early introduction of STL containers, algorithms etc.) writing your own template types is just covered lightly later on. I believe this is entirely correct. All C++ programmers should be using the tools provided by the language, but designing types, particularly generic types is not a necessity, and certainly not needed early on. The theme might be summarised as learn to use the tools provided before trying to design your own tools.
Each chapter finishes with a well thought out set of exercises. They may not all be fresh to the experienced programmer but they are much better than average and almost all exercises are designed with purpose. That compares with the numerous cases where I find exercises that seem to have been added in as an afterthought.
You may not agree with the detailed design of the course that this book represents but it is so far ahead of anything else I have seen that you only have one of two rational choices, use this one or write your own.
If you are responsible for mentoring others, for designing courses, for advising on learning C++ or developing C++ skills you must not only read this book but study it until you understand the philosophy that lies behind it. I doubt that you have ever read such a dictatorial statement from this reviewer. However, believe me, this book outdates every other introductionto C++.
What we need next is a lower paced book for the real novice with no programming experience and one or more books on the more advanced aspects of C++. I hope that budding authors will take this book and try to emulate it in other areas.
This book is a strong contender for my 'C/C++ Book of 2000' award because it meets the criteria including setting new standards and new insights that others should aspire to. I have never previously been tempted to nominate a book for novices for this award.
Finally, check elsewhere for details but this is the first book for Blackwells Bookshops 'C/C++ Programmers Book of the Month' award which includes a discount to ACCU members.
I should own up to the fact that I know the authors and so I am clearly biased, but they have not promised even a meal in exchange for this review. If you do not like the chapter numbering, blame me because I suggested it. Now you will at least have to look at a copy to find out what on Earth I am talking about. - FG Note that there are inevitably some typos in the first printing. If you want to check the errata list or look for other information about the book have a look athttp://www.acceleratedcpp.com/.