B
Annotated Bibliography

This appendix contains a list of books and online resources on various C++-related topics that were either consulted while writing this book, or are recommended for further or background reading.

C++

Beginning C++ Without Previous Programming Experience

  • 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++, 9th ed. Pearson, 2014. ISBN: 0-133-59174-3. Assumes no prior programming experience. This book is often used as a textbook in introductory programming courses.

Beginning C++ With Previous Programming Experience

  • Bjarne Stroustrup. A Tour of C++. Addison-Wesley Professional, 2013. ISBN: 0-321-95831-4.

    A quick (about 190 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++11 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 very thorough introduction to C++ that covers just about everything in the language in a very 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. This text is available at no cost online at www.bruceeckel.com.

General C++

  • The C++ Programming Language, at www.isocpp.org.

    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, at isocpp.org/faq.

    A huge collection of frequently asked questions about C++.

  • 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. The text is also available at no cost online at www.bruceeckel.com.

  • Ray Lischner. C++ in a Nutshell. O’Reilly, 2009. 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, at www.cppreference.com.

    An excellent reference of C++98, C++03, C++11, C++14, and C++17.

  • The C++ Resources Network, at www.cplusplus.com.

    A website containing a lot of information related to C++, with a complete reference of the language, including C++17.

I/O Streams and Strings

  • Cameron Hughes and Tracey Hughes. Stream Manipulators and Iterators in C++. www.informit.com/articles/article.aspx?p=171014.

    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.

    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.

    The best resource for finding Unicode characters, charts, and tables.

  • Wikipedia. Universal Coded Character Set. http://en.wikipedia.org/wiki/Universal_Character_Set.

    An explanation of what the Universal Character Set (UCS) is, including the Unicode standard.

The C++ Standard Library

  • Peter Van Weert and Marc Gregoire. C++ Standard Library Quick Reference. Apress, 2016. ISBN: 978-1-4842-1875-4.

    This quick reference is a condensed guide to all essential data structures, algorithms, and functions provided by the C++ Standard Library

  • 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). http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Introduction-to-STL-with-Stephan-T-Lavavej.

    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

  • Herb Sutter. “Sutter’s Mill: Befriending Templates.” C/C++ User’s Journal. http://drdobbs.com/cpp/184403853.

    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

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

  • 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

  • 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, 2010. ISBN: 3-642-08432-X. Two books that explain the theory of computational pseudo-randomness.
  • Wikipedia. Mersenne Twister. http://en.wikipedia.org/wiki/Mersenne_twister.

    A mathematical explanation of the Mersenne Twister, used to generate pseudo-random numbers.

OPEN-SOURCE SOFTWARE

  • The Open Source Initiative at www.opensource.org.
  • The GNU Operating System—Free Software Foundation at www.gnu.org.

    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 at www.boost.org.

    A huge number of free, peer-reviewed portable C++ source libraries. This website is definitely worth checking out.

  • GitHub at www.github.com, and SourceForge at www.sourceforge.net.

    Two websites that host many open-source projects. These are great resources for finding useful open-source software.

  • www.codeguru.com and www.codeproject.com.

    Excellent resources to find free libraries and code for reuse in your own projects.

SOFTWARE ENGINEERING METHODOLOGY

  • Robert C. Martin. Agile Software Development, Principles, Patterns, and Practices. Pearson, 2013. 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.

  • Andrew Hunt and David Thomas, The Pragmatic Programmer. Addison Wesley, 1999. ISBN: 978-0201616224.

    A classic book, and a must read for every software engineer. Almost twenty years later, its advice 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. Scrum. http://en.wikipedia.org/wiki/Scrum_(software_development).

    A detailed discussion of the Scrum methodology.

  • Manifesto for Agile Software Development. http://agilemanifesto.org/. The complete Agile software development manifesto.
  • Wikipedia. Version control. https://en.wikipedia.org/wiki/Version_control.

    Explains the concepts behind revision control systems, and what kinds of solutions are available.

PROGRAMMING STYLE

  • Bjarne Stroustrup and Herb Sutter. C++ Core Guidelines. https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md.

    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, Kent Beck, John Brant, William Opdyke, and Don Roberts. Refactoring: Improving the Design of Existing Code. Addison-Wesley Professional, 1999. ISBN: 0-201-48567-2.

    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.stack.nl/~dimitri/doxygen/index.html.

    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. Code refactoring. http://en.wikipedia.org/wiki/Refactoring.

    A discussion of what code refactoring means, including a number of techniques for refactoring.

  • Google. Google C++ Style Guide. https://google.github.io/styleguide/cppguide.html.

    A discussion of the C++ style guidelines used at Google.

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

  • 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, http://sourceware.org/binutils/docs/gprof/.

    Information about the gprof profiling tool.

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

  • Microsoft Visual Studio Community Edition, at http://microsoft.com/vs.

    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), at www.gnu.org/software/gdb/gdb.html.

    An excellent command-line symbolic debugger.

  • Valgrind, at http://valgrind.org/.

    An open-source memory-debugging tool for Linux.

  • Microsoft Application Verifier, at https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/application-verifier.

    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

  • 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. Software design pattern. http://en.wikipedia.org/wiki/Design_pattern_(computer_science).

    Contains descriptions of a large number of design patterns used in computer programming.

OPERATING SYSTEMS

  • Abraham Silberschatz, Peter B. Galvin, and Greg Gagne. Operating System Concepts, 9th ed. Wiley, 2012. ISBN: 1-118-06333-3.

    A great discussion on operating systems, including multithreading issues such as deadlocks and race conditions.

MULTITHREADED PROGRAMMING

  • Anthony Williams. C++ Concurrency in Action: Practical Multithreading. Manning Publications, 2012. ISBN: 1-933-98877-0.

    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.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset