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,
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.
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
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
This is cool because it means that handicapped students could
compete on the same level as everyone else.
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
(We also have a
SIGCSE paper on this.)
I've written several textbooks.
I've been doing a lot of work with
Tablet PCs for education.
for more on that.