Recommended Books on Programming Languages
Here are some of the books which we've found useful or interesting.
How Not to Program in C++
Steve Oualline, No Starch Press
Looking for a good present for someone who enjoys debugging? Or just looking to improve
your debugging skills? Oualline's book is a combination of debugging puzzles and computer
anecodotes. Puzzles range from the trivial (missed initialization, missing close comment),
through to the more difficult (race conditions, compiler optimization induced failures). Each
puzzle comes with hints and answers. However, you really have to work through each chapter
in sequence as each puzzle (and each joke) tends to build upon what has gone before.
The problems, of course, have to be a lot simpler than many of those we encounter in
the real world. Think of this as something along the lines of a
Five Minute Mysteries
for programmers rather than a
Warren Commission Report.
An ideal book to read in your smallest room!
The Best Software Writing I
Spolsky, Joel (Editor), Apress
There's a lot of good writing in blogs on the web. Unfortunately there is a lot of dross and trivia out there too. Who has time to find the good stuff?
The answer, fortunately for us, appears to be Joel Spolsky. This book contains selected essays (mostly taken from blogs) on the human side of software development. There are well-written essays on such topics as management, recruitment, testing, compensation, user interfaces, etc. Included are some excellent insights into why organizations do what they do, and why things are they way that they are.
Joel Spolsky is an excellent writer — indeed, I was surprised not to find one of his own essays in the book. However, if this book has a weakness it is that Spolsky's editorial introductions and footnotes (while very interesting) sometimes overwhelm the essays themselves.
Sometimes it feels that there isn't any intelligent life out there on the web. This book is a useful reminder that there is intelligent life out there: it's just very hard to find.
The C++ Standard Template Library
Nicolai M. Josuttis, Addison-Wesley
If you haven't been tracking the evolution of the C++ language closely,
you may have missed out on the development of templates and the introduction
of the Standard Template Library (STL). With these tools you can finally
program at a high level of abstraction, and C++ can finally be
considered a high level language.
Josuttis provides an excellent guide to both the philosophy and usage of the C++
Standard Template Library (STL). I never really understood the full capabilities
of the library (or why it was designed the way it was) until I read this book.
It gives good examples of almost every usage, enough background to understand
the reasoning behind the design of the library, and organizes the material very well
for instant reference. It's my preferred reference for the standard template library: I use it frequently.
The C++ Programming Language
Bjarne Stroustrup, Addison-Wesley
Stroustrup has a slight advantage over other writers on C++: as the originator
of the language he can not only
tell you what the language is, he can tell you why it is.
In addition he is a good technical writer, with plenty of clear explanations,
and a comprehensive index. This isn't quite as well written as the second edition
(co-authored with Margaret Ellis), but due to changes in the C++ language this is the
edition you need to own.
The coverage of the Standard Template Library (STL) is good, although
nowhere near as good as the coverage in Josuttis. It also omits
Locales, although you can download the missing
covering locales as well as an
Appendix E covering STL exception
handling from the author's web site.
Effective C++ (Second Edition)
Scott Meyers, Addison-Wesley
This is a book all professional C++ programmers should read even if it
does give them the answers to some of my favorite C++ interview questions. Meyers
provides 50 bullet points for writing better C++ programs. This isn't normally
a format I like (too much like 10 ways to start losing weight now), but
these are surprisingly good points. It contains some good material on C usages which
should not be promulgated into C++, as well as the answer to the question
When must you use a virtual destructor? which trips up far
too many interview candidates.
More Effective C++
Scott Meyers, Addison-Wesley
Normally I'm not in favor of sequels. Nor books of lists. But More Effective C++
contains 35 good additional points. This book is more concerned with useful techniques
than style or coding rules. I find it particularly helpful in designing classes which
prevented naive forms of bad usage. There's good sections here on smart pointers, the
correct usage of multiple inheritance, and general good object-oriented abstraction.
I especially liked the explanation of how to write a class which can distinguish between
its use as an lvalue (left hand side of an assignment) and an rvalue (right hand side
of assignment, etc.)
CodeNotes for C#
Grebory Brill (Ed), Random House
I needed a book which would tell me enough about C# to know whether it was worth learning more, but didn't treat me as an idiot. This book proved to be it.
This is an introduction to the language (and runtime) designed for a C++, Visual Basic, or Java programmer. It explains the key concepts at a reasonable level of detail (not too high, not too low).
This book isn't a reference. It is not a complete description of the language, not is it intended as one. You'll probably therefore read it once, then refer back to it a few times before moving on to a more comprehensive tome.
[Other Recommended Books]