Future of Coding - Jonathan Leung on Inventing on Principle

Episode Date: July 21, 2017

My friend Jonathan and I discuss various design goals that I try to keep in mind while doing user interface research. You can find notes from this episode at http://futureofcoding.org/episodes/3-...jonathan-leung-on-inventing-on-principle.htmlSupport 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 Krauss. So today I have my friend Jonathan Leung here, and we're actually in the same physical space, which I think will be rare for this podcast. So to tell you a bit about Jonathan, Jonathan and I met at Penn, where we were both studying computer science. At Penn, Jonathan worked at the Duckworth Lab with Angela Duckworth. He was also an early lead organizer of PennApps, the University of Pennsylvania hackathon. Jonathan has been teaching and mentoring students in computer science and other subjects for a number of years.
Starting point is 00:00:35 He was a teacher at All-Star Code in New York and General Assembly. He was a former founder of Hack Club, and for his work there, he was a Forbes 30 Under 30 member. He was also the original creator of the Learner's House, which is a retreat that I've been on with a number of friends. It's a really fun thing. Other things Jonathan has done, he worked at Perceptual Networks, Gobbler. He recently was a part of the School for Pro-Auto Computation, where he had some interesting projects that we might get to talk about here. And now he currently lives in Brooklyn.
Starting point is 00:01:12 So welcome, Jonathan. Thank you so much, Steve. It's exciting to be here. Cool. So... It's actually exciting to note that the last time I was here at Steve's place was for HackNY, where we built a hack to let you modify emails that you sent after you sent them. Yes that was a fun yeah we went to yeah we went to HackNY as a fun kind of emotional hackathon we got third place which is which is exciting for me at the time so yeah so I guess the reason I thought it would be really great to interview you
Starting point is 00:01:46 is over the years we've had a lot of really wonderful conversations about interfaces and the future of programming, the future of design, and they've always been fun and interesting conversations, so I thought we would have one of them here and have other people listen and be able to contribute to our thoughts.
Starting point is 00:02:04 So, let's see. Where do you want to start? Up to you. All right. So one of the really interesting conversations that we had a while ago was about designing on principle, inventing on principle, which is in reaction to Brett Victor's talk, Inventing on Principle. And so at the time, i was building a system i was trying to build a programming language and i was trying to like
Starting point is 00:02:33 apply brett victor's advice in a pragmatic way like i was like what principles are the ones that i'm trying to design on and so jonathan uh came over and we spent a long time talking about the principles and what was really helpful to me was there was a number of times when you said oh that's not not abstract enough of a principle that's that's more of a implementation detail the principle you know you like kind of push back on some of my principles and and like asked me to to come up with better principles so so i pulled up this list of principles that i'm going to have a link to in the notes. A list of principles for the product I created, CycleVersion2,
Starting point is 00:03:10 which I talked about in my last podcast. To remind you, CycleVersion2 is something I built in Blockly. So it's basically blocks for React.js or for Vue.js. So it's declarative blocks for making web interfaces.
Starting point is 00:03:26 And so we have this list of principles pulled up, and I guess maybe we'll just run through them really quick and see what ideas they spark. So the first principle I have is accessible to create, view, and update anywhere on any device. And then underneath that, the two bullets are built for the web and mobile-friendly.
Starting point is 00:03:48 What do you think about that as a principle? Yeah, the first thing that comes up for me is less about... Less about questioning the intention there and more about language around... I took an information communication technology or, yeah, information communication technology for development course and thinking about like like first world uh not first world um and like the thing that strikes me there that's just kind of a small thing is like
Starting point is 00:04:17 uh there's an assumption that any device is connected to the internet which is like predominantly true for in like the u US, but isn't necessarily true. So maybe explicitly saying, but maybe the intention is it's on any device and not necessarily the internet, but the sub-bullet points are built on web. So I'm curious, would it feel more accurate to explicitly say on internet? Instead of on any device. Yeah, I think you're right. On any internet-connected device or something?
Starting point is 00:04:52 Yeah, I think you're right. Internet-connected device is what I meant. Cool, that's good feedback. All right, so let's move to the next one. The next bullet is prerequisites built in. A micro world. So there's no user manual. you learn how to use the system just in time and so there i'm kind of referencing seymour papert's notion of a micro world which is
Starting point is 00:05:13 a very intuitive place where kid where he designed them for children but where people can learn how to use the system as a natural extension of their curiosity and exploration so in the same way that you and i we all learned how to speak our native tongue just by naturally saying words and listening like can we all learn how to use interfaces in that same way and so examples of these micro worlds would be the logo programming language that seymour came up with and or the scratch programming language those are good examples of micro-worlds. So underneath this prerequisites built-in bullet, I have types represent shapes, which is something I've talked about before, and I have blogs about that I'll link to, and also the idea of good abstractions, like first-person coding, messages,
Starting point is 00:06:00 and event metaphors. Yeah, I think the idea of the micro world here feels the most resonant is what you're, what occurs to me as you're trying to say, where, like, the idea of the micro world is, like, this world where anyone can just play in and just do stuff without having to deal with BS. So, like, when you're trying to learn a code now, like it's like, Oh, like I think get my like text editor and like install this package. Oh crap.
Starting point is 00:06:28 I can't install on this package until I installed this like other package. And like, there's this entire rabbit hole of like, you can't even start. It's like a micro world is a place where like shit just works. Um, I think the feeling of like shit just works is the thing that's trying to be captured in this principle.
Starting point is 00:06:43 Is that kind of the, yeah, I think the shit just works is a thing that's trying to be captured in this principle is that kind of the yeah i think the shit just works is a big part of it um yeah the shit that that's a good that's a good point i think this is more specifically that it's built in a way that's intuitive and learnable like the metaphors are are good um the shit just works i think it's like a separate bullet point um that i think about too okay so it's it's less about like this stuff is working and more about like your knowledge of how to use the stuff is like obvious kind of in a way that like like you don't really need to read an instruction manual on legos it's like yeah just like oh okay just just snap them together. Exactly. So.
Starting point is 00:07:30 Like, the idea of having to explain what a closure is or what a type is. Oh, okay. Like, all the words, if you went to get a degree in computer science or if you wanted to learn the Java programming language, for example, I'd have to teach you 50 different words. Like, ignoring the syntax, I'd have to teach you, like, 50 different words and concepts. Like, switch statements. Like, there are all these things. When you learn the Scratch programming language have to teach you like 50 different words and concepts like switch statements if like there are all these things when you learn the scratch programming language i teach you nothing you just immediately go and connect the shapes and drag and drop you don't have to learn the word boolean you just know that hexagonal shapes are boolean are booleans and hexagons go
Starting point is 00:07:57 inside hexagons so it's like if you walk in it's like the the distinction is like if you walk if if someone who doesn't know how to cook walks into a kitchen they'll like the heck is that machine thing there they don't know what that is as opposed to like someone walking into like a children's play arena center thing where like there are ball pits oh i can like jump in or like uh i can like oh yeah there are these hoop things in the air i can like lift the i can like hold myself up with my arms and those things it's like the affordances are obvious yes um so i wonder like to me the explicit wording of prerequisites built in doesn't capture that for me because it's like unclear which prerequisites um and like like yeah i could interpret that as like like software prerequisites. I see.
Starting point is 00:08:47 But I think the way that you're thinking about it is in terms of classes. This class has no prerequisites. Yes. Knowledge prerequisites, not software prerequisites. Yeah. And the term itself sounds like, even though it doesn't say it's a negation of something else, it sounds like a negation. It's saying this course requires no prerequisites i almost want to hear hear it in a positive as opposed to a negative um uh because like that's so interesting i feel that feels impossible because it's so it's assumed that anything you'd have you'd have to learn anything like i feel like i have to say for example like organic food like if i leave the organic label off organics is just
Starting point is 00:09:30 saying not pesticides right so like it but do you like the organic label well it's like it's putting in a positive way like so so i think positive less less about the fact that it's just positive and therefore it's good the rationale there is kind of like i think the principle of the positive could potentially i'm not sure i haven't thought through this but like could potentially make the principle more clear and have it be more focused but maybe not i'm not i'm not actually sure maybe could it be opposite effective when i'm wanting but like the first thing that comes to mind is like something around into it like intuitive but that's yeah but i think the affordance of no prerequisites is actually clearer than intuitive.
Starting point is 00:10:10 I see. So maybe I actually kind of like it. Okay. It just took a while to explain, but you like the general idea. Yeah. But something about like the wording could be more specific to reference like a,
Starting point is 00:10:21 like a class prerequisite. And even, even then it doesn't contain the full flavor of um what you're talking about because for some like for a like a like a class or something like where you're like a like a math class where that doesn't have prerequisites you still need to learn new concepts that you like like to like they're they're teaching you new concepts so like even like like taking the analog of a class like a school class doesn't quite capture i see because it's not only are there no prerequisites
Starting point is 00:10:51 but the class itself doesn't introduce things that need to be instructed it's it's all intuitive yeah it's like infinitely you still need to like figure out how to do it by you figuring it out but there isn't like a like a person who's introduced introducing new explicit knowledge and um yeah i agree there isn't a word for this uh and like i i spent a lot of time thinking about the this particular question because when i was thinking about the name for this podcast i was thinking about calling it the learnable programming podcast with like a hat tip to brett victor's learnable programming essay and the problem is people didn't know what i meant by learnable but this is what i mean by Learnable Programming Podcast with a hat tip to Brett Victor's Learnable Programming essay. And the problem is people didn't know what I meant by learnable.
Starting point is 00:11:30 But this is what I mean by learnable. It's like learnable by yourself. So people said, oh, maybe you mean intuitive. Maybe you mean the word usable. So I don't think there's really a word. This is like a pretty unique thing. There are very few systems that are so beautifully that like you don't have to be taught things in order to know how to use it there are only a few of them like logo and scratch so maybe micro world is the most precise word because it because that was the word that was coined to describe these types of things what
Starting point is 00:11:57 what if we step out from the programming realm and like look at like other things that we see in the world as having like these good affordances and see like how those are kind of referenced like the playpen thing is the thing that is the first thing that comes to me like a playground like i think like the designers of like good playgrounds like make things like really obvious even though like things look super weird it's like really obvious what you're supposed to do with it yeah i wonder if they have a word for that um yeah that is interesting yeah cool yeah that's that's clever i think a playground is very simple you're not like combining a slide and a swing set you know it's like you're using one in a when a programming system you have to combine ideas and make more complicated ideas
Starting point is 00:12:41 so it's even though even the word playground strikes me as like uh capturing some of that yes well i think that when people describe micro worlds they describe as like playgrounds like virtual playgrounds and i would i would argue playground is a lot clearer than a micro world because micro the idea of a micro world is an explicit concept that is like you have to teach that's true that's a good point cool all right next one um uh so workflow built in and this is a nuanced one but i think it's really important so i want something like asana and workflow and github all rolled into like one tool and integrated into the programming language experience um basically i want to treat the workflow that that by which programmers create
Starting point is 00:13:27 programs as a first class citizen right now the static files are like the first class citizen and so um a compiler just treats a like a program as like the only program that ever existed which i think is silly because you want to change things constantly and work in collaboration. So that's kind of where this design goal is. And so the goal would be to help you organize your project. It would help you prioritize different features that you want to work on
Starting point is 00:14:00 and brainstorm how to build these things. It would include branching and version control and collaboration. I would even likeing and version control and collaboration. I would even like it to be able to notify you that you've been working on this feature for too long. You should take a break. You're in too much of a rabbit hole. You're distracted.
Starting point is 00:14:16 Wow, yeah. I love that. So what do you think about, how would I go about describing that kind of principle? Yeah, like, when I hear the thing and then try to put a word to it, workflow makes sense. Workflow built in makes sense. But when I hear workflow built in, I don't get the things that you're saying. So when I first was reading that, I think the thing
Starting point is 00:14:48 that comes up for me is like, hmm, I think when we initially talked about this, there's kind of like two high-level components I can think of for this. There's kind of like the way
Starting point is 00:15:04 that you deal and manage code, namely like Git and like folders and stuff. Then there's the way that you organize your thinking, some of which is done with in code with like comments or like the coding language itself. But I myself like usually keep an app called workflow open which i essentially use as my notepad um which could you yeah describe workflow yeah workflow is like like so just imagine like google docs and you insert a bullet point you can press enter and a new bullet point comes out you can press indent and like it'll indent in so it's basically a tree outline thing and imagine uh workflow is that plus you can arbitrarily zoom into any node.
Starting point is 00:15:48 And that becomes the displayed route. So basically, when I'm coding, I got this technique that my former co founder sent me from a random comment in hacker news that i thought was like super useful every like i i do this as i code now this like workflow thing which i'll which i'll talk about in a sec but like just to just to say how useful it's been like i do this whenever i code actually i do this whenever i do any type of task i've introduced this to my girlfriend and she does it now i introduce it to my other friend roxanne and they all consistently keep doing it now. And specifically, I basically trace what I'm doing as I'm doing it. So it's like, okay, I need to install Linux. It's like, okay, cool.
Starting point is 00:16:38 So I write install Linux. And underneath of it, it's like, okay, what do I actually need to do to install Linux? I need to, one, download the CD ISO or something say okay download CD and I go and like go to the website download it okay great check done next thing what's the next thing I need to do um need to like burn the CDs okay right burn CD sometimes there might be like multiple like little subtasks that I think of simultaneously, but are done in series. So I'll write those subtasks on. So it's like basically keeping track of each step that I do it. So one, it keeps me focused in which specific step I need to actually do next. Because sometimes when you're going down a rabbit hole, it's like, oh, there's this bug here. And like, there are like
Starting point is 00:17:19 10 things I need to actually do to solve it, I can lose track of what I'm doing, like completely forget. So having like a list that I can look at, oh, yeah, that's the thing that I was doing, is, like, super helpful. So the thing for all of that is, like, it's kind of, like, I don't like the word mental crutch because it sounds negative, but, like, i can offload some of my brain stuff happening onto a piece of paper so it's basically a way to help me think yeah um i think that's exactly like the vision i would want for i want one exactly that workflow but embedded into the whole code process yes one of the things that i see as being backwards is you come up with a thing in your head like you come up with a plan for what you want to do in your head
Starting point is 00:18:10 then you go into code and you spend a while like dicking around in code and then when you're finally when you're done you explain what you did in a commit message like that's the opposite like shouldn't you write what you're going to do first then do it and then just press done when you're done with it and then it like automatically commits with that commit message yes and then i think where like the work flowy nested structure this comes into play is as you're doing things you first specify what you're doing and you specify how this thing nests up to like the bigger task and and so then you you and like it kind of forks for you every time you like do a subtask, it kind of forks off that top branch. And when you press down, it kind of brings you back.
Starting point is 00:18:49 It merges for you into the branch at the top branch. Oh, interesting. I didn't even notice the one-to-oneness with GitHub. Yeah, Workflow and GitHub, I think, could be the same tool. Wow, that's cool. Okay. Yeah, Workflow built in just doesn't capture like i 100 agree with what you're saying i think i'm just basically like wow steve these are great ideas you need
Starting point is 00:19:10 better names for them um uh it's like it's kind of like hmm it's like thinking like like it helps like like a thinking tool built in or like it's even less clear what the fuck that means. All right. Yeah, like, workflow built in, like, I just think of, like, a to-do list, and I don't get the fact that it's, like, helping support me mentally in my... Yeah. It, like, remember when we were teaching with, I forget, Joe, no, okay, Rosanna, Rosanna Sabato.
Starting point is 00:19:57 Remember, do you remember those like sheets they'd have like the kids fill out before they did anything? So this is when we were teaching with Rosanna Sabato at BruteStrap in Philadelphia. And so they had these worksheets. Is that what you're talking about? So what about them? So they had...
Starting point is 00:20:13 It's basically kind of like test-driven development, sort of, but they'd force, like, what's the thing that you're trying to do? And then you'd be like, okay, what are the things you need to do this in? It's like, okay. And then you go try to write the code. This is all done on paper before they actually do anything. Oh, and this is very relevant. Thanks for reminding me.
Starting point is 00:20:30 So in teaching, that's called scaffolding. And it's a really useful... So what scaffolding is, from an education perspective, is you say that the assumption, the principle behind scaffolding, is that a student wouldn't be able to do the task by themselves without any structure so what scaffolding does is provide the minimum amount of structure possible to give the student a good place to get started on the task i didn't feel like i explained that well so jonathan did a good job of explaining that in
Starting point is 00:21:06 bootstrap when they would advise a kit the structure they would provide the scaffolding they would provide for a student is they would ask the student to write what is the point of this program what are we trying to accomplish and then underneath that they would ask what are the variables that we need to keep track of what are the different functions we we need? So it helps a student think through all the high-level things so that when they go into code, they have this worksheet they can refer to to think about what they're doing. And so we have a similar kind of scaffolding at the coding space, the after-school program that I started,
Starting point is 00:21:41 where we have a tutorial where the students can refer back to what step they're on, what they're trying to accomplish. We don't tell them how to do it. We just list the step. So the first thing, when a student raises their hand because they're stuck, the first thing a teacher says is, what are you working on? What step are you on? Just what step are you on?
Starting point is 00:22:00 And that's usually a huge point of confusion for most beginner students. They're like, Oh, I forgot that I was even supposed to be doing a step. Like I, I didn't even know what I was doing. Like they just, all that's in their brain is just stuckness. Like nothing,
Starting point is 00:22:14 like all the context about how they got stuck is gone. So being able to refer them back to the step, then refer them back to why they're stuck. Like what were they trying to do that let this you know so like through a series of questions we help them figure out just like refocus on why they're stuck and which does more to help them get unstuck than anything we could do like once we just like kind of help them focus on why they're stuck they they get unstuck like they just they just lost the context that they forgot and so wouldn't it be neat instead of having them like have a separate scaffolding over on a piece of paper on a different tag if on the top of their
Starting point is 00:22:49 editor it said like the step that you're working on is and like right you know oh my god so good and like for a tutorial project you know we supply the step but if you're making your own project like you supply the steps and the sub steps and and you just select on the one you want to work on. It takes you to that fork of a fork of a fork. You work on it. You press done. It merges you right out. Yeah, yeah.
Starting point is 00:23:11 Oh, my God. And at any point, if you're stuck, there could even be a button that says, I'm stuck, and it says, well, this is the thing you're trying to do. Does this thing need subtasks? Or is this thing too complicated? Do you want to break it up into smaller problems?
Starting point is 00:23:23 Or it'll say, oh, is the thing that you're working on even relevant anymore? Look at the thing that this thing is complicated? Do you want to break it up into smaller problems? Or it'll say, oh, is the thing that you're working on even relevant anymore? Like, look at the thing that this thing is trying to solve. Maybe re-examine. That's to help you solve the XY problem. So the XY problem in computer science is when you're trying to solve problem X, but in order
Starting point is 00:23:38 to solve problem X, you think that problem Y will help you. So then you spend a lot of time working on problem Y and you lose sight of the fact that what you're actually trying to do is solve problem x and problem y is now harder than problem x right and so yeah so like that could help you with that problem too oh my god i would i would i would love to have that and like i i myself still get stuck in those situations and don't like i'm still the same student who's like i'm stuck i don't know what's going on and then i like i had to step back and like i finally remember like an hour later like oh yeah yeah i think it would be neat if when you're putting
Starting point is 00:24:11 the steps and you estimate how much time you think the step's going to take so when that time passes they say hey you've been working on this for 20 minutes and and you thought it'd only take 10 maybe maybe maybe zoom out here because uh because this this isn't going the way you expected. Yeah. So all of that is the better name. Great. Okay. Well, let's move on to the next principle.
Starting point is 00:24:32 So this is principle four. We have six principles to talk about. So only logical bugs. So the metaphor that I think you and I, you actually came up with this when we were together, is that imagine a helpful waiter that when you order things, he'll give you tips. He'll say, oh, maybe you want the fish, or he'll also warn you against, oh, that dish isn't very popular. You probably shouldn't get it.
Starting point is 00:24:55 But ultimately, he will bring you what you ask for as long as it's not going to kill you. He'll let you do what you want, but he's helping you. Another metaphor we used is um bowling lane bumpers so um and i think this is more of the flavor of what we were talking about before of shit just works like you they're like seg faults wouldn't make any sense in this world uh because that's not a bowling lane bumper that's just like something's broken like fix it So underneath this principle Some of the ways to implement it Would be blocks
Starting point is 00:25:29 So block based coding where there's no syntax errors Or strong types Which allow you to have no run time errors And then amazing error messages That help prevent bugs So Elm is really known for having really readable type errors Yeah Doesn't this seem like a subset of shit just works,
Starting point is 00:25:46 like only logical bugs? Yes, I agree. I agree that only logical bugs is a subset of shit just works. Another subset of shit just works would be... No installation required. Yes, no installation required. And like, yeah, no installation required. Because as I was just telling you,
Starting point is 00:26:04 I spent the last like i spent five hours over the last two days installing trying to trying to install the software to get um something to run and it's just it's just ridiculous to have to spend hours and hours if you try if you want to get xcode to run it takes first of all you need a mac which is crazy and then second of all it takes depending on your internet connection could take you a whole day just to get up and running. Why isn't it xcode.com slash create? You know what's actually kind of pretty good at this
Starting point is 00:26:30 that I don't normally think of as good at this? Like Sublime. You don't use Sublime. But like in the package manager, you just like install a random package. And it just like works. And I'm like really surprised that it just works because I feel like it shouldn't. Yeah.
Starting point is 00:26:44 So Sublime Text does an unbelievably good job of package management. So does the Atom Text Editor that comes out. They have the same kind of system. Ruby Gems, unbelievable. Gem install. We do have it working sometimes. The reason I had such trouble was
Starting point is 00:27:00 I was installing a Haskell project, and Haskell has a notoriously tricky build system. Even with the new stack build system, which is supposed to be better, it's still... See, with RubyGems and Node and stuff, I still run into issues. Oh, you don't have this Xcode dependency. Oh, you installed Xcode
Starting point is 00:27:18 Select and you actually need... God damn it! I hate this shit! Yeah. I'm pretty... This, I think, will be a... Maybe not in this community, but I think this will be a, like, non-popular opinion with most programmers, that we need to move off the terminal. Like, entirely move off the terminal. There are uses for the terminal for some people in some use cases, but the vast majority of programming, like, web programming, systems programming, like, web programming or back-end programming,-end programming especially like should all be web apps like that you should never have to cd into anything you should never have to or if not web apps like like that that's suggesting implementation but like we shouldn't be typing like lines of shit into something yes you're right i'm getting
Starting point is 00:28:01 too much into the weeds here i the terminal is so central to everyone who ever codes, and I'm specifically saying that is garbage. Fair enough. Yeah, the terminal is a bad abstraction. It was good enough at the time. The terminal was a beautiful abstraction for the time that it was built for. I think we can move past it. And we're really seeing engineers move off of that for GitHub Desktop.
Starting point is 00:28:25 Yeah, exactly. People are actually using GitHub instead of like, oh, I don't need GitHub Desktop. I'm just going to do everything in Terminal. It's not cool. It's like, yeah, but you don't have the color. It's just the worst interface. It's just worse. You'll say, okay, I need to do some fancy rebase thing.
Starting point is 00:28:41 Okay, go use the Terminal. So it's like a default good interface. Okay, I need more advanced that's not like taken care of in the default case then maybe like terminals fine yeah or good enough yeah i agree with that i think the way i explain this um maybe better is that the interfaces that programmers have to build program computer programs should be of the same quality of consumer apps like Facebook or Instagram or Pinterest or even like Salesforce, which people hate the interface of. It's still better than the interface that programmers have to deal with. Yes. I really like that. I really appreciate that thesis. Okay, so two more bullet points. Number five, no ceiling. So one thing that the Scratch team says about Scratch is that the floor is as low as possible.
Starting point is 00:29:29 So they're trying to make it as easy for anyone to get started playing with Scratch. They're not as concerned with making the ceiling as high as possible. So that means that sometimes kids will want to do more advanced things than Scratch, but Scratch, that's higher than the ceiling. Like returning things in a function? Yeah, so Scratch doesn't ceiling. Like returning things in a function? Yeah, so Scratch doesn't allow you to return things in a function. If you want to have a function computer value for you, you have to save it into a global variable, which is really annoying.
Starting point is 00:29:54 I heard some gossip from someone that apparently someone implemented that and it actually worked, and then there was some political thing or something or the code wasn't good enough, and then they never released it. Now, as a result, you cannot return things in functions. Yeah, well, so if you want to return things in functions in a Scratch-like environment, that's what Snap is for. Or build your own blocks. It's a project out of Berkeley. And it's also great, and they have Scratch.
Starting point is 00:30:22 It's basically Scratch, but you can return values. You can have anonymous functions. It's a little bit more advanced. And just for trivia's sake, this Build Your Own Blocks project was created to inspire the Scratch team to include these features into Scratch. Oh, that was what? They never wanted it to be its own independent project.
Starting point is 00:30:42 They wanted to prove to the Scratch team that it could be done. And so the Scratch team took some of their ideas, but not all of them. So I don't think when Build Your Own Blocks was created, I don't think you were able to even build a function at all, like a method. Oh, God. You weren't even able to build your own block in Scratch. And so that was the main thing. Oh, yeah.
Starting point is 00:31:03 So that was what Build Your Own Blocks did for Scratch. That's why it's called Build Your Own Blocks. Yeah, that was the main thing. So that was what Build Your Own Blocks did for Scratch. That's why it's called Build Your Own Blocks. Yeah, that was the whole point. So underneath No Ceiling, I have it plays, integrates nicely with existing technologies. It has bindings to databases like Firebase
Starting point is 00:31:20 or bindings to the Bootstrap UI, like CSS Library. And it has really easy package manager importing of other software so yeah, the thing that gets me to think of I think my former co-founder Zach Lotta of Hack Club
Starting point is 00:31:37 one of the really important things to him is like, no fake shit, it's like I'm not actually directly quoting him, I just probably curse too much it's like it's like i'm not actually directly quoting him i just probably cursed too much um it's like real like real stuff like we don't want to do this like fake child stuff at heck we want to do real shit he's like that's the thing that's actually motivating oh you're like you're like 10 years old we're gonna give you like this instead it's like no fuck that like yeah that's that's kind of a bit of a separate point but it's
Starting point is 00:32:05 very very important that i've written about it i've talked about it scratch one of the reasons the main reason kids don't like scratch is because it seems like it's for children and it i spend a lot of my time when teaching scratch convincing children and adults that no this tool is actually complicated and you know like you actually are learning really intense things about programming it's like a hard sell and so almost from a marketing perspective yeah um making it that that's more superficial like making it seem like it's for adults is more important than it actually being for adults yes but i think we could we could accomplish both yeah so so specifically in the the no ceiling part of
Starting point is 00:32:49 this is like i don't think that like like i guess it doesn't it's i don't think it's specific enough to actually be true because like like in theory a literal no ceiling means like i could develop like intense like graphics processing you could build a spaceship with it i could build a spaceship with it like and like even within like quote-unquote adult languages like you're not going to use like everything has a ceiling everything has like a best use case like you're going to use like data stuff in python like sure you could do it in javascript and deal with floating point games. That's a really good point. There is no way
Starting point is 00:33:28 to have no ceiling. We can always just make the ceiling higher. There are different ceilings. There's a ceiling per vertical. Per type of... Maybe being specific about which vertical.
Starting point is 00:33:43 Is it games? Is there no game ceiling? Is it, like, 2D games? Or is it, like... Yeah. I think what maybe the better way to explain it is, it's maybe kind of, like, halfway in between what we're talking about, the superficial and the deeply being able to do what kids want. I think it should give kids the feeling that they can do whatever they want to that like it should give kids a feeling that this is as real as coding gets
Starting point is 00:34:10 and anything that they would want to do in this system they could do in a real coding system well the question is like is it for kids no well it's for kids and everybody so i think that's like the like i think as soon as a system is something that real people use, kids won't think that it's for them. Yeah. Yeah. Oftentimes I think about using my kids as beta. Like, that's very expensive. Like, if my goal was to get kids to use something, like everyone to use something, but in order to convince kids to use it, I have to, like, prove to them that adults use it.
Starting point is 00:34:40 That's, like, a very expensive proof. It'd be nice if the tool itself was but but shouldn't it in theory be if it is good enough for for adults wouldn't people just switch over to it because it's better yes like uh definitely it seems like there's like a 10 year like kids come to me wanting to learn java okay okay and like the reason they want to learn java is because like for the last 20 years, Java has been like an adult programming language. So I don't want to have to wait 20 years for like the industry to adopt it formally
Starting point is 00:35:11 before kids decide that they want to learn it. So maybe it's not like adults. Maybe it's just like 10 adults actually. Like they're actual, like here's real, like maybe it's like here's real crap being built into this thing. That would be cool. If Instagram was built in the system or like if something
Starting point is 00:35:27 that they'd heard of was built in it that way do it or like even example real yeah just a link you could point to like you could build something it looks like this right like like we rebuilt Facebook on this yeah this is this is yeah you're right you're right maybe maybe yeah that would be the cheaper the cheaper alternative is like rebuild existing things with the thing. Yeah, impressive, yeah. I like that. Rebuild World of Warcraft. Good luck. Yeah, that's true.
Starting point is 00:35:51 So this is kind of a tangent, but it's something that I've been thinking a lot about with Woof, my JavaScript programming environment, to make games and animations. I think it's a very powerful tool that people could use to make like really popular multiplayer web games or even iphone games if you package up into a web view i think it'd be like a really powerful tool like unity but just easier to use but no one's doing it i feel like like i don't know how to
Starting point is 00:36:19 kickstart that process i don't know how to like explain to people that like here's this better tool and just to give you a sense, I had a friend who spent a number of weeks building a Flappy Bird-like game in Unity. He was learning Unity at the same time, and I showed him how and kind of for fun, I built the same game that he was building, that he was building over the last
Starting point is 00:36:38 month. I built it in five minutes in 20 lines of code in Woof, because it's just like, it's a better tool. And so I'm wondering how to get the word out that this is a thing. Well, it's different, right? People who use Unity aren't usually trying to build Flappy Bird.
Starting point is 00:36:52 They're trying to build intense 3D worlds for virtual reality or something. That's one of the uses of Unity, in which case Woof wouldn't be the right tool. But I think there's another... People do use it to make simple games. Really? Well, what platform do people it to make simple games. Really? Well what platform
Starting point is 00:37:07 do people use to make simple games in? Like processing or Yeah. That would be a better example. Yeah. Well yeah if someone wants to
Starting point is 00:37:15 yeah I would like to convince people who use processing to use Wolf instead. Processing is but I don't think but I don't think nobody I don't think people
Starting point is 00:37:22 use processing to make simple guy phone games. Like I don't think anyone does that. Like I don't know if any I don't think people use processing to make simple guy phone games. Like, I don't think anyone does that. I don't know if any iPhone games are made in processing.
Starting point is 00:37:28 It's probably a better piece of technology than Unity to make simple iPhone games. You can use Unity on the iPhone?
Starting point is 00:37:34 Yeah. Is that what people do? Yeah, so that's probably, probably like, the thing that might be able to make it
Starting point is 00:37:41 so that people use woofer processing in the iPhone is an export button. Because that's what Unity has. You, like, file, export, and then, like, you pick a platform. Oh, yeah. And you just, like, you hit iPhone and you export.
Starting point is 00:37:52 That's the thing. That's the thing. That's the thing I need. That total, yeah, that sounds, like, super slow because, like, I make games. You know I make games with us? Yeah. So, like, I think the thing that, One of the big selling points is, like, by the time you leave, you'll have an app on the App Store.
Starting point is 00:38:08 Yeah. Like, I think that's, like, that's something exciting to me because I don't know Swift or Objective-C now. And, like, it's like, oh, I can just, like, make, like... Like, I just... There's this, like, large hurdle in my mind about, like, I can't get something on the iPhone unless I spend, like, two weeks learning it.
Starting point is 00:38:24 It's like, I've never been like, eh, I don't need to spend these two weeks i'll do something else and so that would be a huge draw for me it's like this thing exports the iphone yeah i guess you'd still have to like install you'd still have to like get a apple developer thing there's like all this bullshit you have to do to like get it into the app store because Apple sucks. It's not a website. You can't just host it yourself. But you can do stuff on TestFlight, and maybe that could be built in. Yeah, maybe. It's what you're looking for.
Starting point is 00:38:52 If not an iPhone, then Android. Start with Android. Yeah, maybe. Cool. That's a good idea. All right, so let's finish these principles. Number six, simple made easy. So this is an idea I'm stealing from rich hickey
Starting point is 00:39:06 and so uh to like define these words simple is something that is easy to understand so imagine a knot a rope with one knot in it that's very simple um on the other hand easy is something that is close at hand it's like it's you can be very lazy and do something easy so like imagine someone like sitting on a couch eating potato chips like it's very easy to eat potato chips on a couch you don't have to move but it might not be simple but it's easy so yeah so like for example could you could you give the same could you can you give a contrasting thing for simple and easy for the same type of example no i don't have one of those examples really available um i'll just give you more examples of simple versus easy well like um i can do a the same type of example? No. I don't have one of those examples readily available. I'll just give you more examples of simple versus easy.
Starting point is 00:39:49 Well, like... I can do that. I'll just talk a little bit more, and then you... Okay. So another example of something easy would be gem install, like, dependency. Because that dependency... It was very easy to type those three lines, and now things kind of work.
Starting point is 00:40:03 But you just introduce this big hairball into your program. Who knows how that works, and who knows all the complexities you're going to have to deal with. So it was super easy, not very simple. Writing that same piece of code by hand is very simple, because you're designing it by hand for your use case. It's not easy. It might take you a year, but it's very simple, and you understand all of the pieces. So that's a bit about distinction.
Starting point is 00:40:24 Do you have an analogy that you want to contribute uh maybe thinking about like administration for any kind of organization it'd be really simple for the organization to be like a school be like we never regrade papers like we will never regrade them no matter what so even if like a person had a really really good excuse say like their home was burned down or something like oh sorry we can't read papers you fail the class and you have to fail the school so that'd be very simple to always keep that policy um well it'd be easier is like like for a given situation like oh like yeah we'll just make it except we'll just say yes sure whatever that's easy for them to say yes yeah
Starting point is 00:40:59 but like it's no longer simple it's like a whole bunch of like um okay well in this situation we can do it but what about this other situation yeah exactly yeah so uh an ultimatum rule like that yeah it's very simple from the perspective of understanding it um when when an easier system where it's like a case-by-case basis that's really really complicated it's like hard i think the thing about easy things is that they're hard to model sometimes it's more like and i think like what you're getting at is rule by law is very simple and rule by man is very easy yeah and i think it yeah so i think that anyways that's that's that distinction um so examples of things
Starting point is 00:41:38 that are easy when you pass when like um there's a's an example is in programming we have this distinction called pass by reference or pass by value into a function. So if a function has, if a language has pass by value, then when you give a function an argument and then you mute and you, like, do things to that argument within the function, it doesn't affect the original argument that it was given. But if you have pass-by-reference in your language, then anything you do to the argument that the function was given inside the function, that is reflected on the outside object. And so Ritchie says, and I agree, that pass-by reference is very easy,
Starting point is 00:42:27 but very complicated. Sorry, it's very easy, but not at all simple. Pass-by value is harder. It's not as easy. You'll have to write more lines of code, but it's very simple. Every time you pass an argument to a function, it's a totally different thing.
Starting point is 00:42:44 Interesting. I wonder if that's fundamentally true. Like, I think that the thing that's annoying about pass-by-reference is that things are not always pass-by-reference. So, like, in JavaScript, like, sometimes you can pass-by-reference, sometimes you can get a pass-by-reference. Like, numbers are
Starting point is 00:43:00 pass-by-value, and, like, objects are pass-by-reference. Yes. So it's like, oh, I don't know which one it is. Is this one a pass-by-value or a pass-by-reference? That does complicate things more. I think Ritchie would say that in a system where it's all pass-by-reference or all pass-by-value...
Starting point is 00:43:18 Pass-by-value is still the simpler of the... It makes you be explicit about when things change. And it keeps the responsibility for the... It makes you be explicit about when things change. And it keeps the responsibility for the for each name at the top level. So when you have
Starting point is 00:43:34 passed by reference, you're all of a sudden delegating the responsibility to all sorts of other parties, and anyone can change anything anywhere, as opposed to this thing. It lives at this level of abstraction. like only you know you can give it to someone else and you can recommend a change you can choose whether or not you want to like accept that change at the top level um but it
Starting point is 00:43:55 kind of keeps thing this is related to um an essay by andre staltz that i'll link to here where he has really good diagrams about different arrows pointing where like who is in charge of mutating state and he has all these arrows I can actually really I can feel that because it's like there are all these
Starting point is 00:44:20 consumers like who knows which one like fucked with it it's like when you have a house, who left the dishes? Yeah. And so it's much easier if you have everybody be responsible for its own state. And other people can read that state, but if they want to mutate it, they can request a mutation, but they can't mutate it directly. And so if you want to know how this one piece of state is modeled,
Starting point is 00:44:40 you look at one file. Wow. Okay. I can feel that. Yeah, it's way simpler. Wow. Okay. So, you know, given that I One area. DAN GALPINIERI- OK. I can feel that. Yeah, it's way simpler. Wow, OK. So given that I want to get away from files in general and have everything be like a first class citizen, so
Starting point is 00:44:53 any mutation in any piece of state, in theory, if we built the computer system right, it would be able to know, oh, these are all the places this code might be edited. But in the long run, I think that's probably overkill and pass-through value is just a simpler system. So that's an example of simple made easy. Another example of things that are simple.
Starting point is 00:45:18 So to be more clear, simple versus easy is the distinction. And then simple made easy is when you take a concept that is simple but by default it's kind of a hard thing to do it takes a lot of time and so you make something that is simple easy so an example of making something that is simple but like hard easier one example would be named arguments so most programming languages have positional arguments so if you put the arguments in
Starting point is 00:45:45 a different position or you forget the position of the different arguments, the behavior of the function is entirely different. And this is very easy because you don't have to type the names of each of the arguments, but it's not at all simple. It's complicated. You have to know more things. And so a way to make this simple thing of named arguments easier is a structured editor, which when you go to type a function, it automatically fills the names of the arguments you're going to need,
Starting point is 00:46:13 and you can then just fill in the blanks. So a lot of the reason that code right now is easy but complicated is because you have to type every character when we have a system where you you're not editing text and it's more structured we can we can make simple simpler things easier with completions and you can see this already with how Java editing Java code works because you can like add a class and all that all sorts of scaffolding for you. Boilerplate is making, as bad as boilerplate is, boilerplate makes simple things easier
Starting point is 00:46:51 as opposed to Ruby magic, which will just kind of hide it behind the scenes and you don't see how it works. That's easy and not at all simple. Okay, so those are the principles. Do you have any other thoughts jonathan like general thoughts about designing on principle if like we should spend more time we should less time thinking about these principles or just general thoughts about these principles or principles in
Starting point is 00:47:15 general i think uh i think it's probably fine i imagine just like working on it more we'll kind of trying to actually build a thing we will elucidate which which principles need to be really stuck to and like after doing more versions i think i imagine the principles will change like a little bit or subtleties will emerge so i think just thinking about them up front probably won't be so helpful cool great so next topic um so you built at the school for poetic computation you built a physical programming physical computational project do you want to talk at all about the importance of physical computing the limitations of screens that kind of thing at all uh yeah sure um I think this is an area I don't have that much familiarity with. First thing that pops up is like, people like, oh, physical computing, like physical computing is like really important and like, etc. Let's all learn Arduino. It's like, oh, God, Arduino is like, is like not simple or easy. Sorry. Well, I guess it's easier than previous embedded
Starting point is 00:48:28 microsystems. But I think there's really something that I think is simple made easy is, what's the thing that you snap together on the programming block bit? You bit, bit, bit?
Starting point is 00:48:48 You know what I'm talking about? I think so. It's like MIT, MIT Media Lab founder. Oh, the magnets or the electronics? Yeah, they snap together. It's electronics, yeah. Yeah, bit, bucket, block, bit. I think I know what you're talking about.
Starting point is 00:49:02 Block, bit, bit. Block, bit. Snap, magnets Programming Block, snap Snap, magnetic Electronics There are a few Products that do this now
Starting point is 00:49:18 Little bits I think little bits does a freaking amazing job At simple made easy. What they don't do is, like, unlimited stealing. Well, so are they truly, so I'll push back, are they truly simple? Like, can you do complicated things with them? Or is it that you can only do a few canned things? Well, does simple imply that you can always do complicated things with them or is it like you can only do a few canned things well does simple imply that you can always do complicated things one of the great things about simple designs is
Starting point is 00:49:53 that you can build because each piece of your understanding is so simple you can build them up into more complicated parts so so so in theory you can the problem is like the physical limitations get kind of annoying Because like Oh no, I ran out of room I need to grab, no the block doesn't turn 90 degrees So anyway, little bits is Is a
Starting point is 00:50:16 I don't even, they're like Electronic Legos that you can just snap together So it's like You'll have one block that's the power And you can route You like you can stick it neck You can snap another block next to it Which is a slider and all of a sudden you have an output that modulates a slide like the power source from 0 to 5 you can snap like a like a like a power strip or like an LED strip next to it with like
Starting point is 00:50:40 with a bunch of LEDs and like if the LEDs have like And like it'll change the brightness of the led just by putting the slider there it just works um that's cool i think there's something really nice about things that are kinesthetic that make things even simpler because they model one-to-one like we as humans have like a very clear understanding intuitive understanding of physical objects so it's like we know like like getting a child to understand the idea of abstractly two things added together uh like two plus two is four but like they'll totally get it if you have like like like two apples and then two other apples
Starting point is 00:51:26 how many apples will be four apples? but if you try to teach them the abstract concept of addition it's way harder so by making things physical we add this entirely more powerful affordance of the physical world we can try to model physical and digital um but i think there's some there's some like cool stuff to be done
Starting point is 00:51:54 in in in by adding like this physical layer of stuff yeah i so i i'm not sure I understand correctly, but my fear with the system you described where you have a slider and you connect it to the lights and it kind of flows through is that it's limited in what you can do. Given that, like what if you wanted that number, that slider to connect to two different LED strips? Like can it fork? Like, can you use... Yeah, there's a fork. There's a fork lock, so you can... I guess what I'm wondering is, how expressive is it as a programming language system?
Starting point is 00:52:38 Yeah, I mean, obviously it's significantly more limited than what you can create with software. I'm not sold on... It's still expressive. Yeah, it's still pretty expressive. I think they have a really... One model that I've kept coming back to
Starting point is 00:52:56 and seeing a lot is the idea of a pipeline. So in Node.js middlewares, you just keep passing an object between middlewares and you just keep passing an object between middlewares and then you just keep passing a request and then you respond with a response and then you call the next function. And that's a really simple abstraction
Starting point is 00:53:14 that allows you to kind of do anything. And I think the little bits follow that pipeline model, perhaps even more literally. Yeah, yeah. Pipeline model definitely is powerful powerful this isn't really getting to like the point that you're making about the limitations and introduced that one thing when bringing things physical but I don't know I guess like that's kind of what comes up for me I don't have any
Starting point is 00:53:41 like like a strongly opinionated thoughts around cool physical things except that i wish more existed yeah all right so there's this concept that i want to keep coming back to which is that not every programmer thinks that programming needs to or can be drastically improved the way you you and i do and so and we all come to programming as beginners but we just everything is just taught to us we accept it the way it is so what was your red pill when did you realize that things were bad and could be made drastically better uh i don't know i think i think that's always just been my attitude about everything
Starting point is 00:54:26 um where do you think that came from? that's a good question I think it comes from a place that everything sucks uh or like always looking at things like oh this could be better
Starting point is 00:54:42 which kind of like I'm getting into meditation mindfulness now and realizing that's not necessarily the most healthy place to see things from um but that definitely is a part of me that has that literally answers the question of where do you think this comes from and where where might that attitude kind of come from for me i don't know it's interesting i kind of looked at the pattern of all the stuff that i've ever done and like when you kind of look at it someone could be like wtf like none of these things like how are how are the things that you're doing cohesive from like teaching programming to like becoming interested in meditation and mindfulness to like coding yourself to like uh doing non-profit work um but the thing that coheat that the coifies, is that a word?
Starting point is 00:55:25 Coheres? Coheres, all these things together, is that I saw a lack of understandability in something and wanted to create clarity in that thing. So meditation and mindfulness, I think, is explained horribly a lot of times to people. The mental models of what's happening are not clear at all, and the feedback loop for meditation is like, like not clear at all and like the feedback loop for meditation is like oh just meditate more is like not the most helpful feedback loop
Starting point is 00:55:49 um and it's yeah anyway so that's an area that i'm really excited about um i don't know what i can trace that to that's that's a good question for me to kind of reflect on okay um one thing that this made me think of is I too noticed the fact that there's like two sides to the coin of appreciating what we have now versus complaining about it. There's like the static complacent mindset
Starting point is 00:56:19 versus the striving mindset and how if you want to get things done in the world, it seems like the striving mindset makes the most sense. But if you want to be happy right now in the moment the complacent mindset might make more sense well it's cool that like the meditation mindfulness stuff has like helped me realize it's like there there's actions and there's kind of like your way of being so like the action of like making wanting to make thing like trying to create things that have like good interfaces doesn't need to come from a place of wrongness where it's like oh there's all this sucks like this is terrible it's like oh wouldn't it be like cool if we could
Starting point is 00:56:56 do this so it's like kind of an attitudinal thing where it's like how basically how angry are you like how strong are your cortisol levels when you're doing this thing are you like blaming or making someone wrong when you're doing this or so i i find that i'm i often get most excited about the future of programming and explaining why i think it'd be better when i explained about in the context of how bad the things we are now like i find that it's easier sometimes i think this is is also true in education. When I'm thinking about the future of education, it's easier to explain how things could be better by complaining about what is, as opposed to talking about what could be.
Starting point is 00:57:34 So to make this conversation a little political for a second, like, should we not do that? You can give it a try. So it's like, we don't need to take sides in this argument, but one thing that we're seeing with our new president, there are some people who are very opposed to our new president. And one not so helpful, so say you have someone who is very for our president and someone who's very against him.
Starting point is 00:57:59 If there's a person who's like, our president is really bad for X and Y reasons, he's horrible, blah, blah, blah, blah, blah, how likely is the person who's supporting our president likely to listen probably like not like and this goes for anything right like like my my friend wrote a article about um her her her conversation conversation like um what she was having with her family about this particular issue um and like my grandfather is like significantly less likely to like kind of empathize and get me if i'm just telling him how like terrible of a person he is for voting for this person like that that's not a helpful conversation so i imagine like analogously if we just tell the people who are like building
Starting point is 00:58:41 these systems that are existing all of your stuff stuff is terrible that might not be the most way to get people bought in I definitely agree from a buy-in perspective shitting on what exists now might not be the best way to go about it I'm wondering just interpersonally
Starting point is 00:58:59 because sometimes I try and challenge myself to not think negatively and only think positively try not to think about how another Because sometimes I try and challenge myself to not think negatively and only think positively. Try not to think about how... One of the reasons I try and do that is because if you think about how to make something that's better than what we currently have, it kind of might trap you in an innovative or iterative thinking where you're trying to make something that's incrementally better than what we have when what we're trying to do is to create something drastically better than what we have when what we're trying to do is to create something drastically better than what we have so do you think about yes like whether or not you should yeah not think about the tools we have now and think more abstractly I think like in terms of what we actually think about I don't think I'm advocating for
Starting point is 00:59:38 changes on that I think it's just like thinking about like when we're building these things how angry are we or how depressed are we? Yeah, the emotions behind it are what matters. Yeah, like how persistent are negative emotions? I imagine like from like a physiological perspective where psychological things directly map to physiological, like probably be more productive in a not stressed state. However, maybe it's helpful to start from the state of seeing everything as bad okay i don't get stressed about this like okay what do i need to do and get excited about the momentum as opposed to how bad things are yeah well i guess um as someone who wants to make things better i get excited when i see that things are bad like sometimes i get sad when i
Starting point is 01:00:20 see that things are good it's like i have less things to do now. Yeah, I feel the same way as you, and there's two parts of my brain. There's one part that's like, yeah, I get a lot of shit done, and I get really excited, and it's like, oh my god, there's so much opportunity! And there's another side that's like, but Jonathan, this is so miserable! It's like, mm, okay.
Starting point is 01:00:38 Still trying to have those parts in my head kind of talk it out in a not so violent way. Cool. So this question is, I'm asking you to play the contrarian game. So what do you know to be true about the future of coding that nobody else does? So the first thing that comes to mind
Starting point is 01:00:59 for this is less about the future of coding and more about the future of coding education yeah and i don't think i'm the only person to know this to be true but i see a lot of like i don't see too many people explicitly acting on it that much um where the biggest blocker to learning code i don't think is explicitly the difficulties of understanding the abstractions because of intellectual barriers themselves. I see it as emotional blockages.
Starting point is 01:01:34 The reason why I looked at all of my students in the past, and the thing that gets in the way for them usually isn't, I can't figure it out. Everyone can figure this out if they put enough time and effort into it. It might be not the best experience, but they can do it. They might struggle, and it might be really intellectually hard, but they'll get through it. But the thing that gets in the way, if they start thinking, oh, I'm so bad, I'm so bad at this, programming isn't for me, all those fixed mindset type things and uh for those of you who aren't familiar with this it's like the work of um carol dweck where you can i don't feel like probably shouldn't explain
Starting point is 01:02:16 the whole thing should we explain the whole thing maybe do the 60 60 seconds 20 second 20 second basically it's like do you believe that your abilities at a particular skill is changeable or is it fixed? So if I say, oh, I'm not so good at dating, I have a fundamental belief that Jonathan fundamentally has a lesser ability to date
Starting point is 01:02:35 because of genetics or something. I think I might have a quick way. I see it as a self-fulfilling prophecy. So if you think that your ability is fixed in a certain domain, it is true. It willfilling prophecy so if you think that your ability is fixed in a certain domain it is true it will remain fixed but if you believe that you can get better at something then that will also be true and you will be able to get better at something yeah and the logical the logical train of thought for that is like if i think my ability is fixed i'm not going
Starting point is 01:02:57 to try to change it and if i don't try to change it then obviously it won't get better yeah and it's really all about the amount of time you spend doing a thing and so if you think you're just going to be bad at programming for forever you won't spend a lot of time doing it and that's why you will that's why the prophecy will be fulfilled so like this is just one of those emotional things uh that i think kind of gets in the way there's also like kind of cultural emotional things that are like there's like some feeling of like arrogantness that sometimes exists in programming oh look at like, oh, look at me. I did this really complicated thing in one line of code.
Starting point is 01:03:28 I'm fucking awesome. Y'all are dumb. I mean, obviously, a lot of people aren't like that. And there are a lot of people who are the stark contrast in this community as well. But there's some aspects of afraid of feeling stupid in this space. So I think emotional blockages are significantly larger stumbling blocks for someone to become confident in programming. Women in technology is a really hot topic for a while now.
Starting point is 01:04:06 And like hearing stories from my friends, like there's a friend of mine who like is like super nerdy, is super like operationally, like loves like thinking about how do I like define rules so that we can always follow those rules and like things will just like work that way and just like keep it really like simple, kind of referring to things earlier and like making everything really explicit and clear and
Starting point is 01:04:29 like it's like she has like the like like one like one i don't know powerful like having that kind of thinking will like kind of make you like i'm afraid to say natural programmer, but there's inherent excitement in programming for you. I could say that by specifying these rules and stuff. However, she shared with me that when she went into CS classes that were filled with men, she was super uncomfortable and she always felt like she was dumb, when all these like a lot of these bunch of these men like started programming when they were in like fifth grade it's like oh my god i just started coding like i can't do this like i think those are the like and like she started learning coding like
Starting point is 01:05:18 learned super fast now after she overcame that fear and like like i think these are the types of emotional blockages that really kind of get in the way and like maybe kind of putting it on more on the uh more on the specifics of what we're talking about when code doesn't work and all of a sudden like the error is like seg fault like which is essentially like fuck you like like you fucked up um we can make those errors like even like if we keep it exactly the same it's like a picture of a kitten that's like hey like this doesn't work do you want to try again like i i imagine that'd be like a lot less scary and you see like clown academy kind of doing that with their like little like thing about bob yeah Yeah, exactly. Yeah, thanks. While I agree with you that most people don't think that that
Starting point is 01:06:09 is in the future of code, so this is the contrarian game. So most people wouldn't agree with you, I think, or maybe wouldn't put as much importance on it as you do. I, however, also happen to agree with you on this. And we do a number of things at the coding space to, like, deal with these things.
Starting point is 01:06:28 Like, one of the main things is pretty straightforward. We teach kids in person. We, like, have teachers there who can, like, physically, emotionally. When I say physically, I mean, like, being near them. And so, like, and kind of notice when a kid is sad with their body language and say like, Hey, like you seem sad or tired or anxious, like let's walk or talk or like,
Starting point is 01:06:50 like smile or put your computer down. There are all these things that a teacher can do to address these emotional things when they're in your physical space. And I think when you're thinking about teaching people coding or anything at scale, when the emotional issues are so paramount, how do you do it when you can't physically be in the same space as all these kids? That's one of the things I think about. And then as far as the women thing, because there are not many women in tech, women don't want to be in tech.
Starting point is 01:07:21 It's kind of like a negative feedback loop. One of the ways we solve that is by having girls only computer science classes and that's one of our most popular programs in fact our girls only computer science program this summer is significantly bigger than our co-ed computer science program which we're very proud of she's she's now in an all women's coding program your friend yeah is now in an almost oh i think i know his friend yeah oops that's all right um well like like if you were thinking from first principles right like if that was the question you were trying to answer if that was a principle like i think like if the principle of like emotions first or something yeah was it was a principle of like like even though you know it like it's not i don't
Starting point is 01:08:06 that's a great principle it's not a principle in the in cycle yeah you're right emotions first because that is a um seymour papper does a good job of making that a principle like emotions first and and in order for a kid to feel like good at something and to like spend the time like kind of like another so as we talked about with fixed mindset and growth mindset the real thing that matters is how much time you spend doing a thing and so their emotions matter so much because if you enjoy something and you feel like you're good at it you feel like it's something that makes up your identity and you'll spend so much more time doing it and you get so much better at it and then it'll make an even bigger part of your identity
Starting point is 01:08:49 and so he spends a lot of time thinking about emotions from that perspective making sure that his programming language allows kids to do things that they intrinsically want to do and you know makes them smile makes them happy and makes them feel like they own the knowledge so that part of emotions i think he does like a great job at addressing and that's like all the typical things that people think about that are really frustrating with programming like and i think there are like other things too like the things that you say that you do at the coding space with physical teachers yeah like it's hard though how do i how do you do that in a in a in a programming language so like like it's a good goal but like hey how do you do that? In a programming language. It's a good goal, but how do you do it?
Starting point is 01:09:27 So maybe what that looks like is the sub-bullet point of, I'm just whiffing here. What's the word? Riffing? Riffing. Yeah. is maybe the interface is collaboration first. That's definitely going to be how it is. Is that in there?
Starting point is 01:09:55 No, it's not in there. But that's obviously a principle. So it's like, can you just how easily can someone else That's like a sub-bullet in workflow. One of the workflow balls is that like how collaboration is like a first or like it just works or i don't know whatever yeah it's definitely in there but like if we think about it from like an emotions level like okay humans are helpful humans like people like to collaborate like i don't know i
Starting point is 01:10:20 think there are other ways that like if we really stopped and think about it and said like we want to make a programming experience where the most important thing is emotions that are not the frustration ones around ship networking. Yeah. I think that's an interesting question to ask. Yeah. entirely cloud-based and collaborative, like Google Docs kind of style collaboration, wouldn't it be neat if we had, like, a mentor program where people who are more experienced signed up for different time slots so that when a new person came to the website,
Starting point is 01:10:53 they were immediately dropped into a pair programming session. Like, everyone's first time on the website is a pair programming session. Wow, yeah. Wouldn't that be neat? And I guess, like, one way you could scale that is, instead of having mentors, just everyone
Starting point is 01:11:05 who goes on the website immediately is paired with another anonymous user who might also be dealing with it for the first time. Mm-hmm. Like, everyone is... Yeah, yeah, yeah. Like, you know, there's no solo mode. Like, by default, you have to be programming with someone. Wow, that's cool.
Starting point is 01:11:17 Yeah, I think, like, the whole, like, it's, like, how do you, like, make a rubber duck not, like, as shitty? Yeah. So, explain the rubber duck metaphor so like uh to my understanding um like uh some like software companies or something used to like give their employees rubber ducks so that like if they had a problem they could talk it out to the rubber duck and like what some what people do a lot including myself is like they might be like hey person like can you help me on this problem the person will be like sure it's like okay so my problem is this thing and like it's because of
Starting point is 01:11:53 this oh okay okay cool like i figured out my own problem and the person's like you're welcome i guess you just um so like instead of doing that to another person you can do it to another rubber duck but like the advantage of another person is that like a person feels like they're listened to and therefore feels like they want to speak more. So it's like an emotional thing. So like having another human has beneficial for that. Cool. So do you have any ideas of people or technologies in this space that we should keep our eye
Starting point is 01:12:22 on? Is it like, do you have any programming languages or researchers? You're the person I would come and ask that question, so I would defer to you on that. Do you have any ideas of things or technologies or people that are overhyped or that we're focusing on
Starting point is 01:12:39 too much in this space? VR or AR or physical computing or computers, anything that's overhyped uh i think yeah i think physical computing is a little bit overhyped not because i don't like you kind of heard me kind of like saying how awesome physical computing is but i think people are missing like the subtlety of like good user interfaced physical computing is really important trying to learn arduino right now is like the most like oh my god arduino is overhyped you think yeah maybe maybe it's just arduino but
Starting point is 01:13:11 there's like not that many things that are like super obvious and easy to use like physical computing products that's funny i wonder if there's a business in making a better arduino it sounds like you think there is yeah i think there definitely is like a oh that's interesting yeah even like raspberry pi or like those things like raspberry pi is great if you're like a software engineer it's like oh great i can have this like linux thing in this like if you're like a beginner person it's just like wait how do i even like like make one of these switches turn on like it wasn't that easy for me to figure out how to do that yeah um i have i've had similar experience with arduinos and and stuff yeah um all right last question what do you think what do you see as the biggest obstacle to the improvement of of coding like the vision of
Starting point is 01:13:59 coding that the yeah that i have what's the obstacle why isn't it happening i think we touched we touched on this earlier. It's a cultural thing. And Brett Victor hinted at this talk, or Brett Victor did give this great talk about he pretended he was like... You probably described this better than I can.
Starting point is 01:14:18 That particular talk. Oh, no, go for it. I think you actually... So it was at Dropbox. Brett Victor dressed up like he was in the 70s, and he talked about the future of programming from the perspective of somebody in the 70s. And so that decade, the previous decades,
Starting point is 01:14:35 saw many, many improvements in programming language abstractions. We went from programming punch cards in binary to assembly to Fortran to C. We kept jumping levels of abstraction and so he projected that out into the future about how we were going to keep improving and the reason that the talk was interesting and funny even
Starting point is 01:14:54 was that none of those things happened we kind of stopped right after we stopped improving, we stopped jumping levels of abstraction right after the time in which he gave the talk so like the specific things he referenced like he was like okay like punch card programmers when punch card programmers saw assembly programmers like that's not real programming like you can't program like that like you gotta use punch cards
Starting point is 01:15:17 and and then like there are people there are like a few people that like were like no no no like we really like like this assembly thing is like we're on to something here but everyone else like the status quo is like this is different this is weird therefore we don't like it like standard human psychology yeah um so like then like assembly became a thing and everyone like was like wait but see and then like assembly people like that's not real programming you can't even even do this. And then basically, as soon as people reach a comfort level, anything that's different from that status quo is considered weird. It's the same all the way that the current isms happen.
Starting point is 01:15:55 Oh, you're a blah, blah, blah race, and because this blah, blah, blah race is a minority in this group, they're weird just because they're not so many. But that's horrible.'re not so many but like that that's horrible like it causes so many problems um so like i think that's the that's the biggest the biggest thing that gets in the way it's a terminal is great what's wrong with terminal i use terminal what's wrong with you okay it's just like the regular human biases of like the availability heuristic the uh like that's the one where
Starting point is 01:16:25 maybe that's like the wrong bias but like the regular human biases of like once you learn a tool you think that well actually i don't know if this is a human bias but it's a common thing that uh you think in the tools that you know well there's that one but i don't think that's the largest limiting factor i think it's more about it's not the piaget like like I think in terms of my current mental models it's like anything that's different for me and what I do is bad yeah um it's something that I've seen whenever I tell people that the future of coding isn't in text it isn't in typing it's more in drag and drop weird yeah well it's more like oh like that that'll never be...
Starting point is 01:17:05 My favorite is when I talk to people about how much better we can make software systems and they're like lifelong engineers and they say, what do you mean? They're pretty good. They can't even picture how they could be better. But even when you show them something that's better, like GitHub Desktop, they're like, I don't need GitHub Desktop.
Starting point is 01:17:22 They don't think that they need it. They think, yeah. I'm smart enough to do it, write all these really complicated SQL queries and Git commands because I don't like abstracted mental models because I like to keep everything in my head.
Starting point is 01:17:39 So I actually never have a to-do list. I just write, I keep everything in, like, way up. Okay, it's cultural you think you think the biggest the biggest obstacles here are cultural so i think like the interesting question to ask is like for for like to investigate other areas of culture that have been able to shift independent of programming and see how they were introduced those types of innovations like for example like something that comes up for me is this article by atul gawande who wrote about um medical history where like back in the day like doctors were badasses badass white men in frock
Starting point is 01:18:12 coats yeah i'm a fucking doctor i have like a badass black frock coat and he's like cut open my patients and like like go to my next patient i'm like yeah it's like a rock star so it's like they never clean their shit and as a result like people kept dying and people like why the fuck are people dying like i just cut this person open and cut another person open like why is this person dying like how is like the aura of the first person being sick transferring to the second one and like they've discovered like bacteria but even after bacteria was discovered people were like no i'm like a rock star like surgeon dude like like fuck bacteria bacteria like these little small things i'm a man like i don't need that um and then it took like a really
Starting point is 01:18:51 long time i forget how long until like people started wearing like white coats and like washing their hands and like washing your hands like who the fuck does that um and like there's like a group in germany with this culture shift that like took so long for this to propagate so like i mean his his answer is like shit just takes long to propagate yeah so i think what's notoriously famous about that example is he says that the way that he was able to get this culture shift was that the old doctors needed to die and did he say that like not like they just had to wait for them to die like they didn't have to kill them they just had like the old like that was all he said that was how long it took
Starting point is 01:19:29 yeah like yeah i don't know who said this but that's what i remember from this example is that the culture shifted as the old doctors died and the new doctors just like learned it the right way like couldn't you like i don't remember that i just remember there's like this new group in germany or something that like had this kind of culture. And I think we're seeing that now, right? I don't think we need to wait for people to die. If you look at the whole tech startup thing, maybe it's the younger generation first started to do it,
Starting point is 01:19:58 but you see older people try to get into it now who've never been entrepreneurs. Well, I guess what I'm getting at is the kids will always do the new fun thing. the kids don't have the culture set as much so they'll like be more early adopters when you want to like if you're wondering when will um xcode be as easy to use as like well when will xcode be easier to use for example like you kind of have to wait for the kids who are in the new culture to start running Apple. You know,
Starting point is 01:20:25 like you need, like if you want to know when they're going to require white coats in hospitals, like the light, the leader of the hospital has to be brought up in the culture of germ theory. And so like the old leader of the hospital kind of has to retire. It doesn't have to die.
Starting point is 01:20:37 But like, you know, like the, the, the new, the new culture has to come in. It'd be neat if we could just change the minds of the people in charge now. I mean, when has that happened?
Starting point is 01:20:47 If we were to query history either in tech or in other areas, like agile software development as opposed to waterfall? I don't know about that. I feel like agile software development, people were trained in it and then they went to run companies. Yeah, that's probably the case.
Starting point is 01:21:06 Yeah, it's i don't know but one thing to that we can end on is like i learned um back back in the day like when after world war ii nestle was trying to figure out how to get people to drink coffee have you heard about this no so it's like okay all of japan currently doesn't like coffee if we get everyone in japan to drink coffee we'll have like a lot more business it's like okay all of japan currently doesn't like coffee if we get everyone in japan to drink coffee we'll have like a lot more business it's like a whole country um so nessie's like hmm what to do the solution they like sold coffee flavored cookies to kids it was like a kid branded coffee cookie thing or something yeah and then like the next as the kids grew up they like started to buy coffee like
Starting point is 01:21:45 holy crap that kind of like large-scale social manipulation like blew my mind but i think that's kind of what i would like to do with a programming tool i'd like to build something for children that allows them to build what they want to build now and then have it just scale with them as they grow up and become older and have them you know use it in class and use it in hackathons and all of a sudden they're like oh now, now I want to start a company. Might as well use the same tool. That'd be ideal. Cool.
Starting point is 01:22:11 Well, thanks so much for coming on, Jonathan. It's been great talking to you and I hope you're out and here again soon. Thank you for having me. This was a fun conversation.

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