Sort the developer madness and improve your productivity at DEX by Sentry on Sept 28

#278: Teach kids Python with real programming and fun games at Code Combat Transcript

Recorded on Monday, Jul 20, 2020.

00:00 If there's one message I've been pushing across all of the top Python episodes, it's that programming is a superpower. Rather than all of us abandoning what we're interested in and becoming CS majors, we can take our passion or our expertise, and 10 exit with a little programming skill. In that case, we should be teaching kids fluency in programming at a younger age. And yet, almost every platform or example meant to do so pulls its punches. We teach kids programming concepts, but not code itself. We use these blocks because text based programming, that's a bridge too far, but it's not. And that's why I'm excited about code combat. It's an online coding platform that uses real Python syntax to guide your hero visually through a dungeon full of challenges. Yet the editor and customize error messages means this is approachable for kids before they can even reliably type. On this episode, you'll meet Nick winter, one of the co founders of code combat. There's a lot of philosophy behind the tool and technology to make it kid friendly and real Python at the same time. Oh, and it's running Python in the browser. This is taught by thermae Episode 278, recorded July 19 2020.

01:20 Welcome to talk Python to me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter, where I'm at m Kennedy. Keep up with the show and listen to past episodes at talk python.fm and follow the show on Twitter via at talk Python. This episode is brought to you by linode. And us Have you tried to learn Python but got stuck or lost focus. We know how it feels to dry and Jim fact after fact, will loop construct after turn hair expression into your head. At best, it's boring at worst, it can turn you off programming altogether. That's why we built our course Python jumpstart by building 10 apps. This course guides you through carefully planned applications. It starts simple, but progresses to quite real apps. Best of all, you won't be learning dry facts. You'll be learning like the pros do by building real applications and learning in context. If you want to start building with Python, just visit talk python.fm slash course to get started. Nick, welcome to talk Python to me. Well, thanks for having me. Yeah, it's great to have you here. Your platform code combat, it's something I've been a fan of for a while ever since I came across it. So I'm looking forward to talking to you about it. Before we get into that, though, let's start the story. How did you get into programming, my dad was an engineer at IBM doing custom chip designs for a long time. And so he was he had the first big open source home automation project written in Perl. And you know, he would even have neighborhood kids around mentoring them in coding and all that sort of stuff. And I never tried it. And so that's not how I got into coding. You had this chance, but you didn't take advantage of it. I don't even know maybe I just thought that was a good dad thing. I don't know. But like, I never tried it. I was doing all this other stuff. My mom was more on the artistic side writer and I was trying all the writing really terrible poetry, all that kind of stuff. And so when I got to college I had no idea was going to do. And I tried everything. And chemistry class, maybe not so much fun poetry class, pretty fun. Try to coding class by luck. And I was like, Damn, this is so boring. And but that was like the first, you know, part of this semester, right? Because we're coding in Java. And you know, at this year, I didn't had like, I had like, billions of years of advanced mathematics class, it was like, Alright, we are going to do simple arithmetic in Java. And it's gonna be really hard. And I was like, why would I need to make the computer do something that I already know how to do since like, 20 years ago, but like, and we got to the end of that first semester, though. And although it was kind of boring, it was really easy for me not so for necessarily all my classmates just the way that it was taught typical failure rates in computer science programs. And we get to the end, and then there's this project, and the project is a rabbits and foxes simulation. And I was like, Okay, got coded up. It's kind of cool. I can see these colored squares on the screen. There's the red one, there's, wait a minute, could I make another one. And of course, this was a sample project, which almost every add on for you, so you get anything done. And I figured out I was so proud I put in zombies. And so now there's the black squares on green and blakeway. They're infecting them. There's undead rabbits and zombie kings. And I was like, wait a minute, you could just makes stuff with code. You can just do whatever you want is creative. Wait, oh, this is cool. I mean to that. So then I got into it. So yeah, this college class. Finally I got lucky with like the last project that first semester and then then it was and so we Yeah, had that whole computer science undergraduate thing in Java. And I was like, man, Java is kind of terrible. We got this scheme. We're doing a lot that was like this is great. And then we got into Python because actually had to start writing some real software. And that was where you kind of put together a lot of the high level areas.

05:00 And power that you would have from something like a scheme. But you don't have to be a genius hacker which at that point, I definitely was interested, like actually write something to put some UI on the screen and get people to use it. So that's awesome. And you didn't have to have like 50 closing parentheses. There, I remember doing a lot of closing parentheses. And it being real, real messy. scheme is such a crazy language scheme unless I took that as well. And colleges, like my CS credit, or whatever. And it kind of drove me crazy. But yeah, I feel like you're hearing your story that it's it's pretty common, that the way programming is taught in universities, especially at the levels, I think it's like, we're just going to teach you the facts, and you have to wait for months before you can actually do anything. And you're just going to have to have this delayed gratification, or you have to be motivated beyond the near term, right? Like, I'm going to spend a whole week doing loops. I don't really have anything to loop over. I don't care about looping, but we're doing loops. And then the next time we're doing functions, and we're doing types and learning interfaces, and like it's taught is just like a series of facts, like that strips out a lot of people because they don't get to have that experience you had at the end of the class until the very end. And by that time, a lot of people like Yeah, no, well, yeah. And it's even worse than not having anything to loop over. Because they do give you something to loop over. And it's math. It's like we're doing arithmetic here, or like, mental stuff, like let's split print some strings, but like the length of the string. And like that doesn't get you going. That's not what's getting most of these kids out of that. It's not what's getting like really matters to folks. And so it's sending the message. Hey, coding computer science, this is like math, but geekier. So you know, if you're not a math person, stay away. That is wrong to me. Yeah, I agree. Because there's a lot of creative aspects. There's a lot of amazing things that you can build. I think it's a little bit less. So now, with all the mobile apps and like, applications have really infused society or come across, like deeply. They're all over society now. And they're somewhat beautiful. A lot of times 10 years ago, that wasn't even the case, right? Well, but the thing that you're starting off with is rarely going to be a beautiful mobile app that you care about, especially if you're in a formal learning environment, right? Maybe it's worse, maybe it's you look at Instagram, that mobile app, you're like, I want that they're like, no, what, what you're gonna do is you're gonna implement the quicksort algorithm in scheme by hand over these numbers, why would I do this? I would never do this. For some of us. It kind of gets you going. I like that part of it. But you know, I didn't know that. I would like that. And I never thought like, hey, let me give this a try. Yeah, I think ultimately, people who are really into do get to where they like that, but I feel like you've got to get to the, hey, this stuff is awesome, sort of place. And then you can start to appreciate and dig into those things. Mm hmm. So if we think then what happened next? So I was in college, and I was learning all this coding stuff. And I was also learning math, and I was learning Chinese. And I was reading Paul Graham essays. And Paul Graham essays have a lot of great stuff in there about your high level languages, but they also have this entrepreneurship stuff, which I had never heard of, I would come in for like the the scheme talk and the Lisp doc. And he's like, he's got one of these reasons. You shouldn't have a job. You weren't meant to have a boss, you should just start your own startup and do your own thing. And smart young people should just start their own startups. And I was like, Man, that sounds great. I don't want a job. I'll just start my own startup. So I went to my roommate, and I was like, Hey, we got to start on startups. You program says, Who is what? No, I'm doing my econometrics homework. So I get my wall street job. And so stop bothering. And I'm like, No, no, no, I pestered him until he's finally fine. If you can think of something that's a good idea that like as a business, then we can maybe give it a shot. Until then, Wall Street, econometrics going. And so I was pondering and pondering, pondering it, and had all sorts of really stupid ideas. And I went to China, as I was learning Chinese for a few weeks. And I had this really crazy experience with reverse culture shock. And I was really sick. And I was like, four in the morning. And I saw this other guy, who was named basically the same as me and the only other like Chinese and computer science student in my same year, and like, randomly met him in Beijing. And I had no idea was going to be there like Beijing city, like 20 million. Yeah. And so for him, we're getting up to go to the Chinese McDonald's on the way out to the airport. I was like, What is going on? I see him. He's writing Chinese characters on his Nintendo DS, practicing it like the stroke level. So he's got this handwriting recognition. I'm like, Man, that's so cool. I need to learn Chinese characters like that. He's like, what? No, I'm playing trauma surgery. I'm like a Japanese surgeon in combat, like saving patients. And I thought you were practicing Chinese. Oh, wait a minute. I do want to practice Chinese like that. So I yeah, and that was the

