The desire to ground theoretical work in real-world problems is the underlying theme of my teaching philosophy. Computer science is uniquely positioned to move ideas from the whiteboard to running code and, in my case, to physical systems that embody those ideas in the world. I adopt a constructivist, project-based, active-learning approach: students build durable understanding when they apply core concepts to authentic problems they care about, work in stable, collaborative teams, and receive timely feedback.
In both my courses and my lab, I use backward design and cognitive apprenticeship, structuring labs, projects, and research milestones so that students first practice expert behaviors with close scaffolding and then take increasing ownership of the work within a supportive, inclusive community of practice. The core of my classroom philosophy is that students learn computer science best when they can see concepts accumulate into something they care about. I approach courses with three guiding principles: (1) give students ownership by tying their work to their interests, (2) keep the semester coherent by scaffolding labs and assignments so they build toward a meaningful final project, and (3) design inclusion into the mechanics of the course.
AI4ALL, Multiple semesters
Designed and delivered an introductory AI and ethics course for students from diverse backgrounds. Technical content organized around a central project where student teams chose a theme from their personal interests. Rather than standalone labs, every lab and assignment after foundational concepts could be used as a building block for the final project, allowing me to monitor whether students were understanding both the current topic and how earlier concepts fit together across the course. The ethics component leveraged teams in a breakout discussion format, with multiple ways to participate that increased engagement and acted as ongoing formative assessment.
University of Illinois Urbana Champaign, Multiple Semesters
Helped design and deliver a robotic motion planning crash course to new graduate and undergraduate students who joined our lab, pairing technical lectures with programming assignments in the lab’s main code base. Students worked with the same tools the group uses for research where version control, experiment logging, and code review were explicit learning outcomes. Because implementations were extended rather than discarded, students saw why design choices, documentation, and testing matter when their code becomes the base for later work. This exemplifies cognitive apprenticeship and research-led teaching. Students begin with guided tasks at the periphery of ongoing projects and progressively take on more central, independent roles.
Mentoring has been the defining through-line of my graduate and postdoctoral career, and I believe that research is best served by developing the researcher. At UIUC, our lab uses a hierarchical mentoring model: postdocs and senior Ph.D. students mentor junior Ph.D. and master’s students, who in turn mentor undergraduates, all under faculty supervision. Due to a generational gap in the group, I stepped into the senior student role unusually early, and beginning in the second year of my graduate studies onward, most major projects I worked on were driven day-to-day by students I was mentoring.
My mentoring process parallels how I approach course design and reflects a cognitive apprenticeship model. Early in a collaboration, I help scope projects to align research needs with the student’s individual interests, set expectations, and establish milestones that build toward a larger goal. I am hands-on in the beginning, walking through code, modeling how to debug, and connecting specific tasks back to the larger research questions. As the student gains expertise, I gradually fade this scaffolding: they start proposing their own research directions, making design decisions, and eventually mentoring more junior students. Throughout, I aim to create an inclusive lab environment by setting clear expectations, ensuring that students from diverse backgrounds have access to impactful projects, and normalizing questions and iteration as part of the research process.
The impact of this approach is visible in the trajectories of my mentees:
Irving Solis and Hannah Lee both completed their Ph.D.s after years of collaboratively advancing our multi-robot planning research, and now lead and mentor teams as a postdoc and as a robotics researcher in industry.
Scott Lee, a current Ph.D. student, is carrying forward the main threads of my graduate research, with his first submission in our lab under review to appear next year.
In my future lab, I plan to continue this hierarchical mentorship approach with an emphasis on developing accomplished researchers: new students will be brought up to speed with a structured crash course and guided both by me and by their senior student mentor, and senior students will graduate prepared not only to conduct research, but to lead and mentor teams of new researchers.