teaching machines

Bad moon rising

In reading picture books to my young son, I have come across several pictures like these: In looking at these “moon shadows,” you should get a feeling that they are not right. Why? Because at any time other than a lunar eclipse, only half the the moon’s surface has a direct path to the sun. […]

Recurring recursion

Recursion is a concept that fascinates people, even non-computer scientists. All the same, I’ve decided to stop teaching it in my introductory programming course. I’d rather wait until I can motivate it with self-similar data structures. Nevertheless, recursion is pervasive. Who can’t help but wonder at the following phenomena? Isle Royale The largest lake in […]

How to make a 3-D present for your wife

In summer-fall 2009, I read Douglas Hofstadter’s Godel, Escher, and Bach. It took me that long. It was full of cleverness, but I think most of the message was lost on me. That’s okay, because I was inspired by the cover image to make my wife a keychain of her initials. Hofstadter carved what he […]


Problem: I wanted to record my drawings and derivations on my Android tablet. However, no tools that I could find recorded an Android display at a reasonable speed. Solution: I wrote Deskdrawer to provide a drawing surface that I could mirror on my desktop, where I can record. Check out and download the app at […]

HNRS 304.503 – Digital Game Development

Information Syllabus Enrollment: 17 RSS feed Lectures Labs Homeworks Post mortems

HNRS 304.503 Lecture 0 – Tentative agenda

Call top-down teaching the kind of teaching where we you start from theory and abstraction and work your way down to application. I’m not going to take a top-down approach in this class. Call bottom-up teaching the kind of teaching where you start with practical realizations and generalize up. This will be my approach to […]


SpecCheck is a system for computer science educators teaching large classes to get their students’ code in line with homework specifications. With SpecCheck, educators write their reference implementation, tag the specified parts with @Specified, and generate tests for interface conformance that students apply to their own code. Wherever things are misnamed, wherever parameters are missing, […]