10:00 The first kind of Python program, right? We got into it there because I was like, hey, I need to write some software that makes it so that you can write characters in Chinese at the stroke level. And like, practice that way, because takes a lot of learning Chinese characters really learn Chinese. And that's like the hard parts. It's all that for like, hey, that's got to be a business there. People pay for that, right? I pay for that, well, I don't have any money. But I would, I would use it. And so you can see we're thinking much more from the technology aspect that time than the business aspect. But we say, hey, there's a problem, we can solve it. And, you know, we reach for the real practical language here, we're not pulling this off this the shelf where we're going into Python, and I hardly knew it. So the first Python program that I wrote basically, was this character editor that would like start to form the data layer for this Chinese language learning now. And with that, I was able to convince my roommates to kind of jump in not go and work in Wall Street, which is great, because that was 2008. And my roommate was actually about time to go then lost that job. Yeah, he would have had a good two months run there, maybe. But yeah, yeah, yeah. So we then were just some guys hacking in our house and working on this thing, see if we can get it going. And, you know, even though we were really kind of terrible coders at that time, but you know, Python was flexible enough that we didn't get bogged down in architecture, we wrote that we had, you know, at that time, there was no iPhones, it was like Wacom tablets, and, you know, handwriting recognition, learn some Chinese hack on some code. And, you know, that took off. So we made the, you know, the back end we did in Google App Engine with Python, and Django and we kind of got it going, we got profitable, we made the number one out for foreigners to learn to write Chinese characters and off to the races. So the first Python program I wrote ended up, you know, pretty good, man. That's pretty awesome. That sounds like a useful app. And I think it captures a little bit of what you've done with code combat as well, in the sense of, Oh, I don't want to just sit down and learn this rote memory practice type of thing, but I want to learn it in the context of play. Mm hmm. If we think of kind of the transition from Scrivener, which is the Chinese character running up to combat, it was the same founding team. And we had, we've been running it for five years. And we said, Hey, well, you know, we've made enough money to not need to work unless retire. And I made it about nine days. I was like, Guys, I'm so depressed, we got to do another one. And they're like, Okay, what should we do? We had some really stupid ideas out there to where like, invisibility cloaks that actually work, let's see if we could, and they were like, No, no, what do we know? Guys? We know how to make edtech teach hard things. Okay, because we take this language learning approach to learning Chinese characters, obvious, it's a language to do that. And then we thought, okay, coding, that's something we cared a lot about my other co founder, you know, he had also learned in college, we both Wish we learned earlier. And we're like, Okay, well, Diablo CS classes could have worked a lot better if we kind of built the fluency first is supposed to kind of intensive learning, we'll do the extensive learning where it's easy, just right at that zone of proximal development, you're going to go for hours in flow state, as opposed to go half an hour, and you know, rage kick your, your segfault computer out the window or something, but and so we're like, Alright, well, if you can build the converse, if you can make more like language learning, then like math, where you're having a conversation with the computer, then I mean, language learning, if you have a kid, and you have a native speaker, and they have a one on one conversation, and the native speaker can bring it down to the kids level. Like, obviously, that kid is going to learn that language. It's not a question of if they're like, a language person, like people think of themselves as math people are not math people, like, there'll be absurd to think I'm not a Spanish person, I can't I can't learn Spanish. And that means something else, right? I'm not from Spain. But so we were thinking, Okay, if you use these methodologies, where you have just like native speaker conversation with the learner, and you can bring it down to the learners level, then that should work. Right. If computer science, the hard part of that is actually the coding part, as opposed to the science part, where you're, all these other things are pretty easy to explain in lectures, or there's not all that much science and what most people do with it, either. Yeah, it's kind of the craftsmanship and being able to express your thoughts to the computer. Well, if we, we need a native speaker, who's the native speaker of coding, well, it's the computer already, like, you don't need a human for that. But the computer only speaks computer language. So you get the beginner coming in there and they're saying, you know, they're trying to print out their hello world, but you know, they're like, putting some extra spaces in there. Whatever they do, of course, they're gonna make mistakes. Normally that syntax error unexpected token, and they're like, Yeah, what does this mean? They need someone to explain, right? I forgot the comma, but it knows what I mean. Right? Yeah. No, it doesn't know what you mean. He has zero forgiveness. Yeah, no forgiveness. And just because all of the code engines out there I mean, I love the Python interpreter but like it like everything else was designed for professionals.

