Appendix 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++
- Harvey M. Deitel and Paul J. Deitel, C++ How to Program (Seventh Edition), Prentice Hall, 2009, ISBN: 0-136-11726-0.
Known as the “Deitel” book, this text assumes no prior programming experience.
- Bruce Eckel, Thinking in C++, Volume 1: Introduction to Standard C++ (Second Edition), Prentice Hall, 2000, ISBN: 0-139-79809-9.
An excellent introduction to C++ programming that expects the reader to know C already. Available at no cost online at www.bruceeckel.com.
- Stanley B. Lippman, Josée Lajoie, and Barbara E. Moo, C++ Primer (Fourth Edition), Addison-Wesley, 2005, ISBN: 0-201-72148-1.
Requires no knowledge of C++, but assumes experience with high-level object-oriented languages.
- Steve Oualline, Practical C++ Programming (Second Edition), O’Reilly, 2003, ISBN: 0-596-00419-2.
An introductory C++ text that assumes no prior programming experience.
- Walter Savitch, Problem Solving with C++ (Eighth Edition), Addison-Wesley, 2011, ISBN: 0-132-16273-3.
This book assumes no prior programming experience. It is often used as a textbook in introductory programming courses.
General C++
- Marshall Cline, C++ FAQ LITE, www.parashift.com/c++-faq-lite.
- Marshall Cline, Greg Lomow, and Mike Girou, C++ FAQs (Second Edition), Addison-Wesley, 1998, ISBN: 0-201-30983-1.
This compilation of frequently asked questions from the comp.lang.c++ newsgroup is useful for quickly looking up a specific point about C++. The printed version contains more information than the online version, but the material available online should be sufficient for most professional C++ programmers.
- Stephen C. Dewhurst, C++ Gotchas, Addison-Wesley, 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 covers more advanced C++ topics. It’s also available at no cost online at www.bruceeckel.com.
- 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.
- Scott Meyers, Effective C++ (Third Edition): 55 Specific Ways to Improve Your Programs and Designs, Addison-Wesley, 2005, ISBN: 0-321-33487-6.
- Scott Meyers, More Effective C++: 35 New Ways to Improve Your Programs and Designs, Addison-Wesley, 1996, ISBN: 0-201-63371-X.
These two books provide excellent tips and tricks on commonly misused and misunderstood features of C++.
- Stephen Prata, C++ Primer Plus (Fifth Edition), Sams Publishing, 2004, ISBN: 0-672-32697-4.
One of the most comprehensive C++ books available.
- Bjarne Stroustrup, The C++ Programming Language (Special Third Edition), Addison-Wesley, 2000, ISBN: 0-201-70073-5.
The “Bible” of C++ books, written by the designer of C++ himself. Every C++ programmer should own a copy of this book, but it can be a bit obscure in places for the C++ novice.
- British Standards Institute, The C++ Standard: Incorporating Technical Corrigendum No. 1, Wiley, 2003, ISBN: 0-470-84674-7.
This book is almost 800 pages of dense standardese. It doesn’t explain how to use C++, only what the formal rules are. We don’t recommend this book unless you really want to understand every detail of C++.
- Newsgroups at http://groups.google.com, including comp.lang.c++.moderated and comp.std.c++.
The newsgroups contain a lot of useful information if you’re willing to wade through the flame wars, insults, and misinformation that appear as well.
- The C++ Resources Network at www.cplusplus.com.
This site contains a lot of information related to C++.
I/O Streams and Strings
- Cameron Hughes and Tracey Hughes, Mastering the Standard C++ Classes: An Essential Reference, Wiley, 1999, ISBN: 0-471-32893-6.
A good book for learning how to write custom istream and ostream classes.
- Cameron Hughes and Tracey Hughes, Stream Manipulators and Iterators in C++, www.informit.com/articles/article.aspx?p=171014.
This well-written article by the authors of Mastering the Standard C++ Classes 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, 2003, ISBN: 0-321-10894-9.
In addition to a unique blend of software development advice and C++ specifics, this book provides one of the best explanations we’ve read 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.
After reading Joel’s treatise on the importance of localization, you’ll want to check out his other entries on Joel on Software.
- The Unicode Consortium, The Unicode Standard 5.0, Addison-Wesley, 2006, ISBN: 0-321-48091-0.
This is 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 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
- Nicolai M. Josuttis, The C++ Standard Library: A Tutorial and Reference, Addison-Wesley, 1999, ISBN: 0-201-37926-0.
This book covers the entire standard library, including I/O streams and strings as well as the containers and algorithms. It’s an excellent reference.
- Scott Meyers, Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library, Addison-Wesley, 2001, ISBN: 0-201-74962-9.
Meyers wrote this book in the same spirit as his “Effective C++” books. It provides targeted tips for using the STL, but is not a reference or tutorial.
- David R. Musser, Gillmer J. Derge, and Atul Saini, STL Tutorial and Reference Guide (Second Edition), Addison-Wesley, 2001, ISBN: 0-321-70212-3.
This book is similar to the Josuttis text, but covers only the STL part of the standard library.
- Pete Becker, The C++ Standard Library Extensions: A Tutorial and Reference, Addison-Wesley, 2006, ISBN: 0-321-41299-0.
This book explains the new features added to the C++ Standard Library with the Technical Report 1 (TR1).
- 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 Template Library.
C++ Templates
- Herb Sutter, Sutter’s Mill: Befriending Templates, C/C++ User’s Journal, http://drdobbs.com/cpp/184403853.
The best explanation we could find about making function templates friends of classes.
- David Vandevoorde and Nicolai M. Josuttis, C++ Templates: The Complete Guide, Addison-Wesley, 2002, ISBN: 0-201-73484-2.
Everything you ever wanted to know (or didn’t want to know) about C++ templates. It assumes significant background in general C++.
- David Abrahams and Aleksey Gurtovoy, C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond, Addison-Wesley, 2004, ISBN: 0-321-22725-5.
This book delivers practical metaprogramming tools and techniques into the hands of the everyday programmer.
C++11
- C++ Standards Committee Papers, www.open-std.org/jtc1/sc22/wg21/docs/papers.
Access a wealth of papers written by the C++ standards committee.
- Scott Meyers, Presentation Materials: Overview of the New C++ (C++0x), Artima, 2011, www.artima.com/shop/overview_of_the_new_cpp.
This contains the presentation materials from Scott Meyers’ three-day training course on the new C++ standard, and is an excellent reference to get a list of all new C++11 features.
- Wikipedia C++11, http://en.wikipedia.org/wiki/C%2B%2B11.
A description of all new features added to C++11.
- ECMAScript Language Specification, www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf.
The syntax of the regular expressions in C++11 is the same as the regular expressions in the ECMAScript language, described in this specification document.
C
- Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language (second edition), Prentice Hall, 1998, ISBN: 0-131-10362-8.
“K&R,” as this book is known, is a reference on the C language, but it’s not so useful for learning it the first time.
- Samuel P. Harbison III and Guy L. Steele Jr., C: A Reference Manual, Fifth Edition, Prentice Hall, 2002, ISBN: 0-130-89592-X.
This book can be considered a replacement for the K&R book. Instead of a narrative style, where knowledge is embedded in the text, it is done as a more formal reference manual. Every C programmer should own a copy.
- Peter Prinz, Tony Crawford (Translator), Ulla Kirch-Prinz, C Pocket Reference, O’Reilly, 2002, ISBN: 0-596-00436-2.
A concise reference to all things C.
- Eric S. Roberts, The Art and Science of C: A Library Based Introduction to Computer Science, Addison-Wesley, 1994, ISBN: 0-201-54322-2.
- Eric S. Roberts, Programming Abstractions in C: A Second Course in Computer Science, Addison-Wesley, 1997, ISBN: 0-201-54541-1.
These two books provide a great introduction to programming in C with good style. They are often used as textbooks in introductory programming courses.
- Peter Van Der Linden, Expert C Programming: Deep C Secrets, Prentice Hall, 1994, ISBN: 0-131-77429-8.
An enlightening and often hysterical look at the C language, its evolution, and its inner workings.
INTEGRATING C++ AND OTHER LANGUAGES
- Ian F. Darwin, Java Cookbook (Second Edition), O’Reilly, 2004, ISBN: 0-596-00701-9.
This book provides step-by-step instructions for using JNI to integrate Java with other languages, including C++.
ALGORITHMS AND DATA STRUCTURES
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms (Third Edition), The MIT Press, 2009, ISBN: 0-262-03384-4.
This text is 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 (Third Edition), Addison-Wesley, 1997, ISBN: 0-201-89683-4.
- Donald E. Knuth, The Art of Computer Programming Volume 2: Seminumerical Algorithms (Third Edition), Addison-Wesley, 1997, ISBN: 0-201-89684-2.
- Donald E. Knuth, The Art of Computer Programming Volume 3: Sorting and Searching (Second Edition), Addison-Wesley, 1998, ISBN: 0-201-89685-0.
- Donald E. Knuth, The Art of Computer Programming Volume 4A: Combinatorial Algorithms Part 1, Addison-Wesley, 2011, ISBN: 0-201-03804-8.
For those of you who enjoy mathematical rigor, there is no better algorithms and data structures text than Knuth’s four-volume tome. But, it is probably inaccessible without undergraduate knowledge of mathematics or theoretical computer science.
- Kyle Loudon, Mastering Algorithms with C, O’Reilly, 1999, ISBN: 1-565-92453-3.
An approachable reference to data structures and algorithms.
RANDOM NUMBERS
- Eric Bach and Jeffrey Shallit, Algorithmic Number Theory, Vol. 1: Efficient Algorithms, The MIT Press, 1996, ISBN: 0-262-02405-5.
- Oded Goldreich, Modern Cryptography, Probalistic Proofs and Pseudorandomness, Springer, 2010, ISBN: 3-642-08432-X.
Both of these books explain the theory of computational pseudo randomness.
- Wikipedia Mersenne Twister, http://en.wikipedia.org/wiki/Mersenne_twister.
A mathematical explanation of the Mersenne Twister 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.
These web pages for the two main open-source movements explain their philosophies and provide information about obtaining open-source software and contributing to its development.
- SourceForge at www.sourceforge.net.
This website hosts many open-source projects. It’s a great resource for finding useful open-source software.
Excellent resources to find free libraries and code for reuse in your own projects.
SOFTWARE ENGINEERING METHODOLOGY
- Barry W. Boehm, TRW Defense Systems Group, A Spiral Model of Software Development and Enhancement, IEEE Computer, 21(5): 61–72, 1988.
This landmark paper described the state of software development at the time and proposed the Spiral Model.
- Kent Beck and Cynthia Andres, Extreme Programming Explained: Embrace Change (Second Edition), Addison-Wesley, 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, 2002, ISBN: 0-321-11742-5.
This book discusses various aspects of the software development process and exposes hidden truisms along the way.
- Philippe Kruchten, The Rational Unified Process: An Introduction (Third Edition), Addison-Wesley, 2003, ISBN: 0-321-19770-4.
Provides an overview of RUP, including its mission and processes.
- Edward Yourdon, Death March (Second Edition), Prentice Hall, 2003, ISBN: 0-131-43635-X.
A wonderfully enlightening book about the politics and realities of software development.
- Rational Unified Process from IBM, www3.software.ibm.com/ibmdl/pub/software/rational/web/demos/viewlets/rup/runtime/index.html.
The IBM website contains a wealth of information about RUP, including the interactive presentation at the preceding URL.
- Mike Cohn, Succeeding with Agile: Software Development Using Scrum, Addison-Wesley, 2009, ISBN: 0-321-57936-4.
An excellent guide to start with the Scrum methodology.
- Wikipedia Scrum, http://en.wikipedia.org/wiki/Scrum_(development).
A detailed discussion of the Scrum methodology.
- Manifesto for Agile Software Development, http://agilemanifesto.org/.
The complete agile software development manifesto.
- Wikipedia Revision control, http://en.wikipedia.org/wiki/Revision_control.
Explains the concepts behind revision control systems, and what kinds of solutions there are available.
PROGRAMMING STYLE
- Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts, Refactoring: Improving the Design of Existing Code, Addison-Wesley, 1999, ISBN: 0-201-48567-2.
This classic book espouses the practice of recognizing and improving bad code.
- James Foxall, Practical Standards for Microsoft Visual Basic .NET, Microsoft Press, 2002, ISBN: 0-735-61356-7.
Exhibits the tenets of Microsoft Windows coding style, using Visual Basic .NET.
- Diomidis Spinellis, Code Reading: The Open Source Perspective, Addison-Wesley, 2003, ISBN: 0-201-79940-5.
This unique book 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 on what code refactoring means, including a number of techniques for refactoring.
COMPUTER ARCHITECTURE
- David A. Patterson and John L. Hennessy, Computer Organization and Design: The Hardware/Software Interface (Fourth Edition), Morgan Kaufmann, 2008, ISBN: 0-123-74493-8.
- John L. Hennessy and David A. Patterson, Computer Architecture: A Quantitative Approach (Fourth Edition), Morgan Kaufmann, 2006, ISBN: 0-123-70490-1.
These two books provide all the information most software engineers ever need to know about computer architecture.
EFFICIENCY
- Dov Bulka and David Mayhew, Efficient C++: Performance Programming Techniques, Addison-Wesley, 1999, ISBN: 0-201-37950-3.
One of the few books to focus exclusively on efficient C++ programming, it covers both language-level and design-level efficiency.
- GNU gprof, www.gnu.org/software/binutils/.
Information about the gprof profiling tool.
TESTING
- Elfriede Dustin, Effective Software Testing: 50 Specific Ways to Improve Your Testing, Addison-Wesley, 2002, ISBN: 0-201-79429-2.
While this book is aimed at quality assurance professionals, any software engineer will benefit from its discussion of the software-testing process.
DEBUGGING
- The GNU DeBugger (GDB), at www.gnu.org/software/gdb/gdb.html.
GDB is an excellent symbolic debugger.
- Valgrind, at http://valgrind.org/.
An open-source memory-debugging tool for Linux.
- Microsoft Application Verifier, at http://msdn.microsoft.com/en-us/library/aa480483.aspx.
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
- Andrei Alexandrescu, Modern C++ Design: Generic Programming and Design Patterns Applied, Addison-Wesley, 2001, ISBN: 0-201-70431-5.
Offers an approach to C++ programming employing highly reusable code and patterns.
- Cunningham and Cunningham, The Portland Pattern Repository, www.c2.com/cgi/wiki?WelcomeVisitors.
You could spend all day browsing through this community-edited website about design patterns.
- Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994, ISBN: 0-201-63361-2.
Called the “Gang of Four” book (because of its four authors), this text is the seminal work on design patterns.
- Wikipedia Design Patterns, http://en.wikipedia.org/wiki/Design_pattern_(computer_science).
Contains a description of a large number of design patterns used in computer programming.
OPERATING SYSTEMS
- Abraham Silberschatz, Peter B. Galvin, and Greg Gagne, Operating System Concepts (Eighth Edition), Wiley, 2008, ISBN: 0-470-12872-0.
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, 2011, ISBN: 1-933-98877-0.
An excellent book on practical multithreaded programming, including the new C++11 threading library.
- Cameron Hughes and Tracey Hughes, Professional Multicore Programming: Design and Implementation for C++ Developers, Wrox, 2008, ISBN: 0-470-28962-7.
This book is 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, 2008, ISBN: 0-123-70591-6.
A great book on writing code for multiprocessor and multicore systems.
- Wikipedia POSIX Threads, http://en.wikipedia.org/wiki/POSIX_Threads.
- Boost Threads, www.boost.org.
Explains how to work with POSIX threads or Boost threads in case your compiler does not yet support the C++11 threading library.