teaching
courses I've TA'd for or developed
teaching assistant
purdue
- Spring 2021: CS 159, C Programming
cornell
- Spring 2022: CS 3110, Data Structures and Functional Programming
- Fall 2022: CS 4820, Intro to Analysis of Algorithms
- Spring 2023: CS 4820, Intro to Analysis of Algorithms
- Fall 2023: ECE 4750, Computer Architecture
- Spring 2024: CS 3110, Data Structures and Functional Programming (Grad TA)
Some of my review sessions are still on YouTube. Here’s one I found particularly fun:
course development
I had the unique opportunity to help develop two courses at Cornell. I found it incredibly cool to help create programming projects and it forced me to think deeply about what types of assignments provide the most value to a stressed and busy student. If you’re a Cornell student and have the opportunity to take either class, I hope you find them engaging and useful!
ECE 5755: Modern Computer Systems and Architecture
This course is designed to provide a hardware-centric overview of computer systems used in modern computing platforms. From the bottom up we will study the architecture of processor architectures (e.g., pipelined CPUs, ISA, RISC vs. CISC, out-of-order execution) and memory systems (e.g., memory hierarchy, caching, DRAM memories). We will understand how to evaluate the performance of modern processors and exploit parallelism in applications. This includes parallelization across multi-core CPUs, GPUs, and specialized hardware. Through ands-on assignments and an open-ended project students will develop a holistic understanding of modern computer systems and how they are designed.
CS 3410: Computer System Organization and Programming
CS 3410, “Computer System Organization and Programming,” is your chance to learn how computers really work. You already have plenty of experience programming them at a high level, but how does your code in Java or Python translate into the actual operation of a chunk of silicon? We’ll cover systems programming in C, assembly programming in RISC-V, the architecture of microprocessors, the way programs interact with operating systems, and how to correctly and efficiently harness the power of parallelism.