15:00 No software engineers to use by professional software engineers who have this curse of knowledge. And they're like, Oh, yeah, this makes sense, without ever thinking like, what if it didn't make sense? What should you say? And so not at all suitable for beginners, but that's every text based code language engine out there that I know of right? error messages, when arcane. And that's a huge problem learning to code because you need someone to interpret. So if you did something as simple as seemingly simple as make all the error messages make sense, then that'd be a huge step towards having that conversation flow. So for example, encode engine, and co comm as code engine, we have written a lot of code so that you know, no matter where in the stack the air is, whether this is a syntax error, or linting error, it's runtime error, it's maybe not even error, which is just a logic error and could be valid. We happen. No, it isn't for this level that you're trying to do, then we'll say a beginner friendly error message. So it will say don't put a space, or that should be a capital R not a lowercase r. Did you spell right? You said, Ron, instead of down? You should probably fix that. Yeah. And everything else is like syntax error, unexpected token or you know, undefined method. Like, those are not words. So when we came out with this language learning perspective, then you have the native speaker, which is the computer, get it to speak the beginners language. And then you people are just off to the races, like every mistake they make is a teaching opportunity, they solve it in 10 seconds that it takes them to read the error message and edit the code. And that is so much faster, is that conversation? So if our insight for teaching coding was, you have that conversational mode, as opposed to that intensive kind of abstract and key fee instruction kind of mode? And then you have to make it mean something like you were saying to learn? And why do you know for targeting kids, especially here, what kids care about, they want to make in play games, you want to make websites and apps, and those are the things that matter. And so if you can get them learning to code and making that stuff quickly, then that has meaning not just for your Kiki boy who sees themselves as you know, coder Sunday, which is a huge minority of the population. It's more like, basically everyone because 97% of kids play video games. So like, what was I doing? Instead of learning all this coding stuff from my dad? Well, I was just playing video games all the time. And so if I had had a video game that taught me to code, maybe we could, we could get in on that a little earlier. And same thing for condors. Right? So we're like, Can you make it so that you're just playing a game? And not like gamified? Where you just get badges and points? Because was our first business sweater, you know, you would get the users would say, hey, it's so great. It's like a game. And we know it's a hardcore learning. So what do you mean, it's not like even on like, there's, you know, you go fast, there's animations, and then you get points. So it No, no, there's no points? Do you mean points? No points? Well, the number of characters you know, it's kind of like points to the graph, because I know a real game would have this, this, this, this, that's great. When are we gonna get those features, we said, this is a tiny market already. Number one, we're not going to build that. Wait a minute, we can build that for this other market, which is much more starting to learn about business and markets here.

18:12 This portion of talk Python to me is brought to you by linode. Whether you're working on a personal project or managing your enterprises infrastructure, linode has the pricing support and scale that you need to take your project to the next level, with 11 data centers worldwide, including their newest data center in Sydney, Australia, enterprise grade hardware, s3 compatible storage, and the next generation network linode delivers the performance that you expect at a price that you don't get started on the note today with a $20 credit and you get access to native SSD storage, a 40 gigabit network industry leading processors, their revamped Cloud Manager cloud not linode.com root access to your server along with their newest API and a Python COI just visit talk python.fm slash linode when creating a new linode account, and you'll automatically get $20 credit for your next project. Oh, and one last thing they're hiring go to lynda.com slash careers to find out more, let them know that we sent you

19:12 should you even do it. And so that's where we spent years and years in the r&d phase, building up code combat, see if we could get this interpreter to work seeing if we could get the game engine to work seen if you could get those two things to work together. And that was just a lot of hacking and hacking and hacking like we do just sitting in my succession of tiny now in the Bay Area apartments and actually got something going when she got those kids not just in JavaScript, which runs in the browser, but you have it in Python too, because the code engine supports these other front end languages right, which is such a nice learning language. Oh, is that I think Python special in that regard. In that it's it's good for learning but you can build professional things like Instagram, or whatever else right Pinterest, you name it. They

20:00 Good, yeah expands that spectrum, which I think is it's one of its superpowers. Oh, it's so fantastic. And if you look, it's depending on how you count, Python and JavaScript are the top two languages, maybe some ways you count in Java gets in there in the top three. But to have Python, which is so great for learning, and also great for everything else, also be so popular to where it can be the default choice if someone doesn't have a reason that they're coming in to learn something else, like, hey, try Python. I think we haven't measured this super exhaustively. But it's, I think it's about a grade level easier than JavaScript. And for what we're doing for combat, it's all basically the same stuff. You're not doing any language specific things in the beginning, but it's the syntax and you know, curly braces versus your colons and indentation. Like, you know, it's a whole year worth of, you know, kid development on average, there abouts. Easier to do it in VR. Yeah, so you can start sooner. And yeah, so let's, I don't think we've formally talked about what code combat is, we talked about the history, which is incredible. I had no idea about it. But you tell people, what code combat? Like, what's the experience, when you go there? as a learner? You talked about playing it as a game, like, what is it? Yeah, so it's the game for learning how to code, we can qualify that a little bit to say it's aimed at kids aged eight to 18. Basically, as soon as they can type. Not to say that only kids play it, we've had a lot of adults play it, we just aren't marketing in that audience. still one of the best ways to learn to code from scratch. And so you get in there, you're playing a game, you're controlling your hero. In the beginning, you're kind of escaping from dungeon solving mazes, killing ogres, and you building armies, and it progresses from there. So dungeon crawling role playing game in the beginning. And then as you learn more pieces of code, because everything you do in the game coding, right, you can't even move in here without coding some stuff. But as you go through the game, you get more items. And so this could be a new sword or shield, pet, whatever it is, those things give you new API's and new control structures. And so as you progress through this really natural game based learning progression of loot, and XP and leveling up and new challenges, is introducing and making you use and learn and practice different coding concepts and new abilities. So you're not just leveling up your hero, you're leveling up your knowledge of coding, you can do that in Python, JavaScript, we have CoffeeScript Lua. In China, we have c++, Java could be turned on any point, all those things go into this code engine, because we're really trying to do is be the best way to learn to code. And so whether it is magic craziness over in the code editor, whether it's kind of deep dive into the code engine, whether it is kind of custom tuning on the game engine and levels, whether it's just like a look at the overall pedagogy, everything is trying to get the kids to learn coding and computer science, both more engagingly and more efficiently than otherwise they would be doing. So that is what it is. We do that for kids at home, which of course doesn't need to be kids, because usually kids will also now a new thing we're doing is we will give you a coding teacher on video call to help you go through this stuff as well and maybe explain a little bit more about the concepts around it. And then we also have it in schools. So the computer science curriculum, they need teacher needs to run a full coding class for computer science class, even if they don't have any coding background. Because you have this self paced software, I mean, each computer is kind of doing a lot of the instruction in dialogue with the student. And then we provide all the curriculum and lesson plans and resources the teacher to run that class. And it's been doing pretty well lately, just because with Cogan it and old school shut down, you need something that's distance learning friendly in the schools that kids might actually want to do, even if they have no better options. And when stuck in the classroom. Now, the whole internet is right there on the same computer. So you got to engage them where they are. And I think it's super engaging. So let me try to talk a little bit about what I think that experience feels like. And it's definitely like what you said, You've these different. You call them worlds, right? Yes, in the home version, you would progress from the dungeon world to the forest world, the desert, the mountain, the glacier, and the kids really, really excited about the volcano, which doesn't exist yet. But it's kind of like there to teach them. But if you got all the way to the glacier, like, you know, you probably off us code the volcano because it gets pretty advanced. Yeah, for sure. So what you do is you go into these worlds, and then each world has maybe 40 or so little puzzles or challenges, right? So you, if you go to like one here, if I click on it'll say, Okay, I'm going to descend further into the dungeon. So what I need to do is use a loop to navigate and then it talks about the lessons I'm going to learn how to get arguments, basic syntax and while loops. And then when you go in there, you get your character and this is like a visual thing, right? It's not like a mud or a text base game. It's like, literally the characters are there.

