Teaching Philosophy
My teaching is deeply informed by my research on how people learn and use formal systems. I'm particularly interested in the models and representations we use to help students understand program behavior (notional machines) and in leveraging contrasts between concrete examples to teach computing concepts effectively. This research-driven approach shapes how I design courses and curricular materials.
I believe computing education needs to evolve to meet the needs of students across disciplines. My work on data-centric computing reimagines introductory CS by blending computer science, data science, and data engineering—recognizing that many students need skills to work with data regardless of their field. I'm also committed to helping students understand the social implications of computing through our department-wide effort on integrating socially-responsible computing, because technical skills alone aren't enough in today's world.
In the classroom, I focus on creating learning experiences that help students build robust mental models of computation, recognize patterns across different contexts, and develop the ability to reason about both technical and social aspects of computing systems. I mostly teach introductory-level courses and research seminars on computing education, though I have also taught programming languages, software security, computer-aided verification, and various research seminars.
Courses at Brown
- Fall 2025: CSCI0200: Program Design with Data Structures and Algorithms (also Spring 2022-2025)
- Fall 2022: CSCI0111: Computing Foundations:Data (also Fall 2021, Fall 2020)
- Summer 2020: CSCI0180: Computer Science, An Integrated Introduction (also Spring 2020, Spring 2019, Spring 2018)
- Summer 2019: CS0050: A Data-Centric Introduction to Programming [2017 offering]
Courses at WPI
While I was on the faculty at WPI, I taught upper-level courses in Programming Languages and Software Security, as well as intro-level courses on object-oriented design concepts and an accelerated intro to program design. I also taught a research seminar on computing education. These links are to the last offerings of each of those courses. Links to older courses are also available.
TeachScheme/Program by Design
I have also developed various TeachScheme exercises and materials over the years.