Three principles
My teaching rests on three commitments. First, connect rigorous theory to real-world practice, so ideas are learned alongside the constraints that make them matter. Second, integrate AI into learning and assessment thoughtfully, rather than pretending it does not exist or letting it do the thinking. Third, work within each student's zone of proximal development: enough structure to prevent gaps, enough challenge to keep ambitious students growing.
The rest of this is how those three commitments turn into a course.
The educator as an industry resource
My first job is to make students curious and to show them why the material matters beyond the exam. My background helps here in a specific way. Many faculty bring deep research expertise; I bring eight years at the front of data engineering at the Chan Zuckerberg Initiative, Robinhood, and Meta. That means I can not only explain how an algorithm works but motivate why it is necessary, show how it behaves in a system serving millions of users, and prepare students for the technical interviews they will sit for in their own careers.
Connecting theory to practice
Moving from senior data engineer to lecturer, I noticed a gap in the usual curriculum. Students learn techniques on clean, curated datasets, then struggle with the messy realities of acquiring, storing, and maintaining data once a pipeline has to keep running after the demo works. To close that gap I designed two courses from scratch: CSE 3104, an introduction to data engineering, and CSE 5114, the same subject at scale.
In both, I skip contrived environments and have students build with the tools the field actually uses, such as Snowflake, Airflow, Kafka, and PySpark, inside hands-on, semester-long projects they can steer in their own creative directions. When the theory is framed by the infrastructure it lives in, students see the reason behind it, and the motivation to learn becomes intrinsic rather than imposed.
Systems thinking when the tools can code
Generative AI tools are everywhere, and they will be genuine productivity multipliers in my students' working lives. My approach is not to ban them but to teach students to use them responsibly while restructuring assessment to guarantee authentic mastery underneath.
The shift is in what we emphasize. When a model can produce a snippet of code on request, knowing how to type out that snippet is no longer the valuable skill. Systems-level thinking is: designing complex architectures and understanding how disparate components fit together. That is the distinction between graduating students who can work at the level of a senior engineer and students who are simply displaced by coding agents. To make that real I rely on two mechanisms I have written about separately: multiplicative grading, so AI-assisted homework cannot hide a shallow understanding, and scalable oral exams, where a student talks through a design problem and the AI question simply does not arise.
Supporting every learner
I have taught classes ranging from fewer than 30 students to more than 260, with enormous variance in what students bring with them. To handle that range I use flexible, mastery-based grading focused on whether learning happens, not on dictating when it happens. I build in peer learning through pair programming and small-group studios, which gives advanced students a way to deepen their own understanding by teaching it. And I design assignments with high ceilings and extra-credit paths, so the same problem set can stretch a beginner and still challenge the most prepared student in the room.
Where this is going
I treat teaching as an iterative system. I gather mid-semester feedback, look at learning analytics, and adjust. Looking ahead, I want to keep building curriculum for emerging needs, including possible courses on implementing retrieval-augmented generation systems, advanced data structures, probability and statistics for computer scientists, and experimental design.
Underneath the specifics, the goal is constant: to send students into a fast-changing field with technical rigor, the confidence to solve problems, and the curiosity to keep learning long after the course ends.
Related
The two assessment ideas referenced here have their own write-ups: Scaling Oral Exams and Multiplicative Grading. You can also read the full statement of teaching philosophy or see these ideas in practice in CSE 5114.