25:00 Which is super cool. And then when you go to the programming, and this is the thing that I thought was really the magic of what you guys have built is that you've got this nice code editor. That's true Python, or the other languages, but I think the Python one is extra special. Yeah. And when you go there, you type Python code. But the editor has a special kind of autocomplete, I think you would say, that is incredibly beginner friendly. So like, you might have to type hero dot move, right parentheses, parentheses, and you just type the word R, or r i, it'll like autocomplete hero dot move, right? It'll complete the whole thing. So you can just type a little tiny bit of what you want. And I think that that's so special, because you don't have to form it all of you, if you miss spell hero, and you type.in a regular editor, you get nothing. Right? Right here, if you just type the word, right? It's like, oh, what you actually have to do is hero dot move, right? So I feel like it's incredibly supportive for writing real code, rather than, you know, I think there's this trade off that people always make like, Oh, you can do like a blocky scratch language where you drag the blocks around, and you get like a looping block, and you drag the blocks into the looping block. And it's like, that's maybe programming thinking, but that's far from programming. Yeah, okay, where's this, I feel like it's almost as supportive. But you write real code, and you see it actually do things. Well, there's definitely a lot more to writing, even in khokhloma, writing this text based code, whether it's Python, JavaScript, whatever, then to dragging the blocks around in something like scratch, or blockly. Those are really great introductions to computational thinking, I would say. And you can actually write a bunch of stuff in there that gets fairly advanced. The problem is, you do not learn some of the key skills by doing that. So there are some things that like, yeah, this is just as good for conceptualizing how a loop works or variable or something like that. But you are not building any of the fluency with formal syntax that you're going to need eventually. And you're not building most of your facility with debugging. And you know, a few other things there. So the problem comes when kids tend to move from those drag and drop block based visual programming things to tech space. And they've actually learned a lot of coding computational thinking concepts. But they start facing that blank editor page, they try to type something and they don't know the syntax. And they feel like they've learned nothing. And a lot of times they rage quit out of coding forever at that moment. And really, they just had a few extra things to learn. And then they could go on and express those concepts they had gotten practice with, but that transfer is pretty hard to show. And people always avoid starting there. Because it's, it's so complicated that teachers will have such a hard time with like setting up Python, or JavaScript, and then the bugging it. And with this environment, being so supportive in the editor, like totally geared for I'm going to help you write that line of code from, you know, 10 options that you might potentially write, it makes it entirely doable for an entirely different level of learner. Yeah, so the we had learned a lot from Brett Victor's learnable programming essay, when we were starting out not that we test out a lot of his more advanced things, too. Like time travel debugging, you know, this showing the variable state, it turns out, a lot of that stuff is not what the learner needs in the very beginning. Although really great thinking, I'd love to get that some more of that turned back on for a more advanced player someday. But the things that you really need to lower that hurdle of formal syntax are just being incredibly forgiving, but sensitive to the kinds of mistakes that people are making. And this goes way beyond what we thought it would ever come to in terms of what you need to do in that text editor, so that students aren't bleeding all over themselves and cutting themselves with sharp edges. So for example, let's say that you like you mentioned, with the autocomplete, you got to do the fuzzy ordering, because they're typing all over the place. So this fuzzy search through your options, and this would never work in a real code editor. Because you've got hundreds if not thousands of things that you could autocomplete, it's not going to be a great experience if you're starting to like pop up all these options. But when in ko combat, we can start them off from a set of four API's and progress adding one or two at a time from there. So they always have a sense of what's available. And then they learn what just how many characters or digits they need to type in order to activate those. And that's that smooth progression. Okay, so we knew we're going to need something like that. But we didn't know his stuff. Like if someone is typing an argument like a number or a string or something like hirota, attack bracket and bracket name of the ogre. Every kid out there, they're going to type you know, maybe hero dot maybe ha maybe att, they're going to select the attack. Now you you're going to highlight the inside of the quotes for them. Because if they just start typing, they're not gonna type the quotes. They're gonna delete them, they're gonna get one off. Yep. Those kinds of errors are quite hard to fix. They're going to type replace them.

30:00 Enemy name with BRAC. Okay, they're probably going to do it with lowercase. So you have to fire message that says, hey, this should be uppercase B, right? Believe off the quotes, probably all those kind of things you got to detect which normally parsers have a hard time. They're like, Oh, I don't know, any sort of code here that the ending terminus of this string constant, literal bukoba, not only their messages were, but they don't know what line it's on. Whereas like, we're like, yeah, we know, we have all this data on where students make mistakes, what they need to hear even what error message work, you got to say the right thing, you got to know for that particular program that they're trying to write, which again, a general purpose ID, he doesn't know what program you're trying to write. So we can't do this kind of thing. But we can, but then you have to make it so that when they type Brack, and they take that k, and they hit enter, they always have the cursor inside the string and the parentheses. So in any other code editor, bam, you got an ending quote, and brothers is on the next line, like, good luck, right? This one, right, you know, for a long time until they're level 30, or something like that, we don't want them to deal with that kind of mistake. So we're just gonna move the cursor to the new line and run the code. And so there's a ton of little things like that, that you need to do. Because you don't have the basic facility with text editing, everything from that to when they're deleting, you need to do extra extra extra pauses when you delete the beginning of the line, before you start to go back and delete previous lines, you know, highlighting the way that the indentation works so that visually, they can see like, hey, this isn't correct, like error messages that there's all sorts of things that like could technically be valid code. But we have to point out as soon as they do it, like, No, you can't have two wild true loops in a program like that is not going to make sense. And then one thing too, like, you want to have your characters in your game, like doing important, interesting stuff, the easiest way to get them to do more of that is to do an infinite loop where they do the thing. But while they're coding that loop, if they don't have a blocking action inside the loop, normally, then your program grinds to a halt, because time doesn't pass. And so all sorts of crazy hackery inside the engine whereby they're writing fully general purpose code, but we're digging in and saying, Hey, does this frame have this or that kind of continue or break or condition, if not, we're going to add an extra like one frame blocking action to this and remove it if once they add an action that does something like moving or attacking or saying or something like that. So that there's this magic behind the scenes that you need to do, where it's technically not how the code execution would happen. But it matches their mental model much, much better. And then later, when they get into conditionals, then you start to take that away and show them what happens when an infinite loop which again, isn't just crashed the browser tab, it's like, right, here's your infinite loop, I disabled your hero, and then he got killed. So maybe you want to fix this by putting that here, your hero got tired and just like, yeah, out of water. So the red X showed up under the one that didn't work. Yeah, you. So you have to do all these sorts of things to like every sort of error make sense, not in just in the context of the code, the code editor, but also in the context of the game. And you would never be able to do that if you hadn't written and have full control over the stack and execution of your entire program. So the custom interpreter that we've written, has that like because it it will run Python, JavaScript, you know, whatever language that you provide a runtime adapter to JavaScript, as well as D. So that abstract syntax tree gets executed by our interpreter. And then whenever it calls out to something that doesn't exist in JavaScript, or needs to behave differently than in JavaScript, you know that, that we have a runtime language component that makes it behave like that. And being able to do it from you know, top to bottom and back up, lets you go in and mess around with whatever layer of execution you need to. This is where it like helps actually have had that computer science class in college and kind of understand how the compiler works, and mess around in there. But this stuff you have to do, you're like, oh, the student is messing around with this. So we need to fuzzily check. In this level, we have these kind of possible strings that could work and these ones that shouldn't work. And so over here, if they have a fuzzy match typo, we're gonna adjust this error message over there, you need to do so much of that. But when you do, they don't need to ask teacher, they don't need to ask parent, they don't need to, like bang their head against the wall for an hour. They just get it. And that's really key for anyone learning anything, but like, especially young kids learning something that like, maybe is a little bit disconnected from what they see other kids around them doing and wanting to do. And that's the I mean, that kind of thing. If you want to get any kid into it. Yeah, I think you guys have done a really good job with the way you put that editor together. It's super helpful. It's clear that it's it's focused on helping beginners. And I think the way that you put it together You don't even have to really be able to type in the traditional like, you know, corny don't look at the keyboard type of typing. Yeah, kind of need for programming. You need to know Okay, where the are and I mean, you got to sort of know but like, I

