>> 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.
