Teaching
Teaching is a passion of mine that I've always had. I've had the great fortune to TA a number of courses in electrical engineering, computer engineering, and computer science at UPenn and CMU. Below is a list of those courses, with semesters as head TA denoted with *.
Additionally, I'm honored to have been inducted into the CIS TA Hall of Fame in Spring 2020. I aspire to continue teaching in the future, hopefully taking up a lecturing position as a professor after I complete my PhD. I've particularly enjoyed helping run lab courses - guiding students in learning how to do lab work themselves is an engaging, rewarding experience. Here's to many more years in teaching!
CMU - RF Systems
18-427/727
A lab-focused course covering a variety of topics in RF engineering, including but not limited to: basic electromagnetics, transmission lines, antenna theory, transmitter/receiver architectures, modulation schemes, signal metrics, information theory, and MIMO. By the end of the course, students are prepared to explore further topics in RF engineering from circuits to systems and more.
I've worked to build and revise the labs for the course, with an emphasis on using low-cost RF hardware so that the course may be more easily replicated at other universities. The labs familiarize students with RF hardware such as VNAs (vector network analyzers) and SDRs (software-defined radios), software systems such as Ansys HFSS and GNU Radio, and PCB design tools such as KiCAD.
More course information can be found here. It has been offered every Fall semester since 2022.
Fall 2022*, Fall 2023*, Fall 2024*
UPenn - Embedded Systems
ESE350/519
A lab-focused/project course exploring embedded systems designs, implementations, and applications. The course starts from the hardware-level and covers power management and circuitry for an embedded system. It moves to low-level programming, understanding how to write C to control the various pins and registers on an embedded platform. It finishes with a conceptual, software-level tour of real-time operating systems before students build a final project of their choosing.
Students write their code in C on the Arduino Uno, using the standard C + AVR + FreeRTOS libraries for the labs and final project. For the final project, they are allowed to use other microcontrollers if preferred.
ESE350 (Spring) was the undergraduate version while ESE519 (Fall) was the graduate version, but they largely shared the same material. Here are the final project galleries - Fall 2020 + Spring 2021.
Fall 2020 (Online), Spring 2021* (Online)
UPenn - Computer Architecture
CIS371/CIS501
A project course on computer architecture. This course builds upon the earlier concepts introduced in CIS240/CIT593. Students learn more about how modern processors are optimized for speed and efficiency. Methods discussed include pipelining, superscalar design, branch prediction, out-of-order execution, caching, multicore design, and more.
Throughout the course, students use Verilog to program digital logic building blocks such as a ripple-carry adder, a carrylook-ahead adder, a divider, and an ALU. They then take these building blocks to build up an LC-4 CPU, enhanced with pipelining and superscalar designs. Students simulate their designs using Vivado and upload their code to a ZedBoard FPGA.
CIS371 (Spring) was the undergraduate version while CIS501 (Fall) was the graduate version, but they shared the same course material.
Fall 2019, Spring 2020 (Online)
UPenn - Operating Systems
CIS380/CIS548/CIT595
A project course on operating systems. This course builds upon the latter concepts introduced in CIS240/CIT593. Students learn about the basics of an operating system, including process management, system calls, memory management, scheduling algorithms, file systems, and more.
Students mainly work with Unix-like systems and program in C. Course projects include writing a user shell and building "PennOS", a Unix-like operating system with a priority scheduler and flat filesystem.
CIS380 (Fall) was the undergraduate version while CIS548 (Spring) and CIT595 (Summer) were the graduate versions, the latter belonging to the
MCIT program. CIS548 had an additional project on memory management while CIT595 replaced the PennOS project with a project on networked systems.
Fall 2019, Spring 2020* (Online), Summer 2020* (Online)
UPenn - Introduction to Computer Systems
CIS240/CIT593
An introductory course on computer systems. Students learn the bottom-up fundamentals of modern computers, from CMOS transistor circuits to digital logic basics. Once they understand how datapaths and ISAs work, they switch to a top-down view and work in assembly and C to build their understanding of an operating system.
Course projects include writing a basic user/OS program in LC-4 assembly (an educational programming language similar to LC-3) and writing a disassembler and a compiler in C.
CIS240 (Fall/Spring) was the undergraduate version while CIT593 (Summer) was the graduate version, but they shared the same course material.
Fall 2018, Spring 2019, Summer 2019 (Online)