35:00 Fifth Grader could totally do that, who maybe just touch types without getting frustrated. Because really, the solve a puzzle, you're probably doing eight, nine lines of code on a long one. And you've helpful characters per line, right? It's not that much typing, but they still get that real experience. And that's, that's what I think is super special about what you guys have built compared to all the other stuff that that looks fun, or it's very approachable, like the block blocky type languages. But as you know, it has that big Crossing the Chasm sort of thing to go there to like procreate like textual text based languages, yeah, the amount of typing that you need will increase, and the amount of difficulty of each level increases as you get further through the game. So whereas you know, your middle schooler can probably do most of that, and we have like 600, and some levels, maybe they can get through the first 400, it really depends on them to do the later ones they'll probably need to work through with a teacher, a coach, just because all this stuff actually does get kind of complicated. you're implementing some graph search algorithm like, Yeah, but you're 12. So maybe let's talk about the graph search algorithm instead of just, you know, sitting down in front of the computer and bang that out there. But the really young kids can do the easy levels that you see where you're like, let's move right, let's move up. What's the tech the yogurt, let's use the potion. Let's do a while loop. A while loops, variables, function calls, not defining function, but function calls, XY coordinates, all those things any of these kids can get with the right kind of setup. And then when you get into if statements, then you're thinking like, Okay, well, this might be a good stopping point for some 567 year olds, others can totally get it. I just saw a recorded video class and one of our teachers did with this, I think he's eight in Hong Kong. And the guy's like, almost all the way through the mountain. He's like commanding his armies. He's he's doing different ways of looping over indexes. I don't think he quite got to the modular arithmetic, like, you know, some of these kids are capable of so so so so much, and they get super into it.

37:03 Talk Python to me, it's partially supported by our training courses. How does your team keep their Python skills sharp? How do you make sure new hires Get Started fast and learn the pythonic? way? If the answer is a series of boring videos that don't inspire, or a subscription service you pay way too much for and use way too little? Listen up. I talk Python training, we have enterprise tiers for all of our courses, get just the one course you need for your team with full reporting, and monitoring, or ditch that unused subscription for our course bundles, which include all the courses and you pay about the same price as a subscription. Once For details, visit training, talk python.fm slash business or just email sales at talk python.fm.

37:49 And other kids, like, hey, we'll just go and do as much as you ready for now and maybe come back to this in a couple of years, some of this abstract thinking gets tougher, but my three year old, I had him start doing it. And you know, at that point, it's like 20 seconds to find the archy. But then he types are and you can move to the right, and who actually meant to move to the left. But like, you know, two minutes later, he's fixed it. And he press the delete key and deleted everything anyway, despite all our protections, but of course, I wrote the program. So I'm like, Okay, let's press the reset button over here. But like, he's gotten through several dozen levels. He's five now. So you can see how fast he goes through it. But he gets super into it. So it's not nearly when you're learning to code. It doesn't matter if you're 515 25. Everybody's starting at the beginning. And there's so few good software pieces out there to help you with that, that

38:40 it's one of the best ways, I think, to get started for anyone. So that motivation from the gamebase format is extra helpful at these young ages, but doesn't hurt anywhere. Yeah, no, it's pretty cool. Maybe we could talk through the different worlds. So I got to figure out how to get back to it. Yeah, so you start off in kidsguard dungeon, this is the hardest piece to design because you they know almost nothing. And so you have to build up every piece of it from scratch. And in a normal learning environment, that'd be pretty hard to design because it's just throwing the book at them. But in this one, we can vary the game scenario two. So even if you need to do five or six or seven levels in a row, where you're going from just moving right, up, down, left, so like maybe you do that, but there's an optional argument for how many times to move. And then you've introduced arguments. Now you can introduce an attack method where you can then put a string in there and like you very slowly pace it out. But it keeps fresh because throughout you're getting new items, you're getting new game scenarios, you meet new enemies, and different art all the time. So like they're really thinking the ham explained this game. And it does take a bunch of levels to get these basics in place. But you get through that and the first dungeon which people you know, some kids are doing this in a couple hours. They've got they can write code like move hero dot move down here. Don't move down here. Build x y fence 34

