You don't understand something until you've taught a teenager to teach a computer to do it.

SIGCSE is Nifty

2011 March 13

by Hélène Martin

The Association for Computing Machinery has a Special Interest Group in Computer Science Education that convenes once a year for a conference. There are always many fascinating speakers and subjects but for me the highlight is the nifty assignments session. That hour and a half is an opportunity to get several directly usable project ideas for CS1 and CS2 classes and a chance to see some of the nation’s top computer science instructors doing what they do best. Most of what my students do in both AP Computer Science and Creative Computing (intro Python course) is directly influenced by the nifty sessions I’ve attended over the years (though all materials are available online, I’m more likely to use projects I’ve seen in person).

Stanford’s Nick Parlante, who has been organizing this session for a decade, opened with a neat demo of the infrastructure he built to run small code snippets in the browser. I had the opportunity to talk to him about the CS0 class he’s been running at Stanford and I’m really looking forward to “borrowing” lots of what he does!

It was interesting to see two projects, a scrolling game and a fish/shark population simulation, that would fit very nicely with GridWorld, the AP computer science case study. In fact, the starter code for the population simulation does use GridWorld and the author of the scrolling game has offered to port it over if there’s interest.

I was most impressed by Evil Hangman, a hangman game that gives the illusion of being legitimate but in fact cheats by dodging the user’s guesses! This was presented by Keith Schwarz, an incredibly energetic lecturer from Stanford. The demo is very compelling: as the audience guesses vowel after vowel that doesn’t appear to be in the word, frustration sets in. After the first run, when the word ends up being something relatively mundane like “lull,” the natural instinct is to want to play again — certainly we just had bad luck? At SIGCSE, 150 computer science educators were practically begging Keith to play again and again so we could better observe the game’s behavior. Keith did not indulge us and instead gave compelling reasons to give the assignment from a pedagogical standpoint: it gives students practice using simple data structures like maps and requires several data transformations, something students generally need practice with.

I didn’t just like the assignment, I liked the way it was presented. Keith drew us into it as he would students and I’m guessing I was not the only one who put together a solution on the plane home (80 lines of Python). There were some great hooks. First, what is it doing? Oh, it’s cheating. But how is it cheating? Wait, that’s enough to make it nearly impossible to beat? How hard is it really? How many guesses do I have to give myself to win? I want to make sure that as many of my assignments as possible inspire curiosity in this way.

I also am likely to use University of Toronto’s book recommendation project. The assignment was first given while the Netflix Prize contest was still open. Though it’s a little less timely now, it’s still a great opportunity to discuss uses of computer science that students are very familiar with and to demystify how it’s done. Michelle Craig says, “after reading a pre-collected set of ratings for a list of books, the program makes recommendations for a particular reader based on a small set of sample ratings from that reader and the preferences of other readers in the community. The assignment was inspired by current machine learning research and provides the opportunity to talk about many other CS ideas including weighted averages, comparing non-trivial objects, designing distance measures between objects and writing comparators, and sparse data.” I think this is another one that could easily be presented in a way that hooks students and makes them want to have the program.

The question of whether or not to reuse assignments between course offerings came up in a few informal conversations and I think that it’s interesting to note that most of the nifty assignments presented were shared after years of tweaking. Getting an assignment to the point where it emphasizes the right skills, challenges students without frustrating them and provides truly compelling output is not an immediate process. I love assignment reuse and really appreciate the availability of polished, student-tested projects. I’m looking forward to many more nifty assignments from future SIGCSEs!

It is interesting that the old “games” still hang around in the CS teaching world. I remember programming the fish/sharks in the mid 80′s on an Apple IIe in Apple BASIC. I also remember doing a bacteria growth program in FORTRAN in about 1980 that was very similar to the fish/sharks. Those were the days: dumb terminals, no monitors, magnetic tape, and youth. I am going to have to give fish/sharks a try in something more modern and with a bit more graphics. It might be an interesting final project for my two seniors.
I got the motorcycle out Sunday. Way too much sand on the roads to do anything safely. 55 degrees is also a bit fresh for my high speed tastes.

Thank you so much for this post. I’m not predominantly any kind of teacher, as my school has me teaching 8 different courses during a year, and it is posts like this that help me and my students approximate what larger schools have in such expert teachers like yourself. Thanks!