There is an amazing interview with Alan Kay in ACM Queue (from 2004). He talks about computer architecture, languages, performance, and what was going on at Xerox PARC (the Palo Alto Research Center) in the 1970s and 80s. It’s a wide-ranging and interesting interview, and worth reading.
My favorite quote from the interview:
One of my favorite old languages is one called Lucid by Ed Ashcroft. It was a beautiful idea. He said, “Hey, look, we can regard a variable as a stream, as some sort of ordered thing of its values and time, and use Christopher Strachey’s idea that everything is wonderful about tail recursion and Lisp, except what it looks like.” When he looked at Lisp, he had a great insight: which was that tail-recursive loops and Lisp are so clean because you’re generating the right-hand side of all the assignment statements before you do any rebinding. So you’re automatically forced to use only old values. You cannot rebind, so there are no race conditions on anything.
You just write down all of those things, and then when you do the tail recursion, you rebind all of those variables with these new values. Strachey said, “I can write that down like a sequential program, as a bunch of simultaneous assignment statements, and a loop that makes it easier to think of.” That’s basically what Lucid did – there is no reason that you have to think recursively for things that are basically iteration, and you can make these iterations as clean as a functional language if you have a better theory about what values are.
When I learned about this idea (from the Structure and interpretation of computer programs) it seemed like a deep way to think about – and do! – iteration.
What I didn’t get from this interview is what Alan means when he talks about some “new generation” of languages that he hoped would succeed Smalltalk and Lisp, but because Smalltalk and Lisp were so great, people stopped innovating at that point, and the education of programmers lagged behind the wonderful technology available (even truer today!!), so that it became a pop culture of Basic, Pascal, then C, and now Java and Python/Perl/Ruby.
I disagree that the innovation stopped; it went back into research labs and research universities, hidden away from the popular gaze. The new languages that Alan hoped for are precisely the functional languages that he seems to like. He doesn’t say they are the next big thing, though; I do think they are.