Professional C__ - Marc Gregoire [511]
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.
Appendix C
Standard Library Header Files
The interface to the C++ Standard Library consists of 78 header files, 26 of which present the C standard library. It’s often difficult to remember which header files you need to include in your source code, so this material provides a brief description of the contents of each header, organized into eight categories:
The C Standard Library
Containers
Algorithms, iterators, and allocators
General utilities
Mathematical utilities
Exceptions
I/O Streams
Threading library
THE C STANDARD LIBRARY