The Artima Developer Community
Sponsored Link

The C++ Source
A Pause to Reflect: Five Lists of Five, Part I
The Most Important C++ Books...Ever
by Scott Meyers
August 9, 2006


In this article, Scott Meyers shares his picks for the five most important books in the history of C++, along with why he chose them.

I wrote Effective C++ in 1991. I learned C++ some years before that. When I sat down to write this article, I believed I’d learned C++ in 1986, making 2006 the twentieth anniversary of my learning the language and the fifteenth anniversary of writing a book about it. Alas, memory—or at least my memory—is not to be trusted, and the historical record shows that I really learned C++ in 1988. 2006 thus marks my nineteenth year with C++. While not as round a number as twenty, it still means I’ve been working with the language for a fair chunk of time, and I find that this year, for whatever reason, I’m not just thinking about C++’s future, I’m reflecting on its past. There’s a lot to say about its future, especially with the next version of the language (C++0x) nearing the final stages of specification, TR1 already out, and TR2 ramping up. But right now I want to dwell a bit on what’s already been, and I want to do it in a most audacious way: I want to name my picks for the most important contributions to C++ in various categories...ever.

I’m going to start by naming what I believe to be the five most important books related to C++, but before I do that, I should write a little about me. It goes without saying that my lists of the most important contributions to C++ are subjective and based on my personal experience and perspective. What should probably not go without saying is something about my experience and perspective.

I’ll begin with what many of you will find an unredeemably damning confession: I have not written production software in over 20 years, and I have never written production software in C++. Nope, not ever. Furthermore, I’ve never even tried to write production software in C++, so not only am I not a real C++ developer, I’m not even a wannabe. Counterbalancing this slightly is the fact that I did write research software in C++ during my graduate school years (1985-1993), but even that was small (a few thousand lines) single-developer to-be-thrown-away-quickly stuff. And since striking out as a consultant over a dozen years ago, my C++ programming has been limited to toy “let’s see how this works” (or, sometimes, “let’s see how many compilers this breaks”) programs, typically programs that fit in a single file. (make? Who needs stinkin’ make?) My living is based on C++, but it’s not by virtue of the programs I write in it.

It’s not by virtue of any intimate association with the language’s standardization, either, because I’ve never been a member of the C++ standardization committee, I’ve never been on the committee’s mailing lists, and I’ve never attended any standardization meetings. My knowledge of the inner workings of the committee—including the things that have had a significant impact on it—is based on what I’ve read and heard from others. This means that I may be ignorant of important forces that shaped C++ as we know it, because those forces may have been felt only within the committee.

Given that I don’t really use C++, nor do I help specify it, you might wonder what I do do. Fundamentally, I study C++ and its application. I gather as much information as I can about the language and its use (from books, magazines, newsgroups, email and face-to-face conversations with developers and members of the standardization committee, experiments with toy programs I write, etc.), organize and analyze what I find, then I package my findings in concentrated form (e.g., books, magazine articles, technical presentations, etc.) for consumption for people like you—people who do use the language. Your job is to employ C++ as a tool to write useful software. My job is to discover and package the information you need to best apply that tool.

I like to think of myself as an outside observer, not too deeply steeped in the day-to-day travails of programmers and not too keenly focused on the minutiae of standardization, yet familiar with both. This series of articles, then, summarizes what this self-proclaimed outside observer thinks have been the most important contributions to C++ since its inception.

By “most important,” I mean the things that have had the greatest impact on developers working in C++. Many of the things on my lists have had a direct impact, i.e., have been felt directly by developers. Widely-used compilers and libraries and widely-read books and articles are examples of things with a direct impact. Things with an indirect impact are those that had a direct or indirect impact (ah, recursion—don’t you love it?) on the things that had a direct impact. For example, you’ll soon see that I name the ISO C++ Standard as one of the most important books ever published, but that’s because of its indirect impact on developers through its direct impact on compiler and library writers.

The importance of some things is quickly apparent. That’s the case with the Standard, for example. More commonly, it takes time to recognize the impact that something has had. That being the case, something relatively new to the C++osphere is less likely to make one of my lists than something that’s been around for a while. On my book list, for example, the most recent entry is from 2001. That doesn’t mean that no important books have been published in the past five years. It just means that from my perspective, nothing that’s been published in the past five years has shown itself to be more important than what’s already on the list. Ask me again in a couple of years, and I may think differently.

The Five Most Important C++ Books

To make this list (and all subsequent lists in this series) more meaningful, I’ve decided to impose two constraints on myself. First, I’m really going to limit myself to five books. There will be no spots with more than one book sharing the glory, no honorable mentions for books almost making the cut. Five slots, five books. Second, I’m not going to eliminate my own books from the running. If I’m going to judge others’ books, I should judge mine, too.

Those are fairly severe constraints, so I’ve decided to cut myself slack in one respect: I’m not going to try to order the books on the list (or any of the entries on any of the other lists) from most important to least important. The granularity of my choices is “on the list” or “not on the list.” Within each list, I’ll order things chronologically, in this case by initial publication date.

Here, then, are my picks for the five most important C++ books ever published:

As you review the entries on the list, bear in mind that I’m an Addison-Wesley author, and one of the perks that qualifies me for is getting free copies of pretty much any Addison-Wesley book I want. I’m thus more likely to be familiar with books by Addison-Wesley than by other publishers. Having said that, I’d like to think that if a book by a different publisher had rocked the world of C++, I’d have heard about it.

In the next article in this series, I’ll reveal my choices for the most important non- book publications (e.g., magazine articles, etc.) in the history of C++.

Share Your Opinion

Discuss this article in the Articles Forum topic, The Most Important C++ Books...Ever.

End Notes

1. The option is -Weffc++.

2. From time to time, I google for the most commonly mentioned pattern names on web pages and in Usenet postings, and my results have been consistent over the years: of the 20 most frequently mentioned pattern names, the vast majority are from this book. That’s remarkable for a decade-old book in a very active field.

3. Yes.


Information about TR1 (Technical Report 1):

Scott Meyers is the author of Effective C++, the third edition of which was published in 2005. It is available on at:

Scott Meyers is also the author of More Effective C++, which is available on at:

Scott Meyers is also the author of Effective STL, which is available on at:

Scott Meyers’ home page:

About the Author

Scott Meyers Scott Meyers is one of the world’s foremost authorities on C++; he provides training and consulting services to clients worldwide. He wrote the best-selling Effective C++ series (Effective C++, More Effective C++, and Effective STL), designed the innovative Effective C++ CD, is Consulting Editor for Addison Wesley’s Effective Software Development Series, and serves on the Advisory Board for The C++ Source ( He has a Ph.D in Computer Science from Brown University. His web site is

Sponsored Links

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use