Teaching

I currently teach the following classes:

CMSC 14200 - Introduction to Computer Science II (2023 – …)

This courses is the second course of the CS department’s new CS intro sequence launched in 2022. It is a direct continuation of CMSC 14100, and covers more advanced concepts in computer science and Python programming, including types, advanced tree data structures, graphs, and functional programming. In the second half of the quarter, students learn about various aspects of the software development lifecycle, with an emphasis on software design, and work in teams of four students on a collaborative software project with multiple milestones.

CMSC 23320 - Foundations of Computer Networks (2011 – …)

Note: Before 2020, this class was known as CMSC 23300 - Networks and Distributed Systems.

This course focuses on the principles and techniques used in the development of networked and distributed software. Topics include programming with sockets; concurrent programming; data link layer (Ethernet, packet switching, 802.11, etc.); internet and routing protocols (IP, IPv6, ARP, intra-domain and inter-domain routing, etc.); end-to-end protocols (UDP, TCP); and other commonly used network protocols and techniques.

For more details, see the CMSC 23320 website.

CMSC 22000 - Introduction to Software Development (2018 – …)

Developing a software system (e.g., an application, a web server, an operating system, etc.) requires much more than just knowing how to program. Software development encompasses multiple activities, such as systems design, implementation, testing, debugging, deployment, documentation, and maintenance, all weaved together by following a specific methodology. Not just that, software development is a highly collaborative activity, where certain soft skills, like effective communication and the ability to give/receive feedback, can be key to the success of a software project.

This class bridges the gap between knowing how to program and knowing how to develop software: it covers fundamental concepts and skills in software development, providing a solid foundation before students move on to 200-level classes that require developing complex software systems. The class covers foundational topics in software development in lectures, but also includes hands-on labs, guest lectures from industry speakers, and a collaborative quarter-long project, where the entire class, divided into teams with specific responsibilities, works on developing a new feature for an existing software system.

For more details, see the CMSC 22000 website

Past Teaching

I have also taught the following courses in the past:

As a graduate student, I also taught CMSC 15200 - Introduction to Computer Science 2 (2005, 2006, 2007), and TA’d for CMSC 16200 - Honors Introduction to Computer Science 2 (2006, 2007) and CMSC 23500 - Introduction to Database Systems (2008, 2009).