Teaching & research interests

My goal is to help students become proficient programmers, caring collaborators, and happy human beings. That list is in ascending order of importance, but descending order with respect to my qualifications. That said, I’ll do what I can.

In past research, I’ve focused on programming language design, especially functional programming and type systems. I’m still interested in how programming language technology can help make all kinds of programmers’ lives better.

Selected publications

Past teaching

CS 3/496: Systems Programming in Rust Sp21, Wi20, Sp19, Sp18
CS 211: Fundamentals of Computer Programming II Sp21, Wi21, Fa20, Sp20, Wi20, Wi19, Wi18, Wi17
CS 214: Data Structures Fa19, Fa18, Fa17, Fa16, Fa15
CS 295: Intensive Program Design Fa20, Fa19, Fa18, Fa17, Fa16, Fa15
EECS 111: Fundamentals of Computer Programming I Sp19, Sp18, Sp17, Sp16
EECS 230: Programming for Engineers Wi19, Wi18, Wi17, Sp16, Wi16
EECS 3/496: Type Systems Wi18
EECS 3/495: Concurrent Programming in Rust Sp17, Wi16
CS 3500: Object-Oriented Design* Su15, Sp15, Fa14
CS 4620: Building Extensible Systems* Sp15
CS 51: Introduction to Computer Science II Sp14
CS 2500: Fundamentals of C.S. I* Sp10
CS G-262: Compilers* Sp08


GitHub: @tov

LaTeX packages (plstx, pfsteps, ottalt, . . .) Includes packages for typesetting grammars, writing proofs with numbered steps and justifications, formatting Ott output, and list processing
libffi-rs Rust bindings for libffi, for calling Rust closures from C via a single function pointer
min-max-heap-rs A double-ended priority queue in Rust
succinct-rs Succinct data structures in Rust
Data.Function.Memoize Haskell library that uses lazy tries for memoization, avoiding the need for unsafePerformIO.
affine-contracts Contracts for one-shot functions and one-use values in PLT Racket
Caml-Shcaml UNIX shell programming in OCaml

Last update: Sun, 21 Nov 2021 17:18:59 -0600