Future of Coding - De-Nerding Programming: Jonathan Edwards

Episode Date: March 2, 2019

Jonathan Edwards is an independent researcher working on drastically simplifying programming for beginners. He is known for his Subtext series of programming language experiments and his&nbs...p;Alarming Development blog. He has been a researcher at MIT CSAIL and CDG/HARC. He tweets @jonathoda.Support us on Patreon: https://www.patreon.com/futureofcodingSee omnystudio.com/listener for privacy information.

Transcript
Discussion (0)
Starting point is 00:00:00 Hello, and welcome to the Future of Coding. This is Steve Krause. So today we have a very special guest on the podcast, someone who does not need much of an introduction for this crowd. Jonathan Edwards is a researcher and community organizer extraordinaire that I'm sure many of you have seen before. He's organized the live programming workshops, the future of programming workshops, and he's very well known for his subtext videos and papers, and also Chorus, which is related. We hear about how those two projects are related in this conversation.
Starting point is 00:00:40 And I'm also really glad in this conversation we get to hear some of his backstory, stuff I didn't know. Jonathan has been working on future of programming topics for decades now. So he's really a wealth of knowledge and experience at doing this, which is why he's been so invaluable to me as my advisor, which many of you know we've been partnering up for the last, I guess, almost a year now. Jonathan has been meeting with me every couple of weeks, every week, every other week, depending on how much feedback I need. It's been amazing to get his direction, having me pick topics to work through and focus down on them, which workshops and conferences to submit to and how
Starting point is 00:01:26 and which conferences to even attend and how to go about it. It's been a wonderful partnership, and I'm quite thankful to have him on my team. So in this conversation, we get some of his backstory about how he originally started a future programming company. I think it was in the 80s. And they sold it in the 90s, late 90s. And then in the early 2000s, began working at CSAIL, Daniel Jackson's group at MIT, where he did his initial subtext papers. Then he moved on to Alex Worth's group at Algon K's CDG. And then for the last two years, he's been independent, like me. And so that's part of why we decided to team up together. And yeah, so we hear about his perspective on trying to improve programming, what works,
Starting point is 00:02:19 what doesn't, his current work, and what he hopes for the future. So before we give you Jonathan Edwards, a quick message from our sponsor. Replit is an online REPL for over 30 languages. It started out as a code playground, but now it scales up to a full development environment where you can do everything from deploying web servers to training ML models, all driven by the REPL. They're a small startup in San Francisco, but they reach millions of programmers, students, and teachers. They're looking for hackers interested in the future of coding and making software tools more accessible and enjoyable. So email jobs at
Starting point is 00:02:54 REPLIT if you're interested in learning more. And without any further ado, I bring you Jonathan Edwards. Welcome, Jonathan. Thanks for having me, Steve. Really excited to have this conversation. Yeah. So I wanted to start at the beginning because you've had a really interesting career and you've done a lot of, you know, you've been working on improving programming. You've been a programmer for a long time and you've been working on improving programming for a while. So I wanted to get like a quick life story or a quick arc of your path as a programmer and also as someone working to improve programming. Okay, the quick arc. Well, I guess I started young, and I started young a long time ago.
Starting point is 00:03:41 I was a child prodigy. I went to college when I was 13, where I ran into the first mini computers. So this was I was 13. This was 1970. And, you know, I sort of fell in love with programming. Immediately, it's just sort of clicked with me instantly. But I think that, you know, I'm one of the oldest young programmers. I mean, in terms of people, when you're starting young like that at 13, 14, and doing so in 1970, there weren't a lot of us, and we only got access to computers through various strange circumstances. So I'd say that's a strange thing about my story.
Starting point is 00:04:32 I did the academic thing for a little bit, but didn't really feel like it was working for me. So I dropped out, got a job, of course programming, which was the only thing I knew how to do, had any value. Sorry to interrupt. You said you did the academic thing. Do you mean you dropped out of college when you were like 14 or 15? Was I 17 or 18 when I dropped out? I almost finished my undergraduate degree. But, you know, I had a lot of personal issues, you know. I was part of this experiment on, you know, precocious, and they just threw me into college at 13, and I was on my own living in the dorms, and no counseling or help or anything. It would be considered – it would never pass any review board today.
Starting point is 00:05:17 It was clearly very questionable practice. I got a little screwed up as a result socially and emotionally. Wow. Wow. Crazy. You seem all right to me. I've had to learn how to simulate being a human. And over the years, I've gotten, I guess, reasonably passable at it. Okay.
Starting point is 00:05:38 So sorry. So continue your story of you left college and you started a company. Is that what you said? Well, I left college. I got a job programming. I was working on Wall Street doing the very first wave of automation of money transfer using many computers, PDP-11s originally. We came in and we replaced teletypes that were previously being used to transfer money around the world so you know this was in the mid mid to late 70s um the very first wave of of of automation really rolling out into into businesses i was um so i was part of that. I started my own company in 1980, doing the same stuff, working on this new technology, the VAX, that was also from DEC, Digital Equipment Corporation, who was one of the big, big computer companies back then. Do you know about DEC? Have you heard of them?
Starting point is 00:06:39 Nope. Okay, right. So after IBM, they were the next big computer company, and they were the mini computers, the PDP-11s and the VAXs, and the Unix was going to invent this sort of next generation database programming language environment for online businesses. Today, it would be called a NoSQL database, but this was in 1980. I mean, the relational databases were just, Oracle was just really starting to hit their stride and it just took over the world. So that whole idea of selling a database clearly became unreasonable, unattainable. So we fell back to our plan B, which was this banking money transfer application that we built on top of this experimental database and just started focusing on that and built a conventional software company in the 80s and the 90s,
Starting point is 00:07:52 slowly built it up and eventually sold it in 98, part of the first dot-com boom when valuations were crazy. So very good timing on my part, pure luck. And I spent a few more years transitioning out of the company, but I've been dedicating myself to research ever since, trying to improve programming, which is really what was driving me all along. I mean, at that company I started, I really did try some crazy researchy ideas, trying to make programming better. It was a crazy idea to try and do research as part of a company starting up, a bootstrap company. It was not an easy experience, but since then I've had the freedom to try and work on ideas. I find it fascinating.
Starting point is 00:08:48 So you fell in love with programming at an early age. And then after you left school, basically your whole life, you've been trying to improve programming, which I think is an interesting... My story is similar in that I fell in love with programming at an early age. And also, I'm trying to improve programming. my story is kind of similar in that like i fell in love with programming at an early age and and also i'm trying to improve programming and there's like a funny contradiction there because on the one hand we love programming so much but but on the other hand we think it needs to change so strongly well yeah so right that is a contradiction and and it's it's like um you know you have the power of the gods right you are you are creating universes out of pure thought right yet it ends up being you're in hell with this
Starting point is 00:09:34 drudgery and this you know stupefying repetitious nature of it you know i think of it as intellectual ditch digging right you you know it's just so repetitive, and so manually intensive. And you do the same things over and over again, except that they're just a little bit different each time. And you have to be brilliant to understand the teeny little differences, right? You know, it's just, it's crazy. And, and it was just always, I had this feeling from the almost the very beginning that we're in the stone age of programming. I mean, clearly, we're not doing it right, right? We're just, we have no idea what we're doing, really.
Starting point is 00:10:14 And that's why I saw this as a challenge. I felt like I was born for this challenge to try and, okay, let's figure it out, right? This is something completely new. We're doing it all wrong. And so this is a chance to make a mark. Another thing I find interesting, almost like a contradiction in your story, is that you were this child prodigy who took to programming so easily. And yet one of your focuses is on improving the simplicity of programming so that more people can do it. And so I'm wondering where that empathy is coming from.
Starting point is 00:10:48 Like, why? Yes. Yeah. Yeah, so you're right. And that's been a major change of direction for me that's taken me a long time, a long evolution. So of course, I started off the same as everybody starts off, trying to make programming better for myself and people like me, meaning professional programmers and, you know, nerdy people that think the way I do. And it just, that was, didn't, I didn't get very far.
Starting point is 00:11:21 And I can't say exactly if there wasn't any epiphany it was just I slowly started trying to think about okay what's really the problem here and I would say I would guess so so the way I put it as after enough decades of programming you start you know we're very bad at consciousness right at reflection and being aware of what we're doing okay and it takes a long time to sort of start to clue in to what's really going on as we think and do things so just after decades and decades of programming and and really trying hard to understand what's going on in my head when I'm programming. That was always my source material. What is going on in my head while I'm programming? And so what are the problems that I'm facing? And I started to realize that, you know, I'm actually not very smart when it comes
Starting point is 00:12:16 to programming. It's really, really hard. And the things that trip us up are all these things we love, our abstractions, right? We build up these wonderful abstractions and we add layers of indirection and so forth. And we had these mathematical kind of patterns to it. And it just bit by bit, I started to realize that this was the problem, that the things we liked about programming were actually the source of the difficulty. I think starting to do UI programming helped because there, you know, it's a slightly, I don't know how to describe it, but you're faced with simplicity more objectively there. You can see that, you know, I built this, this terrible UI, what was I thinking, you know, this is horrible, right, you know, and learning how to simplify things down and realize what's really going on. So those kind of learning experiences just slowly
Starting point is 00:13:17 started to add up for me. And I just started to realize that, that we've made programming hard you know it's it's that um i don't really know how to describe this uh communicate it too well perhaps but um the things we like the most about programming we've overdone it right so there needs to be we're really bad at abstraction and abstract thought and even though those of us who are good at it are the ones that flourish in programming, yet even we don't have the power enough to pull it off, right? We're constantly failing and making mistakes and unable to comprehend what it is that we've just done. So that's the problem. If we could only just minimize this intense intellectual burden of programming, then regular people would be able to
Starting point is 00:14:06 do it, but we'd also be able to do more, you know, that really would become more like godlike powers if we weren't constantly humbled by our own stupid thinking mistakes because we've gotten too fancy. One of my formative experiences was wearing a beeper for a decade. This was before cell phones. Getting beeped in the middle of the night to fix production crashes with billions of dollars at stake gave me a whole different perspective on the value of cleverness in programming.
Starting point is 00:14:34 You know, we love coming up with clever solutions to tricky problems. We especially love clever performance optimizations. But they bite you in the ass at 3 a.m. What the user really wants is reliability, which doesn't come from cleverness. It comes from simplicity. My love of fancy abstractions and inventing new things was basically immature self-indulgence. I was doing it to please myself, not to solve the user's problem. I see a lot of that in our Hocker culture. Make any sense? Yeah, it makes a lot of sense. There's a lot there that I want to unpack and go through.
Starting point is 00:15:10 So there's the other side of this coin. Let me add in the other progression. The other evolution was that I was realizing that this is not a technical problem. It's not completely a technical problem. There's a social problem here too. We've built a culture. Nerdy people like me have built this culture of programming being a nerdism safe space. It's our elite place. And we want to encourage all of these things that are hard because that's what makes us elite and a big deal and worth making all this money we do you know so we've built this culture that's reinforces all the worst habits and and you know i just as i started to try and realize making programming was simpler and presenting these ideas to people i would get the most negative reactions from people, particularly, you know, like, you know, alpha programmers types, you know, really, you know,
Starting point is 00:16:10 these guys are serious. They're the smartest programmer in the room. They hated the idea of making things simpler, right? Just like people in previous generation, well, this is too old for you probably, but COBOL, you know, was the original language which tried to make things simpler. And it was just derided and, you know, being a COBOL programmer was a mark of inferiority. So it's the same sort of thing. And I realized, you know, there's something really fucked up here in our culture that is making things hard. And that's when I really just fell out of love with professional programming, you know, and I realized I'm not going to be able to convince these guys to make things simpler, even though it's in their own interest, right? Because they love it being hard. So I just realized I'm going to have to find a new audience. And that audience is people who
Starting point is 00:17:02 haven't been ruined yet, right? They aren't programmers. They aren't nerdy people. They're the ones that would appreciate making programming simpler. And there's where the big win would be, really, right? Because if we could make programming simpler, so many people would be empowered to do things. And maybe it takes a generation for other people to come along and scale it up and become professional programmers with it. So I've essentially given up on the professional programmers.
Starting point is 00:17:32 I think that that whole technology is fine for infrastructure programming, but we're going to have to come up with something simpler for application programming. Okay. Yeah. Okay. There's a lot there. I'm not sure. So yeah, I'm struggling between wanting to dig into a lot of those things. And also, I want to continue with like, kind of in with your life's arc, because I want you to do what you did with like the first half of your life for like the research half as well because you've had it seems like a decade or so of research maybe
Starting point is 00:18:11 more maybe it's two decades now of research and so I kind of want to get an overview of that as well maybe we'll do that first and then we'll kind of jump into some of the specific things you brought up or what do you or do you have a different idea yeah what do you think oh well sure i think i think it's not a very long or interesting story really because oh okay i'm pretty pretty frustrated with my research career i've um haven't really gotten very far i feel i've um only you know i've thrown out some suggestive ideas and a few people who are sort of thinking along similar lines could read between the lines of what I've been saying and see that, you know, we're thinking along, you know, so I've met up with some other people that share these concerns,
Starting point is 00:18:58 but I wouldn't say that I've actually achieved anything. You know,'s been been a real struggle it's I started off I luckily I ran into I started taking some graduate classes I was thinking about doing a PhD I met Daniel Jackson at MIT and he invited me to sit in with his group and And I did. I worked on his alloy programming language and then moved on to doing my own work. And that was for a whole decade I was there. But I didn't really click with anybody else's research is the problem. What I'm doing is really not mainstream academic research. It's very risky, very blue sky. It's not the stuff that
Starting point is 00:19:48 serious career academics would do. It's career-threatening kind of research. So I've been working alone, and my time at MIT sort of ran up, and I started... Sorry, just to interrupt for a sec. I just would want to just get a few dates on these things. So you left your company in like early 90s and then from when to when? Well, so sold the company in 98. I was still, you know, working there for a few years. And let's see, I started at MIT in 2001.
Starting point is 00:20:34 Yeah, the end of 2000, was it 2002? It was 2002, right. And so I was there for about 10 years in Daniel Jackson's group. Oh wow, okay. So a lot of the early subtext. Yeah, the subtext. My original bunch of papers published at Onward
Starting point is 00:20:57 about subtext, example-centric programming was all there. Cool. And then I kind of stopped really publishing. I started doing demos, videos, and kind of stuff, which are less sticky than papers, so they're less known. But things changed at MIT.
Starting point is 00:21:21 I left and I joined Alex Worth at, back then it was called CDG, Alan Kay's lab in LA. I'd met Alex and we got along and, of course, Alan Kay was actually talking about crazy things like me that I was interested in. Actually trying to change stuff fundamentally. So that was a great opportunity. And I was at CDG, which then became HARC when they moved over to the Y Combinator research. So I was associated with them for a couple of years, but then the lab lost its funding.
Starting point is 00:22:02 They just shut down. And that was, what, two years ago. Yeah, just about two years ago. And since then, I've been completely on my own. I also wanted to get in the timeline, at what point did you start the live conference? I feel like you've been part of a few other conferences as well. So I was curious at what point you started doing that kind of organizing activities. So, right. So as I started to realize that our problems are not just technical, they're social.
Starting point is 00:22:35 We have cultural problems. And, you know, the only way you fix cultural problems is with institutions. And our current institutions, I could rant about this a lot, are broken. Our current institutions are really broken. And this is somewhat, you know, expected because we're such a young field. But on the other hand, nobody's working on fixing things. It's really a bad situation. So I realized that I needed to step up and start to try and improve things. I was unhappy with, you know, as everyone is, you know, all researchers are unhappy with the academic peer review process, right? It just seems to
Starting point is 00:23:10 encourage very safe, incremental work, highly technical, highly focused, but, you know, not too relevant, not too important. And so I started realizing, oh, wait, okay, you know, our solution to a blockage is to route around it. Let's just start our own institution. So I started running workshops. I had the future programming workshop. And this was, oh, I mean, you could look it up. I think it was probably back in 2014 or so. I ran several of these. Just being open to crazy ideas, right? And also trying this new idea that I got from Richard Gabriel of, I did, I was doing this with Richard Gabriel of using a writer's workshop format. So instead of it being like a technical scientific paper, instead, it's more like a literary contribution. And the whole
Starting point is 00:24:07 part of it is to work with the other contributors to improve your work. So it's a collaborative thing rather than a competitive, everyone tearing each other down thing. So I did that for several years. And then the live workshop, I didn't start that that was that was some other people I just sort of, you know, I've been doing live programming. So I was part of that naturally. And then I just started organizing that for the last two years with other people. So the live workshop is not my thing at all, but I've been contributing to it. And it seems to be the thing that has the most momentum at the moment. Hmm. Oh, okay. Interesting. I didn't realize you didn't start the live workshop for some reason. I thought you did. No, no, it was on its own, but now I'm part of it.
Starting point is 00:25:13 So speaking of the live workshop, you were recently somewhat proud to be rejected from your own conference. How was that? Well, you know, I shouldn't talk out of school too much because, you know, I was on the program chair and submitted to my own workshop and the reviews were not good. The reviews, you know, so this is a problem, right? Like I said, I was complaining about the peer review process. We have, we've made it into sort of an Olympic sport, which is super competitive. And there's just all these reasons to tear a paper down, you know, and you know, you know about, oh, did they cite the related work? Did they, you know, um, you know, what evaluation methods were used, blah, blah, blah. So for the live workshop, we, we, we explicitly wanted to avoid that kind of evaluations, but some people just out of habit do that. So you get unlucky with the reviewers you get. Some reviewers are open-minded and others are just sort of looking for reasons to tear you
Starting point is 00:26:13 down. And I try to modulate that process when I'm sharing, but, you know, I had to step aside for my own papers, of course. So that's just how it came out. That's okay. I was going to withdraw the paper anyway because we had enough good – I was just really kind of a placeholder that in case we didn't get enough good submissions, I'd do my own thing. But I didn't want to take time away from other people. So it was really not that big a deal.
Starting point is 00:26:44 But it was kind of funny that I got rejected from my own conference. Yes. Well, yeah, I think, like you said, it's kind of a good sign that there was so much other good content that you didn't need to present your own stuff. It was a really wonderful day,
Starting point is 00:27:01 chock full of inspirational, amazing stuff. Yeah, I'm glad you liked it. I think we should keep it going. It's really nice to get that kind of feedback that people found it inspirational or at least supportive. They feel like they're not all alone because there's a lot of us that see that there's some basic things that need to be addressed about programming and that almost no one's doing it and everyone feels like they're
Starting point is 00:27:30 working alone and that's that's really really demotivating right and so that's why I've been trying to come up with these these events that bring people together and gives them some sort of support. Yeah. And it's really just for myself, right? I mean, this is what I need. I perceiving these problems, I perceiving that programming sucks. So I want to fix it, but I also see that the culture of research around programming is broken and I want to try and fix that just because I need it for myself. I need a community too. So I've been trying to build a community. It's so meta. So programming needs to be fixed, but then the improving of programming
Starting point is 00:28:11 needs to be fixed. How about the improving of the improving of programming? Yeah. Yeah. Well, you know, I mean, we're kind of, we're, I mean, I'm an, I guess I'm an engineer. I'm a problem solver. I see a problem and I feel like I'd like to solve it. Yeah. So before we move on and drill into some of the stuff you brought up earlier, which I'm really eager to do, I want to just briefly get an overview of what your current work is focused on. That's a very good question, and I should have an elevator pitch ready. So, well, so the line I would use at a dinner party is that I'm trying to make programming be like spreadsheeting, right? There's no such thing as spreadsheeting, right? You don't really have professional spreadsheeters, right? It's just normal people learn how to use a
Starting point is 00:29:10 spreadsheet. And programming should be that way. You should be able to pick it up, solve your own problems without being some sort of brainiac super nerd, right? It just should be easy to do. And I'm focusing on those kinds of problems that you would want to do with a casual programming, right? Small scale, simple problems solved simply. And application programming is the word for this. It seems to have fallen out of use, though, right? There used to be this clear separation between application and system programming. Are you familiar with that distinction?
Starting point is 00:29:49 I can guess what those terms mean, but they're not in common parlance for me. Right, exactly. So that's my point, is that it's just fallen out of the whole idea that there should be two sort of domains of intensity of programming. It seems to have been forgotten somehow and coincidentally happened when the internet started to make people rich and i think it's not a coincidence but um so we've forgotten about that there's this whole giant world of people with simple problems that need to build applications and shouldn't require years of training right um and and they shouldn't have to be full-time professionals
Starting point is 00:30:26 at programming to be able to solve these simple problems. We've just somehow forgotten about this entire world. So that's my research, is just to try to revive application programming for the modern world. And you look back at the old examples that worked, and probably COBOL, you know, is the original application programming
Starting point is 00:30:45 language. And as I said, muchly derided, but yet it was actually pretty effective. Visual Basic, you know, HyperCard, things like that. These are all in the past, though, because, you know, there's no way to get rich quick with these things so no one's interested in them anymore it seems so um so so you asked me what is my research so you know in the broad stroke it's making programming simple as simple as possible for solving simple small problems this is not building internet startups it's not building operating not building internet startups. It's not building operating systems. It's, you know, it's not any of this hardcore stuff. It's just simple problems in your own life and in your business that you want to solve. And you just don't want to make
Starting point is 00:31:36 a big deal about it. So the interesting questions is, okay, let's, if we make simplicity be the goal, right, what do we get? Because it never has been the goal. And to make this more precise, I think of the metric as, well, the metric should be learning time, right? I mean, we should actually be able to do experiments, take people who have no programming experience and give them this thing and see how long it takes them to be productive. But as a designer, you need a more useful rule of thumb. And so my rule of thumb is the size of the documentation. It's just think, what would it take to explain this fully? In fact, this is a really good rule of thumb whenever you're designing anything for other people to use. What would it take to explain this? And what I've found is that generally, if it's easier to explain, it's going to be a better solution. So, but think about that.
Starting point is 00:32:36 Think about printing out all the complete reference manuals for this programming environment and then stacking them up and measure how high that pile is. If you did that for our current so-called programming stack, I mean, the stack is enormous, right? It'd be really interesting to try and run this experiment, right? But, you know, it's got to be, you know, 10 feet high. It's got to be 20 feet high, right? I mean, just the man pages for Unix alone, right? You know, and the reference manual for C++, right? The specs, right? Look at the standards for all the W3C standards, right? That's probably six feet right there, you know?
Starting point is 00:33:14 So just think about what it's, the amount of knowledge. And we take this for granted, right? There's a word for this. It's called the curse of knowledge, right? Once you've learned something, you take for granted the effort it took to learn that, and it's impossible to reimagine yourself not knowing it. But the reason it takes so many years for a programmer to become an expert
Starting point is 00:33:36 is that they have to master so much knowledge. So that's what I'm trying to do. I'm trying to let you build applications without having to learn a lot of bullshit. Because it is, it's mostly bullshit. I mean, it's just crazy. How can Unix require 1,000 commands? Why does the LS command require hundreds of switches?
Starting point is 00:33:59 Obviously, no one's thinking about simplification here. They just keep adding on more and more and more. Nobody ever thinks about cutting it down. So this sounds a lot like Brad Myers' natural programming project, similar goals, like taking programming and making it as similar to the way people normally do things. Would you say that that's a good point of comparison or is there a distinction you want to articulate? Well, there certainly are distinctions, but I do agree very much with Brad's whole mission
Starting point is 00:34:36 there. I think that is the goal is that that's probably one of the key intellectual thing we've got to break through. There's also just some engineering technical issues, just figuring out how to do things simpler than they are done now, which isn't any deep issue of human nature. It's just good design. It's just good design. It's just things are crazy, complicated, crazily overcomplicated. They need to be reengineered with an eye towards simplicity. And it's just that nobody's doing that.
Starting point is 00:35:15 Nobody gives a damn about simplifying things because it doesn't help them personally immediately. Right. It doesn't help you ship code. It doesn't help you, you know, your your startup to succeed. It doesn't help you ship code. It doesn't help you, you know, your startup to succeed. It doesn't help you to publish papers, right? Because papers, academic papers are always about making things more complicated, not simpler. You know, so there's no incentive system to make things simpler. So part of it is just a matter of we've got to figure out a way of funding the engineering needed to redo stuff.
Starting point is 00:35:48 You know, we just can't keep adding layers. So I'd say that's the other side of the coin. There's this let's just rethink programming conceptually to make it more natural. And that often comes down to reducing abstraction, making things more concrete. Right. A lot about what live programming is about. That often comes down to reducing abstraction, making things more concrete, right? A lot about what live programming is about. And then there's just, let's just figure out how, you know, re-engineer things. It doesn't have to be any great philosophical impact to it.
Starting point is 00:36:16 It's just re-engineering for simplicity. I'd be curious to, like, dig into, like, how to define simplicity. Because it's kind of an amorphous thing to get a hold of. It's very hard. How do you think about it? It is subjective. And that's why I think of it in terms of feat of documentation. And that's a rule of thumb.
Starting point is 00:36:40 The truly scientific way to define it, like I said, is with clinical studies, right? You know, just give this stuff to people and observe how long it takes them to learn it, right? Because learning time, I would say, is the real metric, right? It's also, you know, it's a touchy, very touchy issue, which is sort of IQ and analytical skills. Clearly, there are differences in analytical thinking skills between people. And the way we've built programming very much favors those of us who are really good thinking abstractly with symbols. Good at math is probably the simplest way to sum it up. And we should, part of the natural programming idea is to de-emphasize mathematical thinking skills in programming.
Starting point is 00:37:37 So there's something, it's not just the time it takes to learn, it's also sort of the mental skill, the required to do it at all. So I think I was trying to answer your question, did I? Yeah, yeah. I think an interesting counter way to look at simplicity would be so the way you described it was as a like the startup cost or like the time it takes for you to learn and then once you've learned you're just doing but I think I guess the other way to think about it is simplicity is the cost of doing any like arbitrary thing once you've already learned so like you treat the learning cost as a one-time cost and you're like, I don't care how long
Starting point is 00:38:29 it takes me to learn it. I just want, once I've learned it, once I've learned the tool, for things then to be simple. So is that kind of the opposite of what you're saying or they're more related? You know, I don't know. I mean, that's, you know, I think that's Rich Hickey's point, right? When he talks about, you know, simple versus easy or something like that, right? I'm uncomfortable. I just feel strategically, I want to focus on the learning phase. Because once you're an expert, you know, you're an expert, right? And everything seems easy in some sense to you.
Starting point is 00:39:11 And we get into, and that's the, okay, here's what it is. That's the mode we're in when we talk about improving programming. Most people are talking about, okay, let's make it better for experts. And, okay, that's a good thing to do and but it's not solving the fundamental problem I feel and it's it's sort of masking the real problem which is becoming an expert so I'm just I've just chosen to focus on the learning phase if we could get people to be become experts you know with a hundredth of the time, that's going
Starting point is 00:39:46 to be an enormous big deal. And the other stuff is sort of more the normal day-to-day innovation that we do, normal stuff that we're good at, right? So it's not something I need to do. It's not something with an enormous impact, I guess the way I'd put it. Interesting. Yeah. Well, I guess they're kind of approaching
Starting point is 00:40:05 the same problem from different directions. You could raise the floor and take normal people and make them programmers, or you can kind of lower the ceiling isn't the right way of thinking of it, but you could take expert programming and slowly bring it to normal people, or you could take
Starting point is 00:40:21 normal people and slowly bring them to programming. I know this is more where you're I mean, I don't want to, I know this is more where you're coming from. I don't want to criticize it. I think it's a totally valid thing to be doing. But I would say that, you know, it just, it feels to me like
Starting point is 00:40:36 sort of a endless cycle of fads. You know, it's the experts just have, I like this, you know, first it was objects, now it's functions, you know it's the experts just have i like this you know first it was objects now it's functions you know i don't know i just um it's not it feels to me like it's a cycle you know of of things and um it's but you know more power to that that's you know we can all we can all help in different directions yeah so the answer to your bit to your question after all this is simply like I'm just choosing to work on that aspect of simplicity because I feel that's the hardest and the least addressed at the moment got it getting getting people
Starting point is 00:41:23 making it simpler to learn how to program. Yeah, so one of the things we point to when we talk about how obvious it is that programming is broken, is that there are things that we're simulating in our heads that computers could just simulate for us, obviously. Like we could be simulating Booleans or whatever. You've done a lot of work in this domain
Starting point is 00:41:42 where you're offloading the simulating work of the human brain the human programmer to the computer yes so it uh part of me is wondering if that's like a reasonable foundation for a way to improve programming uh you you basically instead of looking at um the like the stack of everything someone needs to learn you look at every time someone is doing something in their brain that a computer could do better, and you try and put that somehow into the computer? Yes. What do you think about that perspective? if you've decided to use, you know, sort of nuclear powered programming technology, let's say you're programming in, you know, with continuations and, you know, and like, you know, all these category theoretic abstractions that people love these days. Okay. You know, trying to materialize those in a UI
Starting point is 00:42:48 is a Herculean effort. Okay. Maybe it's possible, but maybe you shouldn't have chosen those super powerful abstractions in the first place that are so hard to visualize. So I'm coming at it from the other way. I'm saying, okay, what would be the easiest to visualize? I'm trying to let the programming experience be the driver of the design rather than abstract considerations of power and expressivity and things like that that we normally tend to think of. I'm finding that really helpful that whenever I come to a problem, I think of, okay, how is this going to look in the IDE? You know, what would be the simplest look in the IDE? Go that way, you know.
Starting point is 00:43:36 So let the direct experience of programming with our tools be the guide and choose the programming language to match that. So at the very least, you have to design them together, right? You have to design the programming experience and the semantics of the language together. And I'm sort of tending to say that, well, actually, the experience is even more important. That should be the strongest vote. Yes. So, that's somewhere, even though, I guess, you and I come from different perspectives, like you alluded to, that is one thing that you and I both agree on, which is quite rare.
Starting point is 00:44:11 The experience, so you have to design, I guess there are a few pieces, but one of them is that you have to co-design the semantics and the user experience at the same time like you can't just pick right um you can't just pick some semantics and then like put a good interface on top of it they need to be built together and then the other thing is that the experience should be somehow driving the semantics um so and you know i mean this this is also interesting. This occurred to me recently. So Brett Victor said the same thing at the end of his learnable programming essay. He basically says, has a giant caveat, says, well, you know, I'm not claiming that any of this stuff I showed you actually works or is actually could work. What I'm saying is that we should redesign programming so that we get such an experience. So that's what I've been saying all along. I 100% agree with that. And
Starting point is 00:45:12 this came up because from your previous podcast, you were talking with Vlad, right, about how Brett Victor inspired him. And I think, you know, I think a lot of people that were inspired by Brett Victor don't understand him or at least understand that statement he made, right? Because a lot of people seem to think you can just reskin programming, right? Let's take it as it is and just slap a much nicer UI on top, problem solved. That's not probably going to be possible. Yeah, well, I guess that's what he did in Learnable Programming. He took Processing.js and he just slapped a better UI on top of it. So when you look at that literally and you don't read that section that you mentioned,
Starting point is 00:45:55 yeah, it's easy to see how people misunderstood. I don't know if you'll find this a useful thing to go through, but I feel like there are two sides to this debate. Or like, usually there are two camps, and then you and I, and maybe Brett Victor are kind of in this middle camp. But it feels like there's the semantic people who write academic papers with Greek letters in them. And on the other hand, they're the user interface people, I guess maybe the live people, who take existing programmatic interfaces and then just slap better UIs on top of them. And so there's this kind of gulf
Starting point is 00:46:37 where there's no one who's thinking about doing both at the same time. Yeah, so you and I are kind of... That's hard. It's no man's land. Yes. Right, so the path of least resistance is to go one way or the other, right?
Starting point is 00:46:53 Is to do UI kind of work or to do this abstract semantics work. And if those were sufficient, that would be great, but they haven't solved our problems yet. And so it's a much harder problem than a lot of people wish or are acknowledging, at least. And I think it's just a growth process. that everyone's first attempt is always going to be a data flow programming language, right? With boxes and arrows or something like that, or a spreadsheet style, again, data flow language. So it's just the natural first try.
Starting point is 00:47:37 But after that doesn't solve all the problems, then we need to move on and start getting deeper. Yeah. So I guess one of the big problems people come to once they realize that, you know, data flow programming doesn't, or what people realize, or so at least for me, I can speak to myself, what got me past the like data flow boxes and wires was i i realized that like uh effects state side effects uh like ah like these things are really you know like these things aren't just a side case like the reason spreadsheets aren't programming is that it doesn't have these side effect things but then if we add the side effect things then we lose a lot of the properties of spreadsheets and so you're kind of bingo. So you've done a lot of work.
Starting point is 00:48:28 Like, there are some of your some of your projects. One of your papers I was reading recently, specifically addresses side effects. So yeah, where is your thinking on this now? That is such a central problem, right? Like, that's sort of, you know, the original sin, right? I mean, it is just such an enormous thing. And I've been hacking at that problem from different directions for a long time because, you know, realizing that, you know, this is the central problem. And of course, functional programming was all about this too, right? They realized that that was the central problem. Unfortunately, they sort of kind of just swept it under the rug in various ways. So if we're going to really confront that, how do we do it? And, you know, I'd say this is very much the big challenge and
Starting point is 00:49:18 an open big challenge in this whole field of trying to improve programming, is how do we deal with state? And I would say I've done a bunch of experiments, all of which were failures, educational failures. I learned a lot in the process, but I haven't solved the problem in any means. And my latest thinking, in fact, is that it's just as I've come full circle back to thinking that, you know what, I'm just going to go with naive side effects. And
Starting point is 00:49:55 what I realized is that basically the programming experience just is much more natural, It seems it just works much simpler in simple cases. If you just let there be naive side effects, right? There's a state and you're mutating it because that's what you're doing, right? In a spreadsheet, you know, you're editing the data, you're editing the formulas, right? There's a state of the spreadsheet, right? Right there in front of you. That's a very concrete, intuitive thing. we're used to living in the real world where we change things change as we make actions on them right it's a very intuitive thing so my latest thinking is to simply go back to naive side effecting on state and then try and manage it you know add on
Starting point is 00:50:42 features that can statically analyze what's going on. And I think I can, because of the restricted semantics that I'm using in subtext now, that I can do a better job than has been done in the past. But did you understand that? Or should I go back over that? Oh, yeah. No, yeah. That makes sense.
Starting point is 00:51:01 I think this is a good opportunity to zoom out and just talk about, so you mentioned that side effects and mutable state was like one of like the central issues. So I'd be curious to get your perspective on what the other central issues are. For example, what comes to mind for me would be, you know, we need to reinvent version control. Git clearly isn't the end-all be-all. Okay, so big problems. So, a really big problem for, a really big problem in my mind is the distinction between the programming language and the database, right? There shouldn't be such a distinction, right? Why is it that for data that's going to live more than just the run of a program versus the data that lives while the program's running, why are those so utterly different,
Starting point is 00:51:53 right? They're utterly, utterly different. Not only is the shape different, but the semantics are different, you know, transactions and queries versus objects. And, you know, so I've never understood why we can't solve that problem. It is actually very hard, right? And, but I think it's something we need to solve. There should just be one data model, right? That works for the program. The idea that there's a database in a programming language just seems to me a big mistake, right?
Starting point is 00:52:21 Agreed. So, but, and that used to be a research topic, actually, back in the 80s, right? It was called persistent programming languages, orthogonal persistency, there was a number of buzzwords around it, but it never really, it never worked. No one ever figured it out. And it just sort of dropped off the radar, and people gave up on it. So I think that's something we need to get back to. Sorry, on that line of thinking, I was going to say, what about the distinction between client and server? I feel like that distinction also is artificial and needs to kind of go away. Do you agree there, too? Yes.
Starting point is 00:53:02 Yes, I do. I think that that one's actually sort of easier, I think. I mean, we see, we can see ways of solving that and people have worked on it. And I'm not sure that it isn't mostly just sort of a technology, you know, inertia thing holding us back there. Although I guess that's holding us back everywhere. But yeah, absolutely. Distributed programming is another one of those long-term holy grails that people have repeatedly tried.
Starting point is 00:53:34 I'm not focusing on it myself personally so much because it doesn't loom that large for the low-end kind of stuff I'm focusing on right now. I used to think a lot more about it, though, and it certainly is another open problem. You also mentioned fluidity of structured editing, right? So that's also a really tough problem. We need to get away from keystroke editing as the fundamental operation on changing a program. We need higher level operations and that requires a higher level user interface. And it's hard.
Starting point is 00:54:18 We actually, keystroke editing is actually very easy. It's certainly easy to learn and well supported. Our hardware supports it. And we have actually, you know, letter keys, dedicated letter keys on the keyboard. It's all there for us. And the whole theory of programming languages has been built up around the idea of syntax. So this is another thing that a lot of people initially realize is crazy, that it's like we're programming as if we're still on punched cards, right?
Starting point is 00:54:57 It's all just, or a teletype, right? And why can't we fix that? That's really hard to see how to do it. I've been trying a long time and it's just hard. So I'm realizing now that we probably should have, in my thought, I should have, earlier in this conversation, back when we were going through your life,
Starting point is 00:55:23 I kind of want to get a timeline and definitions for like, what is subtext? What is chorus? Uh, cause, um, like to me, it feels like the, uh, the subtext is kind of like an umbrella term for iterations of, of prototype experiments. So it's almost like in a, um, in like a TV show. That's exactly. That's all it is. It's become just sort of my brand name that I'm iterating on for my experiments. And it's never been a real thing. I've hit this point where I want to stop doing these crazy experiments and pull it together into a real thing. So Subtex is just kind of a brand name for my research project. And there's been various iterations. I've tried slapping different names on it at different times, but they're just
Starting point is 00:56:26 really sort of just they could have version numbers on them as well but i do feel that i've you know maybe you can give me some feedback on this but i feel like i've um at this point i've failed to build anything that's detailed enough that other people could you know sink their teeth into right so i've done these crazy experiments testing the boundaries of what what's possible and i've learned a lot in the process but i don't think i've taught anybody else anything right because they're just too fragmentary and speculative and sketchy. So my goal at this point is to change mode and to try and consolidate what I've learned and just pull it together into a thing,
Starting point is 00:57:14 a programming system that is complete enough to build some reasonable example applications and could be understood and torn apart by other people. Before we talk about the bringing it together work you're doing now, I want to just do a quick overview of past experiments, just to give people who aren't familiar with your work a sense of the breadth of it all. So I got started, I had this original paper called example-centric programming, which was just this idea let's let's let's make concrete examples front and center right as a way of reducing the abstraction load and then i
Starting point is 00:57:52 and that that was done like with that was like a hack on a java interpreter to show how that might work then subtext was the next paper where i was finally saying okay let, let's reinvent a new programming language. And I would say the key idea in there was this idea of managed copy and paste, which I think was a good idea. I didn't take it very far, and I'm just now getting to the point of being able to get back to it, where copy and paste is a first-class citizen. And it's not an evil habit anymore. It's actually the way we program and we track it and we consider it to be more like versioning of code. But that was more of a think piece. Then I started to dig into specific technical problems. So there was the thing about, like you mentioned, Boolean algebra, right, conditionals, and all the crazy thinking we need to do about, you know, if, then, else,
Starting point is 00:58:51 and all stuff. So I did that thing on schematic tables, which was using decision tables to visualize logic in a programming language, which was interesting, but it's pretty much a dead end. I've never figured out how to integrate that fully in any of my subsequent experiments. So that was just a little strange experiment. Then I said, okay, the big issue is side effects, right? And so let's let's let's take on the biggie and so i spent years with several experiments on managing side effects in different ways i um i finally had a paper or a video called two-way data flow showing one way of of doing that which actually sort of is somewhat you know prefigured all the popular stuff with one-way data flow these days in react kind of things but adding in something for the other direction which is sort of
Starting point is 00:59:54 swept under the rug a lot for the state management again that was interesting um um ultimately didn't totally work. It had problems, but there was some very interesting properties there that I want to try and hold on to. I guess that was like 2014, right? At that point is when I suddenly had started to shift direction to thinking about end users instead of professional programmers. And then I started working what I was calling Chorus, which was
Starting point is 01:00:31 sort of a hyper-cardy programming environment on mobile phones for building social apps, though, focused on sort of build your own Facebook. And I did some, a couple of versions of that. And I learned a lot. And that stuff I think is still what I'm focused on now. It's just that I had some technical problems. You know, the structure editing just did not work at all. And I had some, the whole integration of the database and the programming language was not working out quite right. So I, and that was also while I was at CDG and HARC.
Starting point is 01:01:16 And that's kind of at the end of HARC, I went into a phase of just doing some little crazy experiments about what you could do. One of the key ideas I've had since the beginning was that a program is not just a dead piece of code, whether it's text or tree structure, whatever, but most people think of it as a dead structure that gets magically interpreted. You know, if we put the program, the running program into a database so that you could actually see,
Starting point is 01:01:52 so for instance, where the PC is, right? You know, it's actually part of the data model. What can we do? And there's some crazy things you can do. So reifying programming and direct programming were a couple of videos i showed you can do these weird things like going in and messing with the at with a specific executing instance of the code without modifying the code right so this is idea of a um what did i call it an intervention in that you can actually sort of muck around with a specific example, executing
Starting point is 01:02:27 example as without editing the code, but that creates sort of a gradient, sort of a pressure that, okay, the code is now not matching its execution. How do we fix that? Well, we run these refactorings, which abstract those interventions into real code. So some weird stuff, but I wanted to see what was possible. And that's sort of, you know, more or less takes us up to the, oh yeah. So, and then my latest thing was going back on programming by demonstration. Was if we take the hypothesis that the user and the code should be equivalent, right?
Starting point is 01:03:09 Anything a program can do, a user can do directly, you know, by direct manipulation right there in a graphical interface and vice versa. That anything the user does, it could be recorded and turned into a program. Well, if we take that equivalency as an axiom, what does that dictate about what the programming language should be? And that's when I realized, hey, you know what? That implies naive side effects. That just sort of falls out directly as a corollary of that assumption, that that's the way you have to have your programming language work.
Starting point is 01:03:45 So that's why I believe in that now. And then I came, my latest thing was coming back to the managed copy and paste idea and showing how that might work in a little more detail. And so I guess that brings us to the present day. So yeah, you mentioned that you're kind of bringing it all together and you're trying to make a more concrete version of subtext that people can sink their teeth into. So what's that process like? Yeah, so basically it's time to put up, right? It's time to actually deliver something, at least for me personally.
Starting point is 01:04:24 I just feel like I've reached the point where I've explored lots of ideas and I want to pull what I can together into something that's actually usable and something that I can build upon. It's been very frustrating to keep throwing the stuff away, you know, every 18 months or so
Starting point is 01:04:44 and starting over. So I'm trying to, I want to build something that other people can use. And so I'm actually building, you know, writing up examples and defining a syntax. You know, I've done this in smaller scales before, but I'm just trying to pull it all together. I'm not answering your question very well.
Starting point is 01:05:11 As I guess it's because I'm just in the middle of it, it's hard for me to describe what I'm doing. But I would like to have subtext alpha. I would like to actually have something that I can release, at least to other researchers to play with and get feedback on that is usable. That is you could build comes with a set of non-trivial examples and you could build non-trivial examples yourself. I'm still thinking about the chorus kind of use cases. It's sort of like build your own Facebook
Starting point is 01:05:46 in 15 minutes kind of idea. You know, you should be able to just whip that kind of a social application together. And it has enough of the building blocks built in so that that's just natural. It's very much this document oriented model. I guess I really haven't talked about that too much, but that's also been a thread in my work for a long, long time
Starting point is 01:06:11 that a good way to think of applications is as a document. It's a shared live document. It's like a Google Doc, but it reacts. It's not just passive data that you edit. It actually has logic in it, and it reacts to the changes you make to it and can do things. And I think that's a nice – I guess Chorus was when I first really focused on that idea. So I'm still focused on that idea. It's a simple document-as-application programming environment
Starting point is 01:06:45 smart documents in some sense there are a few companies that meet that description these days like Notion, there's this new one Coda, maybe a few others, what do you think about those? well I think
Starting point is 01:07:03 yeah I think it is an idea whose time has come. And, you know, I'm not the only person who's thought of it, obviously. And I've also been broadcasting this idea. Like I was pushing the Notion guys years ago towards in this direction. I'm really like what they've done. But they're all being smart about it. They're being smart in that they're not doing programming, right? Because that's the kiss of death sort of for complexity. And that's the limitation of all of these. They aren't real full of programming yet.
Starting point is 01:07:40 So they've found sweet spots of use cases that they can handle with various sorts of canned parameterizable components. But that's still all it is. And that's been the bane of every non-programming application development environment. Because people have been doing this forever. People have been trying to solve this problem. I haven't talked about this. I've been pretending like it's been completely ignored, but no, people have been claiming to have let you build applications without programming forever, right? This has been many, many generations of these,
Starting point is 01:08:18 but they never really succeed. And I'm not going to say that I actually understand why they haven't all succeeded. It's a bit of a mystery, but I think the central problem is that they realize that if you go, if you make it full on programming, it just becomes too complicated, right? Especially because what they do is they say okay well we're just going to like put in vb script right into microsoft word or google has google script right that you can put into google spreadsheets right but it's just a full-on programming language there's an enormous abstraction leap at that point enormous complexity leap that many people can't make. So everyone's seen why those things don't really catch on. And so now they've wised up and they're
Starting point is 01:09:13 just not going there. They're not putting a programming language in at all and just keeping it really simple. So that's great, but it's not solving the problem until we get programming. And to me, the problem is that we just don't know how to make programming simple enough, right? Because we make this big leap into just sort of normal vanilla programming the way we all know it. And that's just not simple enough. So I'd say is that we need an intellectual breakthrough here
Starting point is 01:09:42 about how to make programming simpler in order to really pull it off yeah and um just to get a i know it's difficult because you're in the thick of it but just to get concrete about um what you're currently working on when you mentioned subtext alpha and releasing it so people could play with it are should we be expecting a like a you're releasing a compiler and it's a text-based language, or is it going to be more like your earlier subtext demos where it's like a full GUI or a structured editor?
Starting point is 01:10:12 What should we be expecting it to look like, the output of this current work? It's, no, it's a full programming system, a full graphical environment that you program in. And the text shows up on the screen, but there's no text files. There is a textual syntax. It turns out that really, really is a handy way of defining and building a language. But the textual syntax is only designed to support simple examples and test cases it's not
Starting point is 01:10:47 designed to support um building and editing and incrementally modifying code and it doesn't support everything you can do in the language but so there so there is a textual syntax hidden in there but it's going to be. And it's going to be a real programming environment, which raises the bar quite a bit. But that's what's necessary. Just like all of us have a node and wires phase, a lot of us have a structured editor phase. But then some of us will leave it and be like, you know what? Actually, text isn't all that bad. Structured editors are hard.
Starting point is 01:11:23 But you're someone who's stuck with structured editors your entire research career, and you're really insistent that they're like they need to be part of the solution. So I'd be curious to get a sense of why that is. Yeah. So there's a couple of places where we absolutely need structured editing. So maybe one of the most obvious ones is when you think about version control. You do a rename refactoring in your system. Currently, that shows up as a million separate edits in the version control system instead of a rename operation, right? And those million different rename edits conflict with any other change on that line of source code
Starting point is 01:12:10 that occurs in a parallel fork, right? Which is crazy because a rename is in fact completely orthogonal, right? And shouldn't conflict with anything else. So if you're doing keystroke editing, if you're doing text-level editing and your code is text, you're stuck with that. You have to get to a structured editor to capture the fact that a rename is a single operation, and it's recorded as a rename. It's not recorded as a bunch of edits to the code. So that's one example of why we need structured editing.
Starting point is 01:12:49 Another one, a little more subtle, has to do with schema change, which is, this is quite subtle, I guess, but it's a really big problem. When you wanna integrate the programming language and the database together, you have to deal with the fact that, you know,
Starting point is 01:13:11 normally we think of, well, we just edit the code and then you run it, right? You run it and it starts from scratch, right? And you don't have to worry about the pre-existing data, but the database is the pre-existing data, you know? So we've solved that problem by sweeping it under the rug and putting it in the database. But if don't do that then you're editing a running system which has all these running instances of of the data out there and you've got to change it and you've got to capture again like with renaming you need to capture your edits at a higher level in order to do schema change. When you inserting, deleting a field and inserting a new field, right? Is different than renaming that one field, right? To a different name and changing its type, right?
Starting point is 01:13:55 Those are just from a schema change point of view, those are completely different and we got to capture that difference. And we can only do that by capturing high level structural edits rather than keystroke editing. So that's a couple of examples. And it's just also more of a, I got to say, it's more of a religious belief, to be honest. I just think that there's so many, also this managed copy and paste idea, you know, that's something that I need to have an ID to pull off, right?
Starting point is 01:14:27 Because I'm tracking stuff that's no longer in the text of the source. It's sort of an epiphenomenon about how the pieces of the source relate to each other. So I just think there's a whole lot of potential ways we can improve programming, but they are only going to be possible when you have the code is a living, understood structure inside the user interface of the programmer. You know, IDEs are really smart. I mean, look at IDEs. Okay, they've really come a long ways. They're amazingly smart what they do to sort of reverse engineer what's going on in the program and give you smart interaction. So, you know, they've done impressive things.
Starting point is 01:15:11 And I just think we can do even better. I think we will only discover what's possible to do once we go full structure editing. And that opens up the box to many, many new ways of interacting with your code. And many of my experiments are like that, this idea of munging with intervening in the runtime execution of the code. You need a fancy environment to do that. Once we discover those things and figure out what actually works for us, I wouldn't be completely surprised if a lot of that couldn't be retrofitted
Starting point is 01:15:44 into textual programming with enough herculean effort it's just that i'm not hercules you know i'm just one person and i i can't build an eclipse right you know the very first ide eclipse was you know like a hundred person years or something right it was just amazing herculean effort to build the first one i thought so one answer i'm i clearly i'm touchy on this and i'm trying i'm being defensive um but another answer is just that i think that it's going to be easier to uncover and run these experiments and get some results using structured editor rather than trying to cram it into the text editor, even though it might still be possible to cram it into a text editor.
Starting point is 01:16:29 You won't do it because you'll fall into the old ruts, you know, and you won't even think about what's possible if you're just using a text editor. So in a sense, it's a discipline. It's an intellectual discipline. Yeah, so this is maybe the best answer here. It's kind of like, you know, Haskell had laziness as an intellectual discipline on the language design. So, you know, I'm thinking structure editing is also kind of an intellectual discipline to prevent us from falling into the ruts of text editing to open up to what would be possible. Well, I liked earlier when you were admitting that it may be a religious belief, because I feel like that we people trying to improve programming are kind of doing science, but kind of doing design, and it's like unclear when we do something.
Starting point is 01:17:26 It's not science. It's definitely not science. Yeah, it's definitely not science. It's design. Well, like the field is called computer science, so you'd think it'd be science, but I think I guess a lot of things called science, like political science, isn't really a science. Well, that's the old joke.
Starting point is 01:17:42 That's the old joke. Any field that has science in its name isn't one. science. Well, that's the old joke. That's the old joke. Any field that has science in its name isn't one. Yeah, okay, so. I think that the misnaming of computer science has had all sorts of pernicious effects. You know, it's really, really bad. It's not a science, it's not math either. And most of it is what's most properly called design.
Starting point is 01:18:04 Well, so, and so I guess instead of calling it a religious belief, it could just be like a taste thing, like an aesthetics thing. Yeah, yeah. It's a school of thought. It's an approach that works, that's coherent, and is organizing, but it's not necessarily right or wrong versus other approaches. So, on this note, I wanted to touch on the Burbacai group thing that you were working
Starting point is 01:18:35 on, but we don't have to if that's kind of something that's not ready to be talked about. Oh, yes. That's Borobaki. Borobaki, there we go. Yeah, that's kind of a funny, you know, so I'm constantly, I don't know why I do this, but I'm constantly starting various little initiatives trying to see what will, you know, stick to the wall sort of about with other people about trying to just doing community organizing. So that was an idea that hasn't really stuck. Yeah, I don't think we should really. It's not worth going into here.
Starting point is 01:19:09 Okay. The thing that I wanted to touch on was basically what we're talking about already. So there's HCI, Human Computer Interaction, which is like a field of study where they um like will make some improvement and then they'll like test um like how much time it takes uh users to complete a task with an older tool and a new tool um and you know they're like different way like how do we measure how do we make progress in this in this work or maybe there's no way. That sort of distinction of how do we organize our work as a community. Right, so that's the methodological question and I have been thinking about that a lot and that was that Borobaki proposal you ran into.
Starting point is 01:19:57 It's a problem for us, right? We don't have a clear methodology. We call ourselves computer science and so we think, oh, it must be science. Although in fact, most computer science is much closer to math, really. I mean, certainly programming language theory uses a lot of proofs, right? Greek letters and theorems and stuff. The HCI people are scientists and in the sense of psychological science, right? They're measuring the people. And so they want to do experiments to get actual empirical data on what works and doesn't.
Starting point is 01:20:35 But, you know, unfortunately, psychological experiments are very hard to do, hard to get any meaningful things out of. And so, you know, the simplest way of doing it is very shallow sorts of A, B testing, you know, different ways of having UI elements work and how the mouse works and physical aspects of interaction with the computer. But deep semantics like, you know, object oriented versus functional programming right how do you how do you run a test you know an experiment on that very very difficult certainly very difficult at the um in practical terms you know in terms of how much money and time and so forth we can
Starting point is 01:21:21 invest in it you know ultimately you'd have to do a clinical trial like with drugs right you'd have to take people that don't know how to program at all and spend years training them in object oriented and then functional programming and then compare the two and results and it's you know there'd be so much noise it's just you know building it's just almost impossible impractical to do real controlled science there. And so you're left with how do you tell what's good and what's bad, what's working and what's not. And I don't think we have really good answers to those questions. It's something we need to be asking ourselves. What about, you know, whatever has won is best, whatever more people use? the easiest to adopt based on where people are currently.
Starting point is 01:22:26 And that's why we're stuck now, because we're in this dead end of all this existing technology, which it would be too expensive to break free from, and nobody wants to invest that money. And so we'll just keep making it harder and harder. Well, so I'm trying to think about how we make progress as a community. The way it currently happens is like basically there's no methodology and no organization or, you know, there's very little methodology or organization in our little reinventing future of programming community. more like we're all just doing our own little independent work and will occasionally through various venues like your conferences or my slack group will like share things and and talk but it's
Starting point is 01:23:11 it's very much um just like a mess of people doing work and then hopefully i guess the general hope is that one day something or some collection of things will come out of it is is that how you see it just like this big mess or or you you hope that there'll be something more I think sure well this is why I what I call my community organizing efforts right we need to build an institutions which are dedicated to improving programming and this means forums where people can get constructive feedback. So the live programming workshop is a good place. I'd like to slowly start raising the bar there a bit where we have people are expected to actually try and position their work relative to past work and say what they how it's different, you know, what they learned from the previous work and what they're building upon, which we don't do at all currently.
Starting point is 01:24:15 And also try to start coming up with people, having people suggest why, explain why their thing is better not just say hey here it is it's cool right but actually try and make an argument what is better about this why do you think it is and it's not empirical data it's not a theorem but there's still you know reason there is argument right you should we should you know make a a persuasive argument for things. So just sort of raising the bar a bit on these issues to start trying to get more of a positive feedback loop in the research where people are getting feedback and feeding back on other people's work. Because that's what works about science, is the incremental ratcheting nature of it, right? That you're kind of competing,
Starting point is 01:25:08 but you're also cooperating with other people. So I would just like to start building a place where that positive feedback loop of research can occur. And it's not occurring in the existing programming language research venues because they're, you know, they're playing a different game. And it's not a working in industry because they're playing a different game. They just want to ship stuff, right? They want to get things that work. They can't think long term. So normally in our society, academics is the place that is supposed
Starting point is 01:25:43 to take on this responsibility. But for various various reasons they aren't into that right now. So we have to invent our own. I would note that you know other engineering fields also have professional societies, right, which try and oversee the health of the field and invest in education and will even fund research and attempts to reform and redesign existing things. Every other engineering discipline has these professional societies, but we don't. It's really strange. There's no American Programmers Association, right? All we have is the ACM, which is entirely taken over by academics. It's, it's, they, they just have lip service to practitioners, but it's, it's a completely academic thing devoted to the career needs of academics. So there's, we're a young, stupid field, right? We haven't figured things out and we haven't.
Starting point is 01:26:47 And part of the problem is, am I just ranting here? But part of the problem is that we're such a young field, right? That we're not only young in terms of total time we've existed, like 50 some years, but the average age of our practitioners keeps going down, right? Because we're growing so fast that we keep getting new entrants, new young people coming in. And so everybody was born yesterday, right? And so there's so few people that have been around a long time like me, our voices drowned out. And worse, it's almost deprecated, right? People consider old timers to not have anything relevant
Starting point is 01:27:22 to say in this field, you know, unlike other engineering fields where, you know, someone who's built big things successfully for decades is considered to actually maybe know something, but not in our field. So, and it's the elders that traditionally focus on investing back in the health of community and the field as a whole. And so we don't have that feedback loop working yet. We need to work on that. Yeah, it's really hard. We can't really. So one of our problems is we can't really prove that there's a problem. Right. Many people say, hey, there's no problem. You know, it's perfectly fine. You know, I work at Google where I get paid a lot of money. We're doing great shit.
Starting point is 01:28:06 It's all good, you know, and what is your problem, dude, right? And I don't have any answer to that. I mean, people are, a lot of people are just perfectly satisfied with the status quo. A lot of people think that all we need to do is just have better education to teach people how to do this shit. And we don't have any real proof that there's a problem. How do you prove to these people that, no, this is wrong, this is not going to work? It's just an insight. It's a deeply felt belief, but I don't know how to prove it's just an insight it's a it's a deeply felt belief but i don't know how to prove it to people i can just make an argument i can say well look at spreadsheets right look at how people
Starting point is 01:28:54 use spreadsheets right surely there's there's got to be something that's almost as easy to use as a spreadsheet that would let people do things but but I can't prove it until. So, I mean, the way to prove it is by demonstration, by example, right? You know, okay, here it is. We haven't got that yet. We don't have, you know, we can point to HyperCard as a good success case though. So we point to spreadsheets, we point to HyperCard, things like that, but it doesn't seem to convince a lot of people you know I think the real problem ultimately is is we have there's some very hard technical theoretical problems about rethinking the way we do programming and there's
Starting point is 01:29:41 also a lot of just really hard engineering work that needs to be done just to simplify our existing technologies. But ultimately, the real gating factor, the real thing we have to do is it's this institutional problem. It's cultural, culture and institution is what's holding us back. You know, we have a culture of programming, which is really kind of toxic in many ways, but it's, I mean, toxic is a loaded word these days. So I'll retract toxic. I'll just say it is,
Starting point is 01:30:19 the culture of programming is counterproductive. It's not heading us in the right direction. We are, we're foolishly making things worse for ourselves unknowingly. And it's just sort of many of the normal problem, normal sort of pathologies of, of smart young guys, right? Like I was, you know, we're just like kind of too full of ourselves in our smartness. And we need to get a little humility and a little experience about what actually works. But that's easy to say, oh, just wise up, right? That doesn't happen. In real life, the way, as far as I can see, that human civilization progresses
Starting point is 01:31:08 is that we build institutions that try and hand down best practices from the old people that have learned them to the young people who don't need to go through and learn the hard way, right? And so we're really lacking in good institutions. And I think in the long term, that's where we need to solve that problem to really make progress.
Starting point is 01:31:32 We need to have institutions that are concerned with the actual practice of programming, not just publishing paper and getting papers and getting tenure, how to improve actual programming and not just for the people that are full-time programmers, but for everybody that wants to use, that could use this technology. And I'm not in a position to create such an institution, but I'd certainly love to be part
Starting point is 01:31:57 of it if we can somehow get the energy together. Cool. So just to wrap up, I'd like to ask for different ways, or platforms for people wanting to interact with you or your work or the conferences that you're a part of. What are the like links or pointers or email addresses you'd want to have known to people? Right. Well, so, I mean, at this point, your Slack is a good place.
Starting point is 01:32:34 Although you really should get off Slack. Slack really sucks, but it's just a chat app. I hate it. Yeah, I know. It's funny because I also hate it, yet I'm the person running it. So I'm full of empathy for you. Yeah. So your Slack is a good place. And actually, Twitter, following all of us on Twitter, we've got a little community on Twitter going, in a sense.
Starting point is 01:33:01 And all of the events, all the workshops um the live workshop there's also the the programming conference which is is run in europe you know it's angle brackets programming and it's dedicated to the for those of you who can't see jonathan is right now um making angle brackets with his hands in the air because well Well, you can't see it either, but you knew. I know. I've seen you say the word before. Yeah, right. So angle brackets programming, which is a great initiative. It's trying it's an actual conference and journal.
Starting point is 01:33:37 So it's got the trappings of computer science, but it's explicitly focusing on the art and practice of programming i think they call it so to get away from the theory um and and the pseudoscience so um that's a that's a a new thing they're just getting going i i hope they that will gel and turn into a really good place for this kind of work to happen. There's, yeah, and so, and that has some workshops in it. There's a PX workshop, and then there's the Salon des Refusés for the really crazy paradigm sort of think pieces.
Starting point is 01:34:20 So at this point, those are the two main places to go. Onward at OOPSLA, at Splash, it's now called, there's the Onward track, which is dedicated to, again, sort of paradigmatic, crazy ideas is another place that this kind of stuff happens. Although that's tending to mature a bit. And I'd encourage everyone to find a way to be part of the solution rather than the problem. It's hard though. It's really hard if you've got a full-time job or research is not easy. That's definitely one thing I've learned there's a lot of dead ends
Starting point is 01:35:06 you've got to be willing to go down a lot of dead ends one of the things Brett Victor said to me was that you can't do this sort of work if there's anything else that you can do the only way that you're going to do this work is if you can't not do this work it's that
Starting point is 01:35:25 hard yeah that's that's right it's very true I'd agree with that it's it's something you only do this if you have to do it no choice so you know so like now Brett Victor has done a great job of popularizing this stuff most people say they were inspired you know I pred I predate him. So I didn't I wasn't introduced to this stuff by him. I was saying many of the same things. But many people have been introduced to this whole line of thinking by Brett. So and what does that tell us? Does it we need need to work more on getting the message out to a larger audience?
Starting point is 01:36:09 I don't know. Because Brett's not doing this, not doing that sort of evangelization anymore in general, right? He's got his own thing that he's working on, the dynamic land. So that's his thing now that he's doing. So we don't have a really good public figure presenting these ideas, communicating public, you know, what's the right word? Evangelizing, I guess, these ideas. Maybe that's what we need. Yeah. Maybe it's you. Maybe you're the person. Maybe it's me.
Starting point is 01:36:52 Could be. Yeah. Yeah, well, I think you put in the right phrase because an evangelizer is someone who goes around giving talks and for whatever reason feels like nobody would call brett victor's work shallow but there's something like when you um he that's very much point he was pointing us in the right direction of improving programming but he didn't but he kind of like left us to fill in the details um right i think a lot of us like you and me want to fill in those details ourselves and so we're like too busy doing that uh to go around getting talks about why programming needs to be improved so um i feel like yeah i guess that's kind of one of the core problems we need to find someone who's passionate about the
Starting point is 01:37:34 problem and like not really passionate about solving it just more passionate about getting people excited about you know the problem uh almost so i don't know. Anyways. I think it would really help to have a win. It really helped if we had a success story, you know? So yeah, maybe subtext, maybe that'll, maybe that will actually eventually be something that's usable and could be a success story or maybe somebody else's project will get to that point so that would really help yeah that's true it's funny that you mentioned the win because when I was in college I remember looking
Starting point is 01:38:16 around and being like I don't know who but one of these kids is gonna like create a startup and it's gonna be worth a lot of money and it'll be like you know a success you know I'm gonna go to school with someone like that, but who's, who's it going to be? And then it was, and it happened like, you know, a bunch of people started startups. They all failed except this one kid and his second startup, you know, is quite successful. And it was, I don't know, something about it. It was just like, you know, validating that, you know, one of us made it through. And it's funny because in our little community, it feels the same. Like there's, I don't know, a few hundred of us, at least, maybe more, who are like working on these little prototypes that eventually might turn into a system.
Starting point is 01:38:58 And you're right, it would be fun for one of us to like succeed. I guess that was kind of Chris Granger and Eve. They were kind of like the first little mini success story, which was, I guess, validating but also disheartening. Unfortunately, they didn't in the end. Now they're a cautionary tale. But yeah, Eve could have been it. But it's probably not a couple of hundred people, though, in terms of people that are working like at least half time, let's say. Because it's really hard to do this nights and weekends, right?
Starting point is 01:39:33 So people that are working at least half time on new programming technologies and environments, it's certainly got to be less than 100, I would say worldwide. Maybe even much less than that. Maybe 50. Yeah, that's a good point, drawing the line there. There are a lot of people who do this in nights and weekends and kind of dream about it. And they just want to show their demo and get high fives and move on to the next thing or something like that. Right. Yeah, but if you look at people that have done more than one thing, they've come back again with a second try. A lot smaller group of people.
Starting point is 01:40:21 Because it's really hard and and i think it's really true what what you or what brit said that this is painful right it's research is painful and it is so hard not to to to break out of everything you know it's it's so hard um that you can only only try to do it if you if there's something driving you, something really, really driving you. And, you know, with me, it's just an obsession. I mean, I've sort of, you know, sort of it's become my life. This is what I'm doing with my life. But that's all it is.
Starting point is 01:40:58 It's just an obsession. Yeah, well, I'm happy that, at least selfishly, I'm happy that you're obsessed with the same thing I'm obsessed with. It's good to have you on my team or to be on the same team as you. Yeah, thanks. Yeah, thanks. I think it's pulling together. I mean, there is more energy here.
Starting point is 01:41:20 So don't take my cynicism. I've been doing this a while so it's it's probably natural for me to feel sort of fatalistic about everything that oh this is pointless you know but in fact there is an uptick in energy here you know you've added a lot of energy to the group and and a few other people you know I was at the the P pig oh yeah pig. I didn't mention P pig psychology of programming interest group. That's another interesting venue for this kind of thinking, but those guys are doing some interesting stuff. And so, you know, maybe there's a, well,
Starting point is 01:41:57 here I am watching the surfers come in on the surf here. And so, so the apt analogy might be that we have a bit of a swell here building, so we should try and ride it. Yeah, sounds great. It's great to end on a uplifting note there. I feel it too. And I personally, like one of the places or times I felt it most strongly was at your live conference, the most recent one in Boston a few months ago. I just couldn't believe that I was able to sit there the whole day in a chair listening to other people talk and be happy as a clam. Because normally I have trouble sitting still and listening to other people talk. But it was, you know, it was just, it was, it just, I had a strong feeling of momentum. It like, it made me think, you know, get teary eyed about, you know, maybe this is like the
Starting point is 01:42:48 modern day homebrew computer club, you know, where Steve Jobs presented the first Mac. Huh? Yeah. Who knows? Maybe. But yeah, that's, that's great. Well, thank you for, maybe I can, we'll quote you on the marketing literature there. I was able to sit still through the entire thing.
Starting point is 01:43:11 But yeah, there is some energy here. I've been trying these kind of events for a while here and I do think that that last live one had more energy. That's a really good sign and hopefully it's not a fluke and we should just keep pushing. Yeah. Great. Well, um, right. So your Slack, you know, you know, you've got like hundreds of people on there now, right? So that's a real positive sign. I'm really shocked. Are you, are you at all surprised at how popular that has become? Um, well, it's funny because it it's kind of like boiling a lobster.
Starting point is 01:43:47 I just got one or two or five people a week for I guess two years now or a year and a half, two years now. So at no point was it surprising because it just happened so suddenly. So that's good. And I guess, you know, to tie into things we said before, we should think about ways that that could become a watering hole for researchers like us to get some more constructive kinds of feedback. That's something to think about. Open forums, you know, are, you know, there's only so much you can get out of it, right? Like on Twitter, right?
Starting point is 01:44:37 Kind of limited bandwidth. But I think maybe we should, we could think about institutionalizing those writers' workshops that we ran with you and Jeff, right? Yeah. That's what FPW was. Maybe it's time to bring FPW back as part of some local meetups with your for your slack people yeah yeah that's a great idea and i've done a lot of thinking kind of on this and i'm sure both of us and
Starting point is 01:45:16 maybe a few others have done a lot of thinking on other ways to do community organizing here um aiden knief um who i interviewed on the podcast and is in the slack group he has a company optic he he was uh brainstorming with me different ideas around um i think i may we may have talked about it like different um ways to do online versions of those kind of meetups where people from all around the world could um join in and some people could present some people and then others would give feedback, something like that. Yeah. Yeah. I don't know. I think part of what's hard about community organizing is,
Starting point is 01:45:58 is that there's like no rules. You know, you can just, you're like really infinite possibilities and it's really hard to understand what's going to work because like the feedback loop cycle is so hard. Like I had no idea what a 200 person Slack group would be like until, you know, a year or two in. And I was like, wait a second. Slack is not the right medium for this. But now it's kind of not too late. But it's you know, it was hard to predict going in. Never say it's too late because, you know, that's the famous last words, right? It's like, oh, we could have fixed the C programming language, but we already had 50 users, right? You know, and it was unthinkable that we would make a breaking change.
Starting point is 01:46:38 You know, there's always more users to come in the future. So, yeah. Yeah, that's a good point. And, yeah, for Slack specifically, I'm not shy about leaving if I found another platform I liked a lot better. I don't know. I don't have one of those off the top of my head.
Starting point is 01:46:54 I did some research and I wasn't able to find anything. Anyways, we could do this all day. I think I'm going to go ahead and cut it off here at the two-hour mark. Thank you so much for taking the time. This was a lot of fun. Yeah, yeah. Likewise. Thanks for inviting me. And we'll talk again soon. Talk again soon. Bye. All right. Bye bye. Thanks so much for listening. Not many people can make it to the end of a multi hour podcast.
Starting point is 01:47:22 If you enjoy these conversations, I bet you'd fit right into our online community. You can join our Slack group at futureofcoding.org slash Slack, where we chat about these topics, share links, feedback, and organize in-person meetups in various cities, New York, London, San Francisco, Boston, and also Kitchener, Waterloo, and Canada. If you'd like to support these efforts, there are a few ways you can be helpful. I would really appreciate any reviews you could leave for the podcast, wherever it is that you listen. If any episode in particular speaks to you,
Starting point is 01:47:54 I would encourage you to share it with your friends or on social media. Please tag me if you're sharing it on Twitter, at Steve Krause, so I can join the conversation. I also accept support directly on Patreon at patreon.com slash Steve Krause. And as always, I am so thankful for the ultimate form of support, your constructive criticism. So please don't be shy with your advice. Thanks again for listening and I will catch you on the next episode.

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