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

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.

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.

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

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.

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

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

An interesting video lecture series on the C++ Standard Template Library.

C++ Templates

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

Access a wealth of papers written by the C++ standards committee.

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.

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

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.

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

OPEN-SOURCE SOFTWARE

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.

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.

A detailed discussion of the Scrum methodology.

The complete agile software development manifesto.

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.

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.

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.

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

GDB is an excellent symbolic debugger.

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.

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.

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.

Explains how to work with POSIX threads or Boost threads in case your compiler does not yet support the C++11 threading library.

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

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