Home

Powered by Django

Young Coders: Intermediate

Date: Jun 07, 2016

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:

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)

Powered by Django

A Quick Look At Programmer Productivity Pitfalls

Date: Feb 23, 2016

I tweeted a couple of things within a few hours of each other this past weekend. It wasn't until Monday morning that I realized how connected they are:

Play the animation. At first glance, it seems like utter chaos doesn't it?

But in fact it is controlled - every part interacts with every other part, and that is where the comparison to object oriented programming comes from.

Spend a few minutes watching it. See if you can get a handle on how all the actions affect each other.

If you had to make a change to any one part of the sequence, do you know how it would impact the animation as a whole?

What if every third figure coming out of the castle on the upper right had to be blue instead of yellow? It seems like a small change, but how would it affect the rest of the sequence? Does this change touch only a small part of the animation? Where would its impact be felt? Those little figures all persist into the rest of the animation. Some are carried away and dropped back into the castle tower, some cross the river and walk back into the castle, some head off-screen (and probably come back in at another side).

You almost need to memorize the entire sequence as you're making your small change, to keep tabs on the impact you're going to have as you switch animated people from yellow to blue.

Let's say you've been watching the animation for a while, and you've got a pretty good idea of what's happening. Maybe you could even describe it in detail if you watched a little longer and took a few notes.

What if someone were to walk in right now and ask you a question? What if you had to get on a phone call and were forced to focus on something else for five minutes? How much of the precise sequence of events in this animation would you remember when you came back? How long do you think it would take you to watch the animation and get familiar with its actions again?

That's analagous to the experience of working on object-oriented software. A programmer must be mindful of the impact of their code changes as they're working, and that often means remembering a complex set of interactions, carrying those interactions around in their head until the work is done.

This illustrates why even small interruptions can be a disaster to a developer. A clear calendar is a programmer's best friend, and day strewn with meetings an hour apart can guarantee that nothing useful will be accomplished in between (what's the point of immersing yourself in a program when the next interruption is just around the corner?). Schedule your standups for early in the morning or late in the day, keep all of your agile planning to one day of the week, and use email instead of IMs whenever you can. Your team will thank you.

Powered by Django

Our Massive Halloween Trick-or-Treat Blowout

Date: Nov 02, 2015

I think we might have out-nerded ourselves this Halloween.

Our neighborhood does Halloween big. Almost every house has been decorated since the first week of October. A block over, they close off the street for a street party, and one of the houses hosts a family-friendly band that plays until around 10pm. People sit out on their lawns and grill while they're handing out candy. And we've got four churches within a two-block radius - all four of them hosted parties on Halloween afternoon, so afterwards all the kids spilled out into the surrounding neighborhood.


Photo: Andrew Dupont

A post on the local community forum warned that we should expect more than 100 kids. I got at least 15 pounds of candy, and we went through all of it.

But Andrew really took it up a notch. While I was handing out candy, he kept count and showed the results on a scrolling display.

This project was all him, I had nothing to do with it - I just wanted to brag about him a little. He wrote a quick Ruby app and put it up on Heroku.

As the kids came by, we used a browser interface with a few simple buttons to keep a count. And as we updated the total, the display sitting in the window updated with just a few seconds' delay.

The code is all up on GitHub, with a detailed README, if you want to check it out:

https://github.com/savetheclocktower/lametric-trick-or-treaters

Our final tally was 250 trick-or-treaters. At that point we ran out of candy, but the neighborhood had gotten pretty quiet by then anyway.

On a side note, Avengers seemed to be the popular costumes for the night (for both boys AND girls). We also had 11 Elsas, which we counted in a more conventional way.

Powered by Django

What I Learned From DjangoGirls

Date: Oct 13, 2015

In September of this year, in conjunction with DjangoCon 2015, I helped to organize a DjangoGirls event in Austin, TX.

This isn't meant to be a comprehensive overview of the class - many other organizers in other cities have done just that already, and summed up the joys and triumphs of the day better than I could:

I just wanted to talk about a few of the things I learned from running this event.

The first thing I discovered was that the corporate/sponsoring members of our community are very generous. What they get out of it: exposure, and more new developers coming down the pipeline some time in the future. What we get out of it: The chance to support beginning developers on their journey not just once, but twice!

I also learned to appreciate this class for what it is.

When I first heard about DjangoGirls last year, I was skeptical. I've taught beginner Python classes for many years and I know that there's only so much you can impart to a student in a day. Too much, too quickly, can intimidate and send prospective new developers running.

But what you'll see when you host (or coach) one of these events is that finishing is not the point. Some students will walk out with a completed Django app, but not everyone. It is, I still believe, a very ambitious curriculum for a beginner to take on in one day. But finishing the app is not the point.

The point is to start. The point is to dip your toes in, to get familiar with the tools and vocabulary. It's to begin to build something, struggle with wrapping your head around new concepts, encounter and solve some bugs. And to realize that these struggles are normal and surmountable, that bumping up against a problem isn't a disaster - it's an opportunity to learn more.

The women leaving our class back in September all left knowing that they can do it, that they're no more impostors than any of us are.

And thanks to the generous sponsors mentioned above, we'll be giving 40 more students the opportunity to accomplish something new.

On December 12, DjangoGirls ATX will host its second event:

If you're interested in learning (or teaching) and you can be in Austin that weekend, applications are open now:

And if you're not in Austin, get involved wherever you are. Django is being taught to women around the world, and if there's not a class in your area, what are you waiting for?

Powered by Django

Coming Back From Burnout: Video

Date: Sep 20, 2015

Powered by Django

Young Coders: Intermediate

Date: Jun 07, 2016 | Category: CS Education PyCon Python

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 ...

Read More

Powered by Django

A Quick Look At Programmer Productivity Pitfalls

Date: Feb 23, 2016 | Category: Tools

I tweeted a couple of things within a few hours of each other this past weekend. It wasn't until Monday morning that I realized how connected they are:

Play the animation. At first glance, it seems like utter chaos doesn't it?

But in fact it is controlled - every part ...

Read More

Powered by Django

Our Massive Halloween Trick-or-Treat Blowout

Date: Nov 02, 2015 | Category: Personal

I think we might have out-nerded ourselves this Halloween.

Our neighborhood does Halloween big. Almost every house has been decorated since the first week of October. A block over, they close off the street for a street party, and one of the houses hosts a family-friendly band that plays until ...

Read More

Powered by Django

What I Learned From DjangoGirls

Date: Oct 13, 2015 | Category: Django DjangoCon

In September of this year, in conjunction with DjangoCon 2015, I helped to organize a DjangoGirls event in Austin, TX.

This isn't meant to be a comprehensive overview of the class - many other organizers in other cities have done just that already, and summed up the joys and ...

Read More

Powered by Django

Coming Back From Burnout: Video

Date: Sep 20, 2015 | Category: DjangoCon

Read More

Powered by Django