Skip to content

Further Reading

Books and documentation for going deeper. All of them are real, published works that this course was written against; none of their text is reproduced here.

On sources in this repository

This course contains no third-party teaching material. Everything you read here was written for this course. Where an external work is the right place to learn more, it is cited below so you can find it yourself — in a library, a bookshop, or the publisher's own edition.

Diagrams and code are original to this repository. No PDFs, slide decks or scanned chapters are included, and none will be.


Where to start, by goal

If you want to… Read
Understand the language properly, not just syntax A Tour of C++ (Stroustrup)
A complete, careful tutorial reference C++ Primer (Lippman, Lajoie, Moo)
The definitive language reference The C++ Programming Language (Stroustrup)
Modern C++ practice: moves, smart pointers, auto Effective Modern C++ (Meyers)
Solid general object-oriented design advice Effective C++ and Effective STL (Meyers)
The standard library in depth The C++ Standard Library (Josuttis)
Design patterns Design Patterns (Gamma, Helm, Johnson, Vlissides)
UML and design notation, practically UML Distilled (Fowler)
Design principles, including SOLID Agile Software Development (Martin)
A gentler, example-driven OOP introduction Object-Oriented Programming in C++ (Lafore)

C++ language and standard library

  • Bjarne Stroustrup, A Tour of C++, 3rd edition. Addison-Wesley, 2022. A short, authoritative overview by the language's designer. The best single "read this after my first course" book.

  • Bjarne Stroustrup, The C++ Programming Language, 4th edition. Addison-Wesley, 2013. Comprehensive and dense. A reference to consult rather than to read cover to cover.

  • Stanley B. Lippman, José Lajoie, Barbara E. Moo, C++ Primer, 5th edition. Addison-Wesley, 2012. A long, careful tutorial that teaches the language with worked examples. Excellent for the first eight modules of this course.

  • Nicolai M. Josuttis, The C++ Standard Library: A Tutorial and Reference, 2nd edition. Addison-Wesley, 2012. The depth that Module 14 sets up.

  • Scott Meyers, Effective Modern C++. O'Reilly, 2014. Forty-two specific items on move semantics, smart pointers, auto, lambdas and concurrency. Directly relevant to Modules 10, 11 and 14.

  • Scott Meyers, Effective C++, 3rd edition. Addison-Wesley, 2005. Fifty-five items of practical design advice; many of them are the reasoning behind the rules this course teaches as rules.

  • Robert Lafore, Object-Oriented Programming in C++, 4th edition. Sams Publishing, 2001. A gentler, example-heavy introduction. Useful if a module here moves faster than you would like.

  • Andrei Alexandrescu, Modern C++ Design. Addison-Wesley, 2001. Advanced template techniques. Read only if you want to go well beyond Module 12.

Design, patterns and UML

  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994. The original "Gang of Four" catalogue; the source of the patterns in Module 15.

  • Martin Fowler, UML Distilled, 3rd edition. Addison-Wesley, 2003. The practical subset of UML worth knowing, taught in about 150 pages.

  • Craig Larman, Applying UML and Patterns, 3rd edition. Prentice Hall, 2004. How to move from requirements to a design, which is the capstone's central task.

  • Robert C. Martin, Agile Software Development: Principles, Patterns, and Practices. Prentice Hall, 2002. Where the SOLID principles were named and argued for.

  • Robert C. Martin, Clean Code. Prentice Hall, 2008. Contested in places, but its emphasis on naming and function size is relevant to every lab here.

Official documentation and standards

  • cppreference.com — https://en.cppreference.com/ The reference to reach for first: precise, kept current, and honest about which standard version introduced what. Use it for signatures and for exact behaviour.

  • isocpp.org — https://isocpp.org/ The Standard C++ Foundation. Language news, FAQs, and links to the standard's papers.

  • C++ Core Guidelines — https://isocpp.github.io/CppCoreGuidelines/ Maintained by Bjarne Stroustrup and Herb Sutter. Guidance on writing modern C++. Several rules this course teaches — no raw owning pointers, prefer RAII, follow the Rule of Zero — come directly from here, and the guidelines explain why at greater length.

  • The C++ standard itself, published as ISO/IEC 14882. Not a teaching document, and not necessary for this course. Worth knowing that it exists, and that "the standard says" is the final authority behind every claim about behaviour.

  • Compiler documentation, for the exact wording of diagnostics and the exact flag names:

  • GCC — https://gcc.gnu.org/onlinedocs/
  • Clang — https://clang.llvm.org/docs/
  • MSVC — https://learn.microsoft.com/cpp/

Tools

  • Compiler Explorer — https://godbolt.org/ — see your code and the assembly it produces, side by side. The most instructive tool in this list; useful from Module 6 onwards for seeing what virtual calls actually compile to.

  • Valgrind — https://valgrind.org/ (Linux/macOS) and AddressSanitizer, built into GCC and Clang, for detecting memory errors. The course refers to both when a lab asks you to observe a memory bug rather than merely reason about it.


Editions and publication years are given so you can identify a copy precisely. This course does not link to copies of these books, because doing so would distribute material the authors and publishers have the right to control. Use a library, a bookshop, or the publisher's own edition.

If you find a citation here that is wrong — a wrong edition, a wrong year, a misattributed author — please report it. See Contributing.