Teaching
Teaching is a passion of mine that I've always had. I began as a tutor back in my high school days for a few different subjects, which I then carried into my time at UPenn. In my first three undergraduate years, I worked as a peer tutor for various subjects, from calculus to computer systems to electromagnetism. But it wasn't until my fourth undergraduate year that I got the opportunity to become a teaching assistant for an introductory computer systems course.
Since then, I've had the great fortune to TA a number of courses in electrical engineering and computer science at UPenn. I've held office hours + recitations + lab sessions + lectures, developed course labs + projects + curricula, mentored students on projects, and more. Further below is a list of those courses, with semesters as head TA denoted with * and semesters online 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!
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) is the undergraduate version while
CIT593 (Summer) is the graduate version, but they shared the same course material.
Fall 2018, Spring 2019, Summer 2019^
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) is the undergraduate version while CIS548 (Spring) and CIT595 (Summer) are the graduate versions, the latter belonging to the MCIT program. CIS548 had an additional project on memory management while CIT595 cut out the PennOS project and instead had a project on networked systems.
Fall 2019, Spring 2020*^, Summer 2020*^
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) is the undergraduate version while CIS501 (Fall) is the graduate version, but they shared the same course material.
Fall 2019, Spring 2020^
Introduction to Hardware/Software Lab ("Silicon Garage")
ESE190/M&TSI
An introductory course to hardware/software lab work using the Arduino platform. The course is designed for non-engineers who don't have much programming or circuit experience. Students learn the basics of programming and physics to build their own circuit projects using Arduino.
Students use the standard Arduino Uno model for the labs. Labs include turning on LEDs with pushbuttons, building a mini-thermostat, and using WiFi for IoT communication. They write their code in C and are encouraged to use external libraries as needed for their final project.
Here is the ESE190 website and the Devpost for Spring 2019's final projects. M&TSI is a high-school summer program at Penn that uses a condensed version of the ESE190 curriculum; here is the Devpost for Summer 2021's final projects.
Spring 2019, Summer 2021*^
Embedded Systems Lab
ESE350/519
A lab-based 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) is the undergraduate version while ESE519 (Fall) is the graduate version, but they largely shared the same material. Here are the final project galleries - Fall 2020 + Spring 2021.
Fall 2020^, Spring 2021*^
Senior Design Capstone
ESE450/451
Students in electrical engineering, systems engineering, computer engineering, network engineering, and more take this two-part capstone course to build a project of their own choosing. They frequently give updates on their progress through staff meetings, written reports, and class presentations, culminating in a demo day finale + final report/video at the end of both semesters.
There is always a wide variety in the projects that we see for ESE Senior Design, ranging from pure software to heavy hardware to a mix of both. I've had the joy of mentoring both the Class of 2020 + Class of 2021 in ESE Senior Design and I'm consistently impressed by the effort and creativity of my students.
Here is the ESE Senior Design website and the Class of 2020 Devpost + Class of 2021 Devpost, if you'd like to check out some of the awesome work that our students have done.
Fall 2019, Spring 2020^, Fall 2020*^, Spring 2021*^