Teaching
Courses
After completing my Ph.D. at the University of Toronto, I worked in industry before returning to academia. That experience gave me a different perspective on software engineering education, especially on the distance that can exist between learning individual technologies and understanding how they come together in real systems.
This perspective continues to shape how I design my courses. I design lectures and assignments to help students build a solid foundation in the technologies and concepts at the core of each course. Along the way, I also use examples and discussions to draw attention to the ideas behind the technologies themselves: why a particular abstraction exists, what problem it is intended to solve, and what trade-offs come with different approaches.
Projects provide a broader setting in which students can put those foundations into practice. Within the practical limits of a course, I design them to incorporate several aspects of engineering work: making and justifying technical decisions, integrating components into a coherent system, evaluating and verifying its behavior, collaborating with teammates, and communicating their work clearly. A course project cannot reproduce the full complexity of professional engineering, but it can give students meaningful opportunities to practice these skills in a more open-ended and integrated setting.
The growing capability of AI-assisted development tools is also changing what meaningful technical practice looks like. Rather than treating AI simply as something to allow or prohibit, I am interested in how learning activities can be designed so that AI supports exploration and problem solving without removing the thinking that gives the activity educational value. This has led me to think more carefully about where understanding, judgment, verification, and explanation should appear in assignments and projects, and how the role of AI may differ depending on what a particular activity is intended to help students learn.
I develop and refine the content, assignments, projects, and learning activities for the courses I teach, adapting them as technologies change and as I learn more from each offering. I often think of course design as a form of system design, where lectures, assignments, projects, assessment, tools, collaboration, and feedback interact to create a coherent learning environment. Building and continually refining that system is one of the most rewarding aspects of my teaching.