Joe Armstrong & Alan Kay - Joe Armstrong interviews Alan Kay
Erlang Solutions6 HN recommenders · 2016–2026
76K views · interview · evergreen · Uploaded 2016-11-22
Joe Armstrong, creator of Erlang, interviews Alan Kay at Code Mesh. They discuss the meaning of object orientation, message passing, the META II paper, and the state of computer science.
HN uses it in debates about what OOP originally meant, since Kay's message-passing view lines up with Erlang's processes.
53:22Ruby Conf 12 - Y Not- Adventures in Functional Programming by Jim Weirich
Confreaks
38:47RailsConf 2014 - All the Little Things by Sandi Metz
Confreaks
42:03The Soul of Erlang and Elixir • Sasa Juric • GOTO 2019
GOTO Conferences
1:01:39"Simple Made Easy" - Rich Hickey (2011)
Strange Loop Conference
25:06"Making Impossible States Impossible" by Richard Feldman
elm-conf
1:00:43Jim Simons (full length interview) - Numberphile
Numberphile2
14:34Steve Jobs Stanford Commencement Speech 2005
JoshuaG
1:31:06William Byrd on "The Most Beautiful Program Ever Written" [PWL NYC]
PapersWeLove
20 comments from Hacker News
Ahh..META II [1]. This is awesome. Was just mentioned again in the "Joe Armstrong interviewing Alan Kay" talk [2][3]. One of Alan's favourite papers. Joe: "Dan said if you look at this, you will lose a month of your life. And I did" Or words to that effect. Also the basis for OMeta[4]. I have to admit I've been avoiding it so far in order not to get diverted from architectural insights[5] but this may just be accessible enough to dive on in. [1] [LINK] [2] [VIDEO] [3] [LINK] [4] [LINK] [5] [LINK]
I obviously can't tell you what he's thinking, but I can make an educated guess: In the video (and almost anywhere else you look) you'll note he talks about recursion on the concept of "computer" as a way to scale, because that way the parts are as powerful as the whole. If you split that concept into the sub-notions of "procedures" and "data", you no longer have that recursive principle, and "functions" in this context are sufficiently equivalent to procedures. Going the other way, functions don't really scale up, many if not most things in computing are not functions to be computed. One could argue that computers and "computer science" are misnamed, as computation is more the exception than the rule. "Data-around-shufflers" would be more appropriate. I didn't see the exact monad references, but they look like ways of working around the fact that the "function" primitive is inappropriate. It is really nice , mind you, and has wonderful properties. Kind of like circles as the basis for astronomical orbits: they are "perfect", but the world isn't perfect in the same way, so trying to model the imperfect world with these perfect primitives leads to having to introduce epicycles/monads. My 2 €¢ Edit: “Functions are nice, but you need to advance the state of the system over time” — [VIDEO]
This is one of the papers referenced by Alan Kay in the talk posted to HN one day ago: Joe Armstrong Interviews Alan Kay [video] ( [VIDEO] ) Discussion: [LINK]
> Erlang != OOP as imagined by Kay... as I understand Kay's intent. You should check out the video[0] of Joe Armstrong interviewing Alan Kay - it seemed to me that Erlang was in some respects closer to what Alan Kay intended for OOP than even smalltalk was. [0] [VIDEO]
>OO has been designed to model the world in the hope that this would make expressing business logic easier. OO was designed for multi processing by sending msgs between multiple processes[0]. Like nature does. However I do not find it suitable for most parallel computing work because race conditions. [0] [VIDEO]
Alan Kay once said (at an Erlang conference): "By the time the software engineering of a language gets in good shape, the language has become obsolete in terms of 'needed expressiveness'. [Therefore] in a 'Real' computer science, the best languages should serve as the 'assembly code' for the next generation of expression!" [1] He then proposed the hypothetical question: "What should Erlang be an assembly code for?" [2] I'm not sure if he knew about Elixir.. [1] [VIDEO] [2] [VIDEO]
I am quite interested to hear if anybody has any thoughts on the work of Valentin Turchin, the author of Refal. In an interview [1] conducted by Joe Armstrong, Alan Kay traced some of the key ideas of Erlang and Smalltalk to early papers by John McCarthy (Advice Taker), Carl Hewitt (Planner), Simula, and other work (including META 2, which apparently inspired OMeta). The theme here seems to be a favorite of Kay's: "late binding of meaning" used to build systems that scale just as well as biology. In his interview, Kay mentions Minsky's Computation: Finite and Infinite Machines , which discusses various models of computation. Now, Alan Kay has long looked to biology for hints on how to scale. (For example, in the interview I mentioned, he says that a computer is a "universal atom of meaning".) I mention all this because what I am reading of Valentin Turchin [2] is making me very tempted to add (English) expositions of his work alongside my reading of Minksy's Computation . Specifically, Turchin's work on Supercompilation [3,4], which seems to draw upon a tradition of cybernetics [5], seems to me to be in somewhat of the same spirit as that of Kay's, at least when you consider that the influence of cybernetics largely means that we take cues from biology and attach meaning to existing patterns in nature and technology alike in our endeavors to replicate its success (and of course couple our constructions with them in feedback loops, as in the elecrical engineering that largely
One of the most balanced, insightful and respectful critiques I've read on the topic. Brightened up my day reading it. Thanks. I've stated previously I'm an Erlang fan, for several of the reasons you've highlighted. I similarly don't believe it's a "global maxima". Perhaps the most saddening observation is the number of languages that have come after Erlang - intended for server-type loads - that haven't learned from and built on its strengths in concurrency and fault tolerance. I remember a separate discussion between Joe Armstrong and Alan Kay[0] where Kay posed the wonderful question (paraphrasing): "what comes next that builds on Erlang?" That's a tempting prospect. My personal wish list would include 1st class dataflow semantics and a contemporary static type system and compiler that's as practically useful as Elm's today. The key point is to build on what's been proven to work well, not throw it away and have to re-learn all the mistakes from scratch again. [0] [VIDEO]
I don't think I've watched it previously, and I don't have the time to now, but I have to imagine Joe Armstrong interviewing Alan Kay would at least touch on that (although from one comment it sounds like they didn't do more than that). [VIDEO]
I like Joe Armstrong's definition of OOP and what he did to make Erlang an OOP language: [LINK] Alan Kay went on the record to state that current OOP miss his point of OOP where message passing is the main point. Joe Armstrong's definition of OOP in the mailing list give a little bit more context on the other modern features of OOP that aren't truly needed. In Alan Kay and Joe Armstrong talk, Alan Kay acknowledge that Computer Science is pop culture where the past aren't learn from and why past mistakes are repeated. [VIDEO]
That is so sad, he was in his late 60s and it seemed like he had a lot of life left in him, talking about how software can get better and having a great (and sometimes snarky) outlook on the profession. Highly recommend his thesis (2003) and a few of his great interviews/presentations for anyone who isn’t familiar with Joe, it captures a lot of what he thought about and pushed for in his professional life. [LINK] [VIDEO] [LINK] [LINK] I hope his family and friends can find some comfort in how much he was appreciated and admired in the development community.
Not at all hard to believe that he was sincere. He seemed to be pretty starstruck when he was interviewing Alan Kay on stage just three years ago: [VIDEO] .
Well, hn seems to have collectively shit on this project in this comment thread. I agree with some of the negatives, but I don't understand why those would be the facets that stick out in this conversation. Yes, his site text explaining motivations are pretty bad. App control is nothing new. And many gestures are similar to other systems. But criticisms based on security, or the originality of his ideas or his general use of swipe gestures are just bullshit. It is backwards and naive to think that desktops are just fine, and computer programmers are historically the last to understand and embrace change (now here is where we could put some Alan Kay quotes, I'll start with his exasperation at our lack of a real CAD system for programming) > "we would have something like what other engineering disciplines have in serious cad system, a serious simulation of the cad designs and a serious fab facility, to deal with the real problems of doing programming. Ivan [Sutherland] just jumped there [with sketchpad]." [1] So lets talk about the interesting features he presented, and do ourselves the service of learning from this work. Panels: Top to bottom for content is DIFFERENT THAN ALL MAINSTREAM OSes. He is lamenting permanent status bars, the windows ribbon, the chrome tab bar and more with this feature. And he goes on to explain alternate features to replace that functionality he moved for this goal of more vertical space. He also displayed a number of situations regarding navigation
Concurrency.. the way i understand it, it is about making parts of the program run independent of each other and thus can run at the same time. But you might want to check out someone who knows better, like Rob Pike: [LINK] Yes, Erlang makes concurrent programs easier to write. Again it is better to listen to someone who knows more, like the creator of Erlang Joe Armstrong: [LINK] Any talk by him is great. Erlang, in how i see it, makes it easier to write concurrent programs because: 1. Parts of a program communicate with other parts by passing messages 2. Every variable is static, as in if you declare that A is 12 you can not change it to be 13 Joe Armstrong had a way of explaining these things so that even i could understand, so i do recommend watching every talk you can find of him. I also recommend the interview he did of Alan Kay [VIDEO] . But if you want to really get into concurrency i recommend a paper called "Communicating Sequential Processes" by C. A. R. Hoare. See [LINK] It's a "formal language" for dealing with concurrency. Go, and some other languages, implement a "CSP style" way of doing concurrency. Erlang doesn't do SIMD, nor GPU. However, it does world scale low latency systems. Of course, it's still up to the programmer to do everything correctly and Erlang is just a tool. I don't quite like *JS, so i won't say anything about that.
Checking out what Alan Kay has to say about it might help: [VIDEO] The way i see it OOP is about encapsulating/bundling data and the code that processes that data into one "object", that is isolated from other objects. The objects could only "communicate" with other objects by sending "messages" (data/events/something). Personally i don't like OOP, and think that focusing on data and how it's processed is a better way forward (CSP and such). It's.. a complicated matter.
The irony of course being that Erlang ranks as one of the most OO languages, if one accepts the Alan Kay concept of OOP, which is rather more behavioural than structural, and thereby entirely compatible with the functional paradigm and algebraic forms generally. See also [VIDEO]
One sort-of exception is Erlang (and anything else that runs on the BEAM vm, like Elixir). It doesn't match Alan Kay's vision exactly, because the message passing is done a bit differently (for example it's asynchronous), but creator Joe Armstrong called it something like "the best of functional programming and OOP". If you come from C++, Java, or other "OOP" languages, and look at Erlang, it's completely different than what you expect. In Erlang, the "objects" are less like mutable structs and more like functional mini-programs that can create new programs, pass messages, and fail as you would expect. To get some perspective on both of their perspectives, here's "Joe Armstrong interviews Alan Kay": [VIDEO]
>But Alan Kay doesn’t say “use Erlang”, nor does he go into any depths about what the desirable feature set is and what would make it work or would fail to make it work. Oh yeah? Then how do you explain this lecture where he says explicitly that Erlang should be the modern programmer's assembly? [VIDEO] In my experience, people who criticize Kay for being too vague or kvetching too pointlessly or lacking practical experience in computer science today almost always have not bothered to familiarize themselves with the vast majority of his work before deciding their opinion on it. It's hard to disagree with him that this makes us more like a pop culture than a profession after seeing it.
Indeed, here's a email from Alan Kay about how his perspective is about "messaging" between objects: [LINK] (edit: derp, this is directly cited in TFA) Also, I loved this interview/discussion between Kay & Joe Armstrong, inventor of Erlang, where the topic comes up again (because Erlang is also a lot about messaging between agents) [VIDEO]
Thanks, I'll check it out! When I implemented messaging for Abject, I used the Erlang model. I also added P2P support so objects can talk across the network. There is this great discussion between Joe Armstrong and Alan Kay if you haven't see it. [VIDEO] EDIT: Just checked your smalltalk implementation. Very cool! Do you remember the Open Croquet project in the early 2000s? Way ahead of it's time. I wonder if a modern version of that could work today now that we have good VR headsets.