
1. Design Patterns (GoF) - This book is all about design, someday I aim to really understand all the patterns.
2. High Performance Parallelism Pearls Volume 2 (Reinders/Jeffers) - There are couple of other books similar to this one. But, if you want to know how myriad HPC applications make use of parallel programming models such as MPI and OpenMP, this provides a good introduction.
3. The Annotated C++ Reference Manual April 1995 hardbound edition (Ellis/Stroustrup) -- What a fantastic little book, also got it for $4.95 at Powell's bookstore in Portland :) IMO this books provides a gentle introduction to C++, you can flip to any page and just start reading.
4. Numerical Recipes in C (Press, Teukolsky, et al.) - If I need to quickly prototype some scientific computation kernel, this is my go-to book.
5. Effective C++ 3rd edition (Meyers) - I like to approach this book from the back (i.e., indices), pick up a topic, and then read the contents one by one. Repeat.
6. Discovering Modern C++: An Intensive Course for Scientists, Engineers, and Programmers (Gottschling) - I like and dislike certain portions of the book. It definitely contains a lot of code explanations of C++ idioms, which helps a beginner like me.
There you will understand why C++ is the way it is, when you are trying to sell a safer language with higher level abstractions to hardcore C developers at AT&T, with zero friction with existing C toolchains.
Many like me hate the C underpinnings of C++, but if it wasn't for them, most likely no C vendor would ever have adopted it.
They help understand all design compromises that were done to keep compatibility with C, which is was part of what brought C++ into the mainstream, but also the main cause of many of its warts.
[1] http://www.amazon.com/The-Annotated-C-Reference-Manual/dp/02...
[2] http://www.amazon.com/The-Design-Evolution-Bjarne-Stroustrup...
"C programmers think memory management is too important to be left to the computer. Lisp programmers think memory management is too important to be left to the user." Ellis and Stroustrup, The Annotated C++ Reference Manual.
The ABI mess predates the standard by years and if we look that far back the Annotated C++ Reference Manual included a scheme in its description of the language. Many compiler writers back then made the intentional choice to ignore it. The modern day ISO standard would not fare any better at pushing that onto unwilling compiler writers than it fared with the c++03 export feature.
[0] - The Annotated C++ Reference Manual