Here is a list of books about programming in C++, software design in
general, and (software) project management. I own all of them. There are
many books available - some are very good while others cannot be
recommended at all. So I try to give a short overview whether a
particular book might be of interest to you. I provide this list 'as is'
without warranty of any kind. Please note that the comments reflect my
own personal opinion only! The latest version of this document can always
be found at http://www.thomashertweck.de/cpp.html.
||The C++ Programming Language, Bjarne
Stroustrup, Addison-Wesley: This book is written by the creator of
C++, Bjarne Stroustrup. It describes all elements of the C++
programming language in a clear way and is a "must have" for any
serious C++ programmer. Every language feature is explained with
illustrative code snippets. While it might be a little bit too
complicated for beginners, i.e. to learn programming from scratch
with C++, it is a very good reference book. Highly recommended.
||C++ ent-packt, Herbert Schildt, mitp:
A similar bool to the above-mentioned C++ Programming language, this
time in German. It starts with an introduction to C and is in general
not as complicated as Bjarne's book, i.e. it is also suitable to
learn the C++ language from scratch (beginners). It has quite a lot
of examples and also serves as a reference book. If you already own
Bjarne's book and you are happy with it, then presumably there is no
need to buy this one.
||Thinking in C++: Introduction to Standard C++
(Vol 1), Practical Programming (Vol 2), Bruce Eckel, Prentice
Hall: A great collection of books, in particular useful for new
programmers to C++ coming from a C background. It comes with lots of
simple, easy to understand code examples and excercices. Bruce Eckel
has a very good writing style as well as a fine grasp of C++,
compilers, and language issues in general. The second volume focuses
on practical C++ beyond the introductory level, including STL, design
patterns, etc. The two books can also be downloaded in electronic
format for free from Bruce Eckel's mindview website (download). This is particularly useful to get an
impression of the books - if you like them, consider buying
||Accelerated C++, Andrew Koenig,
Barbara E. Moo, Addison-Wesley: This is a great book for beginners
and newbies to C++. Unlike other books on C++ that start with an
introduction to the C programming language, this book starts with C++
language features (such as STL, class design, etc.) from the very
beginning. It really does what it says on the cover: programming by
example. This book is a unique attempt to teach C++ without teaching
C first, based on practical experiences of the authors with their
summer C++ course at Stanford University. Highly recommended for C++
beginners without previous C knowledge.
||The C++ Standard Library, Nicolai M.
Josuttis, Addison-Wesley: In a nutshell, the best book about the
Standard Library on the market. It explains all containers and the
generic algorithms in detail, along with numerous examples in
understandable code. It also explains common pitfalls, the quirks and
peculiarities, and the limitations of the STL. While it is a great
reference, it is also a good read from front to end. You need at
least some knowledge of C++ before reading this book. A German
translation is available, but reading the English version should be
preferred. Highly recommended. The latest edition also covers the
||C++ Concurrency in Action, Anthony Williams,
Manning: This book describes the new C++ standard threading library that
comes along with C++11. It certainly assumes a fairly good understanding
of C++, i.e. it shouldn't be your first book to read on C++. The book is
well written but sometimes maybe a bit short on explanations/examples, i.e.
it feels more like a reference than a tutorial. You should note that this
book doesn't provide a general introduction to C++11 although it uses other
new features that come along with the new C++ standard.
||Beyond the C++ Standard Library: An
Introduction to Boost, Björn Karlsson, Addison-Wesley:
The Boost libraries provide functionality that you might miss in the
standard C++ Library. Some of them are proving so useful that they
are planned for inclusion in the next version of the C++ standard.
This book outlines all available Boost libraries in 2005 and explains
12 of them in great detail. The topics range from smart pointers and
type conversions to containers and data structures. Obviously, this
book is only recommended for advanced C++ programmers.
||Effective STL: 50 Specific Ways to Improve
the Use of the Standard Template Library, Scott Meyers,
Addison-Wesley: Scott Meyers is a well known C++ expert. This book
teaches techniques which allow you to make best use of the STL. The
book is organised into 50 tips that explore different areas of the
STL. Scott gives a lot of recommendations what to do and what to
avoid. Each tip is accompanied by in-depth coding samples. This book
is only recommended for intermediate and advanced C++ programmers -
if you are one, then this book should not be missing on your desk.
||C++ Coding Standards, Herb Sutter,
Andrei Alexandrescu, Addison-Wesley: People have different opinions
about coding standards. However, even if you are working alone,
certain standards improve the software quality, reduce errors, and
simplify maintenance. Of course, certain things are just not worth
standardizing. This book focuses on important topics and descibes
each introduced standard concisely and with practical examples.
People working in programming departments should certainly have a
look at this book.
||Imperfect C++: Practical Solutions for
Real-Life Programming, Matthew Wilson, Addison-Wesley: C++ is
certainly not a perfect language. This book covers some of the
imperfections and language limitations and shows workable compromises
or workarounds. It is a good source of C++ information and a
practical guide to taming C++. However, I am not sure whether I would
use all of the techniques shown in this book. This book can only be
recommended to the intermediate and advanced programmer who might
already have experienced some of the C++ imperfections.
||Large-Scale C++ Software Design, John
Lakos, Addison-Wesley: Although the book title mentions C++, it is
not a book about the C++ language itself. Most ideas presented in
this book apply to any (object-oriented) programming language. This
book might be a tough read. However, everybody involved in
large-scale software development projects should have a look at it.
John explains the process of decomposing large systems into physical
and logical components and how to design them. We all know that
design is an important aspect in writing stable, reusable C++
||Design Patterns: Elements of Reusable
Object-Oriented Software, Erich Gamma, Richard Helm, Ralph E.
Johnson, John Vlissides, Addison-Wesley: Although quite old, this
book is still the standard reference on design patterns. It is
sometimes also called GoF, Gang of Four. This book contains lots of
useful information about object-orientation and design but it is also
a tough read and requires deep concentration, in particular in the
second half. This book has examples in C++ and Smalltalk but the
patterns do not depend on a particular language.
||Head First Design Patterns, Eric Freeman,
Elisabeth Robson, Bert Bates, Kathy Sierra, O'Reilly: Another book on
design patterns. Probably easier to read than above mentioned GoF book,
but you have to get used to the style in which this book is written - it's
probably not for everybody. I would recommend borrowing this book first
to make up your own mind. In general, an interesting book on a difficult
and relatively dry subject. Examples are based on Java but this shouldn't
cause any problems, even if you aren't well versed in Java.
||C++, UML und Design Patterns, Helmut
Herold, Michael Klar, Susanne Klar, Addison-Wesley: A book that might
serve new and advanced programmers equally well which could be its
strength but also its weakness. It explains the relation of software
engineering and object-oriented programming, UML and design patterns.
The book starts fairly easy but becomes more complicated when it
presents complex object-oriented features. It suffers a bit from the
attempt to address such a broad audience. Nevertheless, I learned
quite a lot (I haven't had any UML experience)!
||Modern C++ Design: Applied Generic and Design
Patterns, Andrei Alexandrescu, Addison-Wesley: This book
should only be read by experienced programmers familiar with
templates and STL. You should also be somewhat familiar with the GoF.
It is a tough read and sometimes hardcore C++ code is presented. The
book demonstrates pattern templates as a powerful concept, so it
could also be in my "C++ Templates" category. The book is useful for
those who want to learn modern library writing techniques or are
interested in details of template programming. Others might find it
||API design for C++, Martin Reddy,
Morgan Kaufmann: This book concentraces on the Application Programming
Interface, or API, for code developed in C++. Experienced developers
will probably know most topics presented in this book. However, if you
are involved in writing libraries that need to be used by others, this
book is worth a try. You won't learn C++ from this book but it might
help you improving the design of your code. A good API is worth much!
||C++ Templates: The Complete Guide,
David Vandervoorde, Nicolai M. Josuttis, Addison-Wesley: Again, a
book that is not suitable for beginners and even advanced C++ users
might have problems. You need a solid understanding of C++, then you
can make the best out of this book. While "Modern C++ Design" deals
with the practice of implementing a template library, this book
explains the theoretical aspects in great detail. If you are looking
for a solid, general grounding in everything templates can do then
this book is exactly what you should read.
||C++ Template Metaprogramming, David
Abrahams, Aleksey Gurtovoy, Addison-Wesley: The first part of the
book covers the basics of template metaprogramming. It is a good
introduction to this technique. The second part, however, does not go
into more theoretical details that help to understand the topic but
explains more or less the API of the Boost metaprogramming library. I
think this book will be of interest to intermediate and advanced C++
programmers interested in library development. I would not recommend
it to other audiences.
||Effective C++: 55 Specific Ways to Improve
Your Programs and Designs and More
Effective C++: 35 New Ways to Improve Your Programs and
Designs, Scott Meyers, Addison-Wesley: Scott is a C++ expert
and it is a pleasure to read his books. The two books present various
aspects and intricacies of the C++ language. You need to know at
least the basics of C++ before reading these books. The information
given in this book is very valuable and practical, the organisation
of the books is great. They have solid examples that show exactly why
Scott recommends certain ways of programming and software design.
||Exceptional C++: 47 Engineering Puzzles,
Programming Problems, and Solutions and More Exceptional C++: 40 New Engineering Puzzles, Programming
Problems, and Solutions, Herb Sutter, Addison-Wesley: Those
two books are similar to Scott Meyer's books mentioned above. The
books are organized in question and answer form, so you can find the
answers for yourself if you want (and if you have the time and
knowlegde to do so). The books contain excellent analyses and
detailed information and are targeted to the experienced C++
programmers. They can certainly bring you to the next level of C++.
||C++ FAQs, Marshall Cline, Greg Lomow,
Mike Girou, Addison-Wesley: A great book for all levels, from
beginner to expert. This book is organized in chapters that cover
different C++ topics. Each chapter consists of numerous FAQs that are
answered in great detail. The authors are moderators of
comp.lang.c++, thus this book really covers practical programming
challenges you face every day. I would not recommend learning C++ off
of this book but it certainly helps to deepen your understanding of
this language. Highly recommended.
||How Not to Program in C++: 111 Broken
Programs and 3 Working Ones, or Why Does 2+2=5986?, Steve
Oualline, No Starch Press: This book has some funny C++ puzzles which
are based on real-world errors. They might be challenging for
beginners or intermediate C++ programmers but should (hopefully) not
cause a headache for professional programmers. The book consists
mainly of source code and humorous tales and comments. It should not
be taken too seriously, but in particular beginners might have some
fun. However, don't expect too much when buying this book.
|| 97 Things Every Programmer Should Know,
Kevlin Henney, O'Reilly: One of those books that you find either quite
interesting, or quite boring because you have seen and heard most of
its content already. I must admit, I probably belong to the latter
category. The book contains 97 stories, each story just two pages long.
These stories are written by various different people who try to give
some advice on certain aspects of software development, based on their
own knowledge and experience.
||Numerical Recipes in C++: The Art of
Scientific Computing, William H. Press, Saul A. Teukolsky,
William T. Vettering, Brian P. Flannery, Cambridge University Press:
I think the Numerical Recipes books (C, F77, F90) are very well
known. This is now the C++ version. The strength of this book is
certainly not the code itself (most of the time you can easily find
much better code on the internet) but the explanations of the
numerical algorithms. It is a good way to get an overview of
numerical methods. Be aware that you cannot simply execute the source
code shown in this book.
||C++ and Object-Oriented Numeric Computing for
Scientists and Engineers, Daoqi Yang, Springer: The title of
this book suggests that it is about numeric computing. However, in
fact most of it is just an introduction to C and C++, unfortunately
more C than C++ in the beginning. Therefore, this book might better
be listed in my "General C++" category. I would only recommend it for
beginners with a scientific background, for instance students who
have to learn programming at the university. Intermediate or advanced
C++ programmers or people really interested in numeric computations
will not benefit from this book.
||C++ Pocket Reference, Kyle Loudon,
O'Reilly: This book is designed for people who (occasionlly) program
in C++ and need a syntax reminder. It is certainly not a tutorial and
it does not provide detailed instructions on the subject. However, it
is great for a one paragraph explanation on a particular topic. If
you need a reference book that you can easily carry with you on the
way to university, here it is.
||STL Pocket Reference, Ray Lischner,
O'Reilly: This pocket reference deals with the STL and helps to
quickly look up how to code something that you don't do every day.
Like all of these books, this book is a hybrid of introduction,
cookbook, and reference in one package. It usually has not many code
examples, strictly speaking it is an aid to memory. Together with the
"C++ Pocket Reference", it might do a good job when you sit in the
class room at university.
||Bash Pocket Reference, Arnold Robbins,
O'Reilly: A simple pocket reference for those of you writing scripts
using the Bourne-again shell (bash). It is a concise little book not
meant to teach you all about bash (there are better books out there
doing so) but a quick guide to the bash syntax and its built-in commands.
If you know everything about arrays in bash and you are able to write
complex shell scripts in no time without even looking at the bash man
page, then you probably don't need this book.
||C/C++ ge-packt, Herbert Schildt, mitp:
This book could be considered as a combination of the previous two
books, O'Reilly's pocket references. It is a handy book that fits
easily in your bag or even pocket. It covers the C and C++ basics,
library functions, and all containers of the STL. It includes
information on the C99 standard. The main drawback of this book is
its bad index which makes it difficult to use as a real reference for
quick lookups. Otherwise, it is fine.
||Ship it: A Practical Guide to Successful
Software Projects, Jared R. Richardson, William A. Gwaltney,
Pragmatic Programmers: This book is about running successful software
projects. If you have ever worked on a difficult software project on
death march, you know what it feels like. There is not much material
that is truly new in this book, but it is a rare book that speaks
convincingly to both developers and managers and summarizes possible
solutions (e.g. continuous integration, automated testing,
lightweight planning) to ship your software in time. Recommended for
both developers and managers.
||Joel on Software: And on Diverse and
Occasionally Related Matters That Will Prove of Interest to Software
Developers, Designers, and Managers, and to Those ... or Ill-Luck,
Work with Them in Some Capacity, Joel Spolsky, Apress: If you
deal with software development, either as a programmer or manager,
you should (have to?) read this book. Full stop. It covers every
conceivable aspect of software development, from the best way to
write code, to the best way to design an office in which to write
code! If you are in the software development business, you probably
already know Joel from his blog and website. This
book is a nice distillation of all his early online documents. If you
know all of these documents, there's maybe no need to buy this book.
Otherwise, go and get the book!
||Code Craft: The Practice Of Writing Excellent
Code, Pete Goodliffe, No Starch Press: You probably know how
to write code that works. This book is about code that is well
written and easy to understand. The book covers code writing
concerns, including code presentation style, variable naming, error
handling, security, and the wider issues of programming in the real
world, such as good teamwork, development processes, and
documentation. In some sense, it's similar to Joel's book mentioned
above. It's easy to read and comes with a subtle, gentle humour. The
author comes from a C language background and uses C for his examples
but the point being made can always be generalized to other
programming languages. Some people might say that this book covers
common programming knowledge. That's only partially true - it's
certainly a good summary of things programmers and managers should
know, therefore I highly recommend it.
||brilliant project management: what the best
project managers know, say and do, Stephen Barker and Rob
Cole, Pearson Prentice Hall: This book isn't about software projects
but about project management in general. It covers the core project
management skills (planning, dealing with risks, delivering, handling
resources) and people-related skills (providing leadership, running
meetings, etc). It's all about practical advice (not just theoretical
explanations) and there a loads of useful check lists and tips. It's
certainly one of the better project management books I've come
||The Rules of Management, Richard
Templar, Pearson Prentice Hall: I think everybody knows that
management isn't easy and it's certainly not rocket science. This
book shows 100 rules (guidelines) that should help you in your role
as (project) manager: manging projects, managing people, but also
managing yourself. The rules are for the most part very obvious and
things that most people who are natural leaders will know anyway,
still it is good as an occasional reminder to make you think through
these things properly. People new to the management role should have
a closer look.
||Assertiveness at work, Ken Back,
Kate Back, Mcgraw-Hill Professional: Communication is the key in
our modern work life. If you need to manage other people, you know
the problem that on the one hand you don't want to come across as
aggressive or threatening but on the other hand you also don't want
to be submissive. There's a thin line in between and it isn't easy
to get right under all possible circumstances. This book can help
you finding your way in being assertive to benefit both yourself
and your organisation.
||The C Programming Language, Brian W.
Kernighan, Dennis Ritchie, Prentice Hall: I think there is no need to
provide any details on this book. It is the best and standard
reference for the C programming language. It gives a complete picture
of the C language. This is a technical book that focuses on the
language itself - so if you are a novice, it might be a bit hard to
read (no explanations on how to use compilers etc.). However, it is
certainly worth its money. Highly recommended.
||Why Programs Fail: A Guide to Systematic
Debugging, Andreas Zeller, dpunkt: Andreas is the creator of
the Data Display Debugger (ddd) and has lots of experience in
debugging programs. This book attempts to provide a systematic
approach to finding, reproducing, and fixing programming errors, with
a strong focus on the automation of many debugging techniques. Many
interesting (and practical) ideas are explored. If you would like to
improve your detective skills, this book is for you.
||The Definite Guide to SQLite, Michael
Owens, Apress: SQLite is an open source embeddable SQL database with
a very small footprint. It's a great solution when you don't need a
client/server SQL database. The book serves as an introduction to
relational models and the SQL language in general, and the
capabilities and APIs of SQLite, in particular the C/C++ interface.
If you would like to work with SQLite, then this book is your perfect
||Pragmatic Guide to Subversion, Mike Mason,
Pragmatic Programmers: This book is relatively short. If you need an
introduction to subversion and some practical advice, then this book
might be for you (although the svn manual is already pretty good, to be
honest). It's not really a tutorial and it lacks addressing some real-world
issues when working with svn but as an introduction it's okay.