Young Coders: Intermediate
|PyCon Python CS Education PyKids
We've been putting on a Young Coders class at PyCon North America for several years now - it started in San Jose, continued in Montreal, and has morphed into something a little more challenging in Portland.
The original class is aimed at beginners. While we try to recruit kids from the local community, it's inevitable that every year we're going to get kids from the Python community, children of programmers who have already been exposed to Python in some capacity.
Last year, as we were going through the beginning material - typing math expressions and strings in Idle - I noticed one young student off on their own, writing complex functions, and I realized that we needed to offer more. For some of those kids, the beginner material was just too simple and sitting in that classroom was a waste of a day. So I spent some time in the year between conferences putting together new curriculum.
This year we offered two Young Coders classes - the beginner version we've always had, and an intermediate class for kids who already had a little Python experience.
What Went Well
Before I even talk about the class itself, I want to thank Taylor Meek and Andrew Dupont for stepping up and joining the teaching staff this year. You should thank them too - they were the real heroes of this year's Young Coders.
Rather than diving deeper into the intricacies of the language, my goal with the intermediate material was to teach students about the things they can do with Python. That turned out to be a good decision - the kids left with a real sense of excitement and purpose. They had something concrete, tools that they could use to go out and build interesting things.
We didn't do a lot with gaming. That wasn't my original intention, I just ran out of time and did not get much written. And I don't think I'll add much for next year. I feel like there are a lot of resources out there already, both books and web sites. I want kids to know that there are more cool things they can do with Python than just make games.
Our intermediate curriculum included:
- a condensed version of the beginner slides, as a warm-up/refresher (that took about 30 minutes to run through)
- a section on scripting
- a section on building a web site (that took up the bulk of the class time, but really kept the students engaged)
- some simple gaming construction, and a lot of new ways to interact with the mcpi (Minecraft) library
Scripting introduced a lot of new concepts - opening/reading/writing to files, connecting to the internet and making requests, even making requests to APIs and learning about different kinds of data structures. But we walked through every line of every script step-by-step, so nothing went unexplained. And we went slowly enough that nothing was too overwhelming**.
** How to tell if a thing is overwhelming - if the kids look panicked, slow down; if they start to glaze over, you're good, just move on.
Running scripts also provided a lot of immediate gratification for the students - they could see Python doing things in real time, just by dropping in print statements to follow along at every step. They learned more about constructing Python expressions - we built on gradually more complex examples of dot notation and using class methods. And they learned a lot more about errors and how to handle them.
I want to point out here that I don't expect students will retain everything we cover in these classes. But that's okay - they get a little taste of a lot of things, they'll remember enough to know it was fun, and they now know where to find the resources to learn more.
Building a web site got even more complex, as we introduced a lot of topics not specific to Python, like what servers are, what the internet is made of, how data travels back and forth in requests and responses, databases and what they do, and frameworks and what they offer us.
We did skim over some of these subjects - some of them could take their own dedicated classes just to explain in detail. But we always provided lots of links back to resources in case any student wanted to explore in any particular direction and learn more.
Setup for both classes was a lot simpler this year. Preparation was key. (To recap, the classroom workstations consist of Raspberry Pis and peripherals - keyboard, mouse, monitor. The Raspbian OS includes Python 3 and comes with Idle installed.) I got a new RPi kit ahead of time and walked myself through configuration (which has gotten a lot easier over the years - we no longer have to do everything from the command line). Our kits included wifi dongles that were easily omitted from the beginner setup, added for the intermediate, and everything just worked.
What Didn't Go As Well
We had a fairly low turnout this year, in both classes. Registration numbers weren't particularly high to begin with, and then we had quite a few no-shows, both among students and volunteers/TAs. I suspect that we did not communicate enough with our students or volunteers beforehand, and to that end I'm thinking of putting together a mailing list to keep volunteers up to date throughout the year. We also didn't promote the classes very heavily leading up to the conference - they're always so well-attended that I didn't think we needed to, but next year I'd like to do some more outreach to the local community.
As it happens, the low turnout was a blessing in disguise. Katie had to leave sprints early, and I've been struggling with an inner ear infection and vertigo that would have made it impossible to stand all day. So we sent out a call to the local teaching community and got a couple of volunteers to take over - Andrew Dupont and Taylor Meek. The two of them handled the beginner class masterfully and with humor. I was feeling a little better on the second day, so the three of us partnered up for the intermediate class. (It's certainly possible to teach either class solo, but having multiple teachers helps balance the load and allows for more personal interaction with the students.)
We also ran into a few technical issues, but not as many as I expected. For the intermediate class, we used PythonAnywhere to walk the kids through building a web site. The browser that comes with the Raspberry Pis - Epiphany - was a little slow, and didn't function well with some of the features of PythonAnywhere. During the lunch break, we installed Iceweasel on most of the Pis, and that worked beautifully. (I did walk-throughs of all the web content on the RPi ahead of time and didn't encounter any problems, so I think we might chalk that up to slight differences in operating system versions.)
Distractions were a problem, but not in the ways you'd expect. Giving the kids an internet connection wasn't an issue - they used it to read documentation and look at some of the resources we gave them. The real distractions came from devices that the kids brought with them. You can ask students to put their phones away, but what can you do if they don't comply? Our best approach was to move fairly quickly and give plenty of personal attention, two things we wouldn't have been able to do with a larger class size.
And then there's presentation, a general problem we still haven't figured out how to handle perfectly. The classroom content is on slides in Keynote - I wrote them there so that we could use speaker notes not visible to the students. But when we need to tab over to Idle or a browser to demonstrate something new, it's a clumsy process to get in and out of presentation mode. That would be true whether we used Keynote, PowerPoint, SlideDeck, or any other formal presentation medium. I'd like to move the content to Jupyter (formerly IPython notebook), but then I think we lose the option of having presenter notes that are only visible to the teacher. So I'm still searching.
Oh, and the Class example I used when talking about objects and OOP: I should not have used a 'Ball' as my example object. Not with a room full of 12-year-olds.
I'll be making a few changes to the Intermediate slides, mostly adding things we realized we wanted as we were teaching. It might be a week or so from the time I publish this before I actually have all the changes in, but feel free to take a look now if you're curious. (I'll also be adding instructions for the iceweasel install.)
Young Coders 2016 (on Github)