 Okay. Can someone close the door, actually? Thank you. So welcome, everyone, to how to teach Python to kids. I had a little bit of a different idea of what this talk was going to be before I got here today, and realized that there are quite a few CSN classes on the schedule this weekend. So there are, it turns out, a lot of different ways to teach Python to kids. My talk really is going to focus on community-driven, community-based, volunteer classes. I'm here really to convince you that any Python programmer who's interested in passing their knowledge on to younger students can do this. And I really do mean any Python programmer. Teaching experience is a nice thing to have, but it's really not required. If you're here, you probably already have some idea of why you should teach. Coding is today's literacy, and although it's beginning to change, still too many students are not really being exposed to it in public schools. As Python developers, we have a really unique opportunity to share our skills in our local communities and give kids an experience that can make a huge impact on their lives. Oh, sorry, let me back up a little bit. I wonder if you remember that sense of wonder that you felt the first time that you realized what you could do with code. You could really help someone discover that same sense of excitement and start them down the path towards a lifetime of exploration. I'm going to spend a little bit of time talking about the what. That's the things that you need to set up a class like hardware, you need a venue, probably the most important thing you need is financing. That's really not as hard as it sounds. But what I want to spend the most time is in telling you how and convincing the teaching kids is actually a lot easier than you think. All you really need are the desire and a little bit of Python experience. So why should you listen to me? I've been involved in the Python community for about a decade now. But I actually began my professional life as a school teacher. I was a first grade teacher at Miss Barbara for about two years. At that point I was pretty young and it was really only added for a few years before I realized that I would never be able to move out of my parents' house on that salary, sadly. So I made a change. The TLDRs that I've been a successful developer for a little over 15 years now. But I didn't know how much I missed working with kids until I got a chance to come back to it a few years ago. In 2013, Python, sorry, Picon North America organizers came up with this wonderful idea for a new program called Young Coders. So that year I flew into San Jose with this curriculum in hand. It was something that I had kind of pieced together at the last minute from other curriculum that I had worked with. And along with Katie Cunningham, who was also here this weekend, she's keynoting tomorrow afternoon. In fact, there she is. And a team of very enthusiastic volunteers, we taught our first one-day intro to Python for kids, and it was a huge success. So since then I've been really lucky. I've been able to teach both kids and adults through organizations like Pie Ladies and Django Girls. Teaching has become sort of a dual passion for me along with programming. And also in the years since, Python classes for kids have sprung up all over. You see them at regional conferences. I'm a little surprised Pie Gotham doesn't have one. We're going to have to change that next year. And, you know, after school clubs and local classes, people are teaching more than ever, and it's really exciting to see. And young coders at Python has continued to grow every year. For the two years that Python was in Montreal, we actually had the curriculum translated into French, and a couple of local developers from the community up there taught it to school kids. And then a few months ago in Portland, we introduced a new intermediate class to go along with the original beginner class, and that was a huge success. Kids did their first real scripting. We had them working with APIs for the first time, built their first websites using Python anywhere. It was really, really exciting for everyone involved. But as glad as I am for having a teaching background, it's really my programming background that's made all of this possible. At least for me. You know, claiming responsibility for all of this teaching. Any of you out there could do it just as well. I think you just need a few pointers to get started. You know, and I want to keep that momentum going. I want to keep young coders growing beyond just a couple of classes at conferences every year. And I want to do that by convincing all of you to organize and teach classes in your own local communities. So what do you need to organize a class? And, you know, to be clear, I'm talking about a one-day workshop. So a short-term learning experience. Not the kind of long-term experience you would expect in a public school classroom. I'm just going to skim over this list really briefly. But at the end, I'm going to be giving you a resource that has much more complete descriptions of all of these things. First thing you need, of course, is a venue. You need something that's set up like a classroom space. So desks, you know, a room like this would be fine. If you've got, if you work for an employer that has a large community room or conference room, that kind of space is perfect. You need sponsors that, you know, can be the hardest thing to do, but you need money to put out a class like this. I will tell you this though. The PSF is great about sponsoring classes like this. In fact, if you're around at the end of the day today, Eva is going to give a keynote that's going to talk a little bit about the amount of money that the PSF spends every year for financing these kinds of classes. It could be really useful. Volunteers, you need some teaching assistants to kind of help out during the class and help manage the pace of the class, answer questions for kids. A local meetup group is usually a really good resource for finding those people. You need some way to manage sign-ups. Eventbrite, Meetup, Google Forms, all of those are really good sources. You need workstations. We'll talk about that in just a minute. I'm going to move on. Books are a great, nice to have for the kids. One thing that is absolutely not just a nice to have. If you're going to have kids in the classroom all day, of course, you have to feed them, and that's another big expense that you have to account for. So, we have workstations. When we teach young coders, we use raspberry pies. Now, how you decide to set up your classroom is going to depend on a lot of different factors, but the one thing I want to recommend strongly is that you also use raspberry pies, and there are two important reasons why. One is consistency. With a class full of kids, it's going to be a whole lot easier on you if you're having every student working in the same environment. You don't want to spend a lot of time with installation or debugging issues that are unique to a particular operating system. If you've ever taught in adult beginner class, you certainly know people bring in, you know, Windows laptops, Linux laptops, everyone's got a different operating system, everyone's got different problems. Installs can really take up a lot of time, so you don't want that. The other thing that's really important is reinforcement. You want your students to have a programming environment that belongs to them, something that they can take home at the end of the day and go there so that they can keep going when they leave your classroom. There are some maybe less important reasons, some things that I really enjoy about teaching on raspberry pies. Their operating system comes with a lot of software that's already installed. You get idle for free, and if you've never worked with it, idle is like a, it's a Python interpreter. It just has a few extra bells and whistles that make learning a little easier. And they also come with Pygame. In the first few years of young coders, the last part of the class, having the kids open up games and just edit constants to do things like changing background colors or changing the size of their avatars to kind of see what effect they could have on the game. And the newer raspberry pies come with MCPI, which is a library that you can use to interact with Minecraft. So as you might imagine, that is hugely popular with kids. So all of this means that you're going to be purchasing a lot of raspberry pies, but they're actually very affordable. And peripherals like keyboards and monitors can usually be rented for a very low cost. And, you know, as I said, I'm going to give you some resources to help you figure out the financing and how to pay for all this stuff. And of course, you're going to want some students. I would recommend enrolling students at around 12 and older, maybe 11. The age cutoff is usually a point of contention for young coders' classes. And, you know, it's understandable. Parents want to get their kids into coding classes early and for good reason. But sometimes it can be hard to tell if the kids are ready. So here's the thing. Kids develop new cognitive skills as they grow. Even beginner Python requires some abstract thinking. And among childhood development researchers, it's generally believed that the ability to think in the abstract emerges at around age 12. Sometimes before, sometimes after. It really depends on the child's life experiences a little bit. There are other factors involved, but usually 12 is the age. Personally, I think that researchers' views on that are going to begin to change as we see more kids getting into computing at earlier ages. I think it's very possible. But for now, 12 is what we usually agree on. And so when we do young coders' classes, that's where we establish the cutoff. I mean, you can put an eight or a 10-year-old in a CS classroom, and they may be able to mimic what you're typing. But whether or not they're actually comprehending it is not as certain, and it's something really important to keep in mind. For those kids who are younger and who are still in what we call a concrete thinking phase, visual learning environments like scratch, turtle, hopscotch are all really terrific alternatives. Oh, you know what I wanted to mention? Earlier today, there was a talk, Meg Ray and her poster photos gave a really, really terrific talk about developing curriculum for traditional classrooms. And they spent a lot of time talking about the stages of childhood development that will make that make a whole lot more sense. So they also had some really terrific ideas for developing your own curriculum if you're interested in doing that. So if you have a chance, when the videos come out, go and find that one. I don't remember the actual title of the talk, but yeah, just look for Meg Ray, look for that name. It's on the schedule, I think it was just two hours ago. Oh, and well, where do you find these kids? I think that you're going to be really tempted to go and fill your classes with kids who are the children of other programmers that you know in your local community. But I would implore you to consider doing something different. And if you remember nothing else from this talk, remember this part. This is what I consider to be the most important thing. You have, if you have Python skills, you have a really unique opportunity to impact kids who might not otherwise get much exposure to computing. So try reaching out to organizations like the Boys and Girls Clubs of America, big brothers and big sisters. I think those two organizations are in almost every major city in America. You can find kids who wouldn't necessarily get exposure to computing otherwise. I live in Austin, and there we have a group called Girl Start that's like an after-school slash summer camp program for girls who want to focus on STEM skills. So, you know, Google around and look for something like that. Your town probably has something similar. So when you're looking for kids to enroll in this class, focus on diversity, focus on kids from different economic backgrounds, different ethnic backgrounds. It might take a bit of Googling and going a little bit beyond what you're familiar with to find these organizations to work with, but it'll be worth it. In the end, you could really open up some new doors for some of your students. That's the hard stuff. What are the soft skills that you need to teach kids? Again, you know, keep in mind that we're talking about a short-term teaching experience, a one-day class. So what you really need to be comfortable with are just a couple of things. You should be, you know, fairly comfortable, fairly at ease at illustrating simple Python concepts. For example, when we introduce variables in the beginner class, we talk about, you know, we describe them as bowls, maybe. A bowl is something that can contain all kinds of different objects. You can put something in. You can take it back out again. You can put a new thing into the bowl. You know, those kind of visual demonstrations are really good for young kids. Or visual descriptions, rather. And you don't necessarily need to dumb down or be cutesy to talk to kids, especially at 12 years old. Just be clear. You know, keep your explanation simple. They'll get it. They'll really impress you, actually. You know, but that said, do keep your examples relevant. The first year that we taught young coders. As I said, I brought this curriculum in. It was kind of patched together from some materials that I'd used teaching an adult beginner class in Portland. So I had this slide. I had the kids looking at a list of Beatles names. And I mean, like, the Beatles, John Paul, George Ringo. And I wanted them to use it into X to choose their favorite musician. Of course, I was greeted by blank stairs. And 12 year olds do not know who the Beatles are. Some of you probably have no idea or don't really particularly care. So I went back to the hotel room that night and changed that to a list of colors. And that's what we've used ever since. We just have the kids select their favorite color. Works great. So when it comes to teaching materials, you are always free to use the young coders curriculum. It's been open source since day one. The materials that we use at Python, like I say, they were originally cobbled together from a lot of different sources, but they've been patched and refined and tried and tested over the years. And we know that they work. They're filled with lots of little little wins, little aha moments to keep the kids engaged. There's lots of gradual skill building. And if you go and take a look at the repository, you'll see that they are formatted like a presentation. In fact, there's a keynote file. So I used keynote to develop them originally. It's a slide deck with very extensive speaker notes that you can use if you find yourself needing a hand. We've taken these speaker notes and given them to people who've never taught before and had them use them as a script. And it worked beautifully. We usually, you know, project these slides from a computer that also has idle installs so that we can alternate between the slides and demonstrating coding tasks. So there's a little bit of live coding, a simple mathematical expression. It's not anything that you need to be worried about. You'll find those slides along with some really detailed classroom setup notes in the repository up here. The latest version is in a folder labeled 2016. And that version has been updated for Python 3. As recently as 2015, we were still using Python 2 to teach the kids. So that's also available if you're interested. Just look under the 2015 folder. Of course, if you want to write your own curriculum, that is just as viable. There are lots of books and websites to draw inspiration from. Oh, gosh. Let's speed it up here. Just, you know, remember a few things. Make a cumulative. Start small with simple ideas and build up gradually. Make sure it's age-appropriate. And by that, I just mean, you know, don't repeat my Beatles mistake. Maybe don't use any pop culture references. Keep your variable names short. This is a lesson that I learned the first year. 12-year-olds are not the fastest typists, so don't use variable names that are 20 characters long. And be judicious about adding gaming content. And this is, you know, something that may be a little bit controversial. There's this common misconception that kids come to programming classes wanting only to make games. And, you know, they do. They're interested in games, to some extent, but that's not the only thing that they want. They're interested in computer science teachers association. And they work in the public schools in Austin. And one thing that I hear from them repeatedly is that they can't get girls from AP Math and Science to enroll in AP computer classes. And the reason is that the girls think that it's only going to be about making games. And they're usually right. And they want more variety. And that's also been my experience with the classes that I've taught. You know, kids want game content, but they're interested in other things, too. So, you know, do what you can to show them that you can do more with Python than just making games. All right. So, go time. Day of the class. You're standing at the front. How do you talk to the kids? It will not be like this, I promise. Kids are really nothing to be afraid of, especially in this context. You know, a class like this will not come with some of the same challenges that you might have had if you've ever been in a primary school class. And kids are very familiar with basic classroom performance. They know how to behave. They know what's expected of them. And your students are going to be there because they want to be, not because it's compulsory. So, they're going to be really eager to learn this stuff. They'll soak it all up, I promise. They'll maybe not be model students, but they're really going to be eager and paying a lot of attention to you. Oh, by the way, this is a scene where you ask me how I know. I'm secretly, maybe not secretly a big Dolph Langer fan. Anyway. So, what you do want to do is be collaborative. Don't just read code samples that the students interact with them. Ask questions, even if it's just asking them to guess what the results of an expression might be. Engage with them directly. They'll surprise you with some really intelligent questions and they might even teach you a few things. They're going to be excited to be there, but they can also lose focus if you aren't mindful of the pace of the class. This is another thing that you want to have teaching assistants for. Make sure that your volunteers are circulating and answering questions and keeping everyone on track and keeping them on the same pace. Be aware of when students are getting restless. Listen to the noise level in the room. If it's rising, it's probably time to move on to the next topic. Plan frequent rest breaks and set aside some playtime at the end of the day for students to play around and explore the skills that they're learning. Don't sweat the small details. In a class like this, in a one-day class there's really only so much that you can teach and kids are going to need time beyond the classroom to work with and absorb all of these new concepts of learning. Keep your mind on the big picture. You're teaching kids how to communicate with their computers and that can be really mind-blowing to someone who's never done the programming before. Your students are not going to walk away with the thorough knowledge of Python and that's fine. That really shouldn't be your goal. What you are doing is planting a seed that is going to show kids how possible programming is and it's going to motivate them to want to go home and learn more. All right. I got a little more. One more minute. This is the site that I mentioned earlier where you're going to find all of that information and descriptions of all of the things that you need to organize and teach a class. If you go to the site and navigate to the teaching section you're going to find details about all of those physical resources. There's a page about how to get sponsorship money. Again, I want to point out that the PSF is terrific about this. They have lots of detail information on their website on python.org about how to apply for grants to teach these classes. You're going to find information about where to find kids. It's a new site just launched a few days ago but it's got lots of teaching and organizing resources along with an online version of the official young coders curriculum written in a sort of a tutorial format. I wrote this talk actually as I was also writing content for the site so if you read it and it sounds a little familiar that's why. I am currently looking for someone to help me port the tutorial to a Jupiter notebook if anyone is just coming out with that. There are going to be lots of additional resources coming up in the next few months. I don't know if any of you are familiar with the Django Girls model. They have a ton of organizing tools, checklists, just all kinds of things to help people in their local towns and communities organize classes. And that's the kind of thing that we're going to be building out to help people organize their own kids' classes. So if you're curious about something that you don't see up there just ping me and I will do my best to get you an answer. These slides are actually not up online yet. They probably will not be up until tonight just because I didn't get a chance to put them up before the talk. But you know, follow me. My Twitter handle is B-Sharat. As soon as I get them up, I will post them. And that's it. I think we have information questions. If anyone has questions, please turn on your mic first and make sure to turn it off afterwards. There's a little silver button in front of the microphone. And if you're at the wall, just be loud. Thanks. I'm just curious real quick. I'm sure there's information on the website and on your GitHub, but do you have some go-to suggestions for, let's say, at the end of the one-day teaching, students are interested in doing more on their own. Do you have some go-to websites that you think are friendly for that age group around 12 years old? I do. And you know, I apologize because I don't remember the names off the top of my head, but that information is on the website. If you go into the teaching section, there are a couple of pages to talk about. Like, you know, learn Python the hard way, for example. That's maybe not the most appropriate for kids, but it's perfectly fine for a beginner. There are quite a few other resources like that. I just don't have them off the top of my head for now, but you'll certainly find them there. Yes. Oh, you're welcome. Yes. You know, that is a really... That's a really good question. You know, we found that, or at least I've seen that early on, you know, kids, they really have a deep understanding of what a variable means. They think that it is a fixed thing, that it is a fixed value. You know, if a variable is named this, then it must always be named this. So what we've tried to do is make sure that they're... We use the my something convention. Do you like, you know, camel casing or, you know, do my name, my thing, my object, whatever, to make it clear that a variable name is not fixed. It can be anything at all. Just keep the word short. You know, use a whole word, but keep it under maybe five or six characters if you can. It's, you know, it's not an exact science, unfortunately. I'm going to go get dinner.