This document was really more for Eazel than for all Nautilus hackers, but since the style guide references it, I checked it into the Nautilus CVS for now. Later we can figure out what to do with it.
This document is left over from when Eazel was doing a program in C++. Soon, I'll rearrange the document so it doesn't put all the C++ stuff first, since C++ is immaterial for the current Nautilus project.
If you buy books from Amazon.com using the links on this page, Darin will get a small kickback from Amazon.
One of the main reasons for creating this list is that there are many poor C++ books out there. I've picked out a small number of extremely useful books so you won't have to wade through the weaker ones.
These books cover the C++ language and library. All of them except for the C++ standard itself also contain useful introductory material. For some programmers, these are enough to explain the features of the language.
The C++ Programming Language, Third Edition, Bjarne Stroustrup. This is the book by the creator of the C++ language. This third edition is far superior to the first two, and covers the ISO Standard version of the language in detail, including the library. Any serious C++ programmer should read this book. There have been many corrections since the first printing, so get the newest printing you can. Bjarne has supporting materials for the book on the web, including the errata lists that enumerate all changes between printings.
The C++ Standard Library, Nicolai M. Josuttis. This book has the best coverage of the library. There have been tons of others that cover the library, or focus on the STL or streams. But Josuttis covers all these subjects better than any of his predecessors. Since we use the library extensively in Eazel projects, this is a must read. The author has some useful supporting materials on the web.
These books are about specific programming techniques for writing code in C++. They can help you understand idioms you'll find in our code. This kind of idiomatic programming is important in C++, because the language gives you so much freedom to write unusable, unmaintainable code.
Exceptional C++, Herb Sutter. This is a collection of material that was originally part of Herb's Guru of the Week. This includes much of the most advanced C++ information available. I learned many of the most important techniques from Herb, including the swap technique for writing safe assignment operators. Herb covers each topic thoroughly.
Ruminations on C++, Andrew Koenig and Barbara Moo.
Effective C++, Second Edition and More Effective C++, Scott Meyers. These books contain a laundry list of important C++ idioms. The books are a bit less important now than when they were first released, but still full of valuable stuff. There's also a CD edition (there's a copy of it on Rob's machine) that contains both books in electronic form. The publisher's web site has a good collection of supporting materials for both the original and the second book
The Design and Evolution of C++, Bjarne Stroustrup. While this book doesn't prescribe any specific techniques, it will help you understand the tradeoffs behind all the language features, and how C++ got to be what it is. I highly recommend it.
These books explain C++ programming from scratch. These particular examples are so good that they can be useful even for experienced programmers who already know C++ well.
Essential C++, Stanley Lippman. This tutorial is much more useful than the longer and more complete works, like C++ Primer. It covers the features and the reasons for the features quite well. In particular, it has a good explanation of references and pointers and why you'd use one or the other. It covers templates and exceptions fairly well.
OK, so I'm not an expert on Gtk yet. But I'm becoming one.
Gtk+/Gnome Application Development, Havoc Pennington. I learned a lot from this book. But it's all Gtk+ and C; things are done a bit differently with Gtk-- from C++. It's still worth reading.
These books are valuable because of the ideas in them, but are not specific to a particular programming language or toolkit.
Refactoring, Martin Fowler. This book outlines a philosophy of programming that we embrace at Eazel. The ideas about changing existing code to improve it so it can be modified are extremely important. The ideas about unit testing as a means to this end shape the way we use unit testing at Eazel. All the examples in the book are in Java, but the ideas apply well to C++.
The Practice of Programming, Brian Kernighan, Rob Pike. This book, by two of the most famous UNIX programmers, covers a lot of basic programming smarts. I don't agree with everything they have to say, but the book is great as a whole.
Programming Pearls, Second Edition, Jon Bentley. This classic has recently been updated with a second edition. I haven't read the second edition yet, but I'm sure it's great. When I read it, I'll put more specific comments here.
Design Patterns. There's also a CD edition (there's a copy of it on Rob's machine).
Algorithms in C++, Third Edition, Robert Sedgewick. The original version is in C. There's also an upcoming Java version.
I've also read many books on these topics that were less useful than the ones listed above. Here are a few that were not as exemplary. I won't try to sort out the ones that I found simply "not as useful as the best ones" from the truly awful. If you see a book that's not on this list, it might be one I'd recommend. Maybe I haven't read it.
C Interfaces and Implementations.
C++ IOStreams Handbook, Steve Teale. Josuttis covers streams better.
Extreme Programming Explained. My love for Refactoring had me excited about this one, but it was a disappointment.
Generic Programming and the STL, Matt Austern. I don't know of anyone who knows more about the STL than Matt Austern, who's currently maintaining the main implementation at SGI. But Josuttis covers the STL better.
Large-Scale C++ Software Design, John Lakos.
Objects Unencapsulated: Java, Eiffel and C++??. This is a basically an "Eiffel is great, C++ sucks" book. Some interesting insights, but a lot of sloppy thinking.
This is a list of possibly important books that I haven't checked out yet.
C++ Primer, Third Edition, Stanley Lippman, Josee Lajoie. The earlier editions were good but not great. But I have reason to believe that this one might be better than those were.
C++ Primer Answer Book. I checked, and this answer book does go with the third edition of C++ Primer.
Design Patterns and Contracts.
Developing Linux Applications with GTK+ and GDK.