Teaching

I currently teach the following classes:

CMSC 12100 - Computer Science with Applications I (2012, 2014 – …)

This course is the first in a three-quarter sequence that teaches computational thinking and skills to students in the sciences, mathematics, economics, etc. The course will cover abstraction and decomposition, simple modeling, basic algorithms, and programming in Python. Applications from a wide variety of fields serve both as examples in lectures and as the basis for programming assignments. In recent offerings, students have written programs to simulate a model of housing segregation, determine the number of machines needed at a polling place, and analyze tweets from presidential debates.

For more details, see the CMSC 12100 website.

CMSC 23300 - Networks and Distributed Systems (2011 – …)

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 23300 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 is intended for students who have just completed CMSC 15200 or CMSC 16200, and 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).