InfoQ

Interview

Recorded at:
Recorded at

Guy Steele Interviews John McCarthy, Father of Lisp

Interview with John McCarthy by Guy Steele on May 01, 2009

Community
Java,
.NET,
Architecture,
Ruby
Topics
Language Design ,
Language
Tags
LISP ,
OOPSLA 2008 ,
OOPSLA ,
Artificial Intelligence
Summary
In this phone interview that took place in front of an audience at OOPSLA 2008, Guy Steele spins a yarn with John McCarthy, the father of Lisp, attempting to find out some details surrounding the language inception in the 50’ and its later evolution.

Bio
John McCarthy has been involved in Artificial Intelligence since 1948, a term he coined in 1955. He has been mainly interested in formalization of common sense knowledge. He designed LISP in 1958 and developed the concept of time-sharing. Among others, he has received the Turing Award, the Research Excellence Award, and the Kyoto Prize.

About the conference
Starting in 1986, OOPSLA Conference has proven to be the cradle of many techniques and methodologies that have become mainstream over the years: OOP, Patterns, AOP, XP, Unit Testing, UML, Wiki, and Refactoring. Gaining its prestige with 3 academic tracks, OOPSLA Conference has managed to attract researchers, educators and developers every year. The event is sponsored by ACM.
This is Guy Steele standing in for Alan Kay and you already have a list of some questions that I think you've had a chance to look over that P. Gabriel forwarded to you. I propose to go over some of those, although not necessarily in the original order. To let it flow, it would be better. I also have got a few questions you haven't seen yet, that are short and we'll leave those for later in the conversation. Why don't we start with what is your question no. 4: Who helped you the most with early ideas for Lisp and its early development?
Could you tell me a little more about who else worked on successive versions of the manual, after Phyllis Fox?
Let's move up to the list to question no. 3. What would you add to Lisp if you could go back in time? What would you delete and what would you change?
There have been a couple of projects over the years to try to combine Lisp and Prolog in some way, to add logic. Have you looked at those at all?
What's an example of an Englishy feature in Lisp that you wouldn't use?
Perhaps you are thinking of LOOP. I am just trying to get a sense of what you mean by the word "Englishy"
Up to your question no. 2: What separates a good programming language from a not so good one?
Of course, one of the important purposes to which you put abstract syntax in Lisp was being able to write its own evaluator. Do you have other purposes in mind as well for abstract syntax?
Let's move on to your question no. 1 on your list: what has been the role of programming in AI research and what should it be?
I've seen abstract syntax data structures defined for some other programming languages such as for example ADA. That seems somewhat convenient less to use or to learn because it involves dozens and dozens of very specific data structures, one for each kind of abstract syntax rather than the general use of an expression for representing all abstract syntax. Do you have any comments about the advantages or disadvantages of using that uniform expression representation?
This is the Vienna definition language, isn't it, about which some books are written probably 30 years ago?
I was too young in '62. I'd like to turn away from the list of questions you have in front of you, just to some shorter questions that some people have submitted and some of them are dealing in particular with some of the earlier events of Lisp in 1958, if you'd entertain them. The first question is: where did the idea of a property list come from?
How did you imagine and what was different?
Your remark prompts 2 more questions on my part. One is, as John says, people will be asking the people in this room, in 50 years "What were you thinking of?". I hope you are all taking good notes for historians and writing things down, or you are saving your e-mail or perhaps even printing it on dead trees so it will last longer. Actually this raises a question here on the list, John: did you throw away your notes and handwritten material when you were at Stanford. Do you still have your old MIT or your notes sitting around somewhere? Did you keep a lab notebook of any type while you were working on Lisp?
I'm hoping that Brewster Kahle’s Internet Archive will help to fill part of that gap, but I still would advice people to print things on dead trees, if you really want them to survive. We'll see how that works out. Going back to the question of property lists, I noticed that property lists record information about key-value pairs, which seems to be an important guide in programming. Association lists also provide a correspondence within keys and values. That's typically been used for variable lookup and environments. It's interesting to notice that property lists and association lists, while they serve very much the same purpose, have 2 slightly different structures in terms of consoles. Was that kind of an historical accident in Lisp or was that a reinvention? What happened there?
Two different programmers are just not paying attention or not caring - it's not relevant.
It's a minor point, but it is something that picks my curiosity. What experience of practical computer programming did you have before 1958, before you tackled Lisp?
When you began working on Lisp, in particular looking at the period of about September to November 1958, about what percent of your daily work time did you invest in working on Lisp? Was that sort of 100% of your time or partial time were you devoting your attention to other projects at the same time?
You were involved in the ALGOL design effort as well, during the late 1950s. We should know whether you considered using ALGOL 58 as a basis for the design of Lisp rather than coming out of FORTRAN or were there ways in which you were involved with ALGOL 58 indirectly with Lisp?
Sometimes that matters for reasons of correctness. In fact, the way we currently use them idiomatically nowadays anyway or even earlier, let's say 1965. Evaluating the logical connectiveness and/or in that conditional way can be very important for program correctness, given that we become used to using them in that idiomatic way. Being that, it might not be correct to evaluate b if a fails, for example.
When did you first embrace the idea of writing computer programs using a recursive style?
This idea of organizing computer programs as recursive way was an idea that slightly proceeded Lisp itself?
What were the bad aspects that you didn't want to copy?
I looked at some IPL-V code, and it does seem to be very statement or command oriented with fairly cryptic names or numbers for commands and reminded me of some kind of an assembly language for a Lisp machine. You are currently convinced that while the S expressions or programming in S expressions were a bad idea. Did you change your mind in this regard and if so, when?
It's interesting we hear you put it that way because in your invention of Lisp, you were regarded as a great innovator in a number of ways, so to describe that as conservative is a little bit startling.
I'd like to return now to the list of numbered questions that you have in front of you. At this point I'd like to start with question no. 5 and then we'll take them in forwards order. Should programming languages be designed for theoreticians to facilitate reasoning or for practitioners for getting systems built? Should there be different languages for each purpose? Are the skill sets of a language designers different?
That actually reminds me of the distinction made fairly early in the ALGOL project, between the machine readable syntax and the reference syntax in a publication format. Did that distinction ALGOL come from you?
None of the ALGOL formats to which I just referred qualifies as an abstract syntax at least in a way that S expressions would.
Do you think that these different kinds of program representations call for different designer skills? Would you recommend that an expert designes, say the core abstract syntax, then you could have different cosmetics designers plaster - say lipstick onto the front of it? Lipstick being a word that's very much in the air in this particular American political season.
In the answer of an earlier question, you pointed out that it's important for people to write programs and also for programs to be able to write programs. Do you think the same programming language serves well for both purposes or perhaps the same abstract syntax that humans might want to use a different concrete syntax?
Let's move on to question 6 on your list. Lisp has had a strange history with lots of dialects, lots of implementations and lots of controversy. Do you believe the platform of ideas tried by Lisp was good for it and good for programming languages overall?
Experimentation is good? Do you think there is anything peculiar or special about the design of Lisp that encouraged that experimentation or made it easier?
Nowadays Python has a boss, Guido van Rossum,and C# has a boss - there is Heilsberg - and James Gosling - he doesn't try to act as a boss to Java anymore but he is still considered a kind of boss.
I've been trying to disclaim that boss ever since, perhaps instinctively following your example or just because I don't want to be a boss - I'm not sure. It's interesting that during the last 10 -15 years I think there has been a kind of a cult of bosses in programming languages and what you say, that may be a bad idea for the development of the language. Let's move on to question 7. What do you think was the most important contribution that Lisp made?
Of course, those were related because you used the Lisp structures as the representation of the program?
I asked for one of the most important contributions. I am going to list 4-5 others that occurred to me and ask your comments on those as well. Close related to the idea of a Lisp program and Lisp data is that it enables you to encode, apply and eval as an universal implementation of the language. The idea of eval is a universal Turing complete function is an important idea, perhaps. Having an expression oriented language, the support of recursive functions, the McCarthy conditional expression, which is spread into all programming languages by now - even C, which has a rather strange syntax for it, but it's there -, and then garbage collection. Have I left out any important idea? Probably. I'm going to ask people from the audience: what have I left out from the list? High order functions, symbols, dynamic programming. I'd like to ask you, John, do you have any other comments about any of those things as how they fit into the overall picture of Lisp and what you were trying to accomplish?
Looking back, what in your career are you most proud of? What would you like to take back? Which idea that you came up with that was not picked up did you wish had more influence?
I hear "Amen!" from the audience on that. Here is a perhaps slightly more off-the-wall question - question 9 on your list. The Stanford AI lab was a unique place, away from campus and an ecclectic group of people including software people, hardware people and musicians, a volleyball game every day and its own computing infrastructure. Did these factors help make it easier to do this sort of far reaching research or are such factors irrelevant?
Is this another example of your deciding not to be the boss and let people do what they wanted?
Formalizing common sense was a very difficult problem and still is, I think.
If memory serves, in the late '60s, MIT was also tackling robotics and in particular trying to solve the Vision problem and when they declared "We are going to solve Vision this summer" and they had the Summer Vision Project and by the end of the summer they had a nice collection of subroutines for the video camera, but I don't think they solved Vision at that point. That was 1967, give or take a year. John White reports that he wrote some matrix and version routines in Lap for that project.
Computer Vision remains a hard problem. At this point I'm going to depart from that numbered list again and give the audience a chance to ask you a few questions directly. We've got to microphones here in the room. If anyone has another question to direct to John McCarthy, come forward. Herbert Sterns: What was the influence of Marvin Minsky on the development of Lisp?
John White: Marvin is given credit for writing the garbage collector that dumped the memory out on to a secondary storage right getting it back in, in about 1960 time frame. That was before my time, but I read the documents that said that. That might have been his primary involvement in Lisp.
I didn't come along until 6 years later, so I don't know - not the Lisp I worked with.
Kent Pitman: I was wondering to what extent the name Lisp, as list processing is really central to the language to you at this point. Personally, I think that issues of things like identity or dynamic typing are much more important contributions of the language than list and I'm just curious whether looking back on it you still would have named it Lisp? What do you think of this central feature?
The previous question had to do with the influence of Marvin Minsky on Lisp.
This is Kent Pitman's question regarding the naming of Lisp as list processing. Looking back on it do you still feel that list processing was the most central or salient feature of the language or would you give the language a different name because other things are more important?
Kent Pitman: I had no particular name to suggest, but I did have a related question just to follow up. What do you think it's dynamic typing which I really consider to be one of the central features of the language, whether the absence of static typing in Lisp is a bug or a feature?
JohnL: When I was an undergraduate at Carnegie the sort of a Holy Grail of Perlis was to get the formalization of mathematics to the degree of symbolic and algebraic manipulation, but he took the ALGOL route. And you did mentioned something about ALGOL and what it might be envisioned for, so he pushed for formula ALGOL for a long time to be a competitor to the Slagle's work and it wasn't until years later when he personally apologizes and said he agreed with Lisp. I wonder if you've heard that term "formula ALGOL" and if, in fact, the kind of work and proliferation that came out of the symbolic algebraic movements, the math labs, the maximums and the others and so on, could have ever been done with an ALGOL-like syntax and semantics?
John, I'm going to move back to the list of numbered questions. Could you look back at question no. 14, please? What do you think about the proposition that good notation can stimulate good thinking or the poor notation can inhibit it.
What do you think about the proposition that good abstract syntax can stimulate good thinking and that poor abstract syntax can inhibit it?
Ok. I'm just wondering: is abstract syntax just abstract and it is what it is or can be sort of good or a bad designs for abstract syntax?
It was a slightly off-the-wall question I wanted to see what kind of answer I would get. Last question, please. What suggestions do you have for the young researchers today? What do you think are the important problems to be working on?
An important problem back then and an important problem right now. OK, thank you very much, John. We've taken an hour of your time and we've really appreciate your dialing in. We really appreciate your inventing Lisp and the other work in logic that you've done. I think that nearly every person in the room here can say that his or her career was built more or less solidly on your work - I can certainly say that of myself. We'd just like to express our appreciation. Thank you very much!
show all  show all
Typos in the transcript by Paul McJones Posted May 2, 2009 9:56 AM
Re: Typos in the transcript by Mark Wutka Posted May 4, 2009 8:36 AM
Re: Typos in the transcript by Mark Wutka Posted May 4, 2009 9:30 AM
Re: Typos in the transcript by Luciano Ramalho Posted May 4, 2009 11:21 AM
Thanks for posting the interview by peter lin Posted May 4, 2009 6:33 AM
Typo by Werner Schuster Posted May 4, 2009 12:24 PM
Typos fixed by Abel Avram Posted May 7, 2009 10:20 AM
  1. Back to top

    Typos in the transcript

    May 2, 2009 9:56 AM by Paul McJones

    Noland Simon => Newell & Simon

    girdle numbers => Gödel numbers

    sum ends => summands

    Herbert Stan => Herbert Stoyan

    Kozak => [Alan] Kotok

    "Amin!" => "Amen!"

    Lennart => Lenat

    Ken Pitman => Kent Pitman

    John Al => JonL [John Lyle]

  2. Back to top

    Thanks for posting the interview

    May 4, 2009 6:33 AM by peter lin

    that was a fun interview. thanks!

  3. Back to top

    Re: Typos in the transcript

    May 4, 2009 8:36 AM by Mark Wutka

    Very enjoyable interview!

    These are the typos that I thought either skipped information or misconveyed it:

    variable lockup => variable lookup

    Kotok and ... => Kotok and [Elwyn] Berlekamp

    logical connectiveness => logical connectives

    the idea had, in my opinion => But IPL had, in my opinion

    you are currently convinced that while => you [were?] currently convinced for a while that

    IPL had a boss => APL had a boss (If we take Fortran or IPL, each of them had a boss - APL had a boss)

    trying to disclaim that boss => trying to disclaim that bossness

    garbage collection was needed anyway => garbage collection was neater anyway

    and a collected group => an eclectic group

    "did he get into Lisp" => "did it get into Lisp"

    that I did understand all of until => that I didn't understand at all until

    differentiating in the formula and so forth => ... a formula and so forth. So I thought they were gonna hit a wall.

  4. Back to top

    Re: Typos in the transcript

    May 4, 2009 9:30 AM by Mark Wutka

    Just noticed one other..
    Lisp and Prologue => Lisp and Prolog

  5. Back to top

    Re: Typos in the transcript

    May 4, 2009 11:21 AM by Luciano Ramalho

    Touring complete => Turing complete

  6. Back to top

    Typo

    May 4, 2009 12:24 PM by Werner Schuster

    Allen Kane -> Alan Kay (he was supposed to do the interview).

  7. Back to top

    Typos fixed

    May 7, 2009 10:20 AM by Abel Avram

    Thanks for noticing the typos. I believe they all have been fixed.