40:00 Or 20. And then they have three different coordinate pairs where they build their fence and they'll say, well, true move, right. And so that moves they throw down, there's a bunch of ogres coming out of there building fences to block off the attack. And then they move until they get to the end of the dungeon and get the gem. And that's the last level of the dungeon. That one doesn't have a variable in it, but they also have variables in there. So they can move up enemy equals hero dot find your enemy attack the enemy. They don't have any statements yet. So as we get into the forest, and it opens up, and we should have done this from the beginning, where the dungeon is still kind of more appealing to the boys. Because Yeah, let me get in this tank dungeon, it's kind of dark was hack smokers apart. It's not as violent as you know, you would think from the name and the first setting, but we sure could have made some different design decisions there. So then you get to the forest. And there's a lot of that, but there's a lot of like, okay, let's grow our horses, let's build other things. Let's defend the village. Let's you know, go and talk to the villagers. And so there you're introducing if statements and Boolean logic, you get your pet, you got your pet earlier, you didn't know how to do anything with it. Now you can write event handlers and functions so that your pet can be doing stuff for you. And you're Of course, increasing your kind of normal fighting capabilities, you get your first and multiplayer arenas where you run your Python AI hero. So use all your heroes capacities that you developed and you're either trying to get more gold than the others or you're trying to just kill them or defeat them. And you know, from there, you would move on to the desert. And here we're doing more with numerical arithmetic, I mean, this whole time you've been getting into the XY coordinates. Now you can add them subtract them, you can do break and continue statements, arrays, for example, arrays start to happen in there, you start to get object A lot of it too in the desert. Because once you start to get a raise, you can do a lot more interesting tactics. So your you know, arrays with this other stuff was to implement algorithms of, you know, finding the closest enemy finding the weakest any finding the closest weakest enemy, finding the coins, finding only the right type of coins, finding the best ones, you're like optimizing all this stuff. And that's really interesting for when you're kind of finding some of these battles, then once you get to the mountains, and we're introducing, while loops over indexes of the arrays and four loops over the arrays, and you're starting to summon troops, and you can command them to do things you're getting into basic graphics, because you're, you know, moving in different patterns to draw the kind of the flowers that go mind in this flower ring. There's all sorts of like all through this time, you're constantly doing a ton of if else, Elsa lF kind of statements, because you need to activate all the special powers of your hero, whether that's to you know, use your bash ability, or shield or cast, your magic spells are going visible. And the kids really love getting the new capabilities like that. Yeah, my daughter was blown away when she got a new pet. And then she got two pets, and she couldn't decide which pet was her favorite and which you would take with her. And it was now it was it was great. Yeah. And so then you're, as you move on through the mountain, and here's where you know, the basis of all the code, you need to do really, really well on some of these tournament arenas that will run, then the the glacier will happen. And the glacier is kind of like Alright, let's introduce the vectors. And now you're doing vector arithmetic. So operating with these various like linear algebra transforms only to you. It's not the linear algebra transform. It's like, okay, vector dot rotate. And let me think about it. This is where it starts to get a little tricky. We're introducing kind of the Boolean logic and, you know, counting and other bases and some of these graph search algorithms. There's one where you just have to code up your team to play soccer for you. And like, nice, that's a lot of geometry and trigonometry there. But some kids get that far by themselves, most of them will need to work through that with a teacher at school. And just to give people a sense, like the first engine, there's 43, puzzles, puzzle programs, you got to write, the force has 121, the desert has 97, and so on. So there's a lot of little problems that the kids can go solve and work on. And they're pretty bite sized. So it's quite cool. The target goes from three minutes per level in the dungeon up to like, once you reach the glacier, we're like, at least he should take you like half an hour. So there's a lot of content in there. There's also a lot of hidden content that shows up if you the system determines you might need a little bit more help. Or if you go back, and then you unlock secret stuff in the earlier worlds, because everyone is learning at different rates, they're going to need different amounts of practice on the same concepts. So if you're doing levels, particularly slowly, with particularly difficulty, the system might say, Okay, here's the next level, but it's actually a practice level. Some other students might not have gotten that level if they didn't need it. Oh, interesting. Yeah, that's clever. So they can slow it down if you need to. We don't have a way to really speed it up. But then again, learning this thing is already going pretty fast. Yeah, for sure. Awesome. Well, I think it's a really cool world you've created for these kids and basically beginners in general, but it definitely seems like it's gonna connect with the kids. I know it did with mine. So let's talk about some of the internals. Yes, you talked about the different languages. We write Python in the

45:00 browser in this cool editor with a special autocomplete that we talked about, where's it run, so it runs right there in your browser. And there's a few pieces of magic to make this happen. So the first is, we use the ACE text editor. And then we've heavily customized that. But it's really, really, really great, fantastic base later for doing all sorts of crazy stuff with your code editor. So once you get the code, then we are feeding that constantly into a web worker thread that is parsing it linting it looking for kind of hints to give to the player, even pre running in advance, so that once they hit Run, the entire world is simulated in the background thread, we just swap out the front end state with kind of like a video like playback, you can scrub back and forth of what happened. So that's all this custom code simulation game engine stuff. But what makes it possible are these two libraries. So one is sculpt. And that is kind of the Python in the browser implemented JavaScript interpreter parser thing. And that is implemented so that you can actually run full Python programs as much as you can, right? We're just using the parser layer for that. Because we don't want kind of all of these other behaviors to happen that, you know, we don't have control over. And that ends up giving crazy error message. So you know, picking pieces of sculpt out there, and then augmenting them with our own systems and some of this, you can start to get crossover. So library for code linting, that works for JavaScript, and we've turned the HST into a mazola JavaScript HST format, then you can start to run some of these tools that were designed to work on JavaScript that you're giving useful information for Python. So that's pretty cool. As awesome. It is all on top of this thing that we wrote called espera dot j, s, and SP dot j s is designed to be the kind of controlable pumpable, beginner friendly interpreter that runs in the browser, but takes multiple languages. And so there's a Python plugin for it, there's a Lua plugin for it, as much as you need to do there's a CoffeeScript plugin for it. And then those things, it's two pieces, the parser piece, so the parser piece, we're relying a lot on sculpt, and we previously written our own, and it just wasn't very good. So we moved over to sculpt on there. And then the the runtime library piece where you can take some pieces of that. But really, for performance, you're implementing a lot of Python functions and modules in this kind of interpreter language where you're operating on abstract syntax tree nodes that you could just pull in that part of the Python library or run it, write it in Python, and then just run it, but it gets pretty slow. So you'll kind of bring in the hot loops and pull those in natively in Esper itself in espers, Python plugin. So the more Python behavior that you want, like you want to make integer division work correctly, if it's different from JavaScript, something like that, then you're just putting more and more of into your runtime or your parser library that plugs into espera. Espera is fully open source, so is the Python plugin. And if you have a project where you want to mess around with having more control over how the code executes, interrogating each frame, stopping it starting in again, yielding it and putting another thread in, like all that kind of stuff, definitely check out espr.js. on GitHub, if you just want to be able to run Python in the browser, you can just run scope straight up, if you don't write, you don't need to re interpret what the instructions mean, and like write, write, and whatnot, right, like you have a, you have a kind of a special use case here, I suspect, and what you're gonna do, well, there's a lot of people that go and want something like this. So some of the projects are using Esper, I haven't kept a huge track of it. But it's definitely what you would want when you want more control, whether that's for teaching out better, or is for controlling your infinite loops a little better, whether it's for just security of your program, because you know, you're running this thing in your users browser, you know, maybe you're pulling in code that someone else wrote into that, you got to make sure that it can't break out. And so just having that knowledge that it's secure, and you can't touch anything, and you can redefine your global variables and lock them down, make your own copies of them, whatever you want to do. It's pretty good. But yeah, that's pretty neat. In Python, or in other languages. Yeah. Did you consider something like Docker, like a server side solution as well? Or was it always got to do this on the front end? You know, after seeing Bret Victor's talk on learnable programming, which is fantastic. So if you haven't seen it, you know, stop listening, go check it out. I mean, now, this is probably kind of interesting. But that is fence. So interesting. So the idea there is this kind of run out on the server and send the result back format is kind of old school algorithms competition kind of thing going on. Yeah, super secure, takes some server resources, which you can probably figure out how to get working. But it's limited in the bandwidth of what it can tell you back. So if you think of, hey, here's a algorithms program problem. And I'm going to run my algorithm around the server and see if it gets the right answer. Really, you're sending back

