Future of Coding - Structure of a Programming Language Revolution by Richard P. Gabriel

Episode Date: September 20, 2022

Today we're discussing the so-called "incommensurability" paper: The Structure of a Programming Language Revolution by Richard P. Gabriel. In the pre-show, Jimmy demands that Ivan come right out and e...xplain himself, and so he does, to a certain extent at least. In the post-show, Jimmy draws such a thick line between programming and philosophy that it wouldn't even look out of place on Groucho Marx's face. Next episode, we will be covering the Worse is Better family of thought products, so take 15 minutes to read these three absolute bangers if you'd like to be ahead of the game: The Rise of Worse is Better by Richard P. Gabriel Worse is Better is Worse, definitely not by Richard P. Gabriel Is Worse Really Better? by Richard P. Gabriel Links Phlogiston Theory Phlogiston the excellent chiptune musician. Bright Eyes - First Day of My Life, by Conor Oberst. Not to be confused with Conal Elliott, who introduced the original meaning of functional reactive programming in his work on Fran. Peter Gabriel - Games Without Frontiers Pilot: A Step Toward Man-Computer Symbiosis Jimmy's talk Paradigms Without Progress: Kuhnian Reflections on Programming Practice There's some sporadic discussion of Philip Wadler (who Ivan playfully calls "Phil"), specifically his claim that programming languages have some bits that are invented and some bits that are discovered. While we're here, make sure you've seen the best 15 seconds in Strange Loop history. Peter Naur's Programming as Theory Building Sponsors CarrotGrid — They don't have a web presence (weird, hey?) but they're working on an interesting problem at the intersection of data, so listen to the short ad in the episode to find out more. St. Jude Children's Research Hospital — Instead of running our usual sponsors today, we'd like to direct your attention to this humanitarian cause. September is Childhood Cancer Awareness Month, and our friends (can we call them that?) at Relay.fm are running a pledge drive. If you have any spare coins in your couch cushions, or a few million left over from your last exit, you'd be hard pressed to find a more deserving way to invest them. Donate here. Show notes for this episode can be found at futureofcoding.org/episodes/58Support us on Patreon: https://www.patreon.com/futureofcodingSee omnystudio.com/listener for privacy information.

