Current Classes (Spring 2018)

CMSC 614: Graduate-level Computer and Network Security

This course covers advanced topics in computer and network security, including (but not limited to): anonymity, privacy, memory safety, malware, denial of service attacks, trusted hardware, security design principles, and empirically measuring security "in the wild". This is a largely paper-driven course (there is no textbook), preparing students for research in (or around) the broad area of security. Students will gain first-hand experience launching attacks in controlled environments. The bulk of the grade will be based on a final, semester-long group project.

Previously titled CMSC 818O

Spring 2021   Fall 2019   Fall 2018   Fall 2017   Spring 2017

CMSC 396H: Undergraduate Honors Seminar

The goal of this course is to prepare undergraduate students to do research in any area of computer science, collaborating with students and faculty to: perform experiments, read and write research papers, and give presentations to an academic audience. We look at good research in diverse areas of computer science so that students can both choose an area of research wisely and recognize fruitful research questions within larger projects. The course also covers tools and techniques for collaborative authoring and typesetting of research papers.

Spring 2021   Fall 2020   Spring 2020   Fall 2019   Spring 2019   Fall 2018   Spring 2018   Fall 2017   Spring 2017   Spring 2016

Student-Initiated Classes (STICs)

For more information on STICs, please visit

CMSC 389R: Introduction to Ethical Hacking

This practical, hands-on 1-credit course provides students with an introduction to ethical hacking. The course begins with a discussion on the ethics behind security research and progresses to topics that surround penetration testing, forensics, cryptology, and binary reverse engineering and exploitation. This course is also meant to introduce students to Capture-the-Flag (CTF) style cybersecurity challenges, encourages participation in UMD's Cybersecurity Club (UMDCSEC), and prepares for CMSC414.

Taught by Michael Reininger, William Woodruff, and Joshua Fleming

Fall 2018   Spring 2018

CMSC 389O: The Coding Interview

This course provides a comprehensive, practical introduction to technical interviews. The course will start with basic topics such as Big O and String Manipulation. We will then move into more complex topics such as Bit Manipulation and Dynamic Programming. Most of the classes are "In-Class Interviews".

Taught by Cameron Payton and Ishaan Parikh

Fall 2017

Past Classes

CMSC 414: Computer and Network Security

An introduction to the topic of security in the context of computer systems and networks. Identify, analyze, and solve network-related security problems in computer systems. Fundamentals of number theory, authentication, and encryption technologies, as well as the practical problems that have to be solved in order to make those technologies workable in a networked environment, particularly in the wide-area Internet environment.

Spring 2018   Spring 2016   Spring 2015   Spring 2014

CMSC 330: Organization of Programming Languages

A study of programming languages, including their syntax, semantics, and implementation. Several different models of languages are discussed, including scripting/object-oriented (Ruby) and functional (OCaml), Language features such as formal syntax and semantics, scoping and binding of variables, higher-order programming, typing and type polymorphism, and concurrency are explored.

Co-taught with Mike Hicks

Spring 2013

CMSC 818F: Securing and Monetizing the Internet

New cloud-based services like targeted advertising, elastic computing and storage, online social networks, and content distribution networks are changing how the Internet is used, monetized, and secured. The goal of this course is to identify new problems of security and incentives in online services. We will take a hands-on approach, investigating how these new services are designed and used today, and the (financial) relationship between various stake-holders. We will also cover relevant background on techniques used to solve these problems, particularly from cryptography (e.g., verified computation, and digital cash) and economics (e.g., game theory and mechanism design).

Co-taught with Elaine Shi

Spring 2013