Annotated Bibliography - Professional C++ (2014)

Professional C++ (2014)

Appendix BAnnotated 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++

· Stanley B. Lippman, Josée Lajoie, and Barbara E. Moo, C++ Primer (5th Edition), Addison-Wesley, 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.

· 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.

· Andrew Koenig, 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.

· 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++

· The C++ Programming Language at www.isocpp.org.

The home of Standard C++ on the web — news, status and discussions about the C++ standard on all compilers and platforms.

· 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.

· 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++ Reference at www.cppreference.com.

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

· The C++ Resources Network at www.cplusplus.com.

This site contains a lot of information related to C++, including a complete reference of the language.

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 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.

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.

An excellent explanation 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++14

· 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++11/C++14), Artima, 2013, www.artima.com/shop/overview_of_the_new_cpp.

This contains the presentation materials from Scott Meyers’ training course on the new C++ standard, and is an excellent reference to get a list of all new C++11 features and select C++14 features.

· Wikipedia C++11, http://en.wikipedia.org/wiki/C%2B%2B11.

A description of all new features added to C++11.

· Wikipedia C++14, http://en.wikipedia.org/wiki/C%2B%2B14.

A description of a selection of new features added to C++14.

· ECMAScript Language Specification, www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf.

One of the syntaxes of the regular expressions in C++ 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.

UNIFIED MODELING LANGUAGE, UML

· Russ Miles, and Kim Hamilton, Learning UML 2.0, O’Reilly Media, 2006, ISBN: 0-596-00982-8.

A very readable book on UML 2.0. It uses Java in examples, but those 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 (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.

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.

Boost provides a huge amount of free peer-reviewed portable C++ source libraries. Definitely worth checking out.

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

These websites hosts many open-source projects. It’s a great resource 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

· 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_(software_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.

· Herb Sutter, and Andrei Alexandrescu, C++ Coding Standards: 101 Rules, Guidelines, and Best Practices, Addison-Wesley, 2004, ISBN: 0-321-11358-6.

A must-have book on C++ design and coding style.

· 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.

· 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” (GoF) book (because of its four authors), this text is the seminal work on design patterns.

· John Vlissides, Pattern Hatching: Design Patterns Applied, Addison-Wesley, 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. It shows good and bad examples of using patterns, and gives solid reasoning behind each pattern.

· 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 C++ 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++ threading library.