Transcript
Discussion (0)
Starting point is 00:00:00 The Future I do have an introduction topic that I'm, you don't have to indulge me in, but that I am interested in talking about. I want to be meta here and talk about introductions. Introductions as in like the beginning of a show or introductions as in like the beginning of a relationship? Like, hey, I'm going to introduce you to this person or I'm going to, you know, there's this album I want you to listen to, that kind of thing. What are we getting at?
Starting point is 00:00:57 Yeah, no, I meant like podcast introductions. Okay. So it's very specific here. Yeah, narrow casting. Yeah, a lot of podcasts, right? And this is not one of them would start with something like, this is Jimmy Miller getting lost in broad daylight in Indianapolis, Indiana. And today we're going to be talking about Richard P. Gabriel's paper,
Starting point is 00:01:18 The Structure of a Programming Language Revolution. Let's code. language revolution. There's a lot of those sorts of introductions and you don't do that here. And I'm just curious to hear your thoughts on why there isn't like the typical start to the podcast read, you know, also though, I also want to just use this moment to praise you on uh how awesome the introduction to last podcast or i guess two podcasts ago was take off you hoser you you you have trapped me in a conversation where i have to talk about myself on my own show how dare you i mean you're the editor you're allowed to just edit anything out so that's true um in fact it's it's it's good that you've mentioned that i'm the
Starting point is 00:02:05 editor you've asked why the show doesn't begin with those kind of introductions i will tell you that this episode will begin with that kind of an introduction since you've just given me one which i i'm pretty sure you were doing on purpose but uh anyway i definitely don't have that written down and read it because I thought about the wording. Yeah, it definitely didn't sound like somebody reading a prepared statement. No, definitely didn't. Contextualized such that it would be a good joke that I put that at the beginning of this episode, which I in fact did.
Starting point is 00:02:41 Yeah, why does this show not start with that kind of thing? I have fun doing something different every time, and I don't really feel like it makes the show particularly fun to listen to, but it's something that if I don't do that, then I don't enjoy it. So at this point, live recording Ivan starts giving some motivations that give rise to the extreme formalism that I, editing Ivan, am responsible for. And I think that those justifications don't really stack up. I think the main reason that editing Ivan really likes to introduce these sorts of formalisms and surrealities and oddball eccentricities into the show is because it breaks with something that i see as a corruption of the podcast as a medium for playful communication that corruption is coming in the
Starting point is 00:03:34 form of hyper produced shows by teams of producers and editors and staff who are trying to bring big money into podcasting because they see it as sort of a life raft for what used to be terrestrial radio and satellite radio. And so they've come to take podcasting from what it was, which was this sort of oddball, freewheeling, underproduced, personality-driven form that rose organically on the internet. And they're turning it into something very commercial
Starting point is 00:04:06 and very accessible and very familiar, and I don't like that. I don't think that feels good to listen to. None of my favorite podcasts have that format. So at this point, editor Ivan starts ranting and raving about all the things he loves in good podcasts, and that doesn't feel very fair to me second-guessing Ivan, because it sort of presupposes that you, the listener,
Starting point is 00:04:32 who, it should be said, should never be referenced within a podcast. There should be no fourth wall breaking. That's against the rules. The listener shouldn't have to care about what Editor Ivan thinks makes a good podcast. The listener is here because they enjoy this podcast for whatever reason they enjoy this podcast and they enjoy whatever other podcasts they also like. And so they, you should just get to listen to whatever makes you happy. So Jimmy's question is poorly formed because it assumes that there's some sort of motivation for
Starting point is 00:05:01 doing things differently on this show, which of course there isn't. I thought this was a perfect paper to have this sort of meta discussion because this paper doesn't start the way a lot of these programming, it isn't written a lot of the way these programming papers you'd expect to be written. Yeah, throughout. Yes, exactly. And so it also has like two introductions. There's some fun playing with ideas here that was really reminiscent of what I see you doing with these introductions. So that's one of the reasons I started thinking about it, right? For me personally, that helped me understand why you do that.
Starting point is 00:05:36 And I'm sure there are some listeners who've wondered that. So I'm happy to dive into this paper if you are. Let's do it. Yeah, because I'm sure we'll come back to that. This paper is all over the place in the best possible way. dive into this paper if you are. Let's do it. Yeah, because I'm sure we'll come back to that. This paper's all over the place in the best possible way, and I'm very okay with this episode being all over the place in a similar way.
Starting point is 00:05:52 Yeah, at the same time, I think the structure of this paper is really interesting. So this is, as I think the introduction's already told you, the structure of Programming Language Revolution by Richard P. Gabriel, and it's really kind of two papers in one. And that's the like threads we're going to be pulling on
Starting point is 00:06:08 as we go throughout this is like, it's a discussion about object-oriented programming and mix-ins in particular, and the way they show up in these various systems and in the way they were described in a paper by, as they put it, two young and very smart computer scientists. But it's also a paper about a change in the way programming research is done and the way computer science research is done and what the implications of that are.
Starting point is 00:06:38 Well, and I think there's even a third level, which is even a step further removed, where it's thinking very big thoughts about what is the nature of science and is computer science a science in the way that natural science is and there's this sort of i i see a distinction between the middle level of sort of looking at not the computer industry but like the institutionalized world of computer science and computer research and computer engineering and conferences and papers and that sort of thing. There's this like mid level, but then there's also this like super high level of, you know, what is science and how does our theory of what science is evolve and what can we learn from looking at how other sciences have
Starting point is 00:07:22 evolved over time and how does that relate to what we're doing with computers i love also the abstract here right so this is the paper starts with the the most simple abstract you've ever seen which is engineering often precedes science incommensurability is real that's the whole abstract that's the whole abstract. That's the whole abstract. And not only that, like the first page of this paper, it's the most interesting layout that we've encountered yet. Like you've seen research papers, you know the format, they have a certain look to them. This one, its title is like a little concrete poem in the top right where it says, The Structure of a programming language revolution and programming language revolution kind of descends down in a in a column and so it's this little l-shaped title in the top right corner sort of hugging richard p gabriel
Starting point is 00:08:19 ibm research redwood city california usa um in the middle and then underneath that he's got his email addresses rpg at and then a little curly brace to indicate uh the set membership or something like that and then the the two different domains you can put rpg at in front of and then in the top left corner a quote from uh borges saying i don't want to die in a language I can't understand. And then further down the page, there is the front page of that paper by two young and very smart computer scientists that Jimmy mentioned a moment ago.
Starting point is 00:08:57 That whole first page of that paper is embedded in kind of like a tea-stained, yellow, faded art style. And then the actual first paragraph begins with a giant drop cap but instead of being a letter it's just this squiggly line and then the paragraph separators are these beautiful squiggles like it's just it's a beautifully typeset paper oh yeah and then and then i'm gonna spoilers jump ahead a minute here. The beginning of the first real section after the intro is titled engineering, comma, a path to science. But the comma is surrounded with parentheses.
Starting point is 00:09:34 So he's already doing like, oh, here's a here's a here's a section title with a double meaning. Is it engineering a path to science as in we're going to do engineering work to create a path to science or is it saying engineering which is a path to science um there's just like so much playing with the format in this paper that i i just after augmenting human intellect it's like such a breath of fresh air to have somebody thinking about presenting their what is basically a blog post with so much consideration and so much regard for like different levels of communication and presentation and all that it was it was very very enjoyable to read just at an aesthetic level i think in general richard p gabriel his papers are just very different in a very refreshing way, right?
Starting point is 00:10:25 And the topics he's talking about and the way he talks about them, I really love, even if I don't always agree with everything, it just, they make you think. They make you step back for a second and reconsider the things that you're doing. I just love, not only do we have this stylistic difference on the first page, we also get this little paragraph to kind of like usher us into the paper. That night I pulled the paper down from the ACM server and read it while outside enormous
Starting point is 00:10:55 puff clouds dwelled overhead, lit from beneath by the town of Porto de Galinas on the Brazilian coast. The smells of burning sugar cane and bitter ocean pushed into my room. Yeah. So I just love that introduction because what paper do you see in a computer science setting that gives you the look at the author and what they're doing as they're doing their research, right?
Starting point is 00:11:24 Like, I just think this is, it has that little bit of flavor to it. It really tells you what sort of paper you're going to be encountering and puts you in the right state to kind of understand his thought here. And it might seem like the descriptive language, for instance, outside enormous puffed clouds dwelled overhead. That sort of flowery language might seem like it's indulgent, but it actually serves a purpose in that he returns to this moment several times throughout the paper. And so by putting in a passage that is very playfully written that feels not in keeping with the typical style
Starting point is 00:12:06 of an academic paper of a computer science paper, it really sticks out in your mind, but he uses the fact that it sticks out in your mind later on in the paper. So it's not just indulgent, it's done with a with a really smart purpose. Yeah, absolutely. Okay, so we've kind of talked about the stylistic thing here. but I think we should dive into this paper. Engineers build things. Scientists describe reality. Philosophers get lost in broad daylight. Which is, of course, a throwback to the intro of this episode.
Starting point is 00:12:37 Ricky didn't know that he was going to be describing the intro of this episode when he wrote that passage, but in fact... Absolutely. Yeah. And so this is how we're ushered into this essay. Seemingly...
Starting point is 00:12:49 We're introduced, I guess, first to this paper. And this paper is a paper called Mixed-In Based Inheritance. That's a paper written by the two young and very smart computer scientists we keep referencing. Gilad Bracca and William Cook. And this is a
Starting point is 00:13:05 a paper that they wrote in 1990 i think it's it's a really pivotal pivotal it's a really pivotal thing a pivotal thing that uh that this uh structure of a programming language revolution paper by uh gabriel is going to be discussing and so i think it's going to be a little bit tricky we probably won't have this perfect but we're going to be discussing. And so I think it's going to be a little bit tricky. We probably won't have this perfect, but we're going to be talking about two different papers at the same time. One is the mix-in paper and the other one is the, I just, I'm going to call it the incommensurability paper. Yeah.
Starting point is 00:13:36 Just because that's, I mean, that's how I've been thinking of it this whole time. It's, it's the big, biggest word in in the abstract which obviously means that's the the thing that Should have been the title so yeah We've got the mix in paper and the incommensurability paper mix in paper by Braca and cook and the incommensurability paper by Ricky Gabriel And this mix in paper were told it Immediately laid claim to being the first Scientific paper on mix ins and so this is actually kind of the the key point here is that we're going to have this discussion about engineering about science and
Starting point is 00:14:12 we're going to contrast this mixin paper which is the first scientific paper on mixins with all of the things that came before it and these these are things like beta, small talk, flavors, and CLOS. C-L-O-S. The Common List Object System. The Common List Object System. The Common List Object System. Yep. That's what we're going to get is this contrast between these two things.
Starting point is 00:14:39 And spoiler alert, Richard P. Gabriel thinks that the scientific paper kind of missed the point. Yeah, this is going to be hard to summarize, I feel like, because it lays out the argument in a slightly circuitous way. So I'm going to be interested to see if we actually manage to make it through this in a kind of
Starting point is 00:14:59 linear fashion along the paper, or if we have to keep zooming out and saying hey, spoiler alert, here's where we're going, because I almost feel like it would be worth explaining, like, like spoiling the punchline a little bit, just because that's a more direct way. I think that's honestly probably good is to just say up front, you know, what's what's going on. And then we can kind of dive into that and see if we can kind of justify it. So basically, there's this idea of incommensurability. And incommensurability comes from Thomas Kuhn. And Thomas Kuhn was looking at the way in which
Starting point is 00:15:32 science evolves over time. And he found that these old theories of science and these new theories of science might use the same words, but meant very different things. And there was actually no easy way to translate between them. And Richard Gabriel thinks that that's what we're dealing with now. That the old way of doing things, his way of doing things, the systems way of doing things, as he calls it, has fallen by the wayside. And there's this new paradigm of the language way of doing things that is exemplified by this mix-in paper from Braca and Cook that kind of missed the point of the old paradigm. This paper shows that they might use the same words, mix-ins, but they mean these vastly different things by it.
Starting point is 00:16:27 I think it comes across in the paper that he's really concerned about this. I think that that first quote is actually kind of this anxiety that Richard Gabriel feels about the fact that the work he's been doing for so long now, he's now living in a world where he can't even understand things commenting on the work he did earlier in his career. Well, and this this paper is written
Starting point is 00:16:51 fairly recently, right? Like it's in the 2010s. When this paper, the incommensurability paper, yeah, 2012, it laments a bunch of things that happened in the 90s. So it's it's not even that there's a that there's a worry about the way things are going in so 90s. So it's not even that there's a worry about the way things are going in so much as it's sort of like somebody who has been worried for several decades now about what happened and they finally found a way to articulate
Starting point is 00:17:15 why things happened. And even very late in the paper, Gabriel suggests that Bracca and Cook could have realized this at the time. that all the pieces were there. And the idea of incommensurability as a disconnect between old practices of a science and newer practices that are superseding them is something that was in the popular science culture in the 1990s. So if the stars had aligned, they could have had this realization and maybe others in the industry could have had this realization and avoided some really heartbreaking things that happened in the 90s that we'll get to, I think, when we get to
Starting point is 00:17:57 them. I wanted to read a quote from Kuhn where he describes what incommensurability means to him, just because this is a quote from the paper. And so I think it's, I get to use the little radio voice and I like to use the little radio voice. Incommensurability is a notion that for me emerged from attempts to understand apparently nonsensical passages encountered in old scientific texts. Ordinarily, they've been taken as evidence of the author's confused or mistaken beliefs. My experiences led me to suggest instead that those passages were being misread. The appearance of nonsense could be removed by recovering older meanings for some of the terms involved, meanings different from those subsequently current. And so what he's getting
Starting point is 00:18:45 at here is this, and I really want to nail what this word incommensurability means, because it's a really cool concept, and it's going to be relevant to a whole bunch of things we talk about. It's this idea that when you're reading some old scientific work, and it gives some examples in this in this incommensurability paper of um this this substance called phlogiston am i pronouncing that right phlogiston phlogiston phlogiston i'd never like i've i'd heard of this substance before because i i uh there's a chip tune musician who i think uses it as their as theirias. And that's the only case where I've heard of this term before. But it's this old idea of how fire and combustion worked that sort of predate what we now know of as thermodynamics.
Starting point is 00:19:35 And so I also want to read this quote of the paper, and then I'm going to talk about it as the example. So here's sort of a couple levels of quoting from the incommensurability paper. One good example is the steam engine. Engineers began its development while scientists were making their way from the phlogiston theory of combustion to the caloric theory of heat, both today considered hilarious. Phlogiston theory was an attempt to explain oxidation, fire, and rust. The phlogiston theory held that combustible resources contain
Starting point is 00:20:06 phlogiston, a colorless, odorless, tasteless, and massless substance which is liberated by burning. A phlogisticated substance contains phlogiston and is dephlogisticated when burned, leaving behind its true form, calx. And then here's a quote within the quote. And this quote is from James Brian Conant in an overview of phlogiston theory, the chemical revolution of 1775 to 1789. Substances that burned in air were said to be rich in phlogiston. The fact that combustion soon ceased in an enclosed space was taken as clear-cut evidence that air had the capacity to absorb only a definite amount of phlogiston. When air had become completely phlogisticated, it would no longer serve to support combustion of any material, nor would a metal
Starting point is 00:20:56 heated in it yield a calx. Nor could phlogisticated air support life, for the role of air in respiration was to remove the phlogiston from the body. So there's this scientific theory from the 1700s that is patently absurd when you look at it through a modern contemporary scientific lens of today. And this idea of incommensurability is suggesting that we shouldn't do that when we're encountering an idea from a different era we should try very hard not to look at the terms that it uses and the language that it uses and the and the and the ideas that it's exchanging with our modern definitions because if we do that we will lose a lot of the nuance and subtlety and meaning of that older work because it's using words that are still used today, but it's using them in a different way. And that the
Starting point is 00:21:53 meaning of these words has changed over time so much that our current understanding of what these words mean doesn't match up with how they were used back then. And we might look back and see it using these words in what feels like an incorrect way. And this phlogiston example is a little bit silly because it's deliberately very wrong, but this is an idea I encounter all the time when dealing with music theory or art theory or even computer science, if you can believe it,
Starting point is 00:22:24 where there will be an older work that uses terminology in a way that's different from how we use that same terminology today in fact here's a great computer science example functional reactive programming frp we all know that story that in the 90s um uh what's his name uh connell Elliott. Connell Elliott. Thank you. I was thinking Connor Oberst, singer of Bright Eyes. No. This is the first day of my life. So singer of Bright Eyes,
Starting point is 00:22:53 Connor Oberst wrote this paper when he was at Microsoft about how sad it is that, how depressing and how it makes you cry because animations were using discretized frames instead of continuous functions over the real numbers. And so he wrote this thing about if you're going to do animation, use real numbers, don't
Starting point is 00:23:11 use integers, use things that can be evaluated as functions rather than like discrete measurements of data at specific frames, right? That's what functional reactive programming means. But nowadays, if you talk to people about functional reactive programming they will say oh no it's this idea of like making web you know front ends and back ends that are these streams and these uh functions that you can use that take and return streams and it's these you know stream combinator functions and that's what functional reactive programming means it has nothing to do with animation and continuous real numbers
Starting point is 00:23:48 rather than discrete individual frames, right? So we have two different meanings for the term functional reactive programming, such that Conal Elbiot now says that he wishes he had used the term denotative design to describe these ideas because that's closer to what he was getting at as a way of sort of saying like, look, you know, all the all
Starting point is 00:24:10 the react kids have taken my term functional reactive programming and have given it a new definition such that when people read the old functional reactive programming papers that I wrote, they're very confused and it doesn't make sense. And so this situation where the contemporary meaning of a term is different from a past meaning of the term puts you in this position where you can read the old papers and think that they're worthless or think that they're wrong or think that they're poor. That's where the idea of incommensurability comes in, especially in the context of computer science is that this mixin paper by bracha and cook is looking at these
Starting point is 00:24:52 older object systems from lisp and from small talk and i'll leave the details of how it commits this sin for us to get into in a minute but the sin it commits is that it has one set of thoughts about what mix-ins mean. And it looks at these old papers, assuming that they mean the same thing when they say mix-ins, and they don't. That's kind of where Gabriel bases his argument for how incommensurability is at play here. That contemporary 1990s ideas about what mix-ins means aren't matching up with the earlier 1980s and 1970s ideas about what mix-ins means. That's like one of the cruxes of this paper. Yeah, I think that's a fantastic...
Starting point is 00:25:40 I'm glad that you read those quotes. I want to... Just because I'm a nerd who really likes philosophy of science, I actually gave a talk on Kuhn and programming before I knew about this paper. I was into incommensurability before it was cool. But I think there's another way that Kuhn, we don't really see in this paper, but I actually think it's really important that Kuhn emphasizes. So you get like ridiculous sounding theories like phlogiston and caloric, but you also get theories that we think of as like approximately correct, like Newton versus
Starting point is 00:26:12 Einstein, right? That like Newtonian mechanics is just an approximation of Einstein. And Kuhn wants to even tell us like, we can't do that. That to do that is actually to not understand what Newton was trying to accomplish. Newton wasn't trying to be an approximation of anything. He wasn't bracketing off, you know, things near the speed of light or with very heavy masses, etc. He was putting forth a total theory, right? A complete theory. And if you actually go back and read newton and try to pretend that it was just an approximation of eisenstein you're going to find yourself very confused that there's going to be a bunch of stuff missing and so i think we could also be tempted here to read the
Starting point is 00:26:57 early mixin papers as just an approximation of what we now know mixins really are and i think that also like like, instead of thinking of them as ridiculous, we just think, ah, they were close. And that actually also would be to miss the substance of those papers. And I think one of the things that computer science does, and this Richard Gabriel paper describes this phenomenon a little bit, and we'll hopefully come back to this in a richer way in a minute. But in a superficial level, one of the things that happens in computer science is we generally think that as time progresses, the theories that emerge and the practices that
Starting point is 00:27:35 emerge are encompassing generalizations of the things that came before, or they're more correct or more workable or more versatile or in some way more complete that we have this sense that as time goes on there's like a march of progress effect where later theories are able to encompass earlier theories and that we're able to sort of stand on the shoulders of giants and so this paper from from Braca and Cook, to take Gabriel's articulation of it, and to be fair, I haven't read the mix-in paper, so I don't know exactly whether or not this is a charitable interpretation of what they're saying, but assuming that it is, that they're positioning their formulation of mix-ins as something that can subsume these earlier articulations from
Starting point is 00:28:24 Smalltalk and from Lisp from these earlier articulations from small talk and from lisp from these earlier works and that's a separate matter from the fact that they claim that it's the first scientific paper about mix-ins that's a that's a separate dimension of presumptuousness that we will drill into in a minute but just there's this feeling that in in computer science like natural science later theories are able to cover in totality earlier theories and that in in computer science like natural science later theories are able to cover in totality earlier theories and that is in fact not the case and that's not the case always in natural science as we know from einstein's relativity versus um quantum mechanics right there's that need for a grand unified theory because we have these two theories that aren't total and so we're looking
Starting point is 00:29:03 for a total theory you know that's the exception that kind of proves the rule that in general later theories are able to completely subsume earlier theories and computer science being a science makes us feel like that's also the case when in fact that is not at all the case and it's probably not even close to being the case that earlier theories and later theories are independent in part, and this is something that the incommensurability paper seems to argue, in part because computer science is not a natural science. Natural science is about looking for this singular truth about the nature of reality, and that better theories are able to be a closer approximation of the nature of that
Starting point is 00:29:46 truth and that as that science is done it doesn't actually change that ground truth whereas in computer science as the science gets done there's this interesting mix of discovery and invention and that that that is a huge point of debate. And I have many feelings about that, you know, how much of computer science is invented versus discovered. But to the extent that any of it is invented and not discovered, later science is going to be a reflection on the materiality of computers as they exist in that moment, and that later science is going to change that material. It's going to take what we know of as the computer and change it into something new.
Starting point is 00:30:32 And the science that follows isn't going to be looking at this immutable computer that has existed throughout all of time. It's going to be looking at the computer that is as it is now, as it was changed by the earlier science and the earlier engineering. And it's this constantly shifting thing And so it's sort of a mistake to assume that because we call it computer science You know with the s-word that the thing being studied is as immutable as the universe that we study in natural sciences
Starting point is 00:31:01 And so that that leads us to this assumption that later computer science is going to be encompassing earlier computer science, when in fact that is arguably not at all the case. Yeah, and he puts kind of this belief that he has about the relationship here, I think pretty succinctly. I believe engineering and science are intertwined. And for programming languages
Starting point is 00:31:22 and software creation techniques, it is often the case that engineering precedes science, and it's very easy to see it. And I think this is one of the key points that he gets us into this paper, is that engineering is, in natural science, very important. You know, you read this idea about phlogiston and caloric, and he says that even during all of this time of these incorrect theories, as we would put it today, the steam engine just kept going. The steam engine was already being created. The steam engine kept improving. And it didn't actually care what the theory of how it worked was, it worked. And in the same way, and maybe even to a greater extent, as we're doing programming, as we're building systems, we're creating that. Engineering is what is forging ahead, and science is what's looking back. One of the things that both the mix-in paper and the incommensurability paper discuss is this emphasis on good design.
Starting point is 00:32:26 One of the failings of the mix-in paper is that it assumes that what makes for good design are things that make for good design in a programming language. And the things that the earlier Smalltalk and Lisp papers assume make for good design are what make for good design in a programming system. And so this comes back to that point that Jimmy made earlier about a disconnect between the mix-in paper and the earlier object system papers. The earlier papers are looking at programming systems and just very briefly a programming system is sort of what we think of today as live programming. There are a bunch of other terms that we use for it. I think for the same reason that poor Conor Oberst had to rename his idea from functional reactive
Starting point is 00:33:11 programming to denotative design, that programming system is a term that is so loaded with multiple meanings that we can't really use it nowadays the way we used to. And so we now call it live programming. And I'm being a little bit fast and loose with the terminology oh dear i'm perpetuating the problem um a programming system is is something where the program is always running that there's a repl or there's some environment where there is live living code it's it's continually executing and what you are doing is you program is you are introducing changes to that live running system. And so any objects that exist in that live system are transitioned into some new form. And so you need semantics around how do I take my existing objects and turn them into new things without losing them.
Starting point is 00:33:58 Whereas the programming language approach is I have a source code in text and I have a compiler and the compiler turns the source code into some compiled program and then I run the compiled program and the compiled program runs until it stops. And that divide between those two schools means that what counts as good design is different depending on which approach you're working within. If you're working within the programming language school, when you encounter an issue, you just shut down your running program, throw it away, throw away all its state, go back to your source code, tweak the source code, and then recompile and rerun it. And that means that you emphasize certain things, you emphasize correctness in a different way, you emphasize, you know, all the things that we look at when we look at what make the good tools so that you can do good programming design, tests and types and, you know, patterns
Starting point is 00:34:56 and all that kind of stuff. They are expressed in a certain way when you're looking at a pre-compiled programming language where the expectation is you throw away your state whenever you need to make a change. Whereas in the programming systems world that is, at least in the framing of the incommensurability paper, the programming systems world is a little bit older. That one, what tools you have that make for good design are different. It's not about testing and types and all all that in the same way because you are instead more concerned about not correctness in the sense of is the source code correct but correctness of the sense in that is the running system internally consistent and is it able to
Starting point is 00:35:39 be transitioned into new states and are the the messages that the different objects in that system able to send to each other the right messages and and how does it work as a living evolving organism as opposed to something that is like the static source text is the thing that is of paramount importance and the source of truth? And so that kind of disconnect there between the earlier papers that are about programming systems and the later papers that are about programming languages That's another one of these It's another one of these huge aspects of this this actually relatively short incommensurability paper that like that opens up so many cans of worms because what is meant by good design
Starting point is 00:36:20 differs depending on which side you're on so that's that's that that's an incommensurability there is that Bracca and Cook assume that what good design is in the world of the new is the same as what it was in the world of the old. And they miss that there's actually a difference there that means that good design means a different thing on each side yeah to make this uh this rabbit hole go deeper i i agree with everything that you've characterized as like that's what uh richie see i did it now haha that's what richie uh thinks is the case here right like that is what he that's where he focuses his difference on i actually think he's misplaced it i i i think that there is something true to that right there's something about language versus system but he discards he says like he used to think it was engineering versus science and he discarded that and realized it was more narrow than that it was systems versus language language. But I don't know. I
Starting point is 00:37:26 think he might have been more right on this initial thought of engineering versus science. And the reason I want to say this is imagine that instead of focusing on languages, on these formal grammatical structures, the modern computer science had focused on systems evolving over time and had thought about the correctness properties of you know you can imagine like poor triples or something you know like the before the preconditions the post conditions and had specified formally all the ways that this system should work. Right? I don't think Gabriel would have been any happier with that.
Starting point is 00:38:14 I don't think he would have been like, ah, yes, you're focusing on systems and how they adapt over time. I'm all good with it. I think what he really is getting at is what he puts in this paragraph here. He's talking about this differing opinion between whether engineering precedes science or science is discovering all the things and engineering has to just do its bidding, right? So he says,
Starting point is 00:38:37 what's the effect of these differing opinions? What happens when engineering is reduced to science's handmaiden in the fields of programming languages and software, and in computer science in general, the effect has been to separate engineers from scientists and put them in a little hierarchy. Engineers are for the most part left out of the lofty scientific academy. I think this is what he's really lamenting in this in this paper and i do think this paper is kind of a lament it is the fact that as practitioners as builders as engineers we've kind of been left
Starting point is 00:39:14 out we're not writing papers ourselves we're not included in the scientific discourse and you'll see people now i if you go on twitter writes the certain sections of twitter you'll see people now i if you go on twitter writes the certain sections of twitter you'll see people saying like if run-of-the-mill programmers would just listen to what the scientific research is what computer science has told us we would solve all these problems and we wouldn't have a big deal and to me yes he's right that the disagreement in the Mixon paper and the incommensurability paper might be about these systems versus language thought, but that's such a minor point, and I think the bigger one is this starting point. There's a starting point of do we build something,
Starting point is 00:39:58 or do we describe something and only later build it? Yeah, like that that almost like a class divide between computer scientists and computer engineers. Like that, when I was reading this, and he gives some examples of like, he took a, he,
Starting point is 00:40:18 Peter Gabriel took a break from writing computer science-y kind of stuff for a couple of years in the early 90s. And when he came back in the mid-90s and tried to submit papers to conferences and participate in the community again, he noticed that all of the conferences that he used to participate in had been rebranded and were no longer about Lisp and were no longer about the practice of programming, but they were instead now about theory and they were about the science and they were about sort of a more academic research kind of focus. New conferences were created to focus just on the
Starting point is 00:40:57 practice and they were treated as sort of a lesser side channel for people who were not as relevant, perhaps. And I went to university for computer science in the mid-2000s. But when I was there, something I noticed was that class divide was still in full tilt, at least in my university. There were all these courses you could take, and there were the different degrees you could be working towards. And so there were all these courses you could take and there were the different degrees you could be working towards. And so there were some classes that were just for computer science and there were some classes that everybody takes, whether they're doing hardware engineering or software engineering or computer science.
Starting point is 00:41:36 And so one of the things that we would talk about as undergrads was, hey, what's the difference, right? Why is this class just for computer science and that class is just for software engineering? what's the difference, right? Why is this class just for computer science and that class is just for software engineering? What's the difference? And the thing that we got from our instructors and the thing that we got from our older peers was this like sneering condescension
Starting point is 00:41:57 towards software engineering because that's what you would study. That's what you do if you weren's what you do if you weren't particularly gifted, if you weren't particularly mathematically or scientifically inclined, if you just were going to get a job as a code monkey writing Java. It's the thing that you do if you're just looking for a job with a computer and not something that you do if you're actually passionate about what a computer is and what it means. And the people who are going to go on and have great illustrious careers and Are going to be important and are going to do the fun part of programming work
Starting point is 00:42:31 They're all the ones in computer science and the computer engineering is like this this lower Class that we don't interact with except when we have to and of course, this is all patently absurd This is preposterous. It's ridiculous. It's so hurtful and it's so pointless. It's one of these cases of culture kind of boiling over and spoiling what would otherwise be a wonderful opportunity for people with different interests to cross-pollinate you know like like the things that the software engineering side was actually focused on were things like thinking about good design and thinking about how do you build a system whereas computer science was very much
Starting point is 00:43:18 like head up its ass sort of the kind of the researchy stuff like type systems and and lisp and all that like all that you know wanky kind of nonsense that nobody should be interested in because it's terrible that little aspect of there being a culture war here that is yet another thing that this very short paper digs into and opens up a rabbit hole about yeah i i knew that we would run into this with the paper so like to be clear as i'm like looking through my notes all the things we've talked about are kind of like scattered as little observations here and there right like they're they're all in this big frame story that we haven't really even gotten the details of about mixins yeah and these differences and then just
Starting point is 00:44:03 like sprinkled in you'll get little quote here about engineering versus science little quote there about coon right and it it doesn't translate super well to a podcast but as a paper i loved it yeah like i loved that you were it it was like comedic relief right in some ways like i'm not saying it was funny but just that like you're in a very serious moment and then all of a sudden like now you get those little thoughts interspersed in and it kind of keeps you back in to the the technical detail that he wants to talk about here a part of this paper that we haven't really talked about at all is that it has lengthy technical discussion of the difference between uh different object
Starting point is 00:44:47 systems in small talk lisp and then some language based programming as opposed to system-based programming and those technical discussions like it it it almost throws in these sort of you know oh hey that makes me think kind of asides that launch these huge you know thoughts about class war or about is computer science a science in the way that natural science is a science like these you know these huge thoughts just yeah like jimmy said they come out of little little uh palette cleansers in between okay let's roll up our sleeves and talk about uh about the way um objects work in this one particular paper that built this you know this system called flavors right we're going to talk about flavors a whole bunch if you if you did a like a heat map of how much of this paper is devoted to these big big ideas and how much is
Starting point is 00:45:41 devoted to object systems and remember this is a short paper. It's like, I'd say 60 to 70% about object systems. And we haven't talked about that at all yet. I find that I find that very funny. Yeah. And I guess we could, you know, we could try to get into that a little bit. I don't know how much of like detail we want to get into. And, you know, we have like quotes from the object system the common list object system specification about exactly how these things work but i do think it's important to kind of get the flavor of disagreement going on oh boo boo that was actually an unintentional pun uh So that makes it good, right? I think that's the requirement for a good pun.
Starting point is 00:46:31 All right. So here's my way of specifying this kind of disagreement. Mix-ins are not this one monolithic idea in Richie's mind, uh in richie's mind right in gabriel's mind right there they're kind of a term that was developed over time an idea that like different systems kind of took different stabs at and kind of continued to accrete and add new features onto and so it's not as simple as we can go look at the definitive definition of mixins, but we can kind of look at all these various systems, what they were doing with mixins, and what they had in common. And that can kind of give us a good general idea of what mixins were. And his idea is that they're orthogonal code. They're code that you can write at the edges,
Starting point is 00:47:28 and once you combine things together, you get functionality that emerges from all of these parts interacting together. And so the example that's given is about these before and after methods, that you can say before this method is called please do this or after this method is called please do that and being able to do this you can compose together all sorts of
Starting point is 00:47:55 interesting functionality that you wanted to be orthogonal you didn't want it to be in one place you wanted lots of different things to be able to mix in and combine and use this functionality together. And so that's Gabriel's idea of a mix-in. And then we get to the mix-in paper's idea about mix-in. And I will admit that I don't quite have as good of an understanding here of what that one is, because that's not most of the text here. Yeah, it's not really explained. Yeah, what we get is kind of the opposite. We see that their definition literally excludes the definition that Richard wants to give us here, right? So we get a quote from Bracca and Cook saying, In class, locally unbound uses of call next method are clear indications that a class is a mixin.
Starting point is 00:48:52 And Gabriel goes on to tell us that you actually can't use call next method in before or after methods. So that this clear indication is exactly the opposite. What Cook and Bracco want to include as mixins literally excludes the very idea of mixins. And what their idea seems to be is something about the way in which inheritance works. And that's really the primary mechanism here is this kind of way of doing multiple inheritance
Starting point is 00:49:26 that completely ignores these before and after methods that Gabriel sees as core features of mixins. The focus on multiple inheritance is worth pushing on because the objection that Bracca and Cook have to the way that older systems do mix-ins stems from in part at least this is as you know i'm parroting peter who's parroting braka peter you mean richard oh i mean uh peter peter gabriel richard p the p stands for peter it must it must there's only one p gabriel and it's peter gabriel come on aha peter gabriel is definitely not a different person no no no so pd um in his paper uh if is
Starting point is 00:50:17 parroting braka and cook you know this is several uh games of telephone happening. Uh-huh, exactly. But the issue that Braca and Cook bring up is that multiple inheritance, you want it to resolve statically. source code and I declare that I have some superclass in a class that I'm creating, what exact methods are going to be visible from this class that I'm writing? And what is the exact chain up the class hierarchy that I will be climbing as I am searching for a method? Like as the program is running and it searches for a method on this class, what are the exact superclasses that are going to be searched for that method? And the way that these older Lisp and Smalltalk and other mix-in ideas worked, it was not so static. Because of multiple inheritance and because of the way before and after worked, you wouldn't know at compile time what your exact set of superclasses
Starting point is 00:51:24 would be. If you're writing a class in Smalltalk or whatever, and I'm going to get this wrong, but this is my best sense of it. If you're writing a class in Smalltalk and you declare that you're extending some superclass or you're mixing in some abstract base class to just mix all sorts of different generations of terminology in here, because of the before and after, there might be other classes that are injected into your hierarchy that you will encounter as you climb up the chain. And so you looking at the source code of your small talk or your list program don't know what the truth of the class hierarchy will be. Because the truth of the
Starting point is 00:52:03 class hierarchy exists in the running system at runtime and this is where that systems versus languages approach comes down that braka and cook want the truth to be known at the time you're writing the source code before you compile and the earlier lisp and small talk people want the truth to be known at runtime in the running system and the and the source code does not need to be the source of truth and that difference leads to this misunderstanding on the part of bracha and cook this alleged misunderstanding about how mixins worked in these old systems and what they were good for why they were bad um and why why they weren't really worth considering and that sets them up to say okay you know those old mix-in systems had these these issues where they would encourage bad design and these this
Starting point is 00:53:00 new formulation of mix-ins that we're introducing here encourages good design. Yeah, and what Braca and Cook criticize about the doing it this way is that there's a violation of encapsulation. I think this is one of those incommensurability ideas here where encapsulation means very different things to Cook and Br braca versus richard gabriel because of these systems ideas that encapsulation is about the text and whether you're being accurate to the text right whether you you're really following what the text said and not letting other things get in and access stuff that they're not supposed to. And for Gabriel, it's really about is the system running the way that it ought to? And is the system stopping things from having access that they shouldn't have
Starting point is 00:54:01 access to? Maybe that was not, not clear at all, but I've encapsulation is one of those really fuzzy concepts. Yeah. having access that they shouldn't have access to. Maybe that was not clear at all. Encapsulation is one of those really fuzzy concepts. Yeah, almost as though it's subject to incommensurability, where depending on what paradigm you're in, it means something different.
Starting point is 00:54:20 Yes, completely agreed. Yeah, I think, I don't know if there's's i don't know if we should dive into any more of these details here i will call out uh pilot as one of the papers that was pointed to that i just think is a really great paper and really does give you kind of a better flavor in my mind of what the system's idea of mixins would look like, mostly because it doesn't have any of the trappings of what we think about in things. I think it's really easy to take Common Lisp and consider it just a language
Starting point is 00:54:52 and not think about it as a system. Whereas Pilot, the idea was you were writing Lisp, yes, S expressions, et cetera. But instead of having an editor where you opened up a definition, and then were able to edit it, you actually like your main mechanism for editing your program was to have a dialogue with the running system. And the dialogue actually isn't in Lisp syntax, because there's this like meta level language over top where you can write your own syntax.
Starting point is 00:55:28 And so it would be like, like the most of that, that dissertation is actually walking through an example dialogues to solve problems. And so you're always saying like, before you return, ensure that you have an answer, right? Would be a very simple example. And then you run the program and you don't have an answer at the end because you haven't assigned the return value. And it like throws an error. It tells you like, oh, we didn't find your advice here. We weren't able to fulfill it.
Starting point is 00:55:58 How can I follow that advice better? It's this very interactive dialogue-based system. And there is no idea of the text because you're not writing in files. You're not ever opening up files. You can't open up files. You're writing procedures and referring to those procedures as entities in your system. So I'd really recommend checking out the paper in general. And I think it really actually gives a much better idea of this systems approach. It's 1960, I think. And so a lot of like the the kind of things we have established today just didn't exist. And so it's it's a very interesting take on a system, as opposed to a language. for taking your coordinate data and transforming it into visual representations of abstract information.
Starting point is 00:57:06 You can then use those abstractions to communicate with the temperature and humidity sensors in your garden, and then share that data with your local port authority. Carrot Grid gives you all the tools you need, like CSV, JSON, hoe, shovel, pin, hook, ball, rope, and pulley, so that you can load and unload all your platforms immediately upon arrival at the nearest port. With Carrot Grid, you'll never have to wonder if your flotilla is arranged diagonally or orthogonally. Carrot Grid's award-nominated customer support is available outside of major urban centers around the world above the 49th parallel. To help with any of your questions, receive your comments, feedback, pitchforks, and snuggles. I've been a carrot-grade user for 45 minutes and my fingernails have never
Starting point is 00:57:49 been tastier. My thanks to Carrot Bread for helping bring us this disquieting noise. Let's code! So in lieu of our usual sponsors today, I wanted to do something a little bit different. It is September 2022 as I record this, and September is Childhood Cancer Awareness Month. There's a podcast network called Relay FM, and I listen to a lot of their shows. And every September, they do a big pledge drive for St. Jude Children's Research Hospital. If you listen to any of their shows, you've probably already heard the spiel, but for those of you who don't, I'll repeat it here because, hey,
Starting point is 00:58:36 this is a podcast. Raising awareness about St. Jude is the thing to do and And so I'm going to get in on that also. The way that it works is, if you are in the US, and you have a kid, and your kid gets a cancer diagnosis, this can be the sort of thing that is financially ruinous for your family. Because in addition to treatment, you often have to travel to get medical attention, and you have to deal with all of the new strains and stresses that come about as a result of this very traumatic thing happening. And so St. Jude will, free of charge, take the entire family of the kid who receives the cancer diagnosis and house them and pay for their food and take care of all of their basic needs so that they can focus on being a family while their child receives
Starting point is 00:59:35 treatment for the cancer free of charge they are a research hospital so a large part of the value that they create in the world is in sharing what they discover about treatments for childhood cancers with doctors around the world. And thanks to work that St. Jude has participated in, the survival rate for childhood cancer has gone from 20% to 80% over the past 50 years. Unlike other hospitals, the funding for St. Jude comes primarily from donations. And so if you would like to take the loose change that you have found in your couch,
Starting point is 01:00:13 or maybe the windfall that you received from your last startup exit, and invest it in a very worthy cause, I would direct you to our show notes where you will find a link to a special fundraising page that I've set up for the Future of Coding community. There's a goal there that is fairly modest, so hopefully the people listening to this will be able to pitch in a couple bucks
Starting point is 01:00:36 here and there and get us to that goal. And instead of listening to an advertisement for another totally real startup, we can take some of our positive energy in this community and direct it towards a very worthwhile cause. So once again, check the show notes for a link to a page where you can make a donation to St. Jude Children's Research Hospital. My thanks to all of you for helping bring us the defeat of childhood cancer. Yeah, so at the top of page three on the right, it says, The Bracca and Cook paper is a dividing point or perhaps a bridge between two different paradigms, or perhaps micro paradigms. This observation further raised the question of incommensurability, a key part of Kuhn's ideas about scientific revolutions. So we've talked
Starting point is 01:01:35 about what incommensurability is, but I don't know anything about Kuhn's idea of scientific revolutions. Do you know any of that backstory? Yeah, so I actually did give a talk. It's on YouTube. It's Paradigms Without Progress. War Without Tears. Kuhnian Reflections on Programming Practice, where I go into this in a lot of detail, actually, because I assumed most people don't know about this. But, you know, the idea here is really pretty simple. If you think about how you were taught in school, how science works, it's this steady march of progress. We learn new facts, we adapt our understanding to those facts, and we just keep accreting things over and over again, right? We just accrete more facts. And Kuhn wants to say that that's not at all how it happens. It is really messy. It's these punctuated times of turmoil. And it always happens when a theory is failing in some way. And when the theory is failing in some way, there's
Starting point is 01:02:36 this moment of crisis. And everyone is looking for a new way out. and then the revolution happens, and the old way is discarded, and the new way continues forward. I think the best example of this is the Ptolemaic view of the solar system versus the Copernican view of the solar system. The Ptolemaic view we kind of think is like so silly today, like the earth is the center of everything, but it did real work for so long. And the only reason anyone started looking for answers is because the math started getting really, really sketchy. Like you could predict everything, but every time you wanted to get
Starting point is 01:03:19 to certain degrees of accuracy, you'd have to tweak stuff. They just kept putting bug fixes for the theory over and over again. And eventually people got so tired of dealing with bug fixes that they came up with a new idea. That's how some people do TDD, right? Like that's a totally viable approach. You do the minimum thing needed to get the test to pass. And if it's like, oh, you know, the test is saying that this thing needs to return false, just return false, right? If that's the only test that's failing, and then you gradually get a more and more general function, just just the minimum amount needed to satisfy the tests. And so that like, that's a
Starting point is 01:03:56 totally workable approach. Yes. And I think though, you know, maybe TDD advocates won't agree with this. But I think we've all been in this point where we continue down that path. And we know what it would take to get our program to be better. We just don't want to do it. Yes, we could add yet another if statement here. We could change just a little bit there. And instead, we often just scrap it and rewrite. And if you try to compare the old code that you were
Starting point is 01:04:26 writing that went in that style to your new understanding, it's actually very difficult to compare them because you often solve the problem in a very different way. You know, I think rewrites are often, they happen just like these scientific revolutions, right? Our rewrites of code, yes, you could go compare certain things about them, but your benchmarks are almost always a lie, right? You're almost always doing something decidedly different. You've broken down the problem in a different way. The vocabulary you use is different, and the words that are in common often have more nuanced, different meanings. This is something that we encounter, I think, all the time as we're doing
Starting point is 01:05:06 these things, because when we're making programs, we're actually building theories about how our programs relate to the world. That feels almost a little bit akin to, like, Wadler's idea. Was it Wadler's idea? Like, programs as proofs, that whole thing? i think that wadler almost would actually be like almost a rebuttal to this paper right because because wadler really believes that we should stop working on things that are engineered that are invented and only work with things that are discovered yeah that that that strain of his idea yeah yeah What I'm reminded of is Peter Nauer has a paper that I love called programming as theory building, where he argues that theory for him is way less technical of a definition. He actually uses Sherlock Holmes as an example of theory building, right? Where we're
Starting point is 01:05:59 coming up with these ideas to put them into use. And that's what he's really focused on is that we kind of have this, maybe I'm being too nerdy here, called the hermeneutic spiral, where we're discovering things, and then we put them into practice that cause us to go and discover things that put them into practice. And we kind of like spiral around and and we're getting in closer and closer maybe never reaching it uh to this point of understanding it's funny that we've actually
Starting point is 01:06:31 accidentally sort of backed our way into the uh the the next sort of thing that i wanted to point out about this paper that it like it launched a tangent of my thinking, which is thinking about who should get credit for an idea within computer science and within programming practice just very narrowly, right? Because you can you that question who should get credit for an idea that's, you know, me. Yeah, okay, Jimmy, done. Cool. Got it. Doesn't matter the idea. As long as it's good, I should get credit for it. Yeah, I guess that is a solution. It made the test pass. No, so I'm curious why you asked that question.
Starting point is 01:07:18 Is this, you know, like do Braca and Cook get this because they kind of like summarized it and fixed some problems? Is that what you're kind of getting at? Or yeah, what brought up this idea for you? There's on page six on the left side, there's a paragraph that reads, But Cannon's paper was not the first to talk about, essentially, mix-ins. Warren Tiedelman's dissertation did, and the dissertation is titled, Pilot, A Step Towards Man-Computer Symbiosis.
Starting point is 01:07:46 And it was published in 1966, 24 years before the Bracca and Cook paper. This idea that you need to find an earlier paper to show, oh, yeah, actually, this person before you had this idea that you thought you came up with first. And I see this every single week, you know, looking at Hacker News or looking at, you know, something on YouTube or some new framework or something like that. There's this constant parade of people saying, look, we've invented a whole new way to do this or that. There's a lot of things where we're trying to aim for novelty, right? We're trying to aim for, is this a novel contribution to the field, right? I think is kind of like the scientific-y way of putting these things.
Starting point is 01:08:28 And I do kind of agree that I have kind of this skepticism about it, right? I think it's great to do things. There are things that are new, right? Like I'm not going to say nothing is new. There are things that are new. There are things that people come up with that haven't been done before.
Starting point is 01:08:44 But I guess they're almost always combinations of old things and influences of old things that they've done. And I think it's more important that we look at those and figure out how we've modified them. And yeah, I definitely think that there's this trying to be different for difference sake definitely feels wrong to me. Or trying to take an idea that you've had and present it in such a way that suggests that it is an original idea for whatever reason you're doing that. Like, for instance, if Rich Hickey had taken the persistent data structures in Clojure and introduced them as these are persistent data structures.
Starting point is 01:09:27 And as far as I'm aware, that's a term that he originated. And if he had not done the thing, let's pretend it is, right? Maybe it's not, but let's pretend that Rich Hickey used the term persistent data structure because that term had never been used before. And if he did not do the thing where he pointed to the previous work on hash array mapped tries like the the the previous work that had been done that inspired his implementations if he hadn't pointed to that and then instead had said you know hey i've created this new way of storing data and here's what i call it and here's it's this new original idea, like that would have been a kind of charlatanism because, you know, in fact it was inspired by earlier work. And even if he
Starting point is 01:10:11 had even even I'm gonna stop slogging rich, even if somebody comes up with an idea that they personally believe is an original idea, like we all know, know right like your ideas are the things that emerge from the cultural context you're in there's like simultaneous discovery is a thing right this is this is a well explored space i don't want to rehash all those arguments today i just want to say it sucks to see people say things like this is the first scientific paper about mix-ins right that sucks right? And I think that's a major thrust of this incommensurability paper is like, or at least like a minor thrust of it is, it's actually not the first paper about mix-ins. And the only reason you can get away
Starting point is 01:10:58 with saying it's the first scientific paper is because you've done this thing where you've defined practices out of being counted as science because you're defining those practices as being engineering and engineering is a lesser thing that's that's to kind of close the loop on that the reason that this cultural phenomenon that separated science and engineering into two classes is relevant is because it lets people in the realm of science say, we can claim an idea as an original idea that we've had and we're the first people
Starting point is 01:11:31 to present this idea, if not inventing the idea, we're the first people to present it because those other works that presented it earlier don't count because they're not science, they're engineering. That sucks.
Starting point is 01:11:44 Yeah, I think we have to be careful, too, though, on just not committing the opposite sin. You and I both come from pretty practical backgrounds. I don't have any formal education. Jimmy, I come from an impractical background. Yes, I totally understand. I love impractical things as well but you you get my point right like we build things more than we describe things and i do think that there's something there's something legitimate going on here and we're reading from the perspective of somebody who
Starting point is 01:12:21 is frustrated by the way these scientific endeavors have happened and the way they've excluded engineering. And at the same time, I do think that there's works that really did help push the engineering effort forward. Totally. Yeah, I think it's important that we have and I do think that Richard Gabriel would want this, but I think there is a little bit more of this emphasis on engineering needs to help science. And I think that it's got to be kind of this give and take of both, right? We need to have this better working relationship. I've always wanted to have this relationship where you're actually building things. And then as you're building things, there's members of the team who are better
Starting point is 01:13:05 at putting it into rigorous, formal, whatever. But also that that requirement of it being as rigorous and formal could be lessened, right? Because I don't think that formality is always the way you get the interesting bits out there. And I think this paper kind of shows that as well. And not just formality, but another big one. And once again, I'm just repeating arguments
Starting point is 01:13:30 that have already been made before. See, this is me saying I'm not having original ideas. I'm just repeating ideas that are already circulating out there. Originality, right? The emphasis on originality in published papers is problematic. And it would be nice for it to be okay and it to be acceptable to not say,
Starting point is 01:13:51 I'm first, here's a new thought, here's I'm breaking new ground, but to instead say, I have a better way to articulate an idea that somebody else has already articulated. And you can do that, right? You can do a paper where you're doing a summary or you're doing a follow-up or something like that, but there's still this sense that the culture is about, like, right, if you're going to do your dissertation, there's this cultural sense that it needs to be about breaking new ground, that you need to be making a contribution to the field in the form of new ideas. And I think that, you know, other people have said, and I agree that allowing for the quality of a communication to be a benchmark on which we want to accept new
Starting point is 01:14:39 works into the official canon, that like, if somebody can take an existing... If somebody took augmenting human intellect and turned it into a really banging 30-page or 20-page or 5-page condensation of those ideas, that should be seen with just as much value in all the same contexts as the thing that is valued for its originality. I do think that this conversation on originality and not is kind of, I don't know,
Starting point is 01:15:15 maybe ironic, maybe not given kind of the end of what we have here, right? So this is the last paragraph. And he says, not many of us stop to reflect. We're just programmers, after all, or software developers or engineers. And as ants and termites do, we are content to follow where others have gone. And most of us go where most have gone. But when we do reflect, perhaps what we find is important and surprising. And i actually didn't understand that very well maybe you can explain that to me yeah i think i think this comes after his discussion about kind of discovering this incommensurability that had been lurking there that that he he's one of the few first,
Starting point is 01:16:06 I don't know, who do we credit with it, to point out that there's this incommensurability going on. You mentioned before that people could have discovered this, but no one did. Gabriel makes that point. Gabriel is the one who says that Braca and Cook could have realized this. Yes, and yet they didn't, right? And nor did anyone else really articulate
Starting point is 01:16:29 that this incommensurability had started. You don't see in history books. And then in 1990, there was a great break. And we went from programming language systems research to programming language research. This is Gabriel's reinterpretation of history. And so I think he's telling us here that in our day-to-day practice, there's often these hidden things going on that we ourselves aren't seeing.
Starting point is 01:16:57 And we might discover something new if we just stop for a moment and reflect on our own practices and see what's actually going on around us. Yeah, I mean, that ending did not stick for me because it felt a little bit too much like it wasn't saying anything. Like it feels sort of like an and they lived happily ever after, or like just kind of a trite sort of like, hey, welcome to the end of the paper. Just before I head out, I wanted to say, don't forget to reflect on the world around you. Well, I guess, you know, he would, right before this,
Starting point is 01:17:36 he tells us there is no world around us, right? At least not in the sense of programming. We create that world. Yeah, like there's no natural world around us there's no pre-existing immutable uh world waiting to be discovered sorry phil um and uh that the world that we have is the world that we've invented yeah and so i think the reason i don't take this as just like uh a silly little like let's let think more, is I think he wants to say, we have this great power
Starting point is 01:18:08 to create the world around us. And if we don't, someone else will. If we don't create it, we're going to be living in the world that others have done. We're going to be following the path that everyone else has followed. And we're going to miss the richness
Starting point is 01:18:23 that we could have created there but then that makes it sound like and at some point in here we really do need to say like braka and cook we're slagging on their work a whole bunch in a way that they don't deserve right they kind of are being used as an example they're being made an example of a broader set of systemic problems and it's we keep pointing to them as a reference but in no way i think is this meant to be specifically signaling that they are at fault for anything or that they've done anything wrong they're just an example that is near to gabriel because gabriel has a a good sort of perspective to reflect on this this transition that they they were a part of and so it's i think it's just worth saying that like we
Starting point is 01:19:15 don't or at least i don't i'm not going to speak for you jimmy you might have like a you know a torch and and some like t-shirts ready to go here for like brocca and cook out um cook out uh but uh yeah i don't think that they deserve uh uh nearly as much scorn as we are heaping on them and i hope that it's that it's clear that this is meant to be a jumping off point for looking at broader issues not that it's meant to be something where we're trying to discredit them or their contributions individually. No, not at all. And I think Gabriel sometimes does a good job of that
Starting point is 01:19:53 and sometimes doesn't here. This paper was started because Braca came to him about this reaction he had gotten about this paper from kind of the older Lisp crowd. So in many ways, this is Gabriel explaining that reaction. And he is also not claiming here that like, and this is a bad, we should never go this route, right? He's claiming really that they're just like Kuhn does. You can't make this incommensurability, you can't measure them. You also can't measure like, is one of these the better path? There's no way for you to determine by some third party neutral
Starting point is 01:20:36 criteria, which paradigm is better? Is it systems? Is it languages? There's no way to know. If incommensurability is real and that's another like that's in the abstract right the abstract says incommensurability is real that's the second final sentence of the abstract and that's something we haven't talked about which is that there's debate as to whether incommensurability is a real thing and one of the points that gabriel makes is that incommensurability might not be real in natural sciences because there is a truth to the universe that we are getting better and better at approximating and that there are future approximations that can completely supersede earlier approximations and the
Starting point is 01:21:19 only problem where incommensurability might appear is in trying to understand earlier approximations in the correct context that you might lose that there but that within computer science you can have real full strength incommensurability where a future theory and an earlier theory are both equally important and equally valid, and one does not supersede the other merely by coming later and using language to make it seem like it's the more encompassing thing that obviates the earlier thing. Incommensurability exists and is a real issue to contend with because the material of computer science is something we've invented it's something that we are constantly reshaping and that there is a loss when a future theory supersedes an earlier theory or when a future practice because this is very much about practice as much as it is about theory
Starting point is 01:22:18 when a future practice supersedes an earlier practice that you are actually losing things and that you are oblivious to that loss because of the incommensurability because of the difference in interpretation of terms that makes it difficult for you to understand the earlier idea in its true context though one of the things we're kind of like, it was kind of left out of this discussion is Kuhn really is taken to have two ideas of incommensurability. The strong idea that there's literally no way to translate between these, that they are different languages,
Starting point is 01:22:57 different language games, that there's literally nothing you can do to understand the old paradigm other than live it. And then kind of the weak idea, which I think is mostly what we see Gabriel here telling us, which is just that there's a difficulty in communication. It can be overcome with enough diligence, with enough deep thought, but it can sometimes be missed because on the surface, it seems that they're not really talking about different things, but deep down you are. And so a lot of it seems that they're not really talking about different things,
Starting point is 01:23:25 but deep down you are. And so a lot of people, when they're questioning Kuhn's notion of is incommensurability true or not, they're worried about this stronger claim because it seems to lead to, well, what Gabriel calls it is anti--realism and he calls it the idea that science can never figure out what the world is like because we live in a sort of manufactured conceptual or representational world that dictates reality to us it's a little bit of a weird way of putting it to be honest uh the the problems would be more about relativism than anti-realism, that we can't ever know the truth because there is no one singular truth. Or at least that one singular truth is outside the realm of human possibility. And so we all can be equally correct, even if we disagree with each other. That's more
Starting point is 01:24:22 usually the worry about this incommensurability. I just don't know if that argument really lends itself towards the computer science issue here, because I don't think anyone's going to say like, yeah, systems and languages view of things are contradictory. Well, isn't that Wadler's claim? Isn't that like in his kind of, in his playful teasing saying that some programming languages are invented and others are discovered and you can just tell? Isn't that kind of, and not just Wadler, once again, I don't want to direct shade at a particular person. This is just an idea that pervades in our world. Isn't the idea that some aspects of programming are discovered as a result of universal truths, perhaps because some aspects of programming emerge from the mathematical parts of logic and that math is kind of a universal thing, just ignore certain work
Starting point is 01:25:16 in the 1930s, that because there's this aspect of computers that comes from the universe as opposed to that comes from our culture that there is a part of it that is not relative that there is a part of it that does have a real truth that we are trying to get closer to because my my sense is that no pretty much all of the programming is relative and that that there is no universal truth and that relativism in computer science is real is that is that also your sense or do you feel differently i maybe a clarification um so how i take wadler to be making this argument is yes he does agree that there's some objective reality to the facts of computer science uh i don't think anyone would disagree with that like no one no one that i know is
Starting point is 01:26:05 like oh the halting problem is a matter of perspective usually people would agree that that's a real phenomenon uh what they would disagree about is kind of the more the ethical or aesthetic claims going on that you can wadler wants wants to say, first off, yes, there's this like a more objective, let's just say more objective to be nice, more objective part. And he wants to say, and that's better. And that's the claim that I think most people, not most people would disagree with, but that people would see as the suspect part, the relative part is this aesthetic ethical whatever word you want to use their claim rather than the claim about what is yeah that makes perfect yeah when you say that things are relative are you meaning what your taste right you're like your aesthetic judgment
Starting point is 01:26:57 is relative yeah what constitutes good design yeah yeah not whether or not the halting problem is a real phenomenon which i'm also not convinced of but okay i'll give a less controversial that uh certain algorithms are linear and others are quadratic no i still think like i i think you know bigfoot aliens there's certain parts of computer science where i'm going to start a late night call-in show where we can have people call in and say like i was out walking my dog in a field the other night and i i saw i saw a polynomial time algorithm for an np complete problem yeah i i think that that way that you put it makes a lot of sense and and captures what i was feeling yes Yes. Yeah, so I think that Wadler wants to almost say there is an objective matter
Starting point is 01:27:48 about maybe the aesthetic elements, right? It just is, what is aesthetically good just is what maps to logic, right? Well, and this is where we need context of use, right? Because he's not positioning himself, at least in my understanding, as somebody who's really concerned with building databases at scale that's not what he's like when he sets
Starting point is 01:28:11 you know his mind on good versus bad the the particular things that he would think of as good have to do with a very specific context of use and that does not include you know making a react app or something like that so it might even be uncharitable to say that it's like um that the error in his or the the the questionability in his thinking is introduced as soon as it turns aesthetic it might be like generalizing that aesthetic to other contexts where it doesn't apply, right? Because it would be perfectly reasonable to have a strong sense of aesthetics about what makes a good proof, what makes a good formula, what makes a good relationship between abstract ideas, what makes a good logic, what makes a good calculus, that kind of thing. Those kind of aesthetics might be closer to the kind of thing that you can defend as being innate to the universe in the way that we all get warm fuzzies
Starting point is 01:29:14 when thinking about e to the pi i minus one, right? And oh, wait, there's actually a better way of formulating that that is even more aesthetically pure, right? Or things like Clifford algebras as opposed to the cross product, right? Like using geometric algebra as a way to express geometry and relationships and that the cross product is just this kind of like awkward hack
Starting point is 01:29:35 that emerges from, you know, looking at three-dimensional matrix math that doesn't generalize to higher dimensions and therefore is less elegant. Like there's a a context within the natural sciences that aesthetics have a a you know maybe there's some people out there who think that the more complicated less generalizable formula is truly the more pure and beautiful one um but we don't see a lot of people staking that claim but it's
Starting point is 01:30:03 only like when we cross over into what does it mean to design a good system and what does it mean to practice programming and what does it mean to do that lower class kind of work that aesthetics are no longer admissible in the same way yeah i think that's what i find so just to like just to give my opinion on this relativism claim or whatever, if we're talking about aesthetically, it's kind of hard to make a strong argument for like, there is an aesthetics in programming that you ought to have. I do think a lot of people make that claim,
Starting point is 01:30:38 whether they realize it or not. Oh, yeah. Right? Yeah, constantly. Yeah, I think that's a hard thing to claim. But what I want to say is that this, what Gabriel calls the language versus the system paradigm, I don't think even he would claim, if we ignore the like, what is good design portions of it, right? Just the descriptive elements, they're still saying something true. They're still saying something correct, right? They're talking about various facts about how languages work, right? That's their context. And that's just not what Gabriel is interested in. He's interested in how various systems work. And so I think that's where this, the strong notion of incommensurability, where
Starting point is 01:31:24 we're literally talking past each other and there's no way to ever understand each other. I think it just doesn't really work in this case. I just don't think that's at all what we're talking about. Because I think everyone, he's even identified. Here's the difference. You're looking at these formal properties. I'm looking at these dynamic properties, right?
Starting point is 01:31:42 Here's a distinction that you missed in your analysis. Yeah, exactly. And so that's where I would stand on there. I will say I completely disagree with him on the language distinction if he doesn't just mean programming languages. Yeah. Natural languages are much more like a system than they are a formal system of signs governed by grammatical rules of
Starting point is 01:32:06 combination to communicate meaning whereas a system is a set of interacting or interdependent components forming an integrated whole and i would claim language natural language is much more like that second part but i would also claim programming languages are as well. Yeah, he does point a little bit to the fact that these definitions need to be interpreted in order to make them applicable to what he's talking about. Like he does point to the fact that the definition of language includes the word system. And so there's sort of already a little bit of interplay between these two terms. Yeah. I don't think the strong incommensurability is, is what's being claimed here. Um, and I think that the, like the big, big takeaway that I got from this paper is that
Starting point is 01:32:58 I keep wanting to accidentally call him Braca because there's so many names in my head, including all the silly nicknames the uh ricky and and peter and and phil um anyways uh gabriel seems sad that at some point the part of computer science that he was passionate about, which is systems, was relegated to a lower class and languages were relegated to a higher class. And that happened independently of Braca and Cook, but that they were maybe riding on that cultural wave. But that's a thing that happened. We are living in a world that emerged from that happening. We struggle to talk about programming systems versus programming languages, and that all the programming that we encounter in popular culture and when you go into an undergrad degree, it's all language-based programming.
Starting point is 01:34:06 Getting into an environment where you can use a programming system is a rare thing, and it's a niche thing. There's a sadness there that I think is what this paper is sort of trying to say, is that this weaker form of incommensurability leads you to misunderstanding other people.
Starting point is 01:34:26 And if you're in a position of power to be deciding things like what conferences should run, what papers should be accepted, your lack of awareness of what other people mean when they use a term might be a kind of bias that leads you to thinking that they don't know what they're talking about and therefore their work is not worth appreciating and that those this is this is like cultural dynamics once again right everything we talk about to me with my particular lens with my particular blinders on it all looks like culture and it all looks like different cultures misunderstanding one another and that as a result of that the opportunities to do programming systems research disappeared and dried up and were relegated to a form of practice rather than a form of science they were relegated to engineering rather than science and i think the the fact that you know gabriel makes all these points about the
Starting point is 01:35:25 relationship between engineering and science is sort of like a side point where it's like and while we're on the subject you know engineering and science are actually um not at all strange bedfellows they actually have a thriving positive relationship and the fact that we don't see them that way is you know the two genders science and engineering right we we put one of them in a lower position in society and we shouldn't do that um but that's not the the the core sadness that i see the core sadness that i see is that um systems have been demoted and languages have been promoted and that just made for a worse industry in a worse field than otherwise would have here. You know, if we do
Starting point is 01:36:06 that thing in the final paragraph, where if we do try to reflect on what other people are doing, if we open our hearts to them, maybe we will avoid making future divisions of classes accidentally emerge as a result of our inability to understand what other people mean when they say things. Yeah, I think that's a great way of kind of summarizing the paper. So, you know, maybe that wasn't your summary. But for me, I'll kind of, you know, end on some closing thoughts here about this. Like, first off, I think this is a great paper. You know, I like to kind of grade these papers.
Starting point is 01:36:41 So maybe if you don't hear me say it's a great paper, I just don't think it is. And I don't want to say that explicitly. I think this is a great paper that everyone should read. You know, the mix in stuff, I don't really care about objectory programming that much, to be perfectly honest. So I don't know if I'll ever use any of the mix in stuff here. But the the way in which he interweaves this technical aspect and the the more you know high higher level thoughts is just beautiful but i want to just end with a i think that we could take this uh problem that he has and have a different solution i guess he doesn't really offer a solution so i'm gonna offer a solution here uh that i think we could do to like bridge this gap between systems and language.
Starting point is 01:37:27 And I think it's actually to focus more on the language aspect. I think our notion of languages and programming is just so far away from the reality of how natural language worked. We've made this analogy to language and like forgotten that it's an analogy and we don't pull in so many of the rich things that natural language have so just to call out like an example uh like elephant 2000 by john mccarthy is a paper that talks about a programming language based on speech acts and speech acts are these things that have effects in the world. So when I say to you, I promise I'm going to read this paper, I didn't just state a fact, I caused it to be the
Starting point is 01:38:15 case that I now have an obligation to read this paper. And so we if we really want to think about the systems and languages and not not make this divide so great, it's realizing that we have a very impoverished notion of language. And if we started including more and more things of natural language, more and more ideas from linguistics and philosophy of language into our programming languages, we
Starting point is 01:38:41 would find systems out of them. So that's what I think we can find systems out of them. So that's my, that's what I think we can do to bridge this gap. And that's not something explored here, but I would love to see it be done more. We're in wrapping up the episode
Starting point is 01:38:56 kind of summary mode. There was one other thing, and I think it dovetails off what you've just said, that I wanted to tangent on. That's great. Is it too late game to throw in one more tangent? No, let's i wanted to tangent on that's great is it too late game to throw in one more tangent no let's throw on a tangent that's the point of this podcast in my opinion hell yeah this actually ties this paper into our community a little bit i'm going to read a quote this is from the part of the paper where it's sort of introducing some of the older ideas about object-oriented programming. And it's giving some
Starting point is 01:39:27 of the early context for how mix-ins emerged back in those engineering papers that aren't worth being counted as scientific papers. So here's a quote from Howard Cannon, his paper on flavors from 1979. From one point of view, object-oriented programming is a set of conventions that help the programmer organize their program. When the conventions are supported by a set of tools that make them easier to follow, then an object-oriented programming system is born. It is neither feasible nor desirable to have the system enforce all the conventions, however. Since the flavor system provides more flexibility than other object-oriented programming systems, programmer-enforced
Starting point is 01:40:10 conventions become correspondingly more important. Therefore, the flavor system is as much conventions as it is code. That made me realize something, which is that one of the things that we have in our programming culture that we sometimes sneer at is convention. It's things like gang of four style design patterns, or it's things like TDD, or it's things likeile, or any of these sort of practices that we do, these things where it's like, independent of the tools that we're using, we have these ways of using them. And we try to make these ways of using them adaptable so that you can do something like Agile in a functional language, you can do Agile in an imperative language, right? There are these set of conventions for how to program. And in fact, you can think of paradigms as being conventions, right?
Starting point is 01:41:14 You can do things that are kind of like functional programming in an imperative language. It's just a way of using functions. It's a way of if a language has functions, you can do something that is functional programming with it. You can kind of do object-oriented programming in other languages, especially if it's a dynamic language. There are kind of fuzzy boundaries around these different practices that in this quote that I've just read it refers to them as conventions or I'm generalizing from what this quote says to come up with a meaning of convention but the thing that I like about this quote is that it describes the way that the conventions and the tools
Starting point is 01:41:57 interact and that there's the conventions supported by a set of tools that make them easier to follow that's something that i don't see within our community that i think i would like to see more which is that programming conventions programming practices these habits that we create are these cultural things that we create to approach how to program should co-evolve with tools and tools should co-evolve with these conventions. And you get a little bit of that, like, you know, TDD and BDD are a set of tools, right? Test runners and test harnesses and mocking and tools that you can use to help you do testing co-evolve with the testing practice with the idea of you know red then green with the idea of change the test or change the code don't change both at the same
Starting point is 01:42:51 time that kind of thing like there's these practices there that co-evolve with the tools and i think that that example is really cool but there's some other examples where i see people creating a new programming language without thinking about what are the conventions of using this language? What are the cultural aspects that should emerge around this language? Or rather, what's a convention or what's a practice that we want to encourage and how can we make a programming tool that encourages that practice or vice versa if we want a new programming language because you think that there's some problem in existing languages how can you create a convention that creates room for that new tool to emerge and there's this
Starting point is 01:43:39 this this this framing that this quote here from theavors paper kind of opened up to me is this idea that this is a practical way to approach the problem that we've referred to in the past and that tons of people refer to about wanting to change a social problem with a technology and how that's kind of a fraught thing to do and realizing that you can be as much a creator of a convention as you are the creator of a technical tool and that you should in fact probably think about both together and how they intermesh is a really cool thought technology yeah i completely agree with you and i think this ties in actually perfectly with what i was just saying here of like we kind of have this belief that our programming languages are these static things that you know the grammar written down by the compiler interpreter browser whatever it is that does the the running of the code that's what defines it but it is almost always our social context that defines what language we're using. You can think of like, I looked up the Wikipedia definition of language construct, and it says that a language construct is a syntactically allowable part of a program.
Starting point is 01:44:54 Think about, in reality, when you have lenters and code review and et cetera, there's all sorts of parts of your language that aren't practically syntactically allowable because your coworker is not going to let you get away with that. Right. Like you're never going to get it merged. You're never going to actually write it. Like you won't let yourself get away with it. And so like what our languages are gets restricted, but they also get expanded. Like I thought of with your convention talk, like a MVC model view controller right these are things that don't have first-class representations in most languages but yet are very clear you can see them in every language that you're in and we have rules about what
Starting point is 01:45:40 count as these various things and it's really mean, I think MVC has had more impact on whether you agree or disagree with it. It had more impact on how people write code than almost any programming language has. And it's merely a convention. I would say it's had more impact than the idea of mix-ins, say. Yeah. Like mix-ins are important.
Starting point is 01:46:00 The idea of abstract base classes used for multiple inheritance, that's a neat idea. But in terms of the impact it has had on the industry, yeah, MVC, which is not actually part of any language, it's just a way of using languages, has had a bigger impact, I would argue. Yeah, absolutely. And I think that's what we should realize is that not only do these conventions exist, but they actually modify the languages that we're in.
Starting point is 01:46:23 At least I think this is a good way of looking at them. Like I worked in JavaScript code bases, where for all intents and purposes, JavaScript was a functional language, because we didn't mutate anything. We could have, but you weren't going to pass code review almost ever if you did it not because we were like, super strict and annoying but because we all kind of collectively agreed we wanted to have that experiment and see what everything looked like that way and turned out pretty pretty good yeah or like like i think ramda is one of them like there's these functional javascript libraries where it's like there is um within the bounds of what JavaScript allows,
Starting point is 01:47:05 there are nice ways to have currying or there's nice ways to have partial application. There are these things that JavaScript doesn't intend for you to be able to do by design, but that it allows for you to do. And then there are these conventions in which that's codified into this is a required way to work within this convention. Not enforced at a technical level, but enforced at a social level. One that I love is Promises.
Starting point is 01:47:32 Promises are now part of JavaScript proper. And they started as just a convention for a way to use functions. Just to do a little bit of higher order programming with some functions that gave you a nice alternative to callback hell style asynchrony you got some more linear reading code and it's code that maybe looks nicer when you are looking at the the actual lines in your editor um arguably it's a little bit harder to follow in certain pathological cases. I think maybe it's easier to come to pathological cases with promises, but they're now part of the language because the convention informed the evolution of the tool. I think this is a great thing that as a community,
Starting point is 01:48:19 we can start establishing, right? Like even if we haven't built our language, we can use convention as a means to explore things we wanted to. So all for it. Because we're talking about our tangents. I also do think that this... So I want to say that there is a fact of the matter. It's just more expansive than we think. All these things that we're saying we invented are actually things we discovered, and that's totally okay. It's just there's a lot more to discover than we give ourselves credit for, basically.
Starting point is 01:49:00 I'm like a naive Platonist who thinks that there's these objects out in Plato's heaven. And we're that's what we're interacting with on a day to day basis in all of our things. And there's just way more of them than we ever imagine. Yeah, that's a that's a pretty different definition of object than we've been using all along. But I follow. Yeah. So like, you know, when we're talking about mixins like they they correspond to something
Starting point is 01:49:25 that that's out there right even if we have the like goofy edge cased ones or if we have the you know whatever it doesn't matter those all those all exist i don't think that they stop existing yeah the deficiency is that we don't have um nearly enough language nearly enough words to use to map to all of these objects that exist and so we end up with uh naming collisions what we really need is like some way for us to store all hypothetical things that could exist in some kind of a a database with a with a hash of that idea in each of them so that if we need to refer to you know no i don't mean that kind of mix in i mean that kind of mix in we can like you know there's a there's a universal spanning hash table of abstract concepts that we're going
Starting point is 01:50:16 to reference in our discussion yeah so we can refer to a singular canonical meaning of our of our words yes i'm nerdy enough that even in normal speech when i'm not talking to programmers i will uh if i'm having a disagreement about words i'll be like all right we're just gonna call you have your word yeah and then i have my word prime yeah and i have learned that that's not a good way of making a distinction for people. So yeah, I usually now use mix in one and mix in two, right? That's just all we meant, right? But yes, so I do think that we just, I think we discover all this stuff.
Starting point is 01:51:01 And then, yeah, I'm going to synthesize both perspectives, right? It's just all the things you think you're inventing are actually already out there in Plato's heaven. Is Plato's heaven a thing? This is a reference I don't get. Yeah, so Plato's heaven is the idea that abstract objects like shape, right, or numbers exist. So we've never seen the perfect triangle, a triangle that's actually
Starting point is 01:51:29 the ideal notion of triangularity, right? So you could imagine like, let's say like an equilateral triangle, right? That has a perfectly equal sides and perfectly equal angles. you can't make that in real life it doesn't exist yeah but uh it clearly does exist in some sense and there's also like triangle-ness itself like what is it that all triangles have in common right and so plato wants to say that that's that's the real stuff of reality and our reality is just a shadow of that i don't go that far but that that's plato's idea that's like the question like are there holes right is a hole a real thing or not yeah those are kind of related a lot of it's about just like a lot of the conversation is ultimately about like numbers right do numbers exist or are they made up by us? And if they're made up by us, how are they made up by us?
Starting point is 01:52:26 How could we ever discover them? But if they do exist, how do we discover them too? Because like, do we have, we don't have a causal connection to them. It's not like, you know,
Starting point is 01:52:35 I can walk down the street and two bumps into me. Where's five? Have you seen five recently? Yeah, exactly. Right. But if you start trying to go down this path called nominalism, where, so there's plate Platonism and nominalism, there's others, but nominalism says like, no, those things don't exist. There are no numbers. If you start going down that path, you start having some, some linguistic issues, but also just some like, some real problems using talking about numbers, if you think that they don't exist.
Starting point is 01:53:10 Because like, for example, saying there's a number between four and six, that's just a false statement. And if that's a false statement, then all of our scientific statements are false because they always decomposed to depend on some statement of that kind of sort, right? Depending on numbers and relations and things that just don't actually exist in your world. Well, I'm going to be thinking about that all day. I mean, there's great books and things like this. I love it. That's the kind of philosophy that I really enjoy
Starting point is 01:53:37 is thinking about, yeah, all these sorts of like uses of language and the ways in which we talk and what that commits us to. Yeah. If I say there is a number between four and six, doesn't that imply that I think there are numbers? But I could say like Adam gave kiss a Steve.
Starting point is 01:53:56 Oh, sorry. Gave kiss a Steve. Gave Steve a kiss. Gave kiss a Steve. Adam gave Steve a kiss. And that seems to commit me to kisses being an entity but i could just change my word around adam kissed steve right and now i'm not committing myself to anything and so this is that a notion that if we can you're only committed to the things you can't paraphrase away. And so if you can have a more rigorous way
Starting point is 01:54:26 of paraphrasing something, of restating something, then you're not committed to that entity existing. And then the question is, can you make a paraphrase that gets us all of the things we want scientifically and mathematically without using entities that are themselves suspect by some standard here and so far no one's done it and i don't think anyone ever will yeah so in the case of nominalism it would be like that the thing that is suspect is the existence of numbers so can we paraphrase all science that is predicated on
Starting point is 01:54:58 the need for math yep to not have a need for numbers. Yeah, so like Bertrand Russell wanted to say that the numbers are, like the number two, for example, is defined as the set of all pairs where he can make pair not depend on the number two. So if we just have the set of all pairs, that is the number two. We've now defined it in terms of concrete physical objects the
Starting point is 01:55:28 question of course is are sets a real thing are sets abstract objects or are they just their members are they something above their members but then also the reason russell's doesn't work is it literally and he's fine with this depends on there being an infinite number of physical objects in the world because otherwise the math breaks down i didn't uh i didn't know that i mean i know about the girdle incompleteness ripping russell's ideas asunder but i didn't know about that aspect of it that failure yeah so he's he just says yeah we just assume there's an infinite number of things which to me seems clearly false can and is that like an infinite number of physical things or can that be like a conceptually infinite okay well uh yeah no because that's the whole thing
Starting point is 01:56:16 we're trying to get rid of right is the reality of conceptual abstract non-physical non-spatial temporal objects so that's why we're getting rid of numbers uh-huh because they're i thought it was just like a weird flex like it's tuesday i'm gonna get rid of numbers no it's because you can't scientifically they're not scientifically rigorous we can't point at them we can't poke at them we can't prod them and measure them right and so this all gets into positivism where uh things are meaningful if and only if they're scientifically verifiable. Blah, blah, blah. And I'll mention these things, I'm sure, because most of this computer science belief about these things are holdovers from positivist attitudes, in my opinion.
Starting point is 01:57:00 Only if I can put it into my format does it work. There's a good little story, I'll end on this one, that I think really summarizes this kind of attitude well. A door-to-door vacuum salesman comes in and knocks on somebody's door and is trying to show them how great his vacuum is. They invite him inside to let him show how great the vacuum is because they really need a new vacuum. And so he sprinkles some dirt on their carpet
Starting point is 01:57:28 and then vacuums it up. And they look and they're like, no, there's tons of dirt right there. Still, you just put dirt all over it and the vacuum didn't get it. And the salesman replies, well, if this vacuum doesn't pick it up, then it ain't dirt.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.