>> Sean: What's the newest language you use? >> BWK: I would say the newest language I use is
Go, and that is sort of 10 years old at this point. Languages last longer than you think.
Fortran, which dates from the late 50s, is still very much alive and still very
much used by a lot of people, as is COBOL.
Algol lives on in its derivatives; Basic lives on its derivatives. So all these
languages never die, but then there are brand new languages that come along. I
think that of languages that anybody might have heard of that I use today,
yeah, Go would probably be the newest. I have experimented with other languages
briefly, mostly to try and understand them just enough that I can say
something in class. Rust is newer than C [Go] but not enormously so, so I've done that.
Scala -- I don't even remember the dates but it's, call it contemporaneous
with Go. I've done one program in that, one in Lua. I -- newer languages like
Kotlin, no, I've never tried. Sorry, I'm a late follower, not an early adopter.
>> Sean: Any functional stuff? I've seen your views on functional before but it'd be interesting to capture.
>> BWK: Yeah. Functional languages are really really important, I think,
because what they are - have proven to be - is a proving ground for ideas in
programming. So a lot of the things that we take for granted in modern languages --
mainstream languages, mainstream compiled languages like, let's say, C++ or Java or
Go, whatever. Many of the good ideas, the new ideas in those, came from functional
languages. For example, recursion originally is a Lisp idea and it shows
up everywhere. Functions as first-class citizens, pattern matching kinds of things --
all of these show up in functional languages and then move into the
mainstream in some way. I have never gotten over the hurdle of really
internalizing a functional language well. I have tried Haskell. It was a desperate,
desperately bad time. It took me two weeks to write a program that took me
probably an hour to write in Lua, another language I had never tried in my life. I
am not cut out; there's something wrong between my brain and Haskell. I can't
do it. But that's not to say that Haskell is a bad idea; it has many neat ideas and
it undoubtedly is providing something that will help people in the future in
programming. But I think mainstream use is probably always going to be dominated
by the more conventional compiled, imperative sorts of languages. >> Sean: The chap
who asked the question about newest language goes on to say what would you
like to see created, which I think is a tricky thing but, you know, what would you
take the best of from, and is there a way to answer that? >> BWK: I think the way I
would answer it is to say that in many cases the way we make progress in all
of these language-related things is when we get to the stage where what we're
trying to say is so mechanical you can almost say it mechanically. And once you
get to that stage and we say, well let's mechanize it so we'll add something
whether it's a language or a library or something like that, so that a whole
class of things that used to require us to do it over and over again have now
become something where you have a specification, or a very simple language,
and the language is taking care of a lot of it. That has the advantage you
understand it better. It's much more likely to be right if a computer is
doing it for you. And it's probably easier to teach it to other people as
well. And sometimes those languages are declarative, sometimes they're procedural,
but fundamentally I think that's the way we make progress: we understand more of
it what it is we want to do and how to express how to do that, and then we put
that into a program; we mechanize it. >> Sean: John Read asks: "If you could start from
scratch today and build a new processor architecture and operating system with what
we know today, where would you begin and what would it look like?" >> BWK: I would begin by
getting somebody who actually knows what that's all about. Sorry. I mean, it's true;
it's not my thing, I'm no expert. >> Sean: it's fair answer and he goes on to ask a
second question: "Will block-based drag-and-drop programming like Scratch
eventually replace traditional text-based programming?" >> BWK: That I at least
have opinions on. I think the answer is 'no'. I played briefly with Scratch or
at least a derivative. There was a program or a system that Google
provided called App Inventor. The idea was that it was basically
Scratch but with primitives that made it possible to build Android apps very
easily. And my experience with it was that for anything that fit within the
model for which they had provided the blocks [it] was perfectly fine but very, very,
very clunky. I tried to build something that would navigate around a building,
for example, and doing a distance computation with blocks was just -- you had
this much block to say give me the square root of x squared plus y squared.
It was hopeless. So I think using languages like Scratch as they were
constituted when I did this -- this was a while ago, so maybe it's moved on -- but I
think the problem with them is it's trying to ... sort of like trying to get to
the moon by climbing a tree. You know, the first 10 or 20 feet is really good. Now
you're stuck!. Can't get anywhere. I think the same thing is true. Now that's
for me as a sort of professional programmer trying to do things. As a way
to introduce programming to kids -- absolutely great. There's amazing stuff that people
do with Scratch and languages like that. Could you do something that would use
the block space part as something that is a nice way to get started with aspects
of it, and then extend it in other ways? That's what I was trying to do when I
was playing with App Inventor and it just, it foundered on the technology there.
But I think something like that might be useful. So they have their place but it's
not gonna replace other languages. >> Sean: What do you think about -- this is such a wide
wide brief -- what do you think about the future of computer science? Will the
manipulating bits era become obsolete in a few years or basics will never change?
>> BWK: I think basics will always be there; in some sense we will always have to worry
about how much memory we have, how much processor time we have. We'll have to
worry about whether the programs are correct or not, whether they're safe and
secure or not, so all of that is going to be with us I think in perpetuity, and I
think and, as a nominally computer science educator, that's something that
we want to make sure those so that students in computer science courses,
let's say at university, should actually understand the basics at that point. They
should understand how the machines work, what the limitations and realities are
of making them do things. They should also understand
some of the theoretical limitations: some things are hard to compute intrinsically
and that's important and sometimes useful. So all of that kind of thing is
going to be there. So let's call that core computer science. And then there's
all the things that computer science gets applied to, and that's the place
where all the growth is in some sense. I used to say to students in one of my
classes for non-technical people, "I don't care what your major or field is; you'll
find a use for computing, unless maybe you're a religion major". And then I
realized this is nonsense -- religion majors do really, really interesting
analysis of texts written in ancient languages and they did the same kind of
authorship questions that showed up in more recent issues like the Federalist
Papers. All of these kinds of things. So I don't care what your field is; it has
computing in it, the more you know about that the better off you'll be able to do
things in your field. >> Sean: that's a fantastic answer. I'm gonna ask you on the silly
ones now. What is the proper way to pronounce caramel? Is it 'car-mel' or
'car-a-mel? >> BWK: I think it's a three syllable word, 'caramel', to me, but I think so.
I don't know now that you asked me. >> Sean: Not necessarily silly ones but very difficult
to answer in a concise way: "What are your favorite books or what are your top few
books?" This came up a couple of times. >> BWK: Yeah. When I think about what I read and
let's call it reading for pleasure as opposed to reading for work. I think what
I find myself reading mostly is either junky detective stories. One of the
wonderful things about spending time in England is charity shops. There are
charity shops everywhere in every town, no matter how big or small, and you can
go in there and buy for a pound a really really interesting junky detective story
that you hadn't read already. And then in the next town, having read it, you drop it
off at the charity shop and pick up a new one. So I read a lot of those kinds
of things, probably half to two-thirds by British authors and the rest by American
authors. So I read those. The other thing that I read, and probably this is
more at home, tends to be history of one sort or another.
The Princeton library has a great collection of history books and so I
find myself reading that. Reading things on the Second World War just before I
left. I'm carrying a copy of 'A Distant Mirror' which Barbara Tuchman wrote years
ago about the calamitous era of the 14th century and so on, which has a lot of
English and French and Crusades. So lots of these things -- that's, that's what
I read for fun as opposed to for work. I think I don't do very much reading of
technical books, other than occasionally I will buy a book on something like: "How
do you use React?", or "How do you program for Androids?", or I got one on OCaml
recently because in spite of saying I don't know anything about functional
languages, I figure I ought to learn something and unfortunately I'm not sure
I've opened it yet. So technical books, I know I don't read as much as I probably should.