In 1999 I taught my first programming course. I used a programming environment called Microworlds Logo, and my curriculum was on a floppy disk full of Word documents written by the teacher who taught the class the previous year.

This year, I’m teaching a new course. The AP Computer Science Principles course has links to six complete online curricula, all of which are free. The one I’m using, a version of Harvard’s CS50 course, has great problems supported by a slick website and hours of video made by some of Harvard’s finest.

Everyone these days wants to teach kids to code, and everyone thinks they know how best to do it. Some, like Apple and Google, want to attract developers to their platforms. Others, like the MIT media lab, want to study how children learn. Some want to attract more women into the field, and others want to sell a product. The result of all this is that there are so many resources to teach programming to kids that its a little overwhelming.

I have messages in my inbox that will probably go unanswered from people who want me to look at the tools they’ve made to support teaching computer science. I would love to look at them, its just that there are so many different ones I’ll never have time to see them all.

From Creating to Curating

Twenty years ago, in order to teach Computer Science I had to create the curriculum. I could buy paper books, but these were generally aimed at college students and not at my students, who were as young as fourteen. So I wrote up problems and guides for my students, and later made screencasts to help them learn the material. I published them on my own websites, and later on iTunes University.

I don’t really need to make teaching materials any more, though I still do. There is so much free stuff out there that my time is often better spent sifting through it and using it in my courses.

Most of it is for the Basics

There is still a dearth of material suitable for intermediate programmers. Many of the people writing curricula are programmers, and they often put cleverness above clarity. Unwilling to put any code out there that isn’t production quality, they introduce every new concept at once. I was looking for some introductory material to help students write games in Python, and I couldn’t find anything at all that wasn’t super complicated. So I wrote my own.

Free is Better

I’m not opposed to spending money on software or curricula. But if I can teach my students to program free tools, then they are more likely continue to use that tool at home, this year or next. This year I’m teaching AP Computer Science Principles with Harvard’s free curriculum, and using a free online IDE. I’m teaching Web Publishing using GitHub’s Atom editor, with students publishing their work for free on GitHub itself. And in my Introduction to Programming class I’m using’s free IDLE editor, even though (or maybe because) it has less features than other Python IDEs.

Where we are now

We’re in a pretty good place for teaching tools. I fear we’re in a worse place with respect to finding teachers to curate and use them properly, and this problem will be much harder to solve. But that story will need another blog post or two.