>> Sean: We have had a few questions in from our Computerphile viewers - our loyal viewers.
There are some obvious joke ones, which we may get to at the end, but starting with:
"How did you start programming? Where did you start?" >> BWK: It goes back a very long way.
I think this would go back into the early 1960s, or something like that, and
therefore memory is both dim and rosy.
I think my first programming was probably [in] Fortran. I tried it when I was in, probably, my third year at university, so
it was a long, long time ago, and I don't remember very much about it.
One thing I do remember is: you read the book, you read the manual. This is
McCracken's Fortran books, which are really, really good. And you read them and
you think you understand it completely. And then you set finger to whatever, in
this case key punch, and you say: "Wait a minute - what do I do?
I don't know how to get started!" And I think that conceptual hump of 'how you
get started' is still there for an awful lot of people. You sort of know the rules of the
language but you don't know how to say anything. Once you're over that then it's
easy and that's sort of true then for all subsequent languages. But that first
step was hard. So I think my first language was Fortran; it was probably at
university; and I also spent a summer working at what was, at the time, Imperial
Oil, which is a branch of Esso, and so on, in Toronto, and I wrote COBOL there. I was
probably the world's worst COBOL programmer. Indescribably bad.
And I haven't actually written any COBOL since but those were the kind of
early days. I think I didn't really learn to program properly until I went to
Princeton as a graduate student and then I actually wrote Fortran programs that
did something, and that was more useful. >> Sean: That was how you started programming. This
kind of leads on nicely from that. What did you think of C when you first
encountered it? >> BWK: Again it's one of those things where I don't remember and it was
also special in that I kind of snuck up on it because I was in the environment
where it was going on, I had written a little ... I had spent one summer at
MIT when I was a graduate student. I was there as, in effect, a summer intern. And
at that point I had written in a language called MAD, the Michigan
Algorithm Decoder, which a lot of the CTSS system had been
written in. It was really nice because it was so much cleaner and
neater than Fortran. And then at the Labs I wrote a little bit of B, which was a
precursor to C. B was kind of like a stripped-down version of BCPL, which was
done by Martin Richards at Cambridge. And I never, I think I never wrote any BCPL,
but I wrote a little bit of B and it was kind of neat and I liked it. And then
when C came along, it was at that point a relatively easy transition into using
it, and I pretty much have repressed all of the details but I wrote programs
early on that were doing text processing, and although C's not the
greatest language in the world for text processing, at the time it was a lot
better than any of the alternatives that were available to me and I think period.
And so I would I found it quite comfortable and actually enjoyed it at that
point and stayed that way for many many years. >> Sean: Let's move on to the hardest
challenge. So what has been the hardest challenge for you in your life as a
computer scientist, which helps narrow it down somewhat. >> BWK: Yeah. Geez. I,
I mean what are the problems in computing are: "How do you write
programs that work" and then "How do you make it possible for other people to
write programs that work?". And it's sort of those are the kinds of things I've
been interested in all along. So I want to write my own programs and know that
they work in some reasonable way. And that leads to, you know, building better
languages, building better tools for helping programmers, and so on. So that's
one aspect of it. And the other is how do you help other people write their
programs too, because programming is hard to do, programs are hard to use sometimes,
and so that leads to, let's call it the documentation side of life: writing
books about programming. So that's roughly what I would say. Those are hard
problems, they're not solved yet. I think most people have the same kinds of
problems in various ways. And programming is different today than it was say 40-ish
years ago, in the early days of UNIX. In the early days of UNIX you had a very
self-contained environment. Things were relatively small because you didn't have
much computing power to deal with. You didn't have any networking issues so you
didn't have to worry about things far away not working or attacking
you or anything like that. So life was simpler and in some ways it was more fun
because you could build really interesting things -- not huge but
interesting useful things fairly quickly, fairly small. Today a lot more
programming is enormous collections of libraries that you have to .... basically
what you're doing is gluing together things that other people wrote, and then
you're going to Stack Overflow to see why they don't work. And then you're
adding somebody else's random glue into your own glue. And it's in some ways not
nearly as much fun, I think. >> Sean: Leading on from a question before about
programming languages and how it was when you encountered C, which programming
language is the best successor of C or the most influential? >> BWK: Those are different
questions or they have different answers. "Best" is a loaded word so I'll probably
ignore it but there's some obvious things that derive from C. First,
C++, which has been enormously influential. It was done by Bjarne
Stroustrup while he was at Bell Labs. Lots of people say that C++ is too big and too
complicated, and etc., etc., but in fact it is a very powerful language and pretty
much everything that's in there is in there for a really sound reason. It's not
somebody doing random invention; it's actually people trying to solve
real-world problems. And a lot of the programs that we take for granted today,
that we just use, are C++ programs. If you use anything from Microsoft's Office
suite, for example, those are C++ programs. You pick your favorite browsers, those
are C++ programs. So C++ is in some ways, I would argue, one of the most important
and influential derivatives and it's the first of the derivatives. Another is Java,
which in some ways is a reaction to C++. Because C++ is big complicated, etc., and
so Java was an attempt to simplify what was in C++, to make more of the decisions
for the programmers, so that the programmer didn't have to make them
himself or herself. It also took advantage of kind of ten years of
hindsight, because Java came along the early 90s; C++ is the early 80s, so
there's a decade of improvement both in our understanding of what we're doing,
but also a decade of Moore's law, giving us, you know, an order of magnitude or so
of resources to work. And therefore Java
could use a virtual machine, which C++ was never able to do. So there's another
example of a derivative of C which, very important, very influential, an awful lot
of the services that you use at all of these big websites, are written in
Java as opposed to C++. What is another one? I guess the obvious next one would
be JavaScript, which takes the surface syntax of C, as many other languages do,
but takes the surface syntax, makes some decisions differently -- still an
interpreter for the most part -- but shares that C heritage in a lot of ways
and then goes off on its own direction. And Javascript is, in terms of just
lines of code being executed per day, probably dominates all the
others. And then a tiny bit of self-serving, the AWK language that Al Aho
and Peter Weinberger and I did, takes the surface syntax of C and then
wraps it up in a different style. It's an interpreter but it looks like C with
some variations to make it possible to do other interesting things. So at least
those. Oh! and then [a] more modern one: 'Go', for example, a language that dates at this
point from, I think, 2007, so it probably hit the streets in 2009. So, call it a
decade old. And so Go in many ways looks like a modern C; some people call it 'C
for the 21st century', and it has its own nice properties and so on. And one of the
things that it retains that some of the other languages don't is more the
minimalism that C had originally. So big spectrum of languages that came
from C, inspired positively, negative reactions, whatever, but all from that
single source.