In my first three articles in this series, I named my picks for the most important contributions to C++ in the categories of books, non-book publications, and software:
In this fourth installment, I focus on people.
C++ is a technology, but behind the technology are the people who invent it, shape it, popularize it, and use it. This week, I explain who I consider to be the five most important people who’ve been involved in C++.
The people on the list all have a strong public presence. There are two reasons for this. First, such “front men” (and I’m sorry, but they’re all men, and I really am sorry about that) have a direct effect on more people, simply by virtue of being more visible. The more people you affect, the more important you are. That’s just the way it is.
The second reason why the list is filled with public figures is that, as I explained in the opening article in this series, my perspective is largely that of an outsider. There may be or have been people who’ve had an enormous impact on C++ who operate or have operated behind the scenes, out of my view. Maybe Stroustrup is just a pretty-boy stage presence for somebody else who does or did all the technical work. Maybe the accomplishments of the standardization committee are in fact the dictates of a cabal of individuals who choose to remain unrecognized. If so, they’ve succeeded: I don’t recognize them. And they’re not on the list.
As I worked on the list entries, I realized that (1) it helps to have been working with C++ for a long time, and (2) it also helps to be working with C++ today. Lots of people have been important, but the most important ones have been around a long time, have been consistent contributors to C++, and continue to work with it even now.
That said, here’s my list of the most important names in C++, ordered by when they published something related to C++ in a form more formal than a newsgroup posting. (This is always later than when they started working with the language, because it takes a while to know enough to have something worth saying to others.) As with my other lists, I limit myself to five names here: no ties, no honorable mentions. Because I’m now dealing with people instead of inanimate objects, that makes this list the most difficult to write. Still, the rules are the rules, and I’m determined to stick to them.
Bjarne Stroustrup, 1985-present. Well, duh. He invented the language, he wrote the first compiler for it, he’s published extensively about it (see his publications page for details), he’s been actively involved in its dissemination and standardization, and he continues to work with it to this day. (See, for example, his recent paper on SELLs [PDF] and the STAPL research project, on which he is a collaborator.) Stroustrup could have retired from C++ activities years ago and settled back to bask in the breathless accolades to which all successful inventors are entitled. That he has instead chosen to continue working on the research project he began nearly 30 years ago is a tribute to his dedication to what is now C++ (and was originally “C with Classes”). Though I don’t order by importance any of list entries in this series of articles, it’s hard to imagine anybody being more important to C++ than the person who invented it, initially implemented it, and has since helped guide it into the software development force it is today.
Andrew Koenig, 1988-present. Andrew Koenig is the only person on this list who’d probably still be on it even if he’d never published anything about C++. For whatever reason, I tend to think of him as a low-profile “insider,” but his publication history belies this image. He’s written two C++ books (with collaborator Barbara Moo), one C book (which doesn’t really count for C++ purposes, but even so...) and gads of magazine columns (his home page links to lists of them).
Still, what strikes me most about Koenig is the frequency with which his name is mentioned by others, especially in the context of C++ standardization. For example, he’s largely responsible for recognizing the significance of the STL and shepherding Alexander Stepanov in his work on adding it to the standard at a time when something of that magnitude shouldn’t even have been considered.
I can’t count the number of times I’ve heard or read words from members of the standardization committee to the effect that “Well, we were considering that, but then Andrew pointed out that...” or “that was a problem, but then Andy suggested....” In fact, Koenig is, as far as I know, the only person with a C++ language feature named after him. When, during standardization, it was discovered that the namespace-related name lookup rules sometimes failed to allow code like this to compile,
std::cout << someObject;
Koenig suggested a modification to the rules that quickly became known as “Koenig lookup.”1 In the standard, this rule is officially known as argument-dependent lookup (“ADL” to fans of casual chic), but the section of the Standard that describes it (section 3.4.2, if you must know) bears the label “[basic.lookup.koenig].”
Scott Meyers, 1991-present. As it happens, writing about why you think you’re important is not the thrill you might imagine. Still, I’m doing my best to be objective here, and there’s a fair amount of evidence that I’ve left a mark—possibly a scar—on the world of C++. I’ve written either 3 or 6 books on C++ (depending on whether, like my wife, you don’t count revised editions or, like the person who did the work writing them, you do), and they’ve achieved wide circulation. I’ve written nearly 50 columns and articles about C++ and its application, and over the years I’ve given presentations at conferences and corporate events to, collectively, thousands of developers. Many of the guidelines I’ve published have become part of the accepted wisdom regarding “good” C++ programming, 2 and vendors of lint-like tools for C++ commonly support them, often referring to my writings as their justification.
I’ve apparently even played a small role in C++ standardization by, er, making mistakes in public. It’s my understanding that at least two standardization proposals have offered arguments to the effect that “this is a problem we need to address, because even Scott Meyers can’t get it right.” (For one example, check out the proposal for adding smart pointers to TR1, and search for my name.)
Herb Sutter, 1997-present. Sutter entered the C++ scene nearly a decade ago, and “prolific” hardly begins to describe the scale of his activities. Start with the three books he authored and the one he co-authored. Continue to the more than 200 columns and articles he’s written or co-written (most by him alone), and let your mind boggle at the fact that for a fair amount of time, he was sole or co- author of three columns simultaneously.3 I can’t imagine how many proposals and other documents he’s written for the C++ standardization committee, but did I mention that he’s the chair for that committee? He’s also a former Editor-in-Chief for C++ Report, a frequent speaker at conferences and similar events, and the most consistently enthusiastic advocate for C++ I’ve ever known. Currently, he’s waging a high-profile campaign arguing that multithreading will soon become critical for performance-sensitive applications, and he’s working on new ways—possible future C++ language or library extensions?—to make it easier for developers to work with multithreaded code. 4
Andrei Alexandrescu, 1998-present. Because of the revolution in our thinking about templates following publication of his Modern C++ Design, Alexandrescu’s name is strongly associated with templates. In some circles, it’s synonymous with templates, but that’s unfortunate. His contributions to C++ encompass far more than just interesting new ways to apply angle brackets (though, as far as I know, he was the first to demonstrate the utility of template template parameters, i.e., template parameters to templates).
Even setting aside the book he co-authored with Herb Sutter (C++ Coding Standards, Addison-Wesley, 2005), a quick survey of the 40+ articles he’s published shows contributions in the areas of object copying, alignment constraint enforcement, multithreaded programming, exception-safety, and searching, often with an eye towards improving performance over “standard” approaches. For my money, the only person whose work has been consistently worth paying attention to these last few years is Alexandrescu’s. Most other writers and speakers (including me) periodically return to well-tilled fields from time to time and claim to glean new insights, but with unrivaled frequency, Alexandrescu not only breaks new ground, he plants entirely new crops in it.5
I’ve now listed my picks for the five most important C++-related books, non-book publications, software, and people in the history of the language. I noted at the outset of this series that these lists are inherently subjective, but for my final article in this series, I want to go beyond subjective to downright personal. Next week, I’ll identify my five most important “Aha!” moments in C++—five moments when something suddenly clicked, and I reached a new level of understanding about some aspect of the language, its workings, or its application.
1. Loosely speaking, Koenig lookup says that when the type of an argument to a function call comes from a namespace, the function to be called should be looked up in that namespace, in addition to all the other places that the name would normally be looked up. For example, given the call “
std::cout << someObject”,
operator<< would be looked up in the namespace where
someObject is defined, in addition to all the usual places where
operator<< would be looked up. This is helpful when, as is typically the case, functions like
operator<< are defined in the same namespace as the types they operate on.
2. Most of the guidelines I’ve published over the years were already “common knowledge” in some parts of the C++ community. My primary contribution wasn’t to invent such guidelines, it was to popularize them.
3. The immensity of this accomplishment is easier to appreciate if you’ve been a columnist yourself, as I have been. I had trouble coming up with something worth reading six times a year. Sutter has been known to do it three times a month.
4. He’s also an architect at Microsoft working on C++/CLI, something I mention only in a note, because I consider C++/CLI a dialect of C++ rather than C++ itself. And I still have no idea how he finds the time to work on all the things he does.
5. This doesn’t mean he invents everything he writes or speaks about. Especially since becoming a doctoral student in 2001, he’s often brought academic research results to the attention of the broader C++ community. This has especially been the case with his writings and presentations about lock-free programming [PDF].
Part I in this series, “The Most Important C++ Books...Ever”:
Part II, “The Most Important C++ Non-Book Publications...Ever”:
Part III, “The Most Important C++ Software...Ever”:
Bjarne Stroustrup’s home page:
A list of Bjarne Stroustrup’s publications:
“A rationale for semantically enhanced library languages” (SELLS), by Bjarne Stroustrup:
The Standard Template Adaptive Parallel Library (STAPL) research project:
Andrew Koenig’s home page:
The proposal for adding smart pointers to TR1:
Herb Sutter’s home page:
Andrei Alexandrescu’s home page
A list of Andrei Alexandrescu’s publications:
Scott Meyers is the author of Effective C++, the third edition of which was published in 2005. It is available on Amazon.com at:
Scott Meyers is also the author of More Effective C++, which is available on Amazon.com at:
Scott Meyers is also the author of Effective STL, which is available on Amazon.com at:
Scott Meyers’ home page:
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 (http://www.artima.com/cppsource/). He has a Ph.D in Computer Science from Brown University. His web site is aristeia.com.