50:00 Answer Yeah, but what we want for a rich, immersive gameplay world is we don't want to just know the answer, we want to see everything about how this code is executing, because it can touch every part of the world. So if you wanted to do that, you have to run the whole thing on the server. And now you're basically spinning up your own kind of networked multiplayer game that your servers have to run every instance of, and send the entire state of the execution back. And like normally, in computer graphics, you are just sending like positions of the various entities in the game, maybe their velocities, rotations, and a few status things so that you can render them. And you kind of have the same thing going on here. But we don't know in advance what you're going to need to show because instead of the, you know, c++ optimized game engine having like, okay, everything is gonna be rendered, like efficiently optimized for rendering these 12 properties on this number of entities, and then these types of backgrounds, whatever, anything can happen. So you can optimize that much, which means the amount of data that you have to send back in order to render it is fairly high. So if you sent that to the server, you'd be downloading like, 15, or 20 megabytes every time you ran the code. I mean, maybe we would, if we optimize that I'm sure we can get it down to something workable. But it's kind of going to be a little a lot further towards that. Just tell me the answer, then, like, I'm playing this here in my browser. So that's, that's why we didn't do it there. Yeah. And also, you'd have to do some interception, to like, kind of rewrite what execution means to do the work that you're doing. Yeah. Right. So you'd have to do on the server side anyway, it sounds like you can't just get in here, we'll see. Well, the advantage of doing it on the server side is then you can use actual JavaScript is the only language that you're going to be able to run in the browser, they're in JavaScript, I love it, it's a great language, it's basically scheme in javas. Close. And so you can do all this really high level crazy stuff, but you, you can shoot your foot off. And there's not that many packages that want to do what we want to do there. So you know, if you had to run this code on the server, you could do it in C, you could do it in Python, you could do it in whatever. And that would be pretty advantageous. And there's a lot of these most, we at some point, we're looking at teaching like dozens of programming languages way. And you look and say, okay, who's implemented interpreter that I can use or a parser that I can use. And it's all implemented either in the language itself or something like C or something like that. You can't use any of that in the browser. So could have save some work. But you know, we really wanted it like, write some code, click the button, immediately see what happens and enrich detail and be able to scroll back and forth, we want to send the entire state of the world so you don't just see it once. We want to have it render as fast as we can. So you know if there's any bugs or any errors, and then we want you to be able to play back, go back and forth time travel, debugging that stuff. So I'm kind of over engineered at the beginning, after seeing that talk, and happy with how that turned out. But yeah, it's a lot of work. Yeah, well, it definitely helps on the scaling side of things. Oh, yeah, the other thing that you can do, because the users browser knows how to not just run the game, but their code, when you go to do the multiplayer pieces. Our server doesn't do anything either, except for say, like, hey, peer to peer distributed simulation net UI, you simulate some games here. And then they report the answers back. And we just keep a leaderboard. But like, we'll be distributing all these other players games to everybody who's like trying to play with these multiplayer levels. And then you get this automatic like simulated ladder thing for no compute. It's pretty great. Yeah. Yeah. That's pretty awesome. Cool. Well, it's definitely neat to see you guys taking some of these Python in the browser initiatives, that there's not a whole lot of other people doing like, real work with, right like building real tools. You know, the guys over at Anvil, they build a pretty interesting system based on sculpt as well, a lot of cool designers and front end tools, basically. Have you seen and I'll have to check it out. Yeah. So Anvil is a way for building like simple hosted web apps. Go there. And

53:56 they've got like a component gallery of buttons and text boxes, you drag them over. And then all of them, those have events, you double click it, and it switches over to see the code. But that's all Python code that runs in the browser on sculpt. Oh, that's awesome. Yeah. So it's pretty, pretty awesome. There's also breath on out there to yet another break on it. Yep. Did you look at Python and consider it alongside sculpt? It wasn't scars along when we kind of put our stuff together. But, you know, I think the either of them could potentially have worked. We just needed a parser layer from it. I can't remember parser if brythonic use them as our ASP format or something else. Right. I think this is great. Well done. I'm building it that way. So let's just talk briefly about the business side of things. I think it's always interesting to see people building businesses on Python and bringing these tools together and whatnot. So I guess first of all, we haven't talked about this yet. For people who don't know like, is this something I pay for combat free? What's the story? Yeah, so we are an open source project and you know, goes back to my roots of

55:00 My dad having that Mr. House home automation project, which it seemed like back in the day, that was like they needed a school. And when we started building this business, we weren't thinking about open source, but we knew we wanted to do a for profit business, because that's how you can get the resources to really make great software. And, you know, there's obviously gonna be, we can market for people learning how to code. So we built this thing built, this thing is free for a long time and said, Hey, we're gonna start charging for this thing. But that was kind of still in the mind, like, there's gonna be a lot of people who can't afford however much you're gonna charge the social to be able to learn to code. And especially if your game is multiplayer, you kind of want those players anyway. So not just to provide network effects for playing the game, but also for sharing the game. So the initial model we did is a $10, a month subscription, but freemium. So you only have to pay for that if you want the extra levels, extra heroes, extra gems, some of this game content stuff, but it's not like you get the first 20 levels for free. And then you have to pay, it's more like you get the core progression of levels from the beginning all the way to your crazy graph algorithms in the end. And then it's extra practice levels that are kind of the branches of the tree that you pay for. So if you want more help with that, use more content, you want to cool hero, as opposed to the basic hero, then you can subscribe. And so most players, you got a couple hundred thousand monthly active players, most of those are playing for free, we kind of made a mistake, because when we started to take off as a business, we had all these players, we said, okay, well, the main market for this is going to be in the schools. And in the schools, you have this huge need for teachers to be able to deploy some computer science curriculum that kids will actually do, even if the teacher is not there over their shoulder all the time. And especially if the teacher is not a pro coder, which, you know, if you're a pro coder, and you're working in teaching, I salute you because it's a really hard job, you probably know where you can make elsewhere. And it's more than twice what you can make as a teacher. So not a lot of super experienced coders in teaching. And all of these teachers getting deputized to teach computer science. The math teacher has to teach it the English teacher, the choir teacher has to teach it like yeah, help, right? So they reached out, we said, Hey, you know, we can help you run this with the students. Let me see we do both the teacher dashboard. And our main product is now that classroom version. And so when we made a bunch more content for that, we actually forgot to set it as paid on our on our home version. And so there's a couple hundred free levels, like you could just do so much there. And it's not the main way we make money. So I'm cool with that. We're not trying to optimize that to within an inch of its life in terms of conversion funnels, or anything like that. So yeah, that's great, we make a little bit of money from that business. But it also means you can just go play for free, you don't have to sign up, try it out. And if you wanted that extra help, or extra content, you can get that if now the new thing is if you want extra help, you can pay for private lessons from one of our online coding teachers do the work an hour or two hours a week with your kid. Or you can do group classes with up to four other students to force you to settle. And so those are some ways it works. We've got some different pricing models in China where we run our business too. But

