With more pages than there are words in this review, it would be excessive to list all the concepts, techniques, and lessons taught in Beginning C++ 20. This is a beginner text for the programming language. It does not assume any prior programming experience in C++. The book assumes the reader understands how computers work, a reasonable assumption of someone wanting to learn how to program; it also assumes the reader can set up a development environment in which they can compile, link, and make the examples--a prerequisite to be able to complete the exercises posed at the end of each chapter.
Assumptions aside, the text starts from the basics, covering many topics, each new topic building on what was previously covered. The sequencing of concepts or the level of detail covered by the authors cannot be faulted. The beginner can expect to see instructions on how to create loops, how pointers and references work, how to allocate and de-allocate memory, and even the obligatory table on operator precedence. The fact that the book is in its sixth edition is a testament to its popularity amongst readers.
That leads naturally to modern C++. With some books predating the dramatic changes introduced by the C++ 11 standards, there is always a risk that revised books only pay lip service to the newer language additions. That is not the case here. For example, the book has been fully reworked to include modules, and all references to include files moved to an online appendix (the reader is directed to the online appendix many times during the first few chapters). All the key areas, such as move semantics, lambda expressions, and concept constraints, are covered in the book. The discussion on move semantics is superior to those in two recent texts focusing exclusively on modern C++ for experienced programmers.
The book also covers object-orientated programming concepts: constructing and deriving classes, inheritance and interfaces, polymorphism and templates, and even virtual base classes for diamond inheritance hierarchies. The book is not, however, about object-orientated design, so the reader should not expect much in terms of design patterns or how to break down a complex problem into independent components. Rather, expect to see how dog derives from animal and carton derives from box. Another area not covered by the book in any significant depth is the standard library. Vectors and strings are used throughout, as are unique_ptr and shared_ptr; there is even a chapter on containers. However, do not expect the same level of detail available from books dedicated to the standard library.
In summary, this is an excellent beginner text. If you are new to C++ be warned it is not an easy language to master, so expect to spend the hundreds of hours needed. The authors show admirable restraint and do not try and cover every aspect of the C++ standard. Rather they delicately walk the fine line between a book that beginners would need to supplement with additional sources and a book that would discourage all but expert programmers. Readers hoping to memorize facts needed to pass the coding interview questions at a potential employer should skip this 800-plus-page book. For the Java or Python programmer wanting to pick up another language, this book is perfect.
More reviews about this item: Amazon