Teaching is a Design Problem.
How can I deliver courses so students learn by doing the real work of the field?
Explore the three pillar values that drive my teaching.
Infrastructure is where practice first becomes real. In large classes, it determines whether students can practice often and get feedback quickly.

- Randomized auto-grading on PrairieLearn: SQL tasks run against fresh data each submission, so students reason through errors instead of pattern-matching answers.
- Participation visibility with Here@Illinois: co-founded and built an attendance platform now used by 7,000+ students and 100+ instructors per term.
- Staffing for coaching: automation handles logistics so course staff can focus on guidance, not manual tracking.
Outcome: more iteration, faster correction, and more high-value instructor-student interaction in class.
Mechanisms make alignment matters enforceable. Students optimize for points, so course design must make that behavior support learning, not bypass it.

- Concept-aligned milestones in CS 411: each project stage requires evidence of the current concept, from ER modeling to indexing experiments with MySQL
EXPLAIN. - Reasoning made visible: students submit artifacts that expose design choices, making feedback concrete and discussable.
- Rubric incentives in CS 242: clean-code credit scales with functional completeness, so maintainability and testing stay inside the main work.
Outcome: earning points becomes tightly coupled with building the target skill.
Interaction is where process over answers becomes a habit. My goal is to coach routines students can reuse, not provide one-off fixes.

- Debugging routine: Localize, Isolate, Test, Revise. Students use this loop across SQL, systems tasks, and programming assignments.
- Method reasoning in HCI: paper-map walls and coding replications force students to justify research choices with evidence.
- Transfer focus: students leave with a reusable approach for progress under uncertainty.
Outcome: students become more independent, analytical, and resilient when they get stuck.
Courses I've Taught
15 semester-long appointments across 6 courses, introductory to graduate
Database Systems
CS 411 · Lead TA · UIUC
- Covers relational modeling, SQL querying, normalization, indexing, and query execution tradeoffs.
- Students practice database design and performance reasoning through applied problem sets and projects.
HCI Research Methods
CS 598 · Sole TA · UIUC
- Graduate methods course on qualitative coding, study design, and evidence-based research reasoning.
- Students compare methods, critique papers, and justify design choices under real research constraints.
Programming Studio
CS 242 · Head TA · UIUC
- Project-based software engineering course focused on object-oriented design, testing, and maintainable code.
- Students build applications while learning code structure, debugging workflow, and iterative development.
Social & Information Networks
CS 470 · TA · UIUC
- Introduces network analysis for social and information systems, from graph structure to diffusion dynamics.
- Students interpret real network behavior using centrality, communities, and sociotechnical perspectives.
Data Mining Capstone
CS 598 · TA · UIUC
- Capstone that applies data mining and machine learning methods to open-ended, end-to-end project work.
- Students conduct hands-on inquiry with the Yelp dataset, with exploratory opportunities to pursue their own questions.
Intro to Python
CSCI 2040 · TA · CUHK
- Introductory Python course covering core programming concepts through hands-on computational practice.
- Students learn control flow, data structures, functions, and problem decomposition in small projects.
I can teach a wide spectrum of courses.
Data Systems & Analytics
I teach data systems through practice-first structures: students build, test, and debug on real datasets with frequent feedback loops.
Examples
- Database Systems
- Data Mining
- Social & Information Networks
Software Engineering & Web Development
I teach software engineering as aligned project work: grading rewards working systems, clean structure, testing practice, and design reasoning.
Examples
- Introduction to Programming (Python)
- Web Design & Programming
- Software Design Studio
- Software Engineering Capstone
HCI & Sociotechnical Computing
I teach HCI and sociotechnical courses by coaching process over answers: students justify methods and design choices with evidence.
Examples
- Human-Computer Interaction
- HCI Research Methods
- UX Evaluation and Experiment Design
- Sociotechnical Systems
- Computer-Supported Cooperative Work