57:57 as an open source project, and with this kind of community in mind, that's helped us so much like it's great to be able to give back and make a bunch of available for free. Yeah, we wouldn't even have Python if it weren't for open source. When we launched, we only had JavaScript. And one of the first major contributions we ran this, like programming language edition, like contests. I think we gave away like a MacBook and iPad or something. And for that we got Python and Lua and like all these parts, even someone's enclosure, and we're like, dang, that was really efficient. And we hired two of them. And like, going open source was just super interesting. But yeah, that we have this ethos where if you need to learn to code you can use us not gonna charge you. Yeah, so there's like a free path through these these worlds. If you want, you can take it but you can pay for more. Yeah, pay for the side branches of the learning path, basically learning tree. Yeah, cool. Well, that seems like a pretty solid model to me as well. So maybe let's close this out with two quick questions. One, what's coming in the future? Do you guys have any like cool things that you're adding? Or just keep going? adding content? Well, we have in the classroom, the new thing rosaria. So as we put these teacher features on for based on the home product, you know, we learned a lot, we ran over 80,000 educators through this thing. And over the last two years, we've been building out an all new series of content. Now we're putting with new brand, it's got new learning mode scholars story, and that is gonna be the primary classroom product starting in next month, basically. So that's it Oh, zarya.com. And you can't play that on your own, really, because that's meant for the teacher experience, but you know, there's a school involved, then they should, they'll be using that. And they'll have that it's really cool. So that's the new thing on the classroom side. The new thing on the home side is of course, we have added this online teaching and that's growing pretty well. So just kind of expanding what we're doing with that and China getting it translated into even more languages, adding c++ and Java and kind of capitalizing on the potential of what we're doing like

01:00:00 You say there's, there's all these things you can do to optimize every error message in every level. And of course, we haven't done that with everything. So there's just so much more of the core of Polish of what we want to do. So that Right, right, each little challenge can have like its own special. Yeah, messages and sort of help support that. I'm sure that can always be polished. Oh, yeah, bounded with the kids are gonna mess up. Yeah, eventually, we need to hook up a machine learning system here that's really doing I mean, something simple, like a multi armed bandit system or something like that, where we're measuring the effectiveness of every possible intervention point, optimizing all of that data, as opposed to kind of digging into hotspots by hand and game designers. But that's what's up for us just getting better and better and better at teaching coding and into more context. People are languages. Yeah, we're up to Yeah. Cool. Cool. And last question. COVID. completely changed education. Yeah, price, probably gonna change it in the fall for at least in the United States and some other places. This has got to be a boon for you guys to say, look, we have this opportunity to reach out to many more people who need education, and maybe like you said, more remote friendly education. Oh, yeah, it's it was originally, you know, we have our team in China and China got shut down. And a lot of the stuff we were selling in China was offline training centers, after school. So we took a hit. We saw it coming. And we even hired an epidemiologist in late February to say, Hey, what's gonna happen, so she saw everything coming. And we're like, a sounding alarm, guys, this is bad. But we can help. And so just as often as it's been in a mosque most dimensions for our business, like, it's relatively good, like the online, the intersection of online learning and online gaming, for us, it's just as the opportunity to help out in these trying times, so like, my kids, my five year old will be going to kindergarten, oh, that's off. If you have kids that like, you know, maybe you're not going to be in as much school as you'd hope. But you want something for them to do at home. Having checked out code combat, if you really want them to have some structure it get one of our teachers for that, or share it with your school and we can help out. So that is, you know, as long as this thing looks like it's going to be with us, we'll be adding more and more of this stuff that makes it even easier to do. Yeah, well, fingers crossed that it doesn't, doesn't stay with us for too long. But what you guys have built will definitely help fill the void, I think, yeah, thank you. Yeah, sure. All right. Well, before we get out of here, let me ask you one of the one of the two questions I asked at the end. So if you're gonna write some code, and, you know, we were talking right before we hit record that worked on this for Python, is is really mostly a JavaScript project, much like working on the visualization tools for say, like Jupiter notebooks. Right? Even though for Python, in some sense, like the, the creating of it is in JavaScript. So what tools do you guys use to write your code to work on this? Yeah. All right. Our engineering team is all over the place on editors. When you have your JetBrains stuff. You have your Visual Studio, your VS code, you have Sublime Text. I started this with Emacs. And I'm still on Emacs, Emacs forever, because I'm like an arcane techno naeba Emacs that nobody can understand. So you're sticking to your scheme roots, your Lisp roots. Oh, yeah, I'm not. I'm not that great in Emacs. Lisp Packer. But I got a few macros here and there. Right from my cold dead hands. Yeah. Right on. Awesome. All right. Now final call to action. People are excited about this. They want to try it. Maybe one try their kids. Yeah. What are you saying code combat.com slash play? No, sign up, just hop in front of them, see how they do. And if there's this teacher in your life, or a school, that videos or a product is already calm, send it to them, and see if we get their school hooked up. There's a bunch of free stuff there too. And

01:03:47 so, yeah, thanks for the time. This has been really fun. Yeah. It's been great to talk to you about it. And congrats on the project. I think it's really opened up like proper coding for a whole nother level. And I'm really happy to see it. Yeah, yeah. Yeah, you're right. All right. Take it easy. All right, bye.

01:04:03 This has been another episode of talk Python. To me. Our guest in this episode was Nick winter, and it's been brought to you by linode. In us over at talk Python training. Start your next Python project on the nodes state of the art cloud service, just visit talk python.fm slash linode. Li in Eau de, you'll automatically get a $20 credit when you create a new account. Want to level up your Python. If you're just getting started, try my Python jumpstart by building 10 apps course. Or if you're looking for something more advanced, check out our new async course the digs into all the different types of async programming you can do in Python. And of course, if you're interested in more than one of these, be sure to check out our everything bundle. It's like a subscription that never expires. Be sure to subscribe to the show, open your favorite pod catcher and search for Python we should be right at the top. You can also find the iTunes feed at slash iTunes. The Google Play feed is slash play in the direct RSS feed net slash RSS on top Python

01:05:00 FM. This is your host, Michael Kennedy. Thanks so much for listening. I really appreciate it. Now get out there and write some Python code

Back to show page