Teaching
Twelve Test Generators for Twelve Programming Languages (CISPA, 2026)
I designed this seminar and co-taught it at CISPA in 2026. Each student picked a programming language and built a program generator whose output that language’s compiler or interpreter accepts. Students wrote grammars and semantic constraints in Fandango-RS, a Rust-based evolutionary generator for language-based testing.
Weekly meetings had two parts. In the retrospective, students compared what had gone wrong in their language that week, such as odd scoping rules, and the group looked for quirks shared across languages that a generic constraint could capture. In the prospective, we introduced a new topic (composing constraints, generation goals, def-use relations and scoping, evolutionary search) along with a constraint design pattern for it, which students then implemented for their own language.
This year’s languages were C++, C#, Dart, Java, Julia, Kotlin, Lua, OCaml, Pascal, Rust, Squirrel, and Swift. The seminar ended with a day of student talks and a written report from each student, and the case studies are going into a joint paper with the students as co-authors.
Other teaching
- 2024–present: Bachelor’s and Master’s Thesis Seminar, CISPA
- 2020: Lead TA for Software Engineering, Northeastern University
- 2016–2018: Tutorial instructor for CS115 (introductory CS) and CS341 (algorithms), University of Waterloo
- 2015–2016: Tutorial instructor for COSC3106/3127 (theory of computing and programming languages), Laurentian University
See also the students I advise.
