Annotated Bibliography
This appendix contains a list of books and online resources on various C++-related topics that either were consulted while writing this book or are recommended for further or background reading.
Beginning C++ Without Previous Programming Experience
Section titled “Beginning C++ Without Previous Programming Experience”-
Ivor Horton and Peter Van Weert. Beginning C++23: From Beginner to Pro, 7th ed. Apress, 2023. ISBN: 978-1484293423.
This book starts with the basics and progresses through step-by-step examples to become a proficient C++ programmer. This edition includes new features from C++23. There is no assumption of prior programming knowledge.
-
Bjarne Stroustrup. Programming: Principles and Practice Using C++, 2nd ed. Addison-Wesley Professional, 2014. ISBN: 0-321-99278-4.
An introduction to programming in C++ by the inventor of the language. This book assumes no previous programming experience, but even so, it is also a good read for experienced programmers.
-
Steve Oualline. Practical C++ Programming, 2nd ed. O’Reilly Media, 2003. ISBN: 0-596-00419-2.
An introductory C++ text that assumes no prior programming experience.
-
Walter Savitch. Problem Solving with C++, 10th ed. Pearson, 2017. ISBN: 978-0134448282.
Assumes no prior programming experience. This book is often used as a textbook in introductory programming courses.
Beginning C++ with Previous Programming Experience
Section titled “Beginning C++ with Previous Programming Experience”-
Bjarne Stroustrup. A Tour of C++, 3rd ed. Addison-Wesley Professional, 2022. ISBN: 978-0136816485.
A quick (about 320 pages) tutorial-based overview of the entire C++ language and Standard Library at a moderately high level for people who already know C++ or are at least experienced programmers. This book includes C++20 features.
-
Stanley B. Lippman, Josée Lajoie, and Barbara E. Moo. C++ Primer, 5th ed. Addison-Wesley Professional, 2012. ISBN: 0-321-71411-3.
A thorough introduction to C++ that covers just about everything in the language in an accessible format and in great detail.
-
Andrew Koenig and Barbara E. Moo. Accelerated C++: Practical Programming by Example. Addison-Wesley Professional, 2000. ISBN: 0-201-70353-X.
Covers the same material as C++ Primer, but in much less space, because it assumes that the reader has programmed in another language before.
-
Bruce Eckel. Thinking in C++, Volume 1: Introduction to Standard C++, 2nd ed. Prentice Hall, 2000. ISBN: 0-139-79809-9.
An excellent introduction to C++ programming that expects the reader to know C already.
General C++
Section titled “General C++”-
The C++ Programming Language.
isocpp.org(accessed August 15, 2023).The home of Standard C++ on the web, containing news, status, and discussions about the C++ standard on all compilers and platforms.
-
The C++ Super-FAQ. isocpp.org/fag (accessed August 15, 2023).
A huge collection of frequently asked questions about C++.
-
Klaus Iglberger. C++ Software Design, O’Reilly Media, Inc, 2022. ISBN: 9781098113162.
Excellent book on good software design. With this book, experienced C++ developers will get a thorough, practical, and unparalleled overview of software design.
-
Marius Bancila. Modern C++ Programming Cookbook, 2nd ed. Packt, 2020. ISBN: 9781800208988.
This book is organized in the form of practical recipes covering a wide range of problems faced by C++ developers. This 2nd edition comes with 30 new or updated recipes for C++20.
-
Paul Deitel, Harvey Deitel. C++20 for Programmers, 3rd ed. O’Reilly, 2020. ISBN: 9780136905776.
This book is an introductory-through-intermediate-level tutorial-based presentation of programming in the C++ programming language, covers C++20.
-
Scott Meyers. Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14. O’Reilly, 2014. ISBN: 1-491-90399-6.
-
Scott Meyers. Effective C++: 55 Specific Ways to Improve Your Programs and Designs, 3rd ed. Addison-Wesley Professional, 2005. ISBN: 0-321-33487-6.
-
Scott Meyers. More Effective C++: 35 New Ways to Improve Your Programs and Designs. Addison-Wesley Professional, 1996. ISBN: 0-201-63371-X.
Three books that provide excellent tips and tricks on commonly misused and misunderstood features of C++.
-
Bjarne Stroustrup. The C++ Programming Language, 4th ed. Addison-Wesley Professional, 2013. ISBN: 0-321-56384-0.
The “bible” of C++ books, written by the designer of C++. Every C++ programmer should own a copy of this book, although it can be a bit obscure in places for the C++ novice.
-
Herb Sutter. Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions. Addison-Wesley Professional, 1999. ISBN: 0-201-61562-2.
Presented as a set of puzzles, with one of the best, most thorough discussions of proper resource management and exception safety in C++ through resource acquisition is initialization (RAII). This book also includes in-depth coverage of a variety of topics, such as the pimpl idiom, name lookup, good class design, and the C++ memory model.
-
Herb Sutter. More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions. Addison-Wesley Professional, 2001. ISBN: 0-201-70434-X.
Covers additional exception safety topics not covered in Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions. This book also discusses effective object-oriented programming and correct use of certain aspects of the Standard Library.
-
Herb Sutter. Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and Solutions. Addison-Wesley Professional, 2004. ISBN: 0-201-76042-8.
Discusses generic programming, optimization, and resource management. This book also has an excellent exposition of how to write modular code in C++ by using nonmember functions and the single responsibility principle.
-
Stephen C. Dewhurst. C++ Gotchas: Avoiding Common Problems in Coding and Design. Addison-Wesley Professional, 2002. ISBN: 0-321-12518-5.
Provides 99 specific tips for C++ programming.
-
Bruce Eckel and Chuck Allison. Thinking in C++, Volume 2: Practical Programming. Prentice Hall, 2003. ISBN: 0-130-35313-2.
The second volume of Eckel’s book, which covers more advanced C++ topics.
-
Ray Lischner. C++ in a Nutshell. O’Reilly, 2003. ISBN: 0-596-00298-X.
A C++ reference covering everything from the basics to more-advanced material.
-
Stephen Prata, C++ Primer Plus, 6th ed. Addison-Wesley Professional, 2011. ISBN: 0-321-77640-2.
One of the most comprehensive C++ books available.
-
The C++ Reference.
cppreference.com(accessed August 15, 2023).An excellent reference of C++98, C++03, C++11, C++14, C++17, C++20, and C++23.
-
The C++ Resources Network.
cplusplus.com(accessed August 15, 2023).A website containing a lot of information related to C++, with a complete reference of the language, including C++23.
I/O Streams and Strings
Section titled “I/O Streams and Strings”-
Cameron Hughes and Tracey Hughes. Stream Manipulators and Iterators in C++.
www.informit.com/articles/article.aspx?p=171014(accessed August 15, 2023).A well-written article that takes the mystery out of defining custom stream manipulators in C++.
-
Philip Romanik and Amy Muntz. Applied C++: Practical Techniques for Building Better Software. Addison-Wesley Professional, 2003. ISBN: 0-321-10894-9.
A unique blend of software development advice and C++ specifics, as well as a very good explanation of locale and Unicode support in C++.
-
Joel Spolsky. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!).
www.joelonsoftware.com/articles/Unicode.html(accessed August 15, 2023).A treatise by Joel Spolsky on the importance of localization. After reading this, you’ll want to check out the other entries on his Joel on Software website.
-
The Unicode Consortium. The Unicode Standard 5.0, 5th ed. Addison-Wesley Professional, 2006. ISBN: 0-321-48091-0.
The definitive book on Unicode, which all developers using Unicode must have.
-
Unicode, Inc. Where is my Character?
www.unicode.org/standard/where(accessed August 15, 2023).The best resource for finding Unicode characters, charts, and tables.
-
Wikipedia contributors. Universal Coded Character Set. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/Universal_Character_Set(accessed August 15, 2023).An explanation of what the Universal Character Set (UCS) is, including the Unicode standard.
The C++ Standard Library
Section titled “The C++ Standard Library”-
Peter Van Weert and Marc Gregoire. C++17 Standard Library Quick Reference. Apress, 2019. ISBN: 978-1-4842-4922-2.
This quick reference is a condensed guide to all essential data structures, algorithms, and functions provided by the C++17 Standard Library.
-
Rainer Grimm. The C++ Standard Library: What Every Professional C++ Programmer Should Know about the C++ Standard Library. Independently published, 2023. ISBN: 979-8386658595.
The goal of this book is to provide a concise reference of the C++23 Standard Library in about 350 pages. This book assumes that you are familiar with C++.
-
Nicolai M. Josuttis. The C++ Standard Library: A Tutorial and Reference, 2nd ed. Addison-Wesley Professional, 2012. ISBN: 0-321-62321-5.
Covers the entire Standard Library, including I/O streams and strings as well as the containers and algorithms. This book is an excellent reference.
-
Scott Meyers. Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library. Addison-Wesley Professional, 2001. ISBN: 0-201-74962-9.
Written in the same spirit as the author’s Effective C++ books. This book provides targeted tips for using the Standard Library but is not a reference or tutorial.
-
Stephan T. Lavavej. Standard Template Library (STL).
learn.microsoft.com/en-us/shows/c9-lectures-stephan-t-lavavej-standard-template-library-stlspan Start cssStyle=“text-decoration:underline”?-(accessed August 15, 2023).An interesting video lecture series on the C++ Standard Library.
-
David R. Musser, Gillmer J. Derge, and Atul Saini. STL Tutorial and Reference Guide: Programming with the Standard Template Library, 2nd ed. Addison-Wesley Professional, 2001. ISBN: 0-321-70212-3.
Similar to the Josuttis text, but covering only parts of the Standard Library, such as containers and algorithms.
C++ Templates
Section titled “C++ Templates”-
Herb Sutter. “Sutter’s Mill: Befriending Templates.” C/C++ User’s Journal.
www.drdobbs.com/befriending-templates/184403853(accessed August 15, 2023).An excellent explanation of making function templates friends of classes.
-
David Vandevoorde, Nicolai M. Josuttis, and Douglas Gregor. C++ Templates: The Complete Guide, 2nd ed. Addison-Wesley Professional, 2017. ISBN: 0-321-71412-1.
Everything you ever wanted to know (or didn’t want to know) about C++ templates. This book assumes significant background in general C++.
-
David Abrahams and Aleksey Gurtovoy. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond. Addison-Wesley Professional, 2004. ISBN: 0-321-22725-5.
Delivers practical metaprogramming tools and techniques into the hands of the everyday programmer.
C++11/C++14/C++17/C++20/C++23
Section titled “C++11/C++14/C++17/C++20/C++23”-
C++ Standards Committee Papers.
www.open-std.org/jtc1/sc22/wg21/docs/papers(accessed August 15, 2023).A wealth of papers written by the C++ standards committee.
-
Nicolai M. Josuttis. C++20 - The Complete Guide. NicoJosuttis, 2022. ISBN: 978-3967300208.
A book explaining all C++20 features with a focus on how these features impact day-to-day programming, what effect combining features can have, and how you can benefit from them in practice.
-
Wikipedia contributors. C++11. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/C%2B%2B11(accessed August 15, 2023). -
Wikipedia contributors. C++14. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/C%2B%2B14(accessed August 15, 2023). -
Wikipedia contributors. C++17. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/C%2B%2B17(accessed August 15, 2023). -
Wikipedia contributors. C++20. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/C%2B%2B20(accessed August 15, 2023). -
Wikipedia contributors. C++23. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/C%2B%2B23(accessed August 15, 2023).Five Wikipedia articles with a description of new features added to C++11, C++14, C++17, C++20, and C++23.
-
Scott Meyers. Presentation Materials: Overview of the New C++ (C++11/14). Artima, 2013.
www.artima.com/shop/overview_of_the_new_cpp(accessed August 15, 2023).A document containing the presentation materials from a Scott Meyers’ training course. This is an excellent reference to get a list of all C++11 and select C++14 features.
-
ECMAScript 2017 Language Specification.
www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf(accessed August 15, 2023).One of the syntaxes of the regular expressions in C++ is the same as the regular expressions in the ECMAScript language, as described in this specification document.
UNIFIED MODELING LANGUAGE
Section titled “UNIFIED MODELING LANGUAGE”-
Russ Miles and Kim Hamilton. Learning UML 2.0: A Pragmatic Introduction to UML. O’Reilly Media, 2006. ISBN: 0-596-00982-8.
A very readable book on UML 2.0. The authors use Java in examples, but they are convertible to C++ without too much trouble.
ALGORITHMS AND DATA STRUCTURES
Section titled “ALGORITHMS AND DATA STRUCTURES”-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, 3rd ed. The MIT Press, 2009. ISBN: 0-262-03384-4.
One of the most popular introductory algorithms books, covering all the common data structures and algorithms.
-
Donald E. Knuth. The Art of Computer Programming Volume 1: Fundamental Algorithms, 3rd ed. Addison-Wesley Professional, 1997. ISBN: 0-201-89683-1.
-
Donald E. Knuth. The Art of Computer Programming Volume 2: Seminumerical Algorithms, 3rd ed. Addison-Wesley Professional, 1997. ISBN: 0-201-89684-2.
-
Donald E. Knuth. The Art of Computer Programming Volume 3: Sorting and Searching, 2nd ed. Addison-Wesley Professional. 1998. ISBN: 0-201-89685-0.
-
Donald E. Knuth. The Art of Computer Programming Volume 4A: Combinatorial Algorithms, Part 1. Addison-Wesley Professional, 2011. ISBN: 0-201-03804-8.
Knuth’s four-volume tome on algorithms and data structures. If you enjoy mathematical rigor, there is no better text on this topic. However, it is probably inaccessible without undergraduate knowledge of mathematics or theoretical computer science.
-
Kyle Loudon. Mastering Algorithms with C: Useful Techniques from Sorting to Encryption. O’Reilly Media, 1999. ISBN: 1-565-92453-3.
An approachable reference to data structures and algorithms.
RANDOM NUMBERS
Section titled “RANDOM NUMBERS”-
Eric Bach and Jeffrey Shallit. Algorithmic Number Theory, Efficient Algorithms. The MIT Press, 1996. ISBN: 0-262-02405-5.
-
Oded Goldreich. Modern Cryptography, Probabilistic Proofs and Pseudorandomness. Springer, 1999. ISBN: 3-642-08432-X.
Two books that explain the theory of computational pseudo-randomness.
-
Wikipedia contributors. Mersenne Twister. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/Mersenne_twister(accessed August 15, 2023).A mathematical explanation of the Mersenne Twister, used to generate pseudo-random numbers.
OPEN-SOURCE SOFTWARE
Section titled “OPEN-SOURCE SOFTWARE”-
The Open-Source Initiative.
opensource.org(accessed August 15, 2023). -
The GNU Operating System—Free Software Foundation.
gnu.org(accessed August 15, 2023).Websites where the two main open-source movements explain their philosophies and provide information about obtaining open-source software and contributing to its development.
-
The Boost C++ Libraries.
boost.org(accessed August 15, 2023).A huge number of free, peer-reviewed portable C++ source libraries. This website is definitely worth checking out.
-
github.comandsourceforge.net(accessed August 15, 2023).Two websites that host many open-source projects. These are great resources for finding useful open-source software.
-
codeguru.comandcodeproject.com(accessed August 15, 2023).Excellent resources to find free libraries and code for reuse in your own projects.
SOFTWARE ENGINEERING METHODOLOGY
Section titled “SOFTWARE ENGINEERING METHODOLOGY”-
Robert C. Martin. Agile Software Development, Principles, Patterns, and Practices. Pearson, 2003. ISBN: 978-1292025940.
Written for software engineers “in the trenches,” this text focuses on the technology—the principles, patterns, and process—that help software engineers effectively manage increasingly complex operating systems and applications.
-
Mike Cohn. Succeeding with Agile: Software Development Using Scrum. Addison-Wesley Professional, 2009. ISBN: 0-321-57936-4.
An excellent guide to start with the Scrum methodology.
-
David Thomas and Andrew Hunt, The Pragmatic Programmer, Your Journey to Mastery, 2nd ed. Addison-Wesley Professional, 2019. ISBN: 978-0135957059.
A new edition of a classic book, and a must-read for every software engineer. More than 20 years later, the advice of the first edition is still spot on. It examines the core process—what do you do, as an individual and as a team, if you want to create software that’s easy to work with and good for your users.
-
Barry W. Boehm, TRW Defense Systems Group. A Spiral Model of Software Development and Enhancement. IEEE Computer, 21(5): 61–72, 1988.
A landmark paper that described the state of software development at the time and proposed the spiral model.
-
Kent Beck and Cynthia Andres. Extreme Programming Explained: Embrace Change, 2nd ed. Addison-Wesley Professional, 2004. ISBN: 0-321-27865-8.
One of several books in a series that promote Extreme Programming as a new approach to software development.
-
Robert T. Futrell, Donald F. Shafer, and Linda Isabell Shafer. Quality Software Project Management. Prentice Hall, 2002. ISBN: 0-130-91297-2.
A guidebook for anybody who is responsible for the management of software development processes.
-
Robert L. Glass. Facts and Fallacies of Software Engineering. Addison-Wesley Professional, 2002. ISBN: 0-321-11742-5.
Discusses various aspects of the software development process and exposes hidden truisms along the way.
-
Philippe Kruchten. The Rational Unified Process: An Introduction, 3rd ed. Addison-Wesley Professional, 2003. ISBN: 0-321-19770-4.
Provides an overview of RUP, including its mission and processes.
-
Edward Yourdon. Death March, 2nd ed. Prentice Hall, 2003. ISBN: 0-131-43635-X.
A wonderfully enlightening book about the politics and realities of software development.
-
Wikipedia contributors. Scrum. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/Scrum_(software_development)(accessed August 15, 2023).A detailed discussion of the Scrum methodology.
-
Manifesto for Agile Software Development.
agilemanifesto.org(accessed August 15, 2023).The complete agile software development manifesto.
-
Wikipedia contributors. Version control. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/Version_control(accessed August 15, 2023).Explains the concepts behind revision control systems and what kinds of solutions are available.
PROGRAMMING STYLE
Section titled “PROGRAMMING STYLE”-
Bjarne Stroustrup and Herb Sutter. C++ Core Guidelines.
github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md(accessed August 15, 2023).This document is a set of guidelines for using C++ well. The aim of this document is to help people to use modern C++ effectively.
-
Martin Fowler. Refactoring: Improving the Design of Existing Code, 2nd ed. Addison-Wesley Professional, 2018. ISBN: 0-134-75759-9.
A new edition of a classic book that espouses the practice of recognizing and improving bad code.
-
Herb Sutter and Andrei Alexandrescu. C++ Coding Standards: 101 Rules, Guidelines, and Best Practices. Addison-Wesley Professional, 2004. ISBN: 0-321-11358-0.
A must-have book on C++ design and coding style. “Coding standards” here doesn’t mean “how many spaces I should indent my code.” This book contains 101 best practices, idioms, and common pitfalls that can help you to write correct, understandable, and efficient C++ code.
-
Diomidis Spinellis. Code Reading: The Open Source Perspective. Addison-Wesley Professional, 2003. ISBN: 0-201-79940-5.
A unique book that turns the issue of programming style upside down by challenging the reader to learn to read code properly in order to become a better programmer.
-
Dimitri van Heesch. Doxygen.
www.doxygen.nl(accessed August 15, 2023).A highly configurable program that generates documentation from source code and comments.
-
John Aycock. Reading and Modifying Code. John Aycock, 2008. ISBN 0-980-95550-5.
A nice little book with advice about how to perform the most common operations on code: reading, modifying, testing, debugging, and writing.
-
Wikipedia contributors. Code refactoring. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/Refactoring(accessed August 15, 2023).A discussion of what code refactoring means, including a number of techniques for refactoring.
-
Google. Google C++ Style Guide.
google.github.io/styleguide/cppguide.html(accessed August 15, 2023).A discussion of the C++ style guidelines used at Google.
COMPUTER ARCHITECTURE
Section titled “COMPUTER ARCHITECTURE”-
David A. Patterson and John L. Hennessy. Computer Organization and Design: The Hardware/Software Interface, 4th ed. Morgan Kaufmann, 2011. ISBN: 0-123-74493-8.
-
John L. Hennessy and David A. Patterson. Computer Architecture: A Quantitative Approach, 5th ed. Morgan Kaufmann, 2011. ISBN: 0-123-83872-X.
Two books that provide all the information most software engineers will ever need to know about computer architecture.
EFFICIENCY
Section titled “EFFICIENCY”-
Dov Bulka and David Mayhew. Efficient C++: Performance Programming Techniques. Addison-Wesley Professional, 1999. ISBN: 0-201-37950-3.
One of the few books to focus exclusively on efficient C++ programming. This book covers both language-level and design-level efficiency.
-
GNU gprof.
sourceware.org/binutils/docs/gprofspan Start cssStyle=“text-decoration:underline”?/(accessed August 15, 2023).Information about the gprof profiling tool.
TESTING
Section titled “TESTING”-
Elfriede Dustin. Effective Software Testing: 50 Specific Ways to Improve Your Testing. Addison-Wesley Professional, 2002. ISBN: 0-201-79429-2.
A book aimed at quality assurance professionals, although any software engineer will benefit from this book’s discussion of the software-testing process.
DEBUGGING
Section titled “DEBUGGING”-
Diomidis Spinellis. Effective Debugging: 66 Specific Ways to Debug Software and Systems. Addison-Wesley Professional, 2016. ISBN: 978-0134394794.
This book helps experienced programmers accelerate their journey to mastery, by systematically categorizing, explaining, and illustrating the most useful debugging methods, strategies, techniques, and tools.
-
Microsoft Visual Studio Community Edition.
microsoft.com/vs(accessed August 15, 2023).The Community Edition of Microsoft Visual Studio is a version of Visual Studio free of charge for students, open-source developers, and individual developers to create both free and paid applications. It’s also free of charge for up to five users in small organizations. It comes with an excellent graphical symbolic debugger.
-
The GNU Debugger (GDB).
www.gnu.org/software/gdb/gdb.html(accessed August 15, 2023).An excellent command-line symbolic debugger.
-
Valgrind.
valgrind.org(accessed August 15, 2023).An open-source memory-debugging tool for Linux.
-
Microsoft Application Verifier. Part of the Windows SDK,
developer.microsoft.com/windows/downloads/windows-sdk (accessed August 15, 2023).A run-time verification tool for C++ code that assists in finding subtle programming errors and security issues that can be difficult to identify with normal application testing techniques.
DESIGN PATTERNS
Section titled “DESIGN PATTERNS”-
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional, 1994. ISBN: 0-201-63361-2.
Called the “Gang of Four” (GoF) book (because of its four authors), the seminal work on design patterns.
-
Andrei Alexandrescu. Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley Professional, 2001. ISBN: 0-201-70431-5.
Offers an approach to C++ programming that employs highly reusable code and patterns.
-
John Vlissides. Pattern Hatching: Design Patterns Applied. Addison-Wesley Professional, 1998. ISBN: 0-201-43293-5.
A companion to the GoF book, explaining how patterns can actually be applied.
-
Eric Freeman, Bert Bates, Kathy Sierra, and Elisabeth Robson. Head First Design Patterns. O’Reilly Media, 2004. ISBN: 0-596-00712-4.
A book that goes further than just listing design patterns. The authors show good and bad examples of using patterns and give solid reasoning behind each pattern.
-
Wikipedia contributors. Software design pattern. Wikipedia, The Free Encyclopedia,
en.wikipedia.org/wiki/Design_pattern_``(computer_science)(accessed August 15, 2023).Contains descriptions of a large number of design patterns used in computer programming.
OPERATING SYSTEMS
Section titled “OPERATING SYSTEMS”-
Abraham Silberschatz, Peter B. Galvin, and Greg Gagne. Operating System Concepts, 10th ed. Wiley, 2018. ISBN: 1-119-45633-9.
A great discussion on operating systems, including multithreading issues such as deadlocks and race conditions.
MULTITHREADED PROGRAMMING
Section titled “MULTITHREADED PROGRAMMING”-
Anthony Williams. C++ Concurrency in Action, 2nd ed. Manning Publications, 2019. ISBN: 1-617-29469-1.
An excellent book on practical multithreaded programming, including the C++ threading library.
-
Cameron Hughes and Tracey Hughes. Professional Multicore Programming: Design and Implementation for C++ Developers. Wrox, 2008. ISBN: 0-470-28962-7.
A book for developers of various skill levels who are making the move into multicore programming.
-
Maurice Herlihy and Nir Shavit. The Art of Multiprocessor Programming. Morgan Kaufmann, 2012. ISBN: 0-123-97337-6.
A great book on writing code for multiprocessor and multicore systems.