Teaching Philosophy
My teaching philosophy rests on two convictions: that students learn best when theory is grounded in practice, and that effective teaching must be designed for the full range of learners in the room. My years as a researcher in industry have shaped how I put the first conviction into practice: informing which topics I prioritize, the tools I ask students to use, and the technical skills I believe will be valued beyond their academic experience. My goal is for students to leave my courses not just with knowledge, but with the confidence to apply it as effective practitioners. The practices I describe here emerged from both pedagogy and personal experience, shaped by my time as a student who did not always fit the conventional classroom and as an instructor who has taught across a wide range of contexts and learners.
I am neurodivergent, and the conventional classroom presented particular challenges for me. Timed exams could induce a kind of cognitive freeze. Manual computation was another friction point: I have dyscalculia, and I found clerical errors accumulating in ways that obscured what I actually understood. I learned to reach for a calculator or write short scripts to demonstrate what I actually knew. I recall one undergraduate physics course that prohibited calculators entirely; I ultimately had to drop it, unable to overcome these cognitive challenges. Passive instruction presented its own difficulty, leading to drifting attention. Manual note-taking compounded the problem, since dividing attention between hearing and transcribing often left me with pages of words I had captured but not absorbed. Importantly, these were not failures of preparation or effort. They are fundamental to how my mind works, and recognizing them in myself made it difficult to assume that a struggling student is "lazy" or underprepared.
These experiences did not only make me more empathetic to struggling students; they shaped the design of my teaching. Active learning over passive lectures, tools that reduce mechanical friction, flexible resources, and assessments that test understanding rather than performance conditions benefit every student, not only those who share my particular struggles. This is the core insight of Universal Design for Learning (UDL), which underpins my approach to teaching. Having experienced the discouragement of a classroom that was not designed for me, I am deliberate about climate: I try to make clear from the first day that questions are welcome, that wrong answers are part of thinking, and that struggling with material is not a sign of inadequacy.
My classes combine lecture with readings done outside class. In a course on Object-Oriented Languages and Systems, for example, I spend little time describing the commands available in a version control tool (students can look these up) and instead focus on the best practices and rationale behind why such tools exist at all. Similarly, in a course on Software Engineering as Human Activity, class time is spent analyzing and reflecting on material through active learning activities such as think-pair-share and informal discussions, rather than summarizing what students were asked to read beforehand. I also deliberately present key concepts through multiple modalities: verbal explanation, worked examples, visual representations, and video lectures and screencasts, so that students encounter the material in more than one form.
I use several formative strategies throughout class to monitor understanding in real time. In-class polls give a quick read of how the group is tracking. A backchannel chat lets students submit questions privately, lowering the barrier for those who are uncomfortable asking in front of the class. And when students work on problems, I circulate the room to observe their work directly and identify misconceptions before they compound.
My approach to student assessment parallels my teaching philosophy. For theoretical knowledge, I use exams and homework assignments. Exams are open book and open to printed notes, and calculators are permitted; computers, internet access, and AI tools are not. Because these restrictions limit the tools available, I design exams to be direct tests of understanding rather than exercises in cleverness. This exam philosophy is shaped by the late MIT professor Patrick Winston, who wrote, "guided by our desire to test subject understanding rather than general intelligence, we decided to resist the temptation to be so clever that our quizzes test the students on how well they can penetrate our cleverness, rather than their understanding of the material." Students should never be surprised by the material that appears on an exam; I explicitly mark potential exam topics at key points in my lectures, though the actual question may vary to some degree.
To assess practical knowledge, I use projects that require students to apply theoretical concepts to actual systems. In contrast to the exams, projects are substantially more complex and open-ended, and students are expected to use any resources at their disposal, including AI tools. My approach to AI in projects follows the same logic as the calculator: students should first work through problems manually in homework assignments, understanding why the steps exist, before using AI to accelerate their work and tackle problems of greater complexity. A student who has internalized the underlying principles can direct AI effectively and evaluate its output critically. Projects are therefore designed so that understanding is a prerequisite for using AI well. I also believe that prompting is itself an engineering skill that students will increasingly need in practice. Projects are an opportunity to develop that skill deliberately, not just incidentally. Where possible, I also have students work with the tools they are likely to encounter in industry rather than simplified pedagogical stand-ins. In a machine learning course, for example, this means programming languages like Python and frameworks like PyTorch and Pydantic AI. As with homework assignments, these projects often integrate multiple course concepts, reflecting the reality that real problems do not arrive neatly partitioned by topic.
Flexibility in how students engage with coursework is another expression of these principles. Outside of exams, students may use computers, draw from their own choice of texts and references, consult multiple sources, and work in whatever operating system or programming language suits them. Collaboration on homework and projects is permitted, provided the work submitted is each student's own. My aim is to remove unnecessary constraints on format so that students can direct their energy toward understanding the material itself.
Since developing this philosophy as a Graduate Teaching Assistant at North Carolina State University, I have had the opportunity to test and extend it across a wider range of contexts. As an adjunct instructor at Wayne Community College in Goldsboro, North Carolina, I taught six courses spanning database concepts, secure communications, game design, and artificial intelligence, reaching students whose backgrounds, goals, and relationships to the material differed substantially from the graduate classroom. As a Research Scientist at Microsoft and Apple, I have since mentored twenty-one PhD students through research internships, each scoped around producing a publication at a top-tier venue in HCI, software engineering, or AI. Across both settings, the same core principles have held: meet students where they are, focus on insight over information, and design for the learner rather than the format. Each new context has also surfaced assumptions I had not known I was making. Community college students, whose prior experience and relationship to formal education varied more than I had encountered in graduate courses, pushed me to think more carefully about prerequisite variation and the role of relevance in motivation. Mentoring PhD students toward publication introduced different challenges around scaffolding open-ended, high-stakes work under real deadline pressure. This philosophy has been stable in its commitments and revised in its practice, and I expect that to continue.