My weekly schedule is on-line and also posted outside my office.
For Spring 2013, I'm teaching two sections of CS 70: Data Structures and Program Development. I am also faculty advisor for two clinic projects.
My advising information for Joint CS/Math Majors and the companion advising information for CS majors should be useful to students and their advisors. I try to keep it up-to-date, so please let me know if there's anything I should change or add.
Preparation for teaching includes some tedious tasks. I've thrown together some Mac OS X utility programs that address a few of these.
My CV and most of my publications are available on-line.
My research usually involves the theory or implementation of programming languages. I am particularly interested in type systems for functional and object-based languages.
Recently I've started the Observationally Cooperative Multithreading (OCM) project with Prof. Melissa O'Neill and a sizable number of undergraduate students (21 at last count, with funding for another 18).
In traditional Cooperative Multithreading (CM), one thread runs at a time, and each thread runs until it explicitly yields the processor to the next thread. This permits a very simple programming model; the lack of unexpected preemption means that locks and the problems that go with them (not enough locks = race conditions, too many locks or locks acquired in the wrong order = deadlock) can be avoided.
The goal of OCM is to port the CM model to a multiprocessor. When threads are non-interacting, we run them simultanously without any change in behavior except for improved speed. Preliminary experiments with modified Lua interpreters (an optimistic-concurrency implementation using Software Transactional Memory and a pessimistic implementation internally using locks) are very encouraging. We have an unpublished manuscript describing Observationally Cooperative Multithreading in more detail.
Previously I worked on a translator that turns constructive-mathematics specifications into interface code for programmers. The system answers questions like, "What would a programmer need to implement in order to get a complete and correct implementation of the mathematical real numbers [or a compact metric space, or a space of smooth functions, ...]?" From an educational perspective, it also provides explanations (in terms a programmer can understand) of the non-classical distinctions that arise in constructive mathematics. For example, one can explain the difference between a finite set and a set that is not infinite, and why there is a "size" function only for the former.
I have also worked on types for object-based languages (languages that permit adding new fields or methods to individual objects at run-time) and on type checking algorithms for recursively-defined types.
My wife Sneža is a private French tutor, often teaching students remotely via Skype. She recently put together a book Exercise Your French, a 390-page book of French grammar exercises (with full solutions), for students of French at all levels. It is available as a PDF or as a Kindle E-Book.