Educational Content

Brian Marick on 4 Challenges and 5 Guiding Values of Agile Software Development

Brian Marick takes us through a quick tour of the most important values and challenges to adopting Agile successfully (they aren't the typical challenges and values we hear in the community).

Are You a Software Architect?

The line between development and architecture is tricky. Does it exist at all? Is an ivory tower actually needed? There's a balance in the middle, but how do you move from developer to architect?

Agile – A Way of Life and Pragmatic Use of Authority

The word 'authority' sometimes produces an allergic response in hard-line agilists. Freedom and authority – both are bad if misused and both are good if used in right spirit for a noble cause.

Getting Started with Grails, Second Edition

"Getting Started with Grails" brings you up to speed on this modern web framework. Companies as varied as LinkedIn, Wired, and Taco Bell are all using Grails. Are you ready to get started as well?

Using ITIL V3 as a Foundation for SOA Governance

Those familiar with only ITIL V2 often scoff at the thought that ITIL could serve as a governance framework for SOA. With ITIL V3, the focus of the framework shifted towards service-orientation.

Adrian Colyer on AspectJ, tc Server and dm Server

SpringSource CTO Adrian Colyer discusses AspectJ, SpringSource's dm Server and tc Server products, OSGi and Scrum.

Adam Wiggins on Heroku

Heroku's Adam Wiggins talks about Rails, Background Jobs, Add-Ons, Ruby, and how Heroku manages to work around Ruby's inefficiencies using Erlang and other languages.

SOA as an Architectural Pattern: Best Practices in Software Architecture

For Grady Booch the foundation of a good architecture is patterns, SOA being just one of many patterns. In this Second Life presentation, Booch attempts to bring more clarity on what architecture is.