Teaching

I love it! Sign up and let’s have a class together!

CMSC 245, Fall 2017

I am currently teaching CMSC 245, Principles of Programming Languages. The course covers programming paradigms at several different levels of hardware abstraction, and teaches students to both understand how the machine executes code and expand their foundational understanding of programming abstractions. The main course website is here.

CMSC 330, Summer 2015

330 Board screenshot

Course webpage

Link to GitHub repository with examples

During the summer of 2015, I taught CMSC 330, an undergraduate course on programming languages. CMSC 330 covers a wide range of concepts in programming languages: both foundational and practical. In particular, the students learn OCaml, Ruby, and Prolog, and learn core material such as automata theory (finite state machines and grammars) and programming language semantics.

For the Summer 2015 iteration of the course, I reworked a large part of the lectures to cover the same set of material, but presented it in an interactive style: developing concepts in class, while supplementing this development with projects and course notes. I also elected to put more emphasis on teaching functional programming and programming language semantics. The course included extensive coverage of small step semantics: for one project students implement an interpreter for a core-ML.

Relevant lecture material I particular enjoyed writing includes:

One off lectures

Occasionally I get invited to give one-off lectures in various classes. I see this as a great opportunity to expend some energy into digesting a topic well enough to present it to other people in a comprehensible way. In particular, I have a set of lectures I’ve given (some a few times) in courses: