Bjarne Stroustrup is the designer and original implementer of C++. He is a founding member of the ISO C++ standards committee and a major contributor to modern C++. He worked at Bell Labs and is now a managing director in Morgan Stanley’s technology division. He is also a visiting professor at Columbia University and a distinguished research professor at Texas A&M University. He is a member of the USA National Academy of Engineering, an ACM Fellow and an IEEE Fellow.
Pramod: You were born in Aarhus Denmark, Masters at Aarhus University, PHD at Cambridge, joined Bell Labs and created this wonderful programming language C++ used by millions of people and runs on even more number of devices. Today when you sit back and think about all the achievements you have made and its impact to the world, How do you feel about it?
Bjarne: A bit proud that I’ve been able to contribute, and a little bit scared that it’s in so many places. Some of it is great, and some of it is less great. I guess anybody who’s managed to contribute will feel a bit proud.
Pramod: Do you enjoy the attention you receive wherever you go?
Bjarne: It is a bit embarrassing sometimes, [but] it’s useful because it gives me a platform to explain my ideas and allow me to find people to work together doing interesting things.
Pramod: Between 1960 to 1980 developers mainly followed Procedural Programming Paradigms and there were many languages COBOL, C, PASCAL etc. Object Oriented was in its early days, Simula was the first OO language.What was lacking in procedural languages and what made you realize that Object Oriented Paradigm will be helpful in Software Development?
Bjarne: I didn’t actually think much about object-oriented as a paradigm. I learned Simula from Kristen Nygaard who invented it and also invented object-oriented programming. He saw it as an extension to the existing ways of writing code and that help in thinking about designs. When people talk about paradigm, they usually think sort of you do one or you do the other. Kristen Nygaard’s idea, which I agree with, is that when you get a new language, a new set of tools, when you have an extended toolset and you can do better [than before]. Sometimes you can use the better tools and thereby avoid using the previous sets of tools where they were less appropriate. So I was thinking not so much in terms of the new paradigm but as a way of expressing my ideas more directly more clearly.
In particular, I was focusing on the encapsulation with the view that in the field I’m in usually work in, systems programming – programming close to the machine, there is a lot of inherent ugliness. Hardware can be messy, your real word can be messy, but you can encapsulate that and provide proper interfaces and sort of get away from the hardware details without losing efficiency. That’s one of the things I was very keen on. The way I think about it is that you start out with a set of build-in types in a language that’s never sufficient, so you have to add your own types.
As a Mathematician or an engineer, I would definitely want matrices and Fourier transforms. When I was working with AT&T, obviously I wanted primitives that were appropriate to telephony and communication. So I wanted to define a dial buffer or something like that. That was the way I was thinking about it, and that was the kind of users I was most focused on. But I did not think of procedural programming and object-oriented programming as completely disjoint. I saw them as an increased and improved tool set.
Pramod: BELL labs was the go to place for top computer scientists. How did you get this opportunity?
What was the experience working with some great engineers at Bell Labs?
Bjarne: It was the place to be to if you we’re a practical computer science person or even some of the theoreticians. I got there because there were some connections between the Computer Lab in Cambridge and Bell Labs. Some people had moved over and put some work together. Things like the language BCPL had been invented at MIT by somebody from Cambridge. From there I got into to Bell Labs.
One of the things that were great about Bell Labs is that it was a really good environment with some really great people there. There was Dennis Ritchie, Brian Kernighan, Al Aho, and in particular a guy called Douglas McIlroy, who was everybody’s favorite listener and one of the best catalyst I’ve ever met. You could explain things to him, and that was hard because he asks really good questions and then after a while, you learned something from that exercise. So there were some really great people, and there were a load of challenges.
Bell Labs was doing just about everything the time; hardware, software, communication networks, fibers, and CCDs invented for what later became [digital] cameras. So there’s a lot of stuff there, real enormous diversity of taste and tasks, and people that you could collaborate with. It was not a place where people were hiding their ideas from each other or hoarding them for their next paper. Really good exchange of ideas and enlightened management that allows us to try actually to develop and develop good things.
Pramod: Why did you choose C as the language to add object oriented features of Simula? There were a few Procedural languages like COBOL, PASCAL to add OO Features. Also Your favorite language was Algol68.
Bjarne: I knew quite a few languages at the time, maybe 25 or thereabouts. It was easier to learn languages at that time. They were not as big or complicated, and their implementations were not so complicated. Algol68 was quite a beautiful language, very elegant.
The reason I chose C was that I needed to manipulate hardware. I needed to write things like schedulers, memory allocators, device drivers. That was not a strength of Algol68, and in general, it’s not a strength of the more elegant languages because the [ability to manipulate] hardware is missing. I had to choose one of the close-to-the-machine languages. There were a few. C seems a pretty good one of them and there was local support at Bell Labs of course. When I was confused about something I could go and ask Dennis or Brian and that’s important. Local support is always important. But the real need was to manipulate hardware directly and efficiently.
Pramod: What were some of the initial feedback or setbacks received developing C++?
Bjarne: Well, there are two problems when designing a new programming language. The one is that a lot of people don’t really want something radically new, they want a very tiny upgrade on what they have got already, so that they can do what they’re doing just now in a slightly different way but they don’t like more radical changes.
And then there are people who want radical changes, couldn’t care less about existing problems and the existing languages. They just want everything done just right for the future programmers of future machines and future problems.
Navigating through the people who don’t want to change and the people who want to change everything is really a major challenge, and this kind of tension is still there. I was at the standards meeting last week for C++; well the tension is still there. You want perfection, or you want incremental change. I’m always going for incremental change because well I want to help solve the problems we have today and [but also] the ones that they are heading for tomorrow. You want concrete examples.
[For example] in the early days, I just couldn’t get people convinced that virtual functions were a good idea. Why would you want a virtual function when you have the pointers to functions? This is the difference between an implementation mechanism appointed to function and something that allows you to express an idea in a novel way. A class hierarchy, a class with inheritance – they are different ways of thinking. And getting people from one area to another is difficult. And that’s what leads to one of the discussions about the paradigms, but it is not a total change it’s a change of viewpoint.
Pramod: Was there a moment that was pivotal in giving you the push to go all-in with the C++?
Bjarne: For the first ten years or so, what Bell Labs was paying me for was to help people build systems and C++ was my tool and so I started. When I first started, it was called “C with Classes” because I’m not very good at naming. I got a few hundred users by helping people build simulations. Very often trying to sort problems like what happens with a given network protocol you reach toward saturation levels of the hardware or “how do you optimize board layout?”, things like that, “how do you find an optimal placement of ground stations for satellites given weather conditions?” Fairly concrete examples.
And after a few years somewhere in 82-83, I realized I had a sort of a medium size success on my hands. I could help people significantly, a few hundred of them, but I’ll have to spend the rest of my career helping them maintaining the stuff, improving it slightly, moving into new systems, etc. That didn’t seem very attractive. So, I decided I had two choices. I could cancel the project and leave my friends in lurch or I could make a bigger success by providing a more significant jump in features, a more significant improvement. So I started a redesign and reimplementation. Not totally radical: except for some syntax changes you will still run old programs. Well, that was when it became C++. It got its name in late ‘84 and a new compiler. Somewhere there, I realized I was really building general-purpose programming language and I had a much clearer view of what I was doing and why I was doing it, and I wrote it up. If you look at my book from ten years later, “Design evolution of C++,” you will see my design rules written up. Instead of just working on features individually, I had to have some general rules. I had to have articulated aims, and only then I could get a coherent design. That was thought out in about ‘82 to ‘84.
Pramod: What are some events that had a considerable impact on C++’s development.
Bjarne: It is hard to pick individual events. I think that the growth of the PC actually had a major effect. I was working on UNIX systems, of course, that’s my home environment, and we were first starting on a PDP 11/70 which is shared computer used by 40 researchers or so; the people I mentioned before.
We were starting to think about having new small machines; then, they were considered huge. You see, they had a megabyte of memory and a megahertz of processing power and we had to think about what we would do with this absolute abundance of resources. Of course, your cell phone has 4000 times as much today, but I was thinking in terms of how to handle complexity. I was a bit worried about assuming a megabyte but I worked in that environment, and I worked assuming those constraints on what we were doing as opposed to try to build something that was best for the most superb computers then.
When IBM came out with PC, IBM PC and Microsoft had an operating system for, it turned out that it was fairly easy to port C++ to it. For quite a few months I tried to explain to people that it was easy to do, but that I wasn’t interested in doing a port to the PC. When I got tired of explaining that, and so I did it instead, so that I could say “yeah yeah yeah, you can port C++ to a PC; I’ve done it.” So wisely I threw my port away so that I didn’t end up maintaining it forever and other people who did implementations. But I think the growth of first the PCs and then the workstation was important. C++ was on Silicon Graphics, graphics machines, later on games machines. Developments in hardware has been important to C++.
Pramod: After the initial acceptance of C++. How did you keep your motivation throughout on such a monumental task?
Bjarne: Well, I like applications. I like learning about new applications and see C++ being used. I like meeting people who build interesting things and use interesting things, and then turning that kind of thing into challenges of design and use. That’s what keeps me going. The applications and the people.
Pramod: Worked with At&T Labs until 2012 for more than 3 decades. What were some of the intersting projects you worked on?
Bjarne: To be correct, I left AT&T in 2002 when things were getting a bit boring. I was connected with them, but not as my main job, for another ten years. I left in 2002 to become an academic for a decade. The projects were projects as I mentioned before: somebody comes and says they want to figure out how to configure local area networks for instance. You have to have much systems capacity to run projects like that. I’m much more of a systems guy than languages guy. I look at the problems I would like to solve my colleagues, and my friends want to solve, and then I scratch my head and figure out what kind of library is and what kind of language features will I use.
Pramod: You are the founding member of the ISO C++ standards committee Are you happy with developments or progression of the language made by the ISO C++ committee.
Bjarne: Well, I’m a founder with others. There are more than a 130 people at the meeting in Toronto last week and well getting agreements in a group like that is really hard. Imagine trying to get 130 clever programmers to agree on anything; it’s really hard. Obviously I’m impatient. Obviously, I’d like to move faster, and obviously, I would like a higher degree of agreement than there is.
On the other hand, having a committee like that is the price we pay for having a language that’s open to all and not controlled by any commercial entity and can be used in a very diverse set of applications, application areas, in many countries, and things like that. If you narrow the scope, it would be much easier. If it was sort of a dictatorship, it would be much easier, but I think on the long-term it is good for the users. We produce things that are useful. C++ 17 is just coming out. It’s just waiting for the rubber stamping in Geneva [ISO headquarters] and implementations will be conforming by the end of the year. So we’re doing fine, and C++ 20 is beginning to look as if it will be something like what I really wanted than 17. As I said, I’m impatient, and things take longer than you want them to. That’s life.
Pramod: Tell us stories about the most interesting/controversial interactions that happened at ISO committee meetings, especially regarding Concepts.
Bjarne: Yeah, of course, the interesting stories for most people were the ones about conflict and people being angry, and I’m not going to tell any of those except mentioning my impatience for concepts.
The basics of concept is now in the working draft. Some aspects of concepts I consider important were not accepted, so I will have to work harder. The uniform call syntax would have helped a lot of in places, but most of the implementers were very worried about it, and some to maintainers of libraries would like to control their users better. I think I trust the programmers a bit better, and I think I trust the tool builders a bit more than some people. I think we should focus more on making programming simpler for the majority of programmers rather than strengthening the hand of builders foundation libraries and language lawyers. There’s a tension there because a lot of the people in the standards community are of course experts; they are experts in a variety of things and when it comes to the votes a lot of people vote for help for experts. They are experts, and they think to help other experts like themselves, and well that’s maybe 1 percent or ½ percent of C++ users population, and I will rather help the rest of them. There are many cases where you can do both at the same time so the conflict is not as dramatic as you might think it is but it is tension, and it’s constant tension.
Pramod: You have numerous publications on C++, Is it something you enjoy writing books? Will there be a new edition of “Design and Evolution of C++” to look forward to?
Bjarne: If you build something, you have to write and talk about it. It goes with the territory; otherwise nobody will be able to use it, and nobody will be able to understand it, and there are writing that’s fun. I loved writing “Design and Evolution” and I love writing the “Tour of C++” book which is an overview. I did not like to write “The C++ Programming Language.” That is a heavy-duty task where there’s a lot of precision a lot of difficulty writing it, but that’s how it worked. I love writing things that can describe some design and motivation.
I think that a lot of the literature and a lot of the stuff you find on the web short-changes design ideas. I don’t think I will write a D&E any day soon. That’s sort of backward looking, and I’m just too busy doing what I think should be put into C++, writing applications, and such. I wrote two papers for the history programming languages conference; ACM SIGPLAN’s conference. The first of those papers was what caused the D&E to be written and there ought to be a fourth HOPL conference in 2022 because so far they have come every 15 years. If that happens, I have definitely thought of writing a 60- or 80-page paper about what had happened to C++ in the last 15 years. Doing so would be useful. It may even be more useful than rewriting D&E because of the past design decisions will not have changed, and I will have to describe what had changed. So that might be interesting.
Pramod: You have worked in Academics for many years. How do enjoy working in private industry full time now
Bjarne: Sure, I mean I started out in a private industry. Though Bell Labs was a very unusual part of private industry, I like concrete challenges, and they come best in the industry. I was a full-time academic for 11 years and enjoyed that too, but then some of the problems were getting a bit too abstract, and the concerns too much about how to write papers rather than building systems. So it was time to get back to industry again, and I wanted to move to New York City because I have family here and so that’s how I ended up here.
I do a strange mixture of work now. I do sort of obvious things to do with the infrastructure for the bank. We have global interests, and we have developments all over the world. We do banking operations all over the world and so of course networking is very important, some performance work is very important: you need the combination of a global reach with perfect reliability and high speed. Remember perfect reliability is one of the things that distinguish bank operations from, say, gaming. if you miss a frame in a game, so what? humans aren’t quick enough to notice but if you lose a transaction in financial system, then somebody is going to get hurt. So, we don’t do that and so the difference between telecom that I was working with before and banking is that in some ways banking actually has higher reliability concerns. The software level in the bank and hardware level is roughly the same when you look at the infrastructure. You want to shift bits from here to there that may be across a chip which maybe across the city or may be across the world. Basically, my attitude is I know nothing about money, but I know about bits, so I deal with that. In addition to that, I tend to travel a bit and talk to colleagues, build applications, and talk to people outside the firm, give talks and visit universities. When I was in the university I will always visit the industry now I’m in the industry, and I’m always visiting the universities. I even give a course at the Columbia every year, every spring. So I haven’t given up teaching or writing or programming. It’s interesting.
Pramod: What kind of office or work environment do you find relaxing?
Bjarne: Let’s see. For you to work well, you need two things in my opinion. You need good colleagues, good contacts because these things that I’m doing, and I think the things most of us are doing, are just too big for an individual to do by themselves. Furthermore, if you try to do everything by yourself, well you’ll lack feedback. I mentioned Doug McIlroy at Bell Labs; he was absolutely superb at talking to people about problems, and a lot of my best work was done at his blackboard. I need people to talk to, and then I need places to go away and hide when I have to do my own thinking and work. So, I do like an office with a door or my study at home, and I do like some nice music on the earphones, but you need both. Mostly my door is opened; it is only when I have to be in a meeting then I have to close the door, and I can do that without bothering my colleagues, but most of the time the door is open.
Pramod: Any newer languages like Rust or Go interests you?
Bjarne: Yeah, I look at new languages roughly all the time. You learn something every time. It is interesting but as I said I’m more of a systems guy than the languages guys. I probably look less at languages than you’d think. I look at what I think is interesting, I try them out but what I really do is to look at what problems do my colleagues and students have and how do I solve them.
Pramod: Last question you have seen it all in last 30 years of your computers journey as an innovator, Where do you want to see IT industry in next 10-15 years?
Bjarne: Well, I know what I’m working on. A lot of people are asking they want to write good modern C++ but they don’t know what it is and they look at the way they look at the books and they get the strangest ideas of what it takes to write good code. So, I want to encourage them, and I have a project together with a few other people for “Core C++ Guidelines” which you can find on GitHub. This is basically a set of design rules focusing on how to design your programs, how to express your ideas in code, as a set of rules which we are trying to support by some very simple foundation library and with some static checking. This is a joint project, and there are people from here at Morgan Stanley, there are people from Microsoft, there are people from Facebook, there are people from Red Hat, and there are contributions from many more places. You can go to GitHub, and you can see who checks in things. I think this project is very important because in a programming language definition, you only say what you can do. If you don’t watch out, you’ll find that in every language you can just write awful stuff, so you need to do better. My aim here [with the C++ Core Guidelines] first is to list [define] a style of C++ that is completely type safe and complete resource safe. That will solve half the number of bugs right there. Doing that without narrowing the application areas and without slowing down code is tricky, but I think we can do it. The other thing that you have not mentioned is generic programming. You mentioned concepts; they are there to improve generic programming. That is an area that I’m trying to improve also.
Pramod: Thank You Mr. Bjarne Stroustrup for providing this language C++ and thank you for your time. It was wonderful talking to you.
Bjarne: Thanks for letting me on. Good luck to the C++ programmers out there and thanks to people who tried out and see how it works.
September 15, 2017
August 31, 2017
August 17, 2017
August 3, 2017
July 29, 2017