5 Questions With Herb Sutter
You've been a pretty independent C++ guy for the last few years. Now you're working with Microsoft too. What's up with that, and what are you doing there? Are you going to switch to writing about Windows?
I'm going to keep doing all the things I'm already doing — working on the C++ standards committee, writing Addison-Wesley books (two are out, two more in the pipeline), writing my four C++ columns, helping to edit C/C++ Users Journal, moderating the comp.lang.c++.moderated newsgroup, speaking at C++ conferences, all that. I'll also be at Microsoft as their liaison to the C++ community, making sure that stuff the community needs gets into Visual C++. A big part of that is conformance to the C++ standard; Microsoft wants VC++ to be the most conformant compiler. There's a bit of a way to go, but the community will see some pretty significant progress this year.
Oh, and Windows...nothing new there. I've been doing DOS, OS/2, and Windows development using Microsoft tools since Microsoft C version 4. That makes Visual Studio .NET, which includes Visual C++ version 7, my ninth major generation with that product. Of course, it's my first generation on the "inside," so to speak. Till now I've been a developer using the tools, and/or a consultant whose clients often use them. Yet I've always written for the global C++ community using Standard C++ on any platform, and that's my continued priority. No change there.
Who in your field do you most admire, and why?
It's hard to pick out a particular person when so many have made such significant contributions.
In my field, Bjarne Stroustrup of course comes to mind as a language designer and implementer par excellence, having the good judgment to hit a useful real-world balance between purity (a language you'd design in a vacuum) and pragmatism (a language you'd design to be compatible with C, no easy task and a source of many compromises, but something that more than anything else made C++ the dominant language it is).
Donald Knuth just dives into any field that interests him, learns it better than just about anyone else on the planet, documents the whole thing, and moves on to the next thing. His depth in so many areas is just amazing, stunning diversity when even just his classic The Art of Computer Programming series alone would have been a lifework any computer scientist would be proud of.
Edison Design Group (EDG), currently comprising John Spicer, Steve Adamczyk, and David Vandevoorde, is a simply wonderful example of what a three-man company who don't even share office space can accomplish, as to date they've developed the most-compliant commercial C++ compiler that money can buy. Microsoft intends to catch up and compete, naturally, don't get me wrong, but these guys are just amazing. When I try some code on the EDG-based compilers and what it does disagrees in some detail with my reading of what the standard says it should do, almost always it's my reading of the standard that's wrong.
There are many more solid people like that, too many to give complete credit to here.
What new possibilities in your field are most exciting to you?
The next generation of the C++ standard (aka "C++0x") will be a big deal, both important and exciting. We're working on that now.
Another is managed environments like .NET, sort of a JVM done right but much more so. I was pretty skeptical of .NET's "flavor of the year" flavor when I first heard of it. Now, the more I see, the more I like. It's really cool. I hope it won't remain only a Windows thing; several groups are already working to implement parts of it on other operating systems. Now that I'm with Microsoft in addition to my other work, some people are going to think the attraction to .NET is because of that, but my interest in .NET's possibilities predates my Microsoft involvement and in fact was one of the things that intrigued me about the possibility of going to spend some time there.
What advice would you give to someone starting out in your field today?
Learn everything you can. Don't get stuck knowing one or just a few things. That's the best way to grow in your profession, by building not just depth but also breadth of experience, and by keeping your mind open and sharp.
One reason we have "language wars" is that a lot of people seem to be happy learning just a few languages, or even just one. (The other main reason is nontechnical — vendors' marketing budgets.) Then they defend it to the death, because it's all they know. They may even imagine that it's all they need, or will ever need. If so, they haven't got the first clue what they're missing, and choosing willful ignorance like that just is not a smart career choice in this field. For one thing, the market will change sooner or later and it's rare that someone can rely on just one or a few languages for his whole career. For another, even if we were to imagine that were possible for the sake of argument, a one-trick pony developer is diminished even within their chosen language because they only know one narrow way to think — exposure to many languages means exposure to many ways of thinking, exposure to many libraries and tools means exposure to new approaches and new methods, and all of that is essential to being a good developer in any chosen language you happen to be using this week. There's no substitute for breadth of learning, in addition to depth.
Now, these days I'm a C++ guy, so some people could get the idea that I'm narrow and deep and not practicing what I just preached above. But that's not the way it is. It's true that I do primarily C++ today, but I've used dozens of languages over the course of my education and career. I certainly wouldn't know how to use C++'s features and modern libraries nearly as well without exposure to alternative ways of doing things — many of which can be adapted to work in C++.
Anyone who thinks that programming languages all look pretty much alike should try Prolog, APL, Lisp, and Perl. That should be enough of a start to jolt them out of "but everything looks sorta like C or Visual Basic" mode. It'll also twist their brains inside out. This is a Good Thing.
So learn everything you can. Chances are it will come in handy directly. And those things that don't eventually come in handy directly will still benefit you because they've helped to keep your mind open and sharp.
Which of these do you prefer or lean towards:
Creativity or Persistence?
Creativity is wonderful, and you need persistence to get there. What was that about 99% perspiration, and 1% inspiration...? It's like when people talk about luck, and most of the time it's not chance at all but people have set themselves up to be "lucky," to be in the right position so that when opportunities come up they can take advantage of them. They put themselves in the right place, not knowing quite what will happen, but ready for it when it does. They make their own luck. It's the same with so-called "overnight successes" that really take years of work to develop and then just into get the spotlight overnight. And it's the same with creativity and persistence — I don't know any author or inventor who just had a Eureka! moment without first spending months and years in front of a keyboard or in a lab.
Justice or Forgiveness?
Both. True justice grants forgiveness where merited, and judgment where not.
Beauty or Truth?
Truth. Beauty that is not true is a dangerous sham.
The Jetsons or the Flintstones?
"Aaaw, I dunno, Fred..." Definitely the Flintstones. Barney's a cool guy.
Lennon or McCartney?
That's a tough choice. Lennon by a nose.
Regular or Diet?
Lawyers or Politicians?
Hmm. I think the most appropriate answer about, and from, both of those would be: "No comment!"