Review of Thinking in C++ Vol. 1, 2nd ed. by Bruce Eckel

available free online .

Thinking in C++ may be the perfect introductory book to C++ for the experienced C programmer.  For someone comfortable (or even lightly experienced) with C syntax, this book does everything right.  It explains all the new functionality of C++ one feature at a time, such that after reading each chapter, you have a new tool or two to add to your toolbox.  

While not being overly verbose, it doesn't fall into the trap of oversimplifying the language or relying on useless metaphors to explain how things work.  It explains how the new features work directly on the machine--from explaining how virtual function calls find the correct code to be executed to how, when, and where various declarations allocate memory.  This may seem like unnecessary detail for a new C++ programmer and may indeed be hard to grasp at first.  However, since we're assuming the reader knows a good bit of C, explaining the evolution of C++ from C shows why and how many features came to be (ie, if efficiency is of no concern, many features in C++ seem needless).  Providing these reasons makes features easier to remember, gives background on the appropriate use of various facilities, and gives the reader that extra bit of low-level knowledge that may someday help track down some insidious bug that would otherwise mystify the would-be C++ programmer.

Despite the attention to detail, this is not simple a C++ syntax reference:  Eckel goes into great care to show how and when each feature should be used, and thus, introduces the reader to object oriented programming while teaching him or her C++.  After all, classes, virtual functions, and inheiritance all make little sense outside the context of OOP.  While another C++ introductory text may teach the reader all the same concepts in much less time, the reader of Thinking in C++ will be much better equipped to immediately starting hacking out code using the concepts of C++ and OOP.  Readers of more basic texts would often be more inclined to use advanced C++ features incorrectly, inefficiently or inappropriately.  

Bottom Line

This book (and its brother, Vol. 2) is recommended for anyone (especially C hackers) serious about learning and using the fulll power of C++ in the most efficient manner possible.  That said, if the reader is already proficient in the design of programs in some other object-oriented language (say, most Rice CS students who are quite proficient in Java), this book may be a little dry, and the reader may have a difficult time extracting the information he or she wants (the C++ syntax and correct usage) from the integrated information on OOP.  An experienced Java programmer really just needs to know how to map the C++ language onto their existing understanding of OOP and Java, and for that purpose, a much shorter text, such as Brown University's Java to C++ Transition Tutorial may suffice and bring the reader up to speed much more quickly.  The section on templates, however, would be useful for anyone since Java (except GJ or DrJava) doesn't contain a similar facility.  



Written by Jacob Mundt, last modified 1/28/02