Up one level
Programming Book Recommendations
Spencer Stirling

C++ Books
Read these books in the order listed:

Basic C++ books covering up through Standard Library (STL) and C++11
  1. Thinking in C++ Vol I, Bruce Eckel
    an excellent (and free) introduction for those coming from C (experience in C works against you). Core C++ only
  2. Thinking in C++ Vol II, Bruce Eckel, Chuck Allison
    covers templates and Standard Library (C++98 standard). Decent, and free online, but I prefer Josuttis' book below. Note that some things are deprecated (e.g. auto_ptr) in favor of more modern C++11 features
  3. Effective C++, Scott Meyers
    required reading. A "style guide" that will help you to avoid becoming a "C with classes" programmer. Note that a few concepts are deprecated (e.g. auto_ptr) in favor of more modern C++11 features
  4. The C++ Standard Library, 2nd edition, Nicolai Josuttis
    required reading. Excellent coverage of the Standard Library. Make sure that you get the 2nd edition since all code has been updated for C++11
  5. Exceptional C++, Herb Sutter
    required reading. A goldmine of techniques and idioms for experienced programmers looking to become professionals. Especially emphasizes exception-safety and deeper aspects of the language. Note that some things are deprecated (e.g. auto_ptr) in favor of more modern C++11 features
Design Patterns (a popular vocabulary for solving common problems. Applies to any object-oriented language)
  1. Design Patterns: Elements of Reusable Object-Oriented Software, GangOfFour
    required reading. The original and best
  2. Head First Design Patterns, Freeman, Freeman et al
    gimmicky introduction to the most important design patterns. Java-based. I prefer the GangOfFour book
  3. Modern C++ Design: Generic Programming and Design Patterns Applied, Alexandrescu
    (see section on Template Metaprogramming for description)
Boost libraries (90+ powerful libraries that are under consideration for integration into future C++ standards)
  1. The Boost C++ Libraries, Schaling
    free online. You won't spend much time with this book, but it helpfully orients the reader before tackling the Boost website. Note that many Boost libraries have either been integrated or superceded by the C++11 standard. Here is a list that I stole of outdated Boost libraries
    Replaced in C++11 (in addition to what was already replaced in TR1)
    
        Foreach --> Range-based for
        Functional/Forward --> Perfect forwarding (with rvalue references, variadic templates and std::forward)
        In Place Factory, Typed In Place Factory --> Perfect forwarding (at least for the documented use cases)
        Lambda --> Lambda expression
        Min-Max --> std::minmax, std::minmax_element
        Move --> Rvalue references
        Ratio --> std::ratio
        Static Assert --> static_assert
        Thread --> thread
        Typeof --> auto, decltype
        Value initialized --> List-initialization (ยง8.5.4/3)
    
    Replaced in TR1 (draft version of C++11)
    
        Array --> std::array
        Bind --> std::bind
        Enable If --> std::enable_if
        Function --> std::function
        Member Function --> std::mem_fn
        Random --> random
        Ref --> std::ref, std::cref
        Regex --> regex
        Result Of --> std::result_of
        Smart Ptr --> std::unique_ptr, std::shared_ptr, std::weak_ptr (but boost::intrusive_ptr still cannot be replaced)
        Swap (swapping arrays) --> std::swap
        Tuple --> std::tuple
        Type Traits --> type_traits
        Unordered --> unordered_set, unordered_map
    
    A large part of MPL can be trimmed down or removed using variadic templates. Some common use cases of Lexical 
    cast can be replaced by std::to_string and std::stoX.
    
    Some Boost libraries are related to C++11 but also have some more extensions, e.g. Boost.Functional/Hash 
    contains hash_combine and related functions not found in C++11, Boost.Chrono has I/O and rounding and many other 
    clocks, etc. so you may still want to take a look at the boost ones before really dismissing them.
    
  2. Boost website
    difficult to get oriented, but most of the docs are excellent after some initial learning curve
  3. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond, Abrahams and Gurtovoy
    a nice introduction to a more advanced Boost library: MPL
Toolkits - choose one for GUI, networking, process management, sound, etc
  1. wxWidgets
  2. Qt
  3. GTK+
Template Metaprogramming ("code that generates code")
  1. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond, Abrahams and Gurtovoy
    a nice introduction to Boost MPL library. Probably the most useful since it concentrates on how metaprogramming is done nowadays
  2. C++ Templates: the Complete Guide, Vandevoorde and Josuttis
    starts with details concerning the template mechanism (warning: some details are outdated, e.g. "export"). The last two-thirds of the book introduce traits and policies. The code for smartpointers and tuples is deprecated in favor of Boost/C++11 versions
  3. Modern C++ Design: Generic Programming and Design Patterns Applied, Alexandrescu
    an advanced treatment of traits, policies, and template metaprogramming. Note that his Loki library, although never in widespread use, inspired later libraries such as Boost MPL. Various other code snippets (e.g. smartpointers) are also deprecated in favor of Boost/C++11 versions
CUDA programming (for accelerated numerics on highly-parallel NVidia GPUs)
  1. CUDA by Example: An Introduction to General-Purpose GPU Programming, Sanders and Kandrot
    describes how to program GPU kernels using CUDA language extensions to C. Runtime API (as opposed to the Driver API)

Cliff Palace, Mesa Verde National Park, Colorado

This page has been visited   times since July 30, 2012