I regularly teach CS 421 - Programming Languages and Compilers - in the spring semester. 421 is an upper-level undergraduate course split between compilers and languages. Hard to get a textbook for it. We use OCaml to do a simple compiler project in the first half of the class, and then continue to use it to discuss languages in the second half. The class has evolved more and more toward a balance among (1) "dynamic" languages - untyped language with automatic memory management, like Python; (2) "static" languages - traditional typed languages with minimal runtime support, like C; and (3) languages occupying a middle ground, with static types but "managed" execution environments, like Java and OCaml.

This semester, I'm teaching a seminar on program generation, CS 498, Program Optimization by Specialization.

Undergraduate curriculum

During the time I was Director, I pushed some significant changes in the undergraduate curriculum, but that's probably not too interesting to anyone who's not a student here. Two things I was particularly proud of were the freshman orientation "scavenger hunt" and the Programming Studio course.

  • The Scavenger Hunt was an event at the start of the fall semester where freshmen would go around campus in teams of five solving puzzles that sent them to different locations. We described it in a SIGCSE paper The cool thing was that we used handheld computers (HP Jornadas, donated to the department for a different project years ago), which meant we could time problem-solving only, and exclude travel time. This is cool because it means that handicapped students could compete on the same level as everyone else.

  • The Programming Studio is a course which consists mainly of weekly meetings with a small group of students and a TA in which the students each present and discuss their weekly programs. Lots of people agree that programming is a skill somewhat like writing or playing an instrument, meaning that learning it involves (1) lots of practice, and (2) an intelligent critic. Unfortunately, we give students - and I think this applies to substantially all CS departments - lots of (1), but very little of (2). Problem is, (2) is very expensive. The structure of the Programming Studio - students critiquing other students' work - somewhat gets around this. Plus, it's helpful for students to get practice talking about programs. (We also have a SIGCSE paper on this.)


I've written several textbooks. See the pubs page.

Tablet PCs

I've been doing a lot of work with Tablet PCs for education. See the SLICE page for more on that.

    Last updated on Tue Jul 8 21:07:32 CDT 2008 .