We Speak Your Language - Walter Bright
?
Darius: Welcome.?
I am Darius, and I will be your host today, here at “We Speak Your Languageâ€, the podcast for programming language nerds.?
It is my pleasure to welcome Walter Bright as our guest on this episode.?
If you don’t know who Walter is, then right now is the perfect moment for you to change that.?
The first time I read Walter’s name, it was on an ad, in Byte magazine or Dr Dobbs Journal, back in a time where printed paper was still the most common medium to spread information. The ad was for Zortech’s C++ compiler, and it came with a picture of Walter, proudly holding a box – at that time, software products still came in a box – He was looking confidently into the horizon, box in hand, and under the picture there was a quote saying:?
“Walter Bright is probably the best programmer in the world today�
No pressure, Walter, no pressure.?
?
Walter: I didn't write that by the way. That was my partner.
?
Darius: I'm pretty sure you wouldn't, but still, it made quite an impression, as you can see, 20 years down the road.??
?
Walter: I’m actually the second greatest programmer??
?
Darius: I used the Zortech C and C++ compilers for a while, and then I used a native code Java compiler that Walter worked on, which was sold under the name “Symantec Caféâ€. I would thus consider myself a fan, except for the fact that I haven’t had any opportunity to use the D programming language, which Walter has started developing and promoting for the last 20 years.?
So, Walter is not a just a super brilliant compiler engineer with fantastic references. His perspective is unique: he has been both an implementer for a standardized languages (and C++ is definitely not the simplest one) and based on that experience, a designer of a language of his own.?
A unique perspective indeed.?
Walter, welcome to the show.?
?
Walter: It's good to be here.?
?
Darius: So, could you explain to us a little bit your background? How did you get into computing and how did you get into programming languages?
?
Walter: I got into programing with Caltech, the PDP turn computer. They offered free accounts to students and I started typing in programs from that hundred and one BASIC computer games. And as soon as you start playing it, you start looking at the source code and modifying it. I started spending more and more time modifying the code than actually playing it. After that I started developing my own game and quickly outgrew BASIC. It was just that I didn't have enough memory for it, so I recoded it in Fortran and it would work in Fortran, but it still overloaded the machine and ran very slowly. So I started getting interested in optimization and the more I looked at optimization, the more interested I got in optimization and then the game. So when I graduated after a couple of years, I decided to start my own business in computers and I got into writing compilers because I looked at the compilers out there and they were terrible. ?I figured with my, you know, classic modesty, I could do better than all those people and started writing the compiler.?
?
Darius: If you don't believe you can do better, you don't go far anyway. It is a belief you must entertain.?
Walter: When I first told one of my colleagues that I was going to write a C compiler, he says, I know this guy who is a local C expert. We can have some lunch with him, and he could give you some good advice.??
So I said, sure, we went to meet this guy, and he looked at me and said, Who the F.. do you think you are thinking you can write a C compiler? And I went away from that thinking, well, I'll show him! So unlike a lot of people online who’d be dissuaded by people being critical of their aspirations, I've always found it motivating when people tell me I couldn't do something. So that's how I got into compilers, and the compiler was a success. I was looking around for how to compete better because there were a whole bunch of other compilers. And I ran into Bjarne Stroustrup’s about C++, and I picked it up and read it, and I thought, oh, what the heck, a couple of months I can implement this. And that turned out to be a ten-year project to implement it. C++ is far, far more complicated than I had ever anticipated.??
After working with C++, for a while, I got to think, as to every compiler writer, “I can do a better language than thatâ€, rightly or wrongly. I had retired from the job I had, and that lasted about six weeks. I got bored stiff and decided to get back to work and started developing D. And the rest, shall we say, is history. So now D is a significant programming language in its own right, and it's a lot of fun to work on.?
?
Darius: History in the making, at least. That being said, I beg to differ. It's really usually two classes of people: there are the people who are studying this fine print of the language definition of whether you talk about C++ or FORTRAN or ADA, which is really a skill. And then there are the people who would rather invent the language, design a language based on their aspiration, their experience. When you say that's what most compiler people do well, that's very respectful, that's exactly what most people do not do and that's the interesting part about your profile.?
?
Walter: Well, when implementing a compiler for C and C++, you end up knowing every detail of the spec - every line, every statement in there you are familiar with. After C++98, when I started working on D, I stopped keeping up with C++. So my C++ knowledge tends to be out of date.?
?
Darius: There’s a question I always wanted to ask someone who really spent time on a C++ compiler, I assume that over the time you've been working on this, there has been evolution to the C++ standard. Did you ever come into something where you said, “come on, guys, this is something that does not fit the way your compiler was done†that you almost felt like not implementing that feature, even though it was part of the standard because it was not what you had anticipated or what your product was designed for.?
?
Walter: Export of templates! That was a big feature in C++ 98, and only one compiler ever implemented it. That was the Edison Design Group C++ compiler, and nobody else did. I went through the design of it and figured, this is an impossible feature and I'm not going to do it. Evidently almost everybody else felt that way too, and it was eventually dropped from the standard.?
?
Darius: So, it happens that something in the standard really is impossible or close to impossible to implement??
?
Walter: Yeah. I don't know how Edison Design Group managed to implement it, but nobody else did and I think after that experience, the C++ Standards Committee decided that they wanted working implementations of features before they put them in the standard, which I think was a very sensible approach.?
?
Darius: Have you contributed anything in that area, or have you put something in your compiler that they ended up adopting as is in the standard??
?
Walter: Herb Setter, myself and Andrei Alexanderescu took a very successful feature of D and presented a formal paper to add it to the C++ standard, and it received a very strong negative reaction. Some time later, it resurfaced and was adopted into the C++ standard with a slightly different syntax and semantics.?
?
Darius: Could you elaborate on what it is just to just to satisfy my curiosity? What kind of feature are we talking about??
?
Walter: It was static if, which is a way to do conditional compilation without using a preprocessor.?
?
Darius: OK, so without doing it at a textual level but doing it at a structural level.?
?
Walter: Yes, doing it at a semantic level.?
?
Darius: Yeah, I think that ALGOL 68, had something along those lines.?
?
Walter: I'm not familiar with ALGOL 68 - the manual is too thick.?
?
Darius: It was part of the curriculum when I studied, so I suppose I have a little bit more expertise in ALGOL 68 than I should have for my own good. There was something similar to what you say: “Well, we don't want to have a conditional compilation, it will be achieved by having ifs that will be evaluated at compile timeâ€. If I understand correctly, that is pretty much what you describe.?
?
09:56:57:16 - 09:56:20:16?
Walter: It is, except that on static if, semantic analysis of the false conditional is not performed. It just does a syntactic check on it, so you can use variables that aren't defined in it, and it won't cause it to fail. If you just did an if statement with the constant zero in it, so its false, it won't execute the code in the conditional, but it still has to compile successfully. That is the difference.?
Darius: OK. How did that go? I mean selling a better C or C++ compiler, sales wise is a straightforward message. You say, this is what my compiler is better at - I think that when I used Zortech or one of the few to have a 32 bit support capability for instance - at that time there weren't that many, or at least not for a reasonable price tag. I think that's pretty much how we got into using using your compiler.??
How is that switch? I mean when you have to tell people “listen, whatever you learn about programming language, you should forget, I've come up with something betterâ€, how did that go??
?
Walter: You need a really good marketing department to do that, and Rust has done a fabulous job of convincing people to completely change the way they write code with their ownership/borrow system. I salute the Rust team for pulling that off. It's a remarkable achievement in convincing people to abandon the way they do things and go in a different direction. D doesn't do that. Anyone who's familiar with C and C++ will be very comfortable writing D code. It's a very low learning curve, it's just a lot of things are just a lot nicer in D than they are in C++. It's just easier to write your code, and you don't have a preprocessor - which is your grandfather's technology, using a text preprocessor to make up for missing features.?
?
That's one of the reasons for a static if. If you're going to get rid of the preprocessor, you have to find ways to replace the functionality that the preprocessor provides and one of them is conditional compilation. So, static if does that and another thing the preprocessor adds is generic support. Well, if you put generic support in the language itself, you don't need a preprocessor to use macros to fake generic programming.?
?
The preprocessor also causes all kinds of problems. It makes it difficult to do modules and makes it difficult to debug programs because your source code doesn't match what the debugger sees. It's all been expanded by the preprocessor. The preprocessor was a great idea when your compiler was very constrained in resources because it's a way to add features very cheaply and computationally very inexpensive. But those days are long gone. You’ve got modern machines, you’ve got plenty of horsepower, you don’t need a preprocessor anymore.?
?
Darius: In our experience, one of the downsides of the preprocessors that metaprogramming gets is close to impossible.
?
Walter: Well, you do metaprogramming with C++ templates, so I’m not sure.??
?
Darius: Metaprogramming in the sense of “I need to perform an across the board analysis or transformation on a piece of code and to automate thatâ€, because the piece of code that is actually compiled is the output of the preprocessor, which means that finding all the occurrences of a given identifier, for instance, can be almost not decidable because they can be elaborate on the fly and so on and so forth.?
?
Walter: Yes, that's true. Using a program to generate a program and then compile it does put a layer of obfuscation.?
You can still do that in D, but you can do it in a hygienic way. What D allows you to do is to construct a string literal programmatically and then feed that string literal as the argument to a mix in statement. What the mix in statement actually does is it sends a string to the compiler as compiler source code/program source code, and this turns out to be a very popular feature, but it's all part of the language, it's not two languages welded together. The C macro processor and the C language are actually two different languages married together, but they don't talk to each other. The symbol tables are completely different. The semantic rules are different. The tokens are different between the two. Let me think of an analogy. The mitochondria in our cells - they're not actually part of the cells, they are primitive cells that were absorbed into the into the cells and so you have a symbiotic relationship, but they are different, a completely different machinery, a different form of life even.??
?
Darius: How did you go from zero to one? How did you go from being the first D programmer - I assume that you bootstrapped your compiler as early as you could, because unless you tell me that that's exactly what you didn't do, that's what I would assume you would do.?
?
Walter: That’s actually what I did not do.
?
Darius: Ok, so please tell me more.
?
Walter: The reason the compiler wasn't bootstrapped is because it would have been a lot of work to bootstrap it. I was using the optimizer and the code generator from my previous C++ compiler. That was a large mass of code, and it was kind of a daunting task to convert it. So I kept putting it off and finally a few years ago Daniel Murphy decided enough was enough, and he wrote a program that would do 90% of the translation work automatically, and then you just had to touch out the rest. That took care of the front end. Then a couple of years later, I just decided that I was tired of writing code in C and C++, I wanted to write in D, and I manually translated the optimizer and the code generator into D and that project, which took much less time than I thought it would and went much better than I thought it would.??
The trick to translating code from one language to another is having a good test suite, because if you have a good test suite, you can modify it one function at a time and see if your test suite passes. If your test suite doesn't pass, you know exactly where the translation bug is, it's in the function you just translated. When you do things that way, it proceeds rather quickly to translate code from one language to another.?
?
Walter: A lot of people who translate code, make the mistake of trying to fix bugs while they're translating it, and I found that that never works. Fixing bugs and translating code from one language to the other should be in completely different silos, because the problem is that when you fix bugs you create bugs too. If you're fixing bugs while you're translating, you don't know if it's a translation error or a side effect of some bug fix you did. So the way to do a quick translation (I know this is extremely difficult to do because the temptation as powerful) is to say I'm not fixing anything, I'm not adding any features, I'm not removing any features, I'm not changing the design of the program, I'm not changing the way the data structures work. No, I'm just doing a translation. And only when the translation is done and it passes the test suite, then you can start changing it. If you follow that discipline (it's really hard to do because it's so tempting to do otherwise), the odds are pretty high that you can do a good translation in the minimal amount of time.
I failed to translate the old Zortech linker. It was all in Assembler and I tried to translate it to C. What killed it was the fact that I didn't have a test suite, so any time I made a change (and converting Assembler to C, is kind of tricky because you make a lot of mistakes) it was just impossible to tell if I'd done a good job or not, and so that killed that project. That was a large failure and disappointment of mine, I couldn't move it forward. It was stuck in x86 Assembler code and I couldn't move it forward, so it had to be abandoned all because of a lack of a test suite.?
?
Darius: Oh, we can talk about test suites over and over again. I mean, we compiler guys, it's our bloodline. It's a lifeline that's how I think I survive.
Darius: I'm going back to my first question. How did you go from zero to one? How did you get your first D program and say, Oh, that's a cool idea, I'm going to start using this programming language.?
?
Walter: Well, I kept showing the spec to various people, and they all laughed at me and said ‘who would ever want to use that language? You have no chance.’ Then I started just handing out copies of the program to my friends, and one of them decided to post it on Slashdot - unbeknownst to me, and it blew up on Slashdot. All of a sudden, I had a lot of people wanting to use it, and I had to hurry up and get it into a much better working form to make that work. So it all kind of happened without any help from me. There were other people that saw it who weren’t my friends, they were just people on the Internet who ran across it in Slashdot and got interested in it.??
?
A common theme among all the successful projects I've done is everyone told me it wouldn't work, nobody would want it, and a common theme among the projects I've written that have failed was people telling me that everybody needs that. So it's kind of like George Costanza, I’m the opposite guy of people all telling me it's a terrible idea, I start thinking this is a good one!?
?
Darius: But D was open source from the start??
?
Walter: No, although it was an open source with a capital O and capital S. However, I was giving away the source, but it was still licensed. I still had delusions of making money selling the source code and eventually I realized that those days were over and open source was the way to go.?
So we wound up open sourcing the compiler. The whole thing from front to back is all Boost licensed, which is the freest, most open source there is. I like it because Boost doesn't have any agenda. It doesn't infect your commercial code. You can use it however you like.?
?
Darius: And now that its open source, do you still get contributions or are you still the master of the destiny of the language and you don't let anyone touch it??
?
Walter: I started getting contributions around 2005, I think even before then. At first, it was people sending me emails with their changes, but that fell apart rather quickly. We then switched one of the D communities and set up an open-source repository called Subversion. Then the D community grew to the point where Subversion wasn’t scaling, and we switched to GitHub.
The reason we picked GitHub was it seemed to be the most popular. One thing you do when you're in the business of software is you get to decide what business you're in, and we were not in the business of a revision control system. We were not going to distract or try to create the world's best or our own custom version control system. We were just going to use what's popular out there. GitHub turned out to be a very good decision. It's been a very good, very useful, very productive thing, especially since the D developers are in every continent except Antarctica. We couldn't possibly collaborate effectively without GitHub.?
?
Darius: That’s what I call ‘Pick Your Fight’, I mean, trying to promote the new language is challenging enough, let's not put additional hurdles in the way of your success.?
?
Walter: Yeah, you don't want to get distracted in the writing of an editor.?
?
Darius: ?I apologize for being a bit insistent on this, but you get contributions and ultimately, do you decide what gets in and what doesn't get in? Does it happen organically??
?
Walter: Not anymore. I used to give the thumbs up and thumbs down on everything, but that also did not scale. So now what we have is a core team of several people, and to get a change into the language requires at least two people to approve of it. For the significant ones, I still kind of have a veto power. My decisions tend to be very opinionated and not always popular. Some people say it should be a democracy, I don't think it should be a democracy. We try very hard to reach consensus with the core team and if the team doesn't reach a consensus then I have to decide.?
?
Darius: It’s funny, last week I interviewed Roberto Ierusalimschy from Rio de Janeiro, the guy who developed Lua, the scripting language that has been around for 25 years now, and that for some kind of odd reason became the de facto standard for scripting in gaming. He and I had the very same conversation, and he says for him it's not a democracy. But he has a different style. He says, coding is the fun part. So I code what goes in because I'm not gonna let anyone else do the fun part, but they can fork it and they can take and do whatever they want. That's really his way of serving the community. But people say, yeah, we should have a vote and this, he says, well, no, and that's the end of it.?
So and I would agree, I think that for language design democracy is I would say a flawed paradigm. I would hate to hear myself even pronounce those words, but it has a downside, let's put it that way.?
?
Walter: Well, the vote has big problems when doing a compiler, because if you have a democratic vote, then you could have a person who just showed up a month ago and doesn't really have a track record with the language, versus the people who spent many years working hard on it. Should their voices be equal? It doesn't make a whole lot of sense. So no, we don't have a democracy on it. But we do try to give everyone a chance for input and there are often raging discussions on the newsgroup about pros and cons. I'm not going to do something that everybody hates, that just wouldn’t work.?
?
Darius: But are you going to refrain from doing something that everybody loves??
?
Walter: Well, I have! And I never hear the end of it. But, if it's something I feel is really important that D should not be, then I stick to my guns.?
?
Darius: There is too much pressure. You don't have to be the first one in Antarctica just to get out of the pressure yet.?
??
Walter: Yeah, infamously, I have strongly opposed to adding a macro feature to the language.?
?
Darius: It's consistent with whatever you said so far.?
??
Walter: Yeah, some languages. Well, I don't mean macros as a preprocessor feature. I mean more advanced macros like AST macros, which you'll find in Lisp, Rust and Scala. I have given a hard no on those two. It's one of those things that perplexes people why I would say no to it and it's difficult to explain. It's just that whenever I've seen languages that support macros, the end result was unreadable code. I’ve built macro languages before. They always seem like great ideas, and it's only until years later you find out that this really is not a good approach.?
?
Darius: It's funny because if you had asked me, let's say from a distance, ‘Would D be interested in macros in that sense†right? Let's say a compile time artifacts to represent ASTs or variation thereof. My guess would have been that it was probably something that you would have entertained - only because I remember reading a note from you and not even a paper, just a note from you, where you describe lowering as a concept.?
The idea that a feature of the language can be reduced to existing features so that the new feature is essentially syntactic sugar on existing features. I apologize if I'm not representing your thought accurately, but that's how I understood it.?
?
Walter:?That's what macros do, they lower into the other constructs of the language. What happens though is people take the idea of macros and they run with it, and they create their own language within a language, and inevitably this language is not documented at all, and nobody else is able to continue with it. It becomes that person's private little language that doesn't talk with anybody else's and nobody else can use it. This causes disasters, it's a mess.??
?
Now, I've heard it said, but I don't know this very well, so this is my surmise on it. Accurate or not, the reason Lisp never really took off as a mainstream language is because you couldn't use it without macros. Everybody would create their own language out of the macros, all incompatible with everyone else's. This wound up preventing Lisp from getting critical mass of users because everyone was off on their own island with it. So I don't know if that's specifically what happened with Lisp, but it's happened with about every other macro system I've worked with.?
?
At one point I decided before I converted all my C code to D code, I looked at all my use of macro metaprogramming in it, and I removed all of it. All of that fancy stuff I thought I was so clever at writing; I just took it all out and replaced it with ordinary code. It was kind of like when you clean out your garage, that feeling when you step in your garage and go: “Oh my God, I can see the floor now! I can actually walk through my garage now and see that all that that crap is gone.�
But I admit to having been seduced by macros, and it was years before I realized that it's just not a good idea. What works better is to build the constructs that those macros tried to implement, and build those constructs into the language - the good ones anyway, that seems to work successfully.??
An example of that, although this is not in D, is the async/await, the way it's set up, has all the appearances of having originally been done as a macro, and then they've built it into the language in C sharp, it is a huge success. But it's standardized. It's not a macro, it’s part of the language. I think that's that was the right way to do it. So we have yet to do async/await in D but I think it’s definitely a worthwhile thing to do it.?
?
Darius: That's definitely the way you describe D’s history. You didn't have a tipping point, you didn't go from zero to one and then to a transitional phase where you pretty much knew all the D programmers in the world by their first name, and then it started exploding. It really went fairly quickly, as you describe it: here's the language, you then had then people made fun of you for a while (trust me, and I've been in those shoes, that's a feeling I know. It is a good training for when you have kids because you have to learn those things with grace). But then when it started getting adopted, it started getting adopted widely and pretty much universally.?
?
Walter: Yeah. We never really had a handle on just how many D users there were because we didn't keep track of it. And it's not like we could count the number of copies that were sold, people would just give copies to each other.?
?
Darius: Now, I remember a lot. I remember a note from Tiobe, that Dutch company that maintains the Tiobe index about the popularity of the languages in the world. At some point they mentioned, “that's amazing! D is now in the top 10!†and it became super popular at some point. So yes, you you've reached critical mass.?
?
Walter: And then they changed the way they did the rankings. They've rejiggered how they do the rankings numerous times, which produced major shuffling in the results.?
领英推è
?
Darius: What's your elevator pitch for the year? Let's say you are in a hotel with thousands of C and C++ programmers, you are bumping into a into a C++ programmer in an elevator for 15 seconds. How do you sell D? How do you explain D in one sentence??
?
Walter: We've always had trouble with the one sentence pitch. Steve Jobs was great at coming up with one sentence pitches and we've never been that good at it. But our current one is ‘Fast code fast’.?
?
Darius: That's a good one. I’ve read that on your website. Did you get resistance with the idea of the garbage collector??
??
Walter: Oh yeah! It turns out that the people who like C++ hate garbage collection. And so even though using garbage collection is optional in D, it somehow morphed into the myth that the garbage collector in D was a troll under the bridge waiting to jump out and slay your program, which was complete nonsense. It wasn't true at all. It was mostly promulgated by people who had never used D, and they’d say “I'd never use D because of the garbage collectorâ€. The garbage collector is optional. You don't have to use it, you can use malloc-free or whatever scheme you like to manage memory in D, because it is a systems programming language. But it was just difficult to get past that troll under the bridge misinformation.?
?
Walter: A garbage collector is ideal when you're writing short, quick programs, for example. Not every program needs to have such high performance from carefully tuned memory management. I often write one off programs. For instance, I write one off programs to do my taxes. I write it once a year. Why does it need to be fast? It needs to be easy to write. And there's nothing easier to write than garbage collected memory because you just allocate it and forget about it. Don't worry about it. You don't have to manage it at all. It’s very convenient.??
Darius: If you could change something about D with the benefit of hindsight, what would that be??
?
Walter: Well, I wouldn't do auto decoding on strings, that's for sure. That's been a feature we've had difficulty getting rid of, and I probably would have put reference counting in from the start. I probably would have done what I'm doing now from the start, which is build a C compiler into the D compiler, so you have easy compatibility with C. There are other mistakes I've made in the language that it turns out that people set a store by those mistakes, and so I can’t remove them which is frustrating. I would have had a simpler constructor syntax than what's in it now, lots of things I would change. You learn a lot in 20 years.?
?
Darius: Are you tempted to start the E programming language or are you going to stick with D??
?
Walter: I’m in my sixties now, I don't really have time to start over. I picked the ship and I'm sailing with it and doing what I can to fix mistakes. I mean, C has a whole bunch of mistakes that they can't get rid of and C++ has a boatload of mistakes that they can't get rid of. If you have a successful language and people are using it, you’ve got mistakes that you can’t get rid of.?
?
Darius: Very respectfully, even if you have an unsuccessful language, you've got mistakes in it. It doesn't shield you from that kind of problem.?
?
Walter: If you ever have the pleasure of designing your own house with the help of an architect, after you build it, you're lucky if you don't have major regrets in how you designed it, because you’ll find every mistake that you made - and you're living in it every day. Like the light switches might be in the wrong place, or the door swings the wrong way, or the windows are in the wrong place.?
?
Darius: And when we have experienced that kind of experience you and I have, we know it's not the end of the world. Nobody dies. It's not that bad.?
?
Walter: It’s not the end of the world. I get blasted on the D newsgroup for a feature not being perfect, and my response is: “if that's your goal, you'll never get anywhere.†What you want to aim for is not “is it perfect†but “is it useful†and that's already a lot. Is it useful to a lot of people and perfect as it is. I guess that's why I'm an engineer and not a scientist. Scientists look for perfection while an engineer wants to build something that's useful - he builds a bridge, it doesn't have to be a perfect bridge, but it has to be a bridge that lets people drive across it without falling in.?
?
Darius: So, you describe yourself as a software engineer, almost literally.?
?
Walter: Yes, it's getting something that works and is useful, and it solves people’s problems.?
?
Darius: Now we’re going to veer away from the technical matters. But this is usually a very, very exciting part of the of the conversation. How would you describe what you do when you meet people outside the computing world?
?
Walter: I gave up on that. I got so tired of failing at it, I just thought I'd just say I'm in software and got my own business doing software and that usually satisfies them. I don't have to try to explain what I do. If they really press me, I say I write programs.?
?
Darius: I can imagine how unsatisfying it would be as an explanation. I appreciate it's accurate, but it’s not the most satisfying.?
?
Walter: But they don't really know programming. What am I going to do? That's why I love going to programming, language conferences. At last I can talk to somebody who understands what I’m saying!?
?
Darius: You make a good point. But what would you do if you weren't involved in languages and compilers, if you were in computing but not in language and compilers, what do you think you would you do??
?
Walter: I thought if I was around in the 1930s, I'd be designing and building racing airplanes.?
And if I was around in the 1800s I’d be building steam locomotives.?
?
Darius: How old were you when you wrote code for the first time??
?
Walter: 15.?
?
Darius: What software project would you have loved to be part of??
?
Walter: Anything to do with rockets!?
?
Darius: I start sensing a theme there!?
?
Walter: I took a course on jet engines at Caltech - where I went to school, and that was the one of the most fun courses I ever took. Even though it was only a professor and a blackboard, it was fascinating because he showed how a jet engine could be reduced to a single equation. It was a very long equation with all kinds of terms in there, but if you understood that equation, you understood jet engines. And I finally understood something that mystified me about jet engines.
You know on jet engines, you’ve got the fan, you’ve got the compressor on one side and a turbine in the other, and you light the fuel, and it goes out the turbine which drives the compressor which sucks more air in. I would look at it and every description of how the engine works said a variation on exactly that. And I thought, why does the fire blow out the turbine side and not the compressor side? It drove me crazy. It could have just driven the compressor backwards and the whole engine would be running backwards. Why didn't that happen? Why did it go the other way???
Well, this equation had the answer to it. Finally, I understood why it went out the other way through the turbine. And nobody ever explained that to me, so to me, being able to design the engine with mathematics was very cool, because the mathematics enabled you to see things.?
?
Darius: It's fun because it's almost contradictory. Some people say, “Yeah, I'm an engineer, I'm about the real worldâ€. And often people who have that stance are the ones who also say: “Yeah, I'm in the real world, mathematics, oh that's theoreticalâ€. And trust me, I'm very fond of mathematical aspects of our trade. But there's, as I said, some kind of a contradiction there.?
?
Walter: It's hard to describe. It's like you know exactly what'll happen if the engine, if you decide you want to allow the temperature to be higher in the turbine. You know what's going to happen with every part of it. You know what's going to happen if you constrict the nozzle at the end a little bit more, or expand it a little bit more, or what's going to happen at various speeds with the engine, you know the fuel consumption, the thrust, all that stuff, all from that one beautiful equation. You knew the whole thing and you’d never ask the reason why - I was waiting for you to ask!
What happens is the compressor increases the pressure, so much so that it's less pressure to blow out of the turbine than out of the compressor, that’s why.?
?
Darius: The system is designed, so that the equilibrium is such that it goes one way, not the other.??
?
Walter: Yeah, because the compressor is designed to increase the pressure at the front of the engine to act as a block. Well, none of the other explanations ever said that. To me, it was similar to kinematics. You can see in the formula the behavior you observe of a falling body or ballistic fall and mass and energy etc. Once you understand the equations, you can see all of that in your head and you can design it.?
?
At Boeing, I occasionally had to design a spring, and somebody in the CS department at Boeing had developed a spring design program. It turns out that the spring design program was not a spring design program at all: you put in the parameters of the spring that you already designed, and it would spit out the behavior of the spring.??
I thought, well, this is nonsense. This isn't helpful at all, because what it means is that I had to randomly pick elements of the spring and see how that behaved.??
So, I got out my math books and I worked out so the worked out the equations for the spring and then I ran it backwards. I said “Here are my requirements†and it would produce the design for me. This was a completely different way of doing the design work. I had the constraints on the materials, the constraints on the envelope, the constraints on the forces etc. and the thing would come up with a design for me.??
At Boeing, you design a part and there's a separate organization that evaluates the strength of the part.?If it doesn't meet the strength requirement, it gets bounced back to design. And after I had done a bunch of parts, they called me over into another part of the building to the stress group.??
And they said, we have a problem with your designs.??
Well, I said, Yeah, OK, what's the problem??
They said, they're coming in only meeting the spec for this minimum strength requirement by about 1%.?
And I said, yeah??
And they said, ‘well, we're used to designs that exceed the strength minimums by 10%, that's what we're comfortable with.’??
And I said, ‘Yeah, but that 1% margin is there.?‘?
Well, first they said, ‘How did you get that 1% consistently?’?
I said, ‘I calculated it. I started with the strength requirement and work backwards to find the size of the part to fit and the 1% was just tolerances’.?
And they said, ‘well, we don't normally design things that way.’?
And I said, ‘that's the way I design them.’??
And then they say, ‘We want a larger margin of safety.’??
And I said, ‘well, that 1% is above the 50% margin of safety, which is a design requirement, my parts all meet the design requirements, right?’
And they said, ‘Right, but we're more comfortable with an extra 10%.’
Then I said, ‘but then the part will be overweight.’
So, this bubbled around and it actually went up to the management and management finally says well it’s meeting the design requirements so it’s good.?
?
Darius: It’s like a boss requiring the employees to be there not only on time, but earlier.?
?
Walter: Exactly. The airplanes biggest enemy is weight and so I was using math. Instead of just guessing at a design and seeing if it passes stress, I would start with a stress requirement and work backwards to have a design that matched. And that's only possible if math is an integral part of your design process. If you work out the math, you can see what you've got to do to make it strong enough and where you need to put the material and where you can shave material off. So, I'm not going to apologize for the math basis of engineering.?
?
Darius: You won't get any pushback from me.
But back back to a compilers. What what do you consider the most important quality for someone in our trade??
?
Walter: They love it, otherwise how could you stand it??There's so much drudgery involved in it too. You know, nothing's going to get you past the drudgery if you don’t love it?
?
Darius: And what do you consider your most important professional, technical, or scientific quality? What makes you good at what you do??
?
Walter: I like the details. Some people like the overarching plan. For me, I love getting into the details and making things exact and things like that. That kind of serves me very well when you're generating code and writing languages, that desire for perfection?and to not be afraid of details. Remember I said, you got to be familiar with every detail of the language spec, and if you're not the kind that enjoys that, you’re not going to be successful at it.??
?
Darius: And what you consider your most important technical, professional scientific flaw, what makes you not as good at your job as you would like to be??
?
Walter: Oh. I’m not very good at marketing.?
?
Darius: Listen, you're the guy I remember in the magazine with a box, and you were the best programmer in the world. So I yeah, I wouldn't say marketing, but at least let's say the statement was bold, and clear.
If there was one programming language you wish never existed, one language you could erase from the planet, which would that be??
?
Walter: The C preprocessor. I said that the preprocessor must die, several times.?
?
Darius: But that hasn't worked out for you all that well so far.??
?
Walter: I haven't managed to kill it yet.?
?
Darius: If you were to direct our audience, to read one book, one article, one author, computing related or not, what would that be??
?
Walter: “How to Win Friends and Influence Peopleâ€, by Dale Carnegie.
?
Darius:?
That's an oldie.?
?
Walter: It is still a bestseller for a good reason. I tell people it's a great book to read and they say ‘but you’re so bad at this’ and I say, well, you didn't know me before I read the book! And they go, well, yeah, you’ve got a point!?
?
?Walter: The biggest problem I constantly have to work at overcoming is trying to work with other people better.?
?
Darius: And what is the book you wish you wish you could force yourself to forget so you can read it over and over again, just for pleasure.?
?
Walter: Well, every book I enjoy reading…?
?
Darius: Just one.?
?
Walter: I’d like to say 2001. You can only read that book so many times. And the pleasure disappears eventually. I really enjoyed that book.?
?
Darius: That's true with pretty much every book that I have. And it’s even true with some pieces of music that I'd love to have the pleasure of rediscovering again.
?
Walter: Yeah, I've ruined so many good songs by listening to them too much, and now I can't listen to them anymore and I miss the pleasure of hearing them again because I’m too used to it.?
?
Darius: And what would you like to be remembered for??
?
Walter: What a great question. Well, I'd give you different answers depending on who was doing the remembering of course. My friends and family. I'd like them to have all positive feelings about me as being a good person. And outside of that being remembered for D is a fine thing, I think.?
?
Darius: Do you intend to let go of D at some point let other people run it, maintain it without you controlling the process??
?
Walter: When I'm forced to by death or disability, I'm looking like I’m well past the midpoint of my career, and there's going to be an end to it at some point. So I'd like D to get to the point where they don’t need me, that’s my goal with D.?
?
Darius: That's a great goal. Walter, thank you so much for taking the time to talk. This has been an absolutely wonderful interview.?
?
Walter: I've certainly enjoyed it a lot too, great questions. I’ve never been asked those questions by anyone before.?
?
Darius: Many people whine about my questions, and ask these questions come from? And I say well, this is not the forum for technical details, this is the forum to learn about people.
Thank you so much, again!.?
?
Walter: My pleasure. And hello out there to whoever is listening to this. Somebody, an archaeologist, 500 years in the future wondering what programming was like – hello!?
?
Darius: Who knows, this may land you your first D program in Antarctica!?
?
Walter: Well, I suppose I'll always be remembered anyway because I have a page in Wikipedia, so if Wikipedia is forever - I guess I’m forever! It’s been a pleasure talking to you.??