Admission to Candidacy

Graduate students must be admitted to candidacy by the end of the first quarter of their fifth year (by the end of the first quarter of their fourth year if they were exempted from all core requirements) They are strongly encouraged to fulfill this requirement as early as possible. Students in all areas must pass an oral candidacy exam to be admitted to candidacy.

A candidacy exam is administered by the student’s  Examination Committee . Prior to the exam, the student must have an exam proposal approved by each member of their Examination Committee. The committee will decide the format of the exam, but two formats are common.

In the areas of Machine Learning, Computational Mathematics, and Theoretical Computer Science, the candidacy exam is usually based on a reading list. The student and the committee agree on a set of papers that covers the student’s proposed area of research interest. The exam often consists of a talk by the student about the papers followed by a private oral exam that tests the breadth and depth of their knowledge of the material.

In Systems, the candidacy exam usually has the form of a thesis-proposal defense. It provides the opportunity for the committee to evaluate the intellectual merit and feasibility of the candidate’s proposed research. The specific requirements for the candidacy exam are a written thesis proposal, typically 10-20 pages, and a public oral presentation that is based on the proposal. The written proposal should be approved by the candidate’s advisor and committee members prior to scheduling the exam. While the details may vary, a typical proposal will address the following questions:

  • What problem is being solved? What question is being answered?
  • Why is this problem important and its solution non-trivial?
  • What other work has addressed this, or related, problems, and how is the proposed work different?
  • What is the student’s research plan? How much of the work in the plan has been completed?
  • All candidacy exams include a public presentation by the student followed by a private oral exam.

If a graduate student changes advisor after completion of the candidacy exam, the new advisor may require the student to retake the exam.

Back to PhD program overview. 

Graduate Programs

Related Links

  • Academic Programs
  • Undergraduate Programs

Graduate Divisions & Professional Schools

Biological Sciences Division Programs
Program Degree
PhD
MS
PhD
PhD
PhD
PhD
PhD
PhD
PhD
PhD
PhD
PhD
PhD
PhD
MD/PhD
MPH
PhD
PhD
PhD
PhD
MsPH
PhD
MSCP
Chicago Booth
Program Degree
PhD
PhD
PhD
PhD
PhD
MBA
MBA
PhD
MBA
PhD
PhD
PhD
PhD
MBA
Crown Family School of Social Work, Policy, and Practice Programs
Program Degree
MA/PhD
MA
Divinity School Programs
Program Degree
PhD
MA
AMRS
MDiv
Graham School of Continuing Liberal and Professional Studies Programs
Program Degree
MS
MLA
MS
MAT
Other
Other
Other
Other
Other
Harris School of Public Policy Programs
Program Degree
MS
MS
Other
PhD
MA
MPP
MA
MA
Humanities Division Programs
Program Degree
PhD
MA
MA
PhD
PhD
PhD
MFA
MA
PhD
PhD
PhD
PhD
MA
PhD
PhD
PhD
PhD
PhD
PhD
PhD
MA
Law School Programs
Program Degree
DCompL
JD
JSD
LLM
MLGS
Physical Sciences Division Programs
Program Degree
MS
PhD
PhD
PhD
MS/PhD
MS
PhD
MS
PhD
MS
MS
PhD
PhD
PhD
MS
PhD
Pritzker School of Medicine Programs
Program Degree
MD
MD/PhD
MD/PhD
Pritzker School of Molecular Engineering Programs
Program Degree
MS
PhD
Social Sciences Division Programs
Program Degree
PhD
MA
MA
PhD
MA
PhD
PhD
PhD
MA
PhD 
PhD
PhD
PhD
PhD
  • Skip to Content
  • Catalog Home
  • Institution Home
  • The University of Chicago
  • Academic Calendar
  • General Information
  • Interdivisional Programs
  • The Division of the Biological Sciences and the Pritzker School of Medicine
  • The Pritzker School of Medicine
  • The Division of the Humanities
  • Department of Astronomy and Astrophysics
  • Graduate Program in Biophysical Sciences
  • Department of Chemistry
  • Committee on Computational and Applied Mathematics

Department of Computer Science

  • Committee on Data Science
  • Department of the Geophysical Sciences
  • Department of Mathematics
  • Department of Physics
  • Department of Statistics
  • Master of Science Program in Applied Data Science
  • Master of Science Program in Computer Science
  • Master of Science Program in Financial Mathematics
  • Postbaccalaureate Pre-​Medical Certificate Program
  • The Division of the Social Sciences
  • The William B. and Catherine V. Graham School of Continuing Liberal and Professional Studies
  • The University of Chicago Booth School of Business
  • The Divinity School
  • The Law School
  • The Pritzker School of Molecular Engineering
  • The Irving B. Harris Graduate School of Public Policy Studies
  • The Crown Family School of Social Work, Policy, and Practice
  • Henry Hoffmann
  • Laszlo Babai
  • Andrew Chien
  • Frederic Chong
  • Nick Feamster
  • Michael Franklin
  • Stuart A. Kurtz
  • Ketan Mulmuley
  • Alexander Razborov
  • Janos Simon
  • Rick L. Stevens
  • Rebecca Willett
  • Heather Zheng

Professors Emeriti

  • John Goldsmith

Associate Professors

  • Marshini Chetty
  • Aaron Elmore
  • Diana Franklin
  • Haryadi Gunawi
  • Gordon Kindlmann
  • Risi Kondor
  • Pedro Lopes
  • Michael Maire
  • Anne Rogers

Assistant Professors

  • Raul Castro Fernandez
  • Aloni Cohen
  • William Fefferman
  • Rana Hanocka
  • Junchen Jiang
  • Sanjay Krishnan
  • Ken Nakagaki
  • Lorenzo Orecchia
  • Aaron Potechin
  • Robert Rand
  • Chenhao Tan

Research Assistant Professors

Clinical faculty

  • Ishan Agarwal (Assistant Clinical Professor)
  • Rafi Almhana (Assistant Clinical Professor)
  • Andrew Binkowski (Associate Clinical Professor)
  • Gerry Brady (Clinical Professor)
  • Amitabh Chaudhary (Clinical Professor)
  • Lamont Samuels (Assistant Clinical Professor)
  • James Turk (Assistant Clinical Professor)

Adjunct faculty

  • Jeffrey Cohen (Adjunct Associate Professor)
  • Adam Gerber (Adjunct Associate Professor)
  • Jan Hueckelheim (Adjunct Assistant Professor)
  • Anthony Nicholson (Adjunct Associate Professor)
  • Drew Olson (Adjunct Assistant Professor)
  • Shelley Rossell (Adjunct Associate Professor)
  • Mark Shacklette (Adjunct Professor)
  • Andrew Siegel (Adjunct Professor)
  • Michael Spertus (Adjunct Professor)
  • Vasilios Vasiliadis (Adjunct Associate Professor)
  • Kathryn Wozniak (Adjunct Associate Professor)

The Department of Computer Science is dedicated to advancing and improving the knowledge, understanding, and practice of computer science through basic research and education.

We have a broad view of Computer Science, that includes the whole spectrum of computing, from relevant mathematics and statistics to building hardware devices, networks, data science, machine learning, human computer interaction, and Computer Science education. The list is not exhaustive, but an attempt to convey some of the research interests of current faculty.  We investigate computation, information, communication and data as fundamental phenomena to be studied in Computer Science. We also investigate the many interdisciplinary ways the study of computation interacts with other disciplines like the sciences, society, and learning.

There is an ongoing major thrust to expand the role of Computer Science and computation at the University, with considerable expansion of the faculty, and expanded support to explore new research areas.   These include the new Data Science Institute (DSI), a joint effort of the Statistics and Computer Science Departments, that is also experiencing rapid growth.  Accordingly, the descriptions below, a snapshot of our current active research, are likely to expand.

Current active research areas include computing systems, computer architecture, computer security and privacy, error-tolerant computing and error recovery in computing systems, databases and data intensive computing, theoretical computer science, discrete mathematics, quantum computing, programming languages, machine learning, computational linguistics, computer vision, cloud computing, sustainable computing, scientific computing, data visualization, high performance computing, human-computer interaction, computer science education, robotics, and interdisciplinary research in computing in the physical, biological, and social sciences.

Current major research areas include:

Theoretical Computer Science

Programming Languages

Data Science

Machine Learning and AI

Scientific and High Performance Computing

Computer Science Education

For more information about current research groups and active research areas, refer to the Research section of the departmental webpage .

Our research efforts are enhanced by the interdisciplinary nature of the University, and, specifically, by strong connections to the Data Science Institute (DSI), the Center for Translational Data Science, the James Frank Institute, the Institute for Biophysical Dynamics, with the Pritzker School of Molecular Engineering, and with the Booth School of Business. Our research collaborations involve faculty from many different departments, including Mathematics, Statistics, Physics, Linguistics, Psychology, and Sociology. We have very strong research ties with ANL, the Argonne National Laboratory, operated by the University for the US DOE. We also have almost seamless collaborations with the Toyota Technological Institute Chicago, on campus: many TTIC faculty have part-time appointments in the Department.

Graduate Programs

We offer two graduate curricula in computer science.

  • A graduate professional curriculum leading to the Master of Science (MS) degree, for students who wish to enter or advance themselves in computer science practice.
  • A graduate research curriculum leading to the PhD degree that prepares students to perform advanced basic research in computer science either in industry or academia. Teaching experience is available for students preparing for academic careers.

Acquire further information about our Masters Program in Computer Science (MPCS) through the MPCS website , by writing to our MPCS Admissions, Department of Computer Science, University of Chicago, 5730 S Ellis Avenue, IL 60637, or by telephoning 773.834.3388. You may also email any questions to our [email protected] email address.

Acquire further information about our PhD program through our PhD admissions website, by writing to Admissions, Department of Computer Science, University of Chicago, 5730 S. Ellis Avenue, Chicago, IL 60637, or by telephoning 773.702.6011.

General information about our department is available from the departmental website .

The PhD Program

The PhD program is done in three phases:

Qualifying Phase

The objective of the Qualifying Phase is to provide the scientific foundations in their area, a breadth of knowledge within Computer Science, and the ability to write up research results.  Students without a previous MS should satisfy course requirements, and write and defend an MS paper.

The course requirement consists of five core courses (two in Theory, two in Systems, and one in ML), three electives, and a seminar.  In order to ensure breadth, no more than four of these courses should be in the student's main research area.

After the public defense of the paper, the student may be eligible to receive an MS in Computer Science from the University.  Please refer to the departmental webpage for details.

Students with a previous MS may receive credit for their previous work: up to waiving the core course requirement.  The details of the mechanism to do so can be found on our website .

The minimum formal requirements for the core courses (”Ph.D. Pass”) are the following: Students are required to complete the five core courses with a grade point average (GPA) of at least 3.25 in the five core courses. In computing the GPA, A=4, B=3, and a + or a - counts as .3 of a point. Note that for the core courses, students who significantly outperform even the typical ”A” students may receive a grade of ”A+” (recorded internally by the CS Department Student Representative since the University does not officially grant the grade of A+.) So, for instance a student with grades A+, B+, B+, B-, B- in the five core courses has a GPA of 3.26 and thus satisfies the minimum GPA requirement, as does a student with grades of A+, A, B+, B, and C-. In the graduate program grades below C- are not passing grades.

Students must complete their electives with a grade of B or better in each course.

Candidacy Exam

After the Qualifying Phase, students must pass an exam for Admission to Candidacy, that is a plan for their dissertation research.

Dissertation and Dissertation Defense

Finally, they must write and defend their dissertation.

Teaching Opportunities for Students in the PhD Program

The department takes its undergraduate teaching responsibilities very seriously, and offers supervised teaching opportunities, including lecturing, acting as teaching assistants, and working as lab assistants to its best graduate students. 

Computing Facilities

In addition to the general University computing facilities including the Research Computing Center (https://rcc.uchicago.edu/resources) and access to high performance computers at ANL, and our Computer Science Instructional Laboratory (which contains about 50 Macintosh computers and 40 desktops running Linux), our department provides the faculty, students, and postdoctoral associates in computer science with computing resources.  We have the flexibility to adapt quickly to new research needs.

The resources include:  24 hour 7 day interactive computing on a number of shared computing servers as well as individually assigned desktops.  These servers and desktops run the Linux operating system and are interconnected via high speed Ethernet.  These systems are supported by substantial amounts of both local and networked disk storage for individual group use and are backed up regularly.  Linux servers are available for general instructional and research purposes as well as hardware and virtual machines which are adapted to specialized needs.

Individual research groups operate additional computing facilities, often with considerable computing and storage resources.  Some have specialized hardware, and fabrication tools (for example, GPU arrays, 3-D printers, etc.). Information about these resources is available from the research group's webpage.

Joint Math/CS PhD program

The Department of Computer Science and the Department of Mathematics offer a joint PhD program.  For more details see  https://mathematics.uchicago.edu/graduate/joint-math-cs-phd-program/

For the list of courses offered and the course descriptions, please consult the courses section of the departmental web page .

Computer Science Courses

CMSC 30100. Technical Writing and Presentation. 100 Units.

Clear, logical writing and presentations are foundational skills for computer scientists. This class is meant to introduce computer science students to basic ideas and techniques for effective communication in both writing and presentations. The class will include several complementary components, including critical analysis of technical papers, weekly writing assignments focusing on writing style, clarity, and logical flow, and discussions of style for different research areas and venues. Later weeks will focus on skills for effective technical presentations in different settings, e.g. conference presentations, job talks, and keynotes. The course is primarily targeted towards graduates students, although undergraduates can audit the class (or enroll with permission from the instructor).

Instructor(s): Ben Zhao Prerequisite(s): None

CMSC 30300. Introduction to Human-Computer Interaction. 100 Units.

An introduction to the field of Human-Computer Interaction (HCI), with an emphasis in understanding, designing and programming user-facing software and hardware systems. This class covers the core concepts of HCI: affordances, mental models, selection techniques (pointing, touch, menus, text entry, widgets, etc), conducting user studies (psychophysics, basic statistics, etc), rapid prototyping (3D printing, etc), and the fundamentals of 3D interfaces (optics for VR, AR, etc). We compliment the lectures with weekly programming assignments and two larger projects, in which we build/program/test user-facing interactive systems.

Prerequisite(s): CMSC 14200 or CMSC 15400 or CMSC 22000 Equivalent Course(s): MADD 25300, CMSC 20300

CMSC 30350. Security, Privacy, and Consumer Protection. 100 Units.

This course will cover the principles and practice of security, privacy, and consumer protection. Topics include: basic cryptography; physical, network, endpoint, and data security; privacy (including user surveillance and tracking); attacks and defenses; and relevant concepts in usable security. The course will place fundamental security and privacy concepts in the context of past and ongoing legal, regulatory, and policy developments, including: consumer privacy, censorship, platform content moderation, data breaches, net neutrality, government surveillance, election security, vulnerability discovery and disclosure, and the fairness and accountability of automated decision making, including machine learning systems. Students will learn both technical fundamentals and how to apply these concepts to public policy outputs and recommendations.

Instructor(s): Feamster, Nicholas Prerequisite(s): CMSC 14300 or CMSC 15400 or equivalent, and instructor consent. Note(s): Prerequisites: CMSC 14300 or CMSC 15400 or equivalent, or graduate student. Instructor consent required. Equivalent Course(s): CMSC 23206, CAPP 30350

CMSC 30370. Inclusive Technology: Designing for Underserved and Marginalized Populations. 100 Units.

Creating technologies that are inclusive of people in marginalized communities involves more than having technically sophisticated algorithms, systems, and infrastructure. It involves deeply understanding various community needs and using this understanding coupled with our knowledge of how people think and behave to design user-facing interfaces that can enhance and augment human capabilities. When dealing with under-served and marginalized communities, achieving these goals requires us to think through how different constraints such as costs, access to resources, and various cognitive and physical capabilities shape what socio-technical systems can best address a particular issue. This course leverages human-computer interaction and the tools, techniques, and principles that guide research on people to introduce you to the concepts of inclusive technology design. You will learn about different underserved and marginalized communities such as children, the elderly, those needing assistive technology, and users in developing countries, and their particular needs. In addition, you will learn how to be mindful of working with populations that can easily be exploited and how to think creatively of inclusive technology solutions. You will also put your skills into practice in a semester long group project involving the creation of an interactive system for one of the user populations we study.

Prerequisite(s): CMSC 14400 or CMSC 15400 or CMSC 12300 or CMSC 22000 or CMSC 20300 Equivalent Course(s): MADD 20370, CMSC 20370

CMSC 30380. Actuated User Interfaces and Technology. 100 Units.

The recent advancement in interactive technologies allows computer scientists, designers, and researchers to prototype and experiment with future user interfaces that can dynamically move and shape-change. This class offers hands-on experience in learning and employing actuated and shape-changing user interface technologies to build interactive user experiences. The class provides a range of basic engineering techniques to allow students to develop their own actuated user interface systems, including 3D mechanical design, digital fabrication (e.g. 3D Printing), electronics (Arduino microcontroller), and actuator control (utilizing different kinds of motors). Through multiple project-based assignments, students practice the acquired techniques to build interactive tangible experiences of their own.

Prerequisite(s): CMSC 20300 Equivalent Course(s): CMSC 20380, MADD 20380

CMSC 30600. Introduction to Robotics. 100 Units.

The University of Chicago's CMSC 20600 Introduction to Robotics course gives students a hands-on introduction to robot programming covering topics including sensing in real-world environments, sensory-motor control, state estimation, localization, forward/inverse kinematics, vision, and reinforcement learning. This course is centered around 3 mini projects exploring central concepts to robot programming and 1 final project whose topic is chosen by the students. Each of these mini projects will involve students programming real, physical robots interacting with the real world. The use of physical robots and real-world environments is essential in order for students to 1) see the result of their programs 'come to life' in a physical environment and 2) gain experience facing and overcoming the challenges of programming robots (e.g., sensor noise, edge cases due to environment variability, physical constraints of the robot and environment).

Prerequisite(s): CMSC 14200 or CMSC 15400 Equivalent Course(s): CMSC 20600

CMSC 30630. Human-Robot Interaction: Research and Practice. 100 Units.

The field of human-robot interaction (HRI) is a new and growing field of research that explores the interface between people and robots. Applications of HRI research include developing robots to tutor elementary school students, assist human workers in manufacturing contexts, provide museum tours, interact with families within their homes, and help care for the elderly. The field of HRI is highly interdisciplinary, incorporating methods and techniques from human-computer interaction, robotics, psychology, artificial intelligence, and other fields. This course exposes students to a broad range of recent and cutting-edge research in HRI. The topics covered in this course include: nonverbal robot behavior, verbal robot behavior, social dynamics, norms and ethics, collaboration and learning, group interactions, applications, and future challenges of HRI. Course meetings will involve students in the class leading discussions about cutting-edge peer-reviewed research HRI publications. Throughout the quarter, teams of students in the course will also complete an HRI course project of their choosing where they will investigate an HRI research question of interest to them.

Prerequisite(s): CMSC 14200 or CMSC 15400 Equivalent Course(s): CMSC 20630

CMSC 30900. Computers for Learning. 100 Units.

Over time, technology has occupied an increasing role in education, with mixed results. Massive Open Online Courses (MOOCs) were created to bring education to those without access to universities, yet most of the students who succeed in them are those who are already successful in the current educational model. This course focuses on one intersection of technology and learning: computer games. This course covers education theory, psychology (e.g., motivation, engagement), and game design so that students can design and build an educational learning application. Labs focus on developing expertise in technology, and readings supplement lecture discussions on the human components of education.

Prerequisite(s): CMSC 14300 or CMSC 15400 or CMSC 22000 Equivalent Course(s): CMSC 20900, MADD 20900

CMSC 31010. Mathematical Foundations. 100 Units.

This course is an introduction to formal tools and techniques which can be used to better understand linguistic phenomena. A major goal of this course is to enable students to formalize and evaluate theoretical claims.

Equivalent Course(s): LING 21010, CMSC 21010, LING 31010

CMSC 31140. Computational Imaging: Theory and Methods. 100 Units.

Computational imaging refers to the process of forming images from data where computation plays an integral role. This course will cover basic principles of computational imaging, including image denoising, regularization techniques, linear inverse problems and optimization-based solvers, and data acquisition models associated with tomography and interferometry. Specific topics may include patch-based denoising, sparse coding, total variation, dictionary learning, computational photography, compressive imaging, inpainting, and deep learning for image reconstruction.

Instructor(s): R. Willett     Terms Offered: To be determined Equivalent Course(s): CAAM 31140, STAT 31140

CMSC 31150. Mathematical Toolkit. 100 Units.

The course is aimed at first-year graduate students and advanced undergraduates. The goal of the course is to collect and present important mathematical tools used in different areas of computer science. The course will mostly focus on linear algebra and probability. We intend to cover the following topics and examples: Abstract linear algebra: vector spaces, linear transformations, Hilbert spaces, inner product, Gram-Schmidt orthogonalization, Eigenvalues and eigenvectors, SVD, least squares (under/over-constrained) Discrete probability: random variables, Markov, Chebyshev and Chernoff bounds. Gaussian variables, concentration inequalities, dimension reduction Martingales (time permitting) Stochastic Processes (time permitting) Expected outcomes: Ability to write correctly typed rigorous proofs. Understanding of various notions of linear algebra in the context of abstract vector spaces. Ability to understand and analyze stochastic processes. Familiarity with discrete and continuous random variables and various concentration bounds. Prerequisites: None

Instructor(s): Avrim Blum and Madhur Tulsiani     Terms Offered: Autumn Equivalent Course(s): TTIC 31150

CMSC 31170. Planning, Learning, and Estimation for Robotics and Artificial Intelligence. 100 Units.

This course concerned with fundamental techniques in robotics and artificial intelligence (AI), with an emphasis on probabilistic inference, learning, and planning under uncertainty. The course will investigate the theoretical foundations underlying these topics as rigorous mathematical tools that enable solutions to real-world problems drawn broadly from robotics and AI. The course will cover topics that include: Bayesian filtering (Kalman filtering, particle filtering, and dynamic Bayesian networks), simultaneous localization and mapping, planning, Markov decision processes, partially observable Markov decision processes, reinforcement learning, and graphical models. Expected outcomes: •

Instructor(s): Matthew Walter     Terms Offered: Spring Prerequisite(s): Basic familiarity with basic linear algebra; background in probability theory; basic programming experience Equivalent Course(s): TTIC 31170

CMSC 31230. Fundamentals of Deep Learning. 100 Units.

Introduction to fundamental principles of deep learning. Deep learning systems are evolving rapidly and this course presents up to date material at a conceptual level. The course emphasizes theoretical and intuitive understanding rather than particular programming formalisms. Topics: Information theory as an organizing principle for machine learning and deep learning in particular. Deep learning frameworks. The "educational framework" (EDF) witten in directly in NumPy. Deep networks for computer vision: Convolutional neural networks (CNNs) and Resnet and the general principles behind them. Deep networks for language processing: Recurrent neural networks (RNNs), the Transformer, their applications and the general principles behind them. The theory and practice of stochastic gradient descent. Regularization and Generalization. Generative Adversarial Networks (GANs) Variational Autoencoders (VAEs) Contrastive Predictive Coding (CPC) Energy Based Models Reinforcement learning and AlphaZero Expected outcomes: An understanding of the general issues sufficient to guide architecture design and training. An ability to read and understand the current research literature in deep learning.

Instructor(s): David McAllester     Terms Offered: Autumn Prerequisite(s): Prerequisites: linear algebra, vector calculus, familiarity with multivariate Gaussian probability distributions and Markov processes. Equivalent Course(s): TTIC 31230

CMSC 31500. Data Interaction. 100 Units.

This course provides core knowledge and technical skills around data interfaces, with an emphasis on visualization and front-end software development. Graduate students in Data Science and Computer Science will engage in project-based learning to become fluent with visualization APIs, computational notebooks, web development, technical writing, and presentation. Topics of interest include data visualization design, spatial and visual reasoning, cartography, interactive articles, data storytelling, data-driven persuasion, uncertainty communication, and model interpretability.

Instructor(s): A. Kale     Terms Offered: Autumn Prerequisite(s): Consent of Instructor unless graduate student in Data Science Equivalent Course(s): DATA 31500

CMSC 31801. Topics in Data Science. 100 Units.

Graduate study in current topics in data science.

CMSC 32001. Topics in Programming Languages. 100 Units.

This course covers a selection of advanced topics in programming languages.

Prerequisite(s): Consent of department counselor and instructor

CMSC 32011. Topics in Formal Verification. 100 Units.

Graduate study of topics in formal verification.

CMSC 32200. Computer Architecture. 100 Units.

This course is a survey of contemporary computer organization covering CPU design, instruction sets, control, processors, busses, ALU, memory, pipelined computers, multiprocessors, networking, and case studies. We focus on the techniques of quantitative analysis and evaluation of modern computing systems, such as the selection of appropriate benchmarks to reveal and compare the performance of alternative design choices in system design. We emphasize major component subsystems of high-performance computers: pipelining, instruction-level parallelism, memory hierarchies, input/output, and network-oriented interconnections.

Instructor(s): Hoffmann

CMSC 32201. Topics in Computer Architecture. 100 Units.

This course covers a selection of advanced topics in computer architecture.

CMSC 32250. Intro to Computer Security. 100 Units.

This course introduces the principles and practice of computer security. It aims to teach how to model threats to computer systems and how to think like a potential attacker. It presents standard cryptographic functions and protocols and gives an overview of threats and defenses for software, host systems, networks, and the Web. It also touches on some of the legal, policy, and ethical issues surrounding computer security in areas such as privacy, surveillance, and the disclosure of security vulnerabilities. The goal of this course is to provide a foundation for further study in computer security and to help better understand how to design, build, and use computer systems more securely.

CMSC 32400. Programming Proofs. 100 Units.

In this course, we will explore the use of proof assistants, computer programs that allow us to write, automate, and mechanically check proofs. These tools have two main uses. They allow us to prove properties of our programs, thereby guaranteeing that our code is free of software errors. They also allow us to formalize mathematics, stating and proving mathematical theorems in a manner that leaves no doubt as to their meaning or veracity. At the intersection of these two uses lies mechanized computer science, involving proofs about data structures, algorithms, programming languages and verification itself.

Prerequisite(s): (CMSC 27100 or CMSC 27130 or CMSC 37000 or CMSC 37110), and (CMSC 14100 or CMSC 15100 or CMSC 16100 or CMSC 22100 or CMSC 22300) Note(s): This course can count toward the Programming Languages & Systems requirement for the CS Major. Equivalent Course(s): CMSC 22400

CMSC 32450. Foundations of Programming Languages. 100 Units.

This course is an introduction to the theory of programming languages. It develops the mathematical tools for specifying and reasoning about the static and dynamic semantics of programming languages. The course covers the λ-calculus, which underpins the semantics of many real-world languages, as well as various different techniques for specifying language semantics.

Prerequisite(s): (CMSC 27100 or CMSC 27130 or CMSC 37110) or (CMSC 27200 or CMSC 27230 or CMSC 37000). Equivalent Course(s): CMSC 22450

CMSC 32700. Quantum Programming and Verification. 100 Units.

As quantum computing comes into its own, a growing number of researchers are trying to address two key challenges that will face computer scientists over the coming years: How do we program quantum computers and how do we ensure that the programs we write reflect our intent? In this course, we will survey a range of papers on quantum programming languages, verification tools, and debugging frameworks for quantum programs. We will identify a variety of abstractions used in quantum programming languages and different approaches to guaranteeing program correctness, including hands-on work in the Coq proof assistant. The course will culminate in a final project that either develops techniques for quantum programming/verification or applies existing ones to new problems.

Instructor(s): Rand

CMSC 32800. Picturing Quantum Processes. 100 Units.

Quantum Picturalism provides a compelling view of quantum processes as string diagrams. Born from categorical quantum mechanics, which studies the underlying structures of quantum computing, these diagrams convey key concepts like entanglement in a way that is far more intuitive than the dominant state vector formalism. In this course, we will study quantum computing from the perspective of Quantum Picturalism, covering key results in quantum algorithms and the underlying quantum mechanics. We will also cover powerful languages built upon the this framework, like the ZX and ZW calculi, and their applications from quantum key distribution to surfaces codes. This course assumes no background in quantum computing or quantum mechanics.

CMSC 32900. Quantum Computer Systems. 100 Units.

This course will explore the design, optimization, and verification of the software and hardware involved in practical quantum computer systems. The course will provide an introduction to quantum computation and quantum technologies, as well as classical and quantum compiler techniques to optimize computations for technologies. Verification techniques to evaluate the correctness of quantum software and hardware will also be explored.

Prerequisite(s): CMSC 14400 or CMSC 15400, and CMSC 22880 or MENG 26400 or CMSC 38410 or MATH 38410 Equivalent Course(s): CMSC 22900

CMSC 33000. Operating Systems. 100 Units.

CMSC 33001. Topics in Systems. 100 Units.

Graduate study of current topics in systems.

CMSC 33100. Advanced Operating Systems. 100 Units.

This course covers advanced topics in operating systems and systems research. Possible topics include, but are not limited to the following: OS philosophies, networked operating systems, distributed file systems, virtual machines, fault-tolerant systems, resource allocation, parallel computing and multiprocessing, cloud computing, and security.

Instructor(s): Lu Prerequisite(s): Consent of department counselor and instructor

CMSC 33200. Topics: Operating Systems. 100 Units.

In this class we will discuss the literature that addresses performance and correctness issues in real-world large-scale distributed systems. For hands-on projects, students will pick complex, real-world faults in deployment, reproduce them on an academic cloud, debug and diagnose the issues. Students will also use published tools and evaluate whether they can find or diagnose the faults being reproduced.

CMSC 33210. Usable Security and Privacy. 100 Units.

Regardless of how secure a system is in theory, failing to consider how humans actually use the system leads to disaster in practice. This course will examine how to design for security and privacy from a user-centered perspective by combining insights from computer systems, human-computer interaction (HCI), and public policy. We will introduce core security and privacy technologies, as well as HCI techniques for conducting robust user studies. Topics will include usable authentication, user-centered web security, anonymity software, privacy notices, security warnings, and data-driven privacy tools in domains ranging from social media to the Internet of Things. Students will complete weekly problem sets, as well as conduct novel research in a group capstone project. No prior experience in security, privacy, or HCI is required.

Prerequisite(s): CMSC 12300 or CMSC 14200 or CMSC 15400 Equivalent Course(s): CMSC 23210

CMSC 33211. Topics in Privacy. 100 Units.

Graduate study of current topics in privacy.

CMSC 33218. Surveillance Aesthetics: Provocations About Privacy and Security in the Digital Age. 100 Units.

In the modern world, individuals' activities are tracked, surveilled, and computationally modeled to both beneficial and problematic ends. Jointly with the School of the Art Institute of Chicago (SAIC), this course will examine privacy and security issues at the intersection of the physical and digital worlds. Through both computer science and studio art, students will design algorithms, implement systems, and create interactive artworks that communicate, provoke, and reframe pervasive issues in modern privacy and security. The course will unpack and re-entangle computational connections and data-driven interactions between people, built space, sensors, structures, devices, and data. Synthesizing technology and aesthetics, we will communicate our findings to the broader public not only through academic avenues, but also via public art and media. The first phase of the course will involve prompts in which students design and program small-scale artworks in various contexts, including (1) data collected from web browsing; (2) mobility data; (3) data collected about consumers by major companies; and (4) raw sensor data. Students will receive detailed feedback on their work from computer scientists, artists, and curators at the Museum of Science & Industry (MSI). The course culminates in the production and presentation of a capstone interactive artwork by teams of computer scientists and artists; successful products may be considered for prototyping at the MSI.

Prerequisite(s): One of CMSC 23200, CMSC 23210, CMSC 25900, CMSC 28400, CMSC 33210, CMSC 33250, or CMSC 33251 recommended, but not required. Note(s): Students interested in this class should complete this form to request permission to enroll: https://uchicago.co1.qualtrics.com/jfe/form/SV_5jPT8gRDXDKQ26a Equivalent Course(s): CMSC 23218, MADD 23218

CMSC 33220. A Practice in Art and Technology. 100 Units.

This graduate-level class, "A&T" for short, offers project-based learning through 3 phases of interactive art development: 1. Ideate (coming up with unique and original ideas), 2. Build (implementing the idea with technical methods), and 3. Exhibit (facilitating the prototypes to convey experiences to people). The instructor will provide continuous weekly feedback to the students' project to develop technically working, interactively engaging, and conceptually provocative systems that will be showcased in a public exhibition at the end of the quarter.

Instructor(s): Nakagaki

CMSC 33221. Advanced Topics in Law and Computing. 100 Units.

This interdisciplinary seminar will bring together instructors and graduate students from Computer Science / Data Sciences and the Law School. The seminar's focus will be on topics where law and policy intersect with computer science. Such topics may include cryptography and encryption; electronic surveillance and criminal procedure; the Computer Fraud & Abuse Act; the law governing data breaches; redistricting and the US Census; deep fakes; GDRP, Europe's Digital Services Act and the CCPA; and international data transfers. Students will be evaluated on the basis of short bi-weekly reaction papers, class participation based on weekly assigned reading, and team projects that pair law students with computer and data scientists.

Equivalent Course(s): DATA 33221

CMSC 33230. Engineering Interactive Electronics onto Printed Circuit Boards. 100 Units.

In this class we will engineer electronics onto Printed Circuit Boards (PCBs). We will focus on designing and laying out the circuit and PCB for our own custom-made I/O devices, such as wearable or haptic devices. In order for you to be successful in engineering a functional PCB, we will (1) review digital circuits and three microcontrollers (ATMEGA, NRF, SAMD); (2) use KICAD to build circuit schematics; (3) learn how to wire analog/digital sensors or actuators to our microcontroller, including SPI and I2C protocols; (4) use KICAD to build PCB schematics; (5) actually manufacture our designs; (6) receive in our hands our PCBs from factory; (7) finally, learn how to debug our custom-made PCBs.

Prerequisite(s): CMSC 14400 or CMSC 15400, and CMSC 23220 or CMSC 21400 or CMSC 20380 or PHYS 13300 or PHYS 14300 or PHYS 22700. Equivalent Course(s): CMSC 23230

CMSC 33231. Topics in Human Computer Interaction. 100 Units.

Graduate study in current topics in Human Computer Interaction.

Instructor(s): Pedro Lopes

CMSC 33240. Emergent Interface Technologies. 100 Units.

In this class, we critically examine emergent technologies that might impact the future generations of computing interfaces, these include: physiological I/O (e.g., brain and muscle computer interfaces), tangible computing (giving shape and form to interfaces), wearable computing (I/O devices closer to the user's body), rendering new realities (e.g., virtual and augmented reality), haptics (giving computers the ability to generate touch and forces) and unusual auditory interfaces (e.g., silent speech and microphones as sensors). In this class you will: (1) learn about these new developments during the lectures, (2) read HCI papers and summarize these in short weekly assignments, and lastly, (3) start inventing the future of computing interfaces by proposing a new idea in the form of a paper abstract, which you will present at the end of the semester and have it peer-reviewed in class by your classmates.

CMSC 33250. Introduction to Computer Security. 100 Units.

Prerequisite(s): CMSC 14400 or CMSC 15400 Equivalent Course(s): CMSC 23200

CMSC 33251. Topics in Computer Security. 100 Units.

Seminar on current topics in computer security.

CMSC 33260. Internet Censorship and Online Speech. 100 Units.

Information dissemination and online discourse on the Internet are subject to the algorithms and filters that operate on Internet infrastructure, from network firewalls to search engines. This course will explore the technologies that are used to control access to online speech and information, and cutting-edge technologies that can empower citizens in the face of these information controls. Students will learn about and experiment with technologies to control online discourse, ranging from firewalls that perform network traffic filtering to algorithms for content personalization and content moderation. We will also explore underlying technical trends, such as the increasing consolidation of Internet infrastructure and protocols, and the implications of consolidation for control over online discourse. Each course meeting will include a technical overview, reading discussion, and a hands-on laboratory activity.

Prerequisite(s): None Equivalent Course(s): PARR 33260, MADD 23620

CMSC 33281. Topics in Human Robot Interaction. 100 Units.

The field of human-robot interaction (HRI) is a new and growing field of research that explores the interface between people and robots. Applications of HRI research include developing robots to tutor elementary students, assist human workers in manufacturing contexts, provide museum tours, interact with families within their homes, and help care for the elderly. The field of HRI is highly interdisciplinary, incorporating methods and techniques from human-computer interaction, robotics, psychology, artificial intelligence, and other fields. The University of Chicago's CMSC 33281 Topics in Human-Robot Interaction course exposes students to a broad range of recent and cutting-edge research in HRI. The topics covered in this course include nonverbal robot behavior, verbal robot behavior, social dynamics, norms & ethics, collaboration & learning, group interactions, applications, and future challenges of HRI. Course meetings will involve students in the class leading discussions about cutting-edge peer-reviewed research HRI publications. Throughout the quarter, teams of students in the course will also complete an HRI course project of their choosing where they will investigate an HRI research question of interest to them.

Equivalent Course(s): MADD 23281

CMSC 33300. Networks and Distributed Systems. 100 Units.

This course will focus on studying the state of the art in networking and networked systems, from a research and design perspective. We will cover a variety of topics from routing protocols to Internet stability, peer-to-peer, social networks and networking for data centers. Coverage of each topic will dive into fundamental design questions of protocols and systems, including updates from results of currently active research. Readings will focus on classic and current research publications, and students are expected to come in with a solid background on networking basics. Students will learn tools, techniques, and concepts while learning to carry out original research in an open-ended course project, with the end goal of producing real, publishable results by the end of the quarter. Students are also expected to gain experience in two skills: quickly reading technical papers (without sacrificing understanding), and giving clear and well-organized presentations.

CMSC 33400. Mobile Computing. 100 Units.

Mobile computing is pervasive and changing nearly every aspect of society. Sensing, actuation, and mediation capabilities of mobile devices are transforming all aspects of computing: uses, networking, interface, form, etc. This course explores new technologies driving mobile computing and their implications for systems and society. Current focus areas include expanded visual experience with computational photography, video and interactive augmented reality, and synchronicity and proximity-detection to enable shared social experiences. Labs expose students to software and hardware capabilities of mobile computing systems, and develop the capability to envision radical new applications for a large-scale course project.

Instructor(s): A. Chien     Terms Offered: Not offered 2017-2018. Prerequisite(s): CMSC 23000 or 23300 or equivalent are required.

CMSC 33501. Topics in Databases. 100 Units.

This course covers a selection of advanced topics in database systems.

CMSC 33520. Data Intensive Computer Systems. 100 Units.

Cloud computing has become the primary means for large-scale computation and services to be delivered. This class covers a wide range of cloud software elements that both underpin and shape the design of scalable internet data services. The success of cloud computing depends on efficient resource sharing and application isolation -- typically supported by virtual machines (VMs) and containers, controlled by orchestration infrastructures such as VMWare and Kubernetes. We will cover these models, and the oversubscription resource management approaches that sustain them, as well as the sustainability and carbon-emission challenges that limit them. Newer application architectures such as micro-services and function-as-a-service (FaaS or Serverless) enable easy application design evolution. We will cover these models and the challenges they present for implementation. These software structures support "big data" applications, including analytical systems such as map-reduce and Spark. They also include data serving systems, enable big data, and support these systems including parallel filesystems, databases, and noSQL key-value stores such as Cassandra, Memcached, MongoDB, and more. Students will develop a broad familiarity with current challenges, the state of the art, including leading edge research in the area, and hands-on experience with a range of systems which together provide a solid preparation for research in the area.

CMSC 33550. Introduction to Database Systems. 100 Units.

This course is an introduction to database design and implementation. Topics include DBMS architecture, entity-relationship and relational models, relational algebra, concurrency control, recovery, indexing, physical data organization, and modern database systems. The lab section guides students through the implementation of a relational database management system, allowing students to see topics such as physical data organization and DBMS architecture in practice, and exercise general skills such as software systems development.

Prerequisite(s): CMSC 14400 or CMSC 15400 Equivalent Course(s): CMSC 23500

CMSC 33580. The Value of Data. 100 Units.

While data and artificial intelligence are driving many changes to our economic, social, political, financial, and legal systems, we know little about their foundations and governing dynamics. While the recombination and integration of diverse data creates vast new value, we currently have neither theory for how data can be combined nor an industrial policy for how to protect against the personal exposures and abuses that grow in proportion. Many of these issues call for treating data as a first-class citizen and thinking of it as an asset. What is the value of data, and how do we measure it? This course explores these questions from a multidisciplinary perspective that includes computer science, economy, social science, among others. The sessions are organized around broad themes related to the value of data. A typical session will consist of a short introduction by the instructor, followed by a paper discussion (students are expected to read the assigned papers ahead of the class), and finishing with a discussion about individual projects. The course can be taken pass-fail or for a letter grade. For a letter grade, you need to complete an individual, quarter-long project. You also need to attend classes, participate in discussions, and scribe for two/three classes. For pass-fail, you do not need to complete the individual project but all other requirements apply.

CMSC 33581. Topics in Big Data. 100 Units.

The amount of data generated is growing faster than our computational infrastructure, and ever-smarter algorithms will be needed to structure, analyze, and manage such scales. This 10-week seminar studies key "great ideas" in scalable algorithms for data analysis. Topics include: sampling, sketching, randomized index structures, basic coding theory, and query optimization.

CMSC 33700. Introduction to Computer Graphics. 100 Units.

This course introduces the basic concepts and techniques used in three-dimensional computer graphics. The focus is on real-time rendering techniques, such as those found in computer games. The course places an emphasis on developing a strong foundation for 3D graphics by covering topics such as the graphics pipeline, coordinate systems, coordinate transformations, lighting, texture mapping, and basic geometric algorithms and data structures. These foundations are applied using programmable shaders to implement real-time rendering techniques, such as real-time shadows and other effects. Students are required to complete both written assignments and programming projects using C++ and the Vulkan 3D graphics library.

Prerequisite(s): CMSC 14400 or CMSC 15400 Note(s): Prior experience with basic linear algebra (matrix algebra) is recommended. Equivalent Course(s): CMSC 23700

CMSC 33710. Scientific Visualization. 100 Units.

Scientific visualization combines computer graphics, numerical methods, and mathematical models of the physical world to create a visual framework for understanding and solving scientific problems. The mathematical and algorithmic foundations of scientific visualization (for example, scalar, vector, and tensor fields) will be explained in the context of real-world data from scientific and biomedical domains. The course is also intended for students outside computer science who are experienced with programming and computing with scientific data. Programming projects will be in C and C++.

Prerequisite(s): CMSC 14300 or CMSC 15400 Equivalent Course(s): CMSC 23710

CMSC 33750. Machine Learning and Cancer. 100 Units.

In this topics course we will investigate the use of machine learning methods in the study of Cancer and the development of precision oncology. Cancer is a complex disease that impacts millions each year. Recently the concept of precision oncology has gained popularity as an approach to customize Cancer treatments based on the genomic profile and history of the patient, the molecular properties of the patient's tumor and the action and mode of treatments that are available. At the center of any precision medicine approach are large-scale datasets from which predictive models can be built, scalable analysis methods for processing and integrating data and machine learning methods for constructing and evaluating predictive models that can be used in diagnosis, treatment planning, and outcome prediction for patient care. In this course we will work through the development of the entire pipeline from raw data to predictive models. We will develop and evaluate predictive models for drug response, tumor typing, image based diagnosis, and treatment outcomes. We will also develop some population based models that include environmental factors. Students will work through key papers, representative datasets and a variety of machine learning methods including some deep learning models under development in the joint DOE/NCI Cancer project. Familiarity with python and machine learning will be helpful. Students will have an opportunity to do significant project work as part of the course.

CMSC 33900. Data Visualization. 100 Units.

Data visualizations provide a visual setting in which to explore, understand, and explain datasets. This class describes mathematical and perceptual principles, methods, and applications of "data visualization" (as it is popularly understood to refer primarily to tabulated data). A range of data types and visual encodings will be presented and evaluated. Visualizations will be primarily web-based, using D3.js, and possibly other higher-level languages and libraries.

CMSC 34702. Topics in Networks: 100 Units.

CMSC 34703. Topics in Distributed Systems. 100 Units.

Topics in Distributed Systems

CMSC 34900. Topics in Scientific Computing. 100 Units.

This course covers a selection of advanced topics in Scientific Computing.

CMSC 34901. Special Topics in Operations Mgt./Mgt. Science. 100 Units.

Course Search

Equivalent Course(s): BUSN 40901

CMSC 35050. Graduate Computational Linguistics. 100 Units.

This course is a graduate-level introduction to topics at the intersection of computation and language. We will study computational linguistics from both scientific and engineering angles: the use of computational modeling to address scientific questions in linguistics and cognitive science, as well as the design of computational systems to solve engineering problems in natural language processing (NLP). The course will combine analysis and discussion of these approaches with training in the programming and mathematical foundations necessary to put these methods into practice. The course is designed to accommodate students both with and without prior programming experience. Our goal is for all students to leave the course able to engage with and critically evaluate research in cognitive/linguistic modeling and NLP, and to be able to implement intermediate-level computational models for novel computational linguistics research.

Instructor(s): J. Goldsmith     Terms Offered: Spring Prerequisite(s): CMSC 12200, 15200 or 16200, or by consent Equivalent Course(s): LING 38600

CMSC 35100. Natural Language Processing. 100 Units.

This course introduces the theory and practice of natural language processing, with applications to both text and speech. Topics include regular expressions, finite state automata, morphology, part of speech tagging, context free grammars, parsing, semantics, discourse, and dialogue. Symbolic and probabilistic models are presented. Techniques for automatic acquisition of linguistic knowledge are emphasized.

CMSC 35110. Speech Technologies. 100 Units.

This course will introduce techniques used in speech technologies, mainly focusing on speech recognition. Speech recognition is one of the oldest and most complex structured sequence prediction tasks receiving significant research and commercial attention, and therefore provides a good case study for many of the techniques that are used in other areas of artificial intelligence involving sequence modeling. It is also a good example of the effectiveness of combining statistics and learning with domain knowledge. The course will include practical homework exercises using Matlab and speech toolkits. Expected outcomes: Understand and apply tools for analyzing speech time series such as Fourier analysis and dynamic time warping. Understand and apply hidden Markov models, Gaussian mixtures, and the EM algorithm for speech problems. Understand and apply n-gram language models, smoothing techniques, and their application to speech recognition. Understand generative and discriminative structured prediction approaches for speech problems.

Instructor(s): Karen Livescu     Terms Offered: Spring Prerequisite(s): A good background in basic probability. Equivalent Course(s): TTIC 31110

CMSC 35200. Deep Learning Systems. 100 Units.

Deep learning is emerging as a major technique for solving problems in a variety of fields, including computer vision, personalized medicine, autonomous vehicles, and natural language processing. Critical to success in these target domains is the development of learning systems: deep learning frameworks that support the tasks of learning complex models and inferencing with those models, and targeting heterogeneous computing devices. This course is aimed as an introduction to this topic. We will cover various aspects of deep learning systems, including: basics of deep learning, programming models for expressing machine learning models, automatic differentiation methods used to compute gradients for training, memory optimization, scheduling, data and model parallel and distributed learning, hardware acceleration, domain specific languages, workflows for large-scale machine learning including hyper parameter optimization and uncertainty quantification, and training data and model serving. The goal is to present a comprehensive picture of how current deep learning systems work, discuss and explore research opportunities, for extending and building on existing frameworks, and deep dive into the accelerators being developed by numerous startups to address the needs of the machine learning community. A typical week will contain one lecture on a specific aspect of deep learning systems and one lab session exploring technologies such as Keras, Tensorflow, CNTK, Mxnet, and PyTorch.

Note(s): This course will provide useful background for students wishing to take our Spring 2019 class on Neuromorphic Computing.

CMSC 35230. Applications of Machine Learning in Large-Scale Computing Systems. 100 Units.

Recent research has demonstrated the feasibility of replacing the traditional heuristics used in computer systems with ones learned from data in areas such as scheduling, data structure design, query optimization, compilers, and control of warehouse scale computing systems. This seminar overviews this recent research trend and studies the characteristics of successful research in this space. The objective is to understand whether this trend will have a long-term impact on the design and implementation of large-scale computing systems. The seminar hopes to highlight the remaining bottlenecks to practical acceptance of machine learning in computing infrastructure and to inspire future systems and learning research.

Prerequisite(s): Good working knowledge of computer systems, especially in the areas of operating systems and databases.

CMSC 35246. Deep Learning. 100 Units.

Deep Neural Networks are remarkably effective in large scale learning problems, especially in speech recognition and computer vision. This course aims to cover the basics of Deep Learning, some of the underlying theory, and specific architectures, including Convolutional Neural Networks, Recurrent Neural Networks and the Long Short Term Memory Networks.

CMSC 35300. Mathematical Foundations of Machine Learning. 100 Units.

This course is an introduction to the mathematical foundations of machine learning that focuses on matrix methods and features real-world applications ranging from classification and clustering to denoising and data analysis. Mathematical topics covered include linear equations, regression, regularization, the singular value decomposition, and iterative algorithms. Machine learning topics include classification and regression, support vector machines, kernel methods, clustering, matrix completion, neural networks, and deep learning. Students are expected to have taken calculus and have exposure to numerical computing (e.g. Matlab, Python, Julia, R).

Prerequisite(s): CMSC 11900 or CMSC 12200 or CMSC 14100 or CMSC 15200 or CMSC 16200 Note(s): Undergraduate students are not allowed to enroll in CMSC 35300. Equivalent Course(s): CMSC 25300, STAT 27700

CMSC 35350. Neuromorphic Computing. 100 Units.

The human brain consumes around 20 watts-less energy than a lightbulb-but can perform tasks, such as understanding natural language and interpreting images, that tax megawatt-scale supercomputers. Thus, we may wonder: can we achieve energy efficiencies similar to those of the human brain by building analog electronic circuits that mimic the neuro-biological architectures found in animal nervous systems? This concept, named neuromorphic computing, has become increasingly popular as the energy demands of conventional computers increase. Research in this area is producing a great variety of new computational architectures, microelectronics concepts, algorithmic approaches, and even neuroscience insights. Our goal in this course is to introduce students to the state of knowledge in neuromorphic computing and thus to prepare them to undertake original research in this area. The class will be organized primarily around reading, presenting, and discussing research papers. Topics to be covered include: Neuromorphic concepts Theory and algorithms Microelectronics and devices Programming models and environments Applications: Machine learning, deep learning, robot control, ... Platforms: BrainScaleS, Loihi, SpiNNaker Neuroscience

Terms Offered: Spring TBD

CMSC 35360. Autonomous Laboratories. 100 Units.

Autonomous laboratories leverage robotics, machine learning (ML), and artificial intelligence (AI) methods to accelerate discovery and design processes in science and engineering. They build on advances in robotic instruments, which enable faster, cheaper, and more reproducible experiments, but go further, leveraging AI/ML methods to explore large and complex search spaces more efficiently than humans can do unaided. This course introduces students to the principles and practice of automated laboratories, with a particular focus on AI/ML methods such as active learning, Bayesian optimization, and reinforcement learning. The class will combine lectures, readings, programming assignments on AI/ML methods, and a project in which students will investigate an autonomous laboratory problem.

Instructor(s): Foster, Stevens

CMSC 35380. Programming the Continuum. 100 Units.

In the early days of high-speed networking, George Gilder observed that "when the network is as fast as the computer's internal links, the machine disintegrates across the net into a set of special purpose appliances." 2+ decades later, our networks are 1,000 times faster, our appliances are increasingly specialized, and our computer systems are indeed disintegrating. As hardware acceleration overcomes speed-of-light delays, time and space merge into a computing continuum. Familiar questions like "where should I compute," "for what workloads should I design computers," and "where should I place my computers" seem to allow for exciting new answers. Are there concepts that can help guide us as we design applications and computer systems in a world that is untethered from familiar landmarks like center, cloud, edge? In this class we will discuss papers on these and related topics; hear from visionary leaders in the field; and conduct projects that allow for practical exploration of concepts and techniques. The class is graduate level but is also open to qualified upper-level undergraduates.

CMSC 35400. Machine Learning. 100 Units.

This course provides hands-on experience with a range of contemporary machine learning algorithms, as well as an introduction to the theoretical aspects of the subject. Topics covered include: the PAC framework, Bayesian learning, graphical models, clustering, dimensionality reduction, kernel methods including SVMs, matrix completion, neural networks, and an introduction to statistical learning theory.

Terms Offered: To be determined Prerequisite(s): Must be a PhD or MS student in Statistics, Computer Science, or Computational and Applied Mathematics, and has taken any one of: CMSC 35300/STAT 27700, STAT 31430, STAT 30900, STAT 24300, STAT 24500, or STAT 24510. Or consent of the instructor. Equivalent Course(s): STAT 37710, CAAM 37710

CMSC 35401. Topics in Machine Learning: Applied Machine Learning. 100 Units.

Graduate study in current topics in machine learning.

CMSC 35410. Spectral Methods for Machine Learning and Network Analysis. 100 Units.

An introduction to spectral algorithms, emphasizing their power to tackle practical problems in the analysis of networks and high-dimensional data. Topics include spectral graph theory, random walks over networks and their convergence, spectral clustering, subspace projections and embeddings, and numerical algorithms for fundamental linear-algebraic problems.

Instructor(s): Lorenzo Orecchia

CMSC 35422. Machine Learning for Computer Systems. 100 Units.

This course will cover topics at the intersection of machine learning and systems, with a focus on applications of machine learning to computer systems. Topics covered will include applications of machine learning models to security, performance analysis, and prediction problems in systems; data preparation, feature selection, and feature extraction; design, development, and evaluation of machine learning models and pipelines; fairness, interpretability, and explainability of machine learning models; and testing and debugging of machine learning models. The topic of machine learning for computer systems is broad. Given the expertise of the instructor, many of the examples this term will focus on applications to computer networking. Yet, many of these principles apply broadly, across computer systems. You can and should think of this course as a practical hands-on introduction to machine learning models and concepts that will allow you to apply these models in practice. We'll focus on examples from networking, but you will walk away from the course with a good understanding of how to apply machine learning models to real-world datasets, how to use machine learning to help computer systems operate better, and the practical challenges with deploying machine learning models in practice."

Instructor(s): Nick Feamster Prerequisite(s): CMSC 14300 or CMSC 15400 Equivalent Course(s): DATA 25422, DATA 35422, CMSC 25422

CMSC 35425. Topics in Statistical Machine Learning. 100 Units.

Topics in Statistical Machine Learning" is a second graduate level course in machine learning, assuming students have had previous exposure to machine learning and statistical theory. The emphasis of the course is on statistical methodology, learning theory, and algorithms for large-scale, high dimensional data. The selection of topics is influenced by recent research results, and students can take the course in more than one quarter.

Terms Offered: To be determined Equivalent Course(s): STAT 37790

CMSC 35430. Machine Learning on Graphs, Groups and Manifolds. 100 Units.

In many domains, including applications of machine learning to scientific problems, social phenomena and computer vision/graphics, the data that learning algorithms operate on naturally lives on structured objects such as graphs or low dimensional manifolds. There are many connections between these cases; further, since groups capture symmetries, there are also natural connections to the theory of learning on groups and group equiviariant algorithms. This course provides a mathematical introduction to these topics both in the context of kernel based learning and neural networks. Specific topics covered include graph kernels, manifold learning, graph wavelets, graph neural networks, permutation equivariant learning, rotational equivariant networks for scientific applications and imaging, gauge equivariant networks and steerable nets.

Equivalent Course(s): CAAM 37788, STAT 37788

CMSC 35440. Machine Learning in Biology and Medicine. 100 Units.

[Machine Learning in Biology and Medicine]

Note(s): [still awaiting course description from instructors]

CMSC 35450. Geometric Deep Learning. 100 Units.

This course will cover the basics of learning on unstructured geometric data. In particular, the course will focus on learning on 3D data representations (such as meshes and point clouds). The course is project-based, hands-on, and practical. Students will implement, design, and train deep neural networks using Python and PyTorch. Students should have familiarity with fundamental/basic machine learning.

CMSC 35470. Mathematical Computation IIA: Convex Optimization. 100 Units.

The course will cover techniques in unconstrained and constrained convex optimization and a practical introduction to convex duality. The course will focus on (1) formulating and understanding convex optimization problems and studying their properties; (2) understanding and using the dual; and (3) presenting and understanding optimization approaches, including interior point methods and first order methods for non-smooth problems. Examples will be mostly from data fitting, statistics and machine learning.

Instructor(s): Zhiyuan Li     Terms Offered: Winter Prerequisite(s): STAT 30900 or STAT 31430 or consent of instructor. Note(s): In addition to the required prerequisites, background in analysis in R^n (at the level of MATH 20400) is recommended. Equivalent Course(s): BUSN 36903, CAAM 31015, STAT 31015, TTIC 31070

CMSC 35480. Topics in Optimization. 100 Units.

Graduate study of topic in optimization.

CMSC 35490. Special Topics in Machine Learning. 100 Units.

Learned emulators leverage neural networks to increase the speed of physics simulations in climate models, astrophysics, high-energy physics, and more. Recent empirical results have illustrated that these emulators can speed up traditional simulations by up to eight orders of magnitude. However, little is understood about these emulators. While it is possible that recent results are representative of what is possible in most settings, a more likely scenario is that these approaches are more effective for some simulators than others, and that learned emulators achieve strong average-case performance but fail to capture rare but important phenomena. In this graduate seminar course we will provide an overview and investigate recent literature on this topic, focusing on the following questions: 1. Introduction to learned emulators: how do they work, where have they been successful so far and what are the goals in this field? 2. Two different paradigms of learned emulation: physics vs. data driven. What are the advantages and pitfalls of each? 3. Robustness of emulation to noise: what is known so far? 4. Parameter estimation: how to handle parameter uncertainty? We will provide a list of papers covering the above topics and students will be evaluated on in-class presentations.

Instructor(s): Dana Mendelson (Math) and Rebecca Willett (CS/Stats)      Terms Offered: Autumn Prerequisite(s): Students should be familiar with a numerical programming language like Python, Julia, R, or Matlab and the content of CMSC 35400. Students should also have familiarity with the contents of MATH 27300 and MATH 27500 or similar. Note(s): Because this is a seminar course, it will be capped at 15 students, 4 Math, 4 CS/Stats, and 7 with instructor permission. Equivalent Course(s): MATH 37794, STAT 37794, CAAM 37794

CMSC 35530. Fundamentals of Sampled Data Systems. 100 Units.

Virtually all of modern data science, machine learning, and statistics relies on data which has been sampled: converted from continuous values in continuous time to discretely sampled, quantized data. This class will cover the signal processing fundamentals of sampled data systems, including signal representations, signal transforms (such as the Fourier and Z-transforms), fundamentals of sampling theory, models of quantization error, filtering, fast algorithms (including the FFT), basic communications theory, and then briefly touch on modern ideas of sparsity and overcomplete representations. Prerequisites include multivariable calculus, probability, and linear algebra. There will be weekly readings, problem sets, and quizzes.

CMSC 35600. Image Processing/Computer Vision. 100 Units.

Equivalent Course(s): MPHY 39600

CMSC 35620. Computational Linguistics. 100 Units.

This course is a mixed level introduction to topics at the intersection of computation and language. We will study computational linguistics from both scientific and engineering angles: the use of computational modeling to address scientific questions in linguistics and cognitive science, as well as the design of computational systems to solve engineering problems in natural language processing (NLP). The course will combine analysis and discussion of these approaches with training in the programming and mathematical foundations necessary to put these methods into practice. The course is designed to accommodate students both with and without prior programming experience. Our goal is for all students to leave the course able to engage with and critically evaluate research in cognitive/linguistic modeling and NLP, and to be able to implement intermediate-level computational models for novel computational linguistics research.

Instructor(s): Allyson Ettinger     Terms Offered: Autumn Equivalent Course(s): LING 38620, COGS 22015, LING 28620

CMSC 35900. Topics in Artificial Intelligence. 100 Units.

Graduate study of current topics in artificial intelligence.

Terms Offered: Autumn Spring Winter Prerequisite(s): Consent of department counselor and instructor

CMSC 36500. Algorithms in Finite Groups. 100 Units.

We consider the asymptotic complexity of some of the basic problems of computational group theory. The course demonstrates the relevance of a mix of mathematical techniques, ranging from combinatorial ideas, the elements of probability theory, and elementary group theory, to the theories of rapidly mixing Markov chains, applications of simply stated consequences of the Classification of Finite Simple Groups (CFSG), and, occasionally, detailed information about finite simple groups. No programming problems are assigned.

Prerequisite(s): Consent of department counselor. Linear algebra, finite fields, and a first course in group theory (Jordan-Holder and Sylow theorems) required; prior knowledge of algorithms not required Note(s): This course is offered in alternate years. Equivalent Course(s): MATH 37500

CMSC 37000. Algorithms. 100 Units.

This is a graduate level course on algorithms with the emphasis on central combinatorial optimization problems and methods for algorithm design and analysis. Topics covered include greedy algorithms, dynamic programming, algorithms for maximum flow and minimum cut, applications of linear programming, randomized algorithms, combinatorial optimization, and approximation algorithms. Time permitting, additional topics, such as online algorithms and probabilistic method will be covered. The course textbook is "Algorithm Design" by Kleinberg and Tardos Specific topics covered: Greedy algorithms Dynamic programming Max flow, min cut, bipartite matching, and their applications Linear programming, LP-duality NP-hardness Approximation algorithms Randomized algorithms (optional): online algorithms; probabilistic method Expected outcomes: Ability to design and rigorously analyze algorithms using paradigms such as greedy or dynamic programming. Understand the use of linear programming in optimization. Be able to formulate problems as linear programs. Knowledge of maximum flow / minimum cut problems and algorithms for solving them, and ability to apply this knowledge to suitable graph optimization problems. Understand the notion of NP-hardness and ability to prove NP-hardness of problems via reductions. Understand linear programming duality and applications to problems such as max- flow/min-cut. Be able to write duals for linear programs.

Instructor(s): Julia Chuzhoy     Terms Offered: Autumn Prerequisite(s): Assumes familiarity with proofs and formal reasoning, knowledge of basic graph notions (such as graphs, trees, paths etc) and algorithms (such as BFS, DFS, Minimum Spanning Tree etc). Also assumes familiarity with asymptotic notation and running time analysis of algorithms, as well as basic knowledge of the notion of NP-hardness. Equivalent Course(s): TTIC 31010

CMSC 37110. Discrete Mathematics. 100 Units.

This course emphasizes mathematical discovery and rigorous proof, illustrated on a variety of accessible and useful topics, including basic number theory, asymptotic growth of sequences, combinatorics and graph theory, discrete probability, and finite Markov chains. This course includes an introduction to linear algebra.

Instructor(s): L. Babai Prerequisite(s): Consent of department counselor and instructor

CMSC 37115. Introduction to Mathematical Reasoning via Discrete Mathematics. 100 Units.

In this course, students with little prior exposure to rigorous mathematical reasoning gain experience in approaching mathematical questions, developing concepts, formalizing ideas, turning intuition into rigorous proof. These phases of mathematical thinking are illustrated on a variety of accessible and useful topics. Students practice the quantifier notation both as a shorthand and as one of the organizing principles of formal statements. New concepts are built from such basic mathematical primitives as numbers, sets, and functions. Basic counting is a recurring theme and provides a source for sequences, another recurring theme, which in turn feeds into the study of asymptotic behavior (rates of growth). Further topics to be covered include proof by induction; the elements of number theory (gcd, congruences, the Chinese Remainder Theorem, Fermat's little Theorem); recurrences, Fibonacci numbers, generating functions; the elements of graph theory (trees, paths and cycle, chromatic number, independent sets and cliques, connectivity, planarity, directed graphs), finite probability spaces, random variables, expected value and variance, independence, concentration inequalities, and random graphs.

Prerequisite(s): One quarter of calculus

CMSC 37200. Combinatorics. 100 Units.

Methods of enumeration, construction, and proof of existence of discrete structures are discussed. The course emphasizes applications of linear algebra, number theory, and the probabilistic method to combinatorics. Applications to the theory of computing are indicated, and open problems are discussed.

Instructor(s): L. Babai Prerequisite(s): Consent of department counselor. Linear algebra, basic combinatorics, or consent of instructor.

CMSC 37220. Information and Coding Theory. 100 Units.

This course is meant to serve as an introduction to some basic concepts in information theory and error-correcting codes, and some of their applications in computer science and statistics. We plan to cover the following topics: Introduction to entropy and source coding. Some applications of entropy to counting problems. Mutual information and KL-divergence. Method of types and hypothesis testing. I-projections and applications. Introduction to error-correcting codes. Unique and list decoding of Reed-Solomon and Reed-Muller codes. Applications of information theory to lower bounds in computational complexity and communication complexity. Expected outcomes: Familiarity with concepts such as Entropy, Mutual information and KL-divergence. Familiarity with source and channel coding. Understanding of the method of types and ability to derive large-deviation bounds using information-theoretic concepts. Understanding of the notions of unique and list decoding for various codes.

Instructor(s): Tulsiani, Madhur     Terms Offered: Winter Prerequisite(s): Discrete probability. Some knowledge of finite-field algebra is required for the part on error-correcting codes but required basics are reviewed in class. Equivalent Course(s): TTIC 31200

CMSC 37503. Approximation Algorithms. 100 Units.

This is a basic course on approximation algorithms, with the main focus on approximation algorithms for central combinatorial optimization problems. We will mostly focus on classical algorithmic results, but will also present some state of the art results and challenges in the area of approximation. The course will cover major algorithmic techniques, including LP-rounding, primal-dual schema, metric methods, SDP rounding and so on. While the main focus of the course is on algorithms, we will also discuss lower bounds on approximation and connections between algorithm design and lower bound proofs. Assumes the knowledge of material covered in the Algorithms course. Expected outcomes: Understand concepts such as approximation factor, polynomial time approximation schemes and hardness of approximation. Understand applications of linear programs (LPs) to design of approximation algorithms. Learn to analyze rounding algorithms for LPs and understand integrality gaps. Be able to apply LP duality. Understand semi-definite programming and its applications to approximation.

Instructor(s): Julia Chuzhoy     Terms Offered: Autumn Equivalent Course(s): TTIC 31080

CMSC 37530. Graph Theory. 100 Units.

This course covers the basics of the theory of finite graphs. Topics include shortest paths, spanning trees, counting techniques, matchings, Hamiltonian cycles, chromatic number, extremal graph theory, Turan's theorem, planarity, Menger's theorem, the max-flow/min-cut theorem, Ramsey theory, directed graphs, strongly connected components, directly acyclic graphs, and tournaments. Techniques studied include the probabilistic method.

Instructor(s): Laszlo Babai

CMSC 37799. Topics in Machine Learning: Machine Learning and Inverse Problems. 100 Units.

In many scientific and medical settings, we cannot directly observe phenomena of interest, such as images of a person's internal organs, the microscopic structure of materials or cells, or observations of distant stars and galaxies. Rather, we use MRI scanners, microscopes, and satellites to collect indirect data that require sophisticated numerical methods to interpret. This course will explore a variety of machine learning techniques for solving inverse problems, ranging from linear inverse problems to PDE parameter estimation and data assimilation.

Instructor(s): R. Willett     Terms Offered: Winter Prerequisite(s): STAT 37710/CAAM 37710/CMSC 35400 or consent of instructor. Equivalent Course(s): CAAM 37799, STAT 37799

CMSC 37810. Mathematical Computation I: Matrix Computation Course. 100 Units.

This is an introductory course on numerical linear algebra, which is quite different from linear algebra. We will be much less interested in algebraic results that follow from axiomatic definitions of fields and vector spaces but much more interested in analytic results that hold only over the real and complex fields. The main objects of interest are real- or complex-valued matrices, which may come from differential operators, integral transforms, bilinear and quadratic forms, boundary and coboundary maps, Markov chains, correlations, DNA microarray measurements, movie ratings by viewers, friendship relations in social networks, etc. Numerical linear algebra provides the mathematical and algorithmic tools for analyzing these matrices. Topics covered: basic matrix decompositions LU, QR, SVD; Gaussian elimination and LU/LDU decompositions; backward error analysis, Gram-Schmidt orthogonalization and QR/complete orthogonal decompositions; solving linear systems, least squares, and total least squares problem; low-rank matrix approximations and matrix completion. We shall also include a brief overview of stationary and Krylov subspace iterative methods; eigenvalue and singular value problems; and sparse linear algebra.

Terms Offered: Autumn Prerequisite(s): Linear algebra (STAT 24300 or equivalent) and some previous experience with statistics. Equivalent Course(s): CAAM 30900, STAT 30900

CMSC 37812. Mathematical Computation III: Numerical Methods for PDE's. 100 Units.

The first part of this course introduces basic properties of PDE's; finite difference discretizations; and stability, consistency, convergence, and Lax's equivalence theorem. We also cover examples of finite difference schemes; simple stability analysis; convergence analysis and order of accuracy; consistency analysis and errors (i.e., dissipative and dispersive errors); and unconditional stability and implicit schemes. The second part of this course includes solution of stiff systems in 1, 2, and 3D; direct vs. iterative methods (i.e., banded and sparse LU factorizations); and Jacobi, Gauss-Seidel, multigrid, conjugate gradient, and GMRES iterations.

Terms Offered: Spring Prerequisite(s): Some prior exposure to differential equations and linear algebra Equivalent Course(s): MATH 38309, STAT 31100, CAAM 31100

CMSC 38000-38100. Computability Theory I-II.

The courses in this sequence are offered in alternate years.

CMSC 38000. Computability Theory I. 100 Units.

We investigate the computability and relative computability of functions and sets. Topics include mathematical models for computations, basic results such as the recursion theorem, computably enumerable sets, and priority methods.

Instructor(s): D. Hirschfeldt     Terms Offered: Spring Prerequisite(s): Consent of department counselor. MATH 25500 or consent of instructor. Equivalent Course(s): MATH 30200

CMSC 38100. Computability Theory II. 100 Units.

CMSC 38100 treats classification of sets by the degree of information they encode, algebraic structure and degrees of recursively enumerable sets, advanced priority methods, and generalized recursion theory.

Instructor(s): D. Hirschfeldt     Terms Offered: Spring Prerequisite(s): Consent of department counselor. MATH 25500 or consent of instructor. Equivalent Course(s): MATH 30300

CMSC 38130. Complexity Theory. 100 Units.

Computability topics are discussed (e.g., the s-m-n theorem and the recursion theorem, resource-bounded computation). This course introduces complexity theory. Relationships between space and time, determinism and non-determinism, NP-completeness, and the P versus NP question are investigated.

CMSC 38300. Numerical Solutions to Partial Differential Equations. 100 Units.

This course covers the basic mathematical theory behind numerical solution of partial differential equations. We investigate the convergence properties of finite element, finite difference and other discretization methods for solving partial differential equations, introducing Sobolev spaces and polynomial approximation theory. We emphasize error estimators, adaptivity, and optimal-order solvers for linear systems arising from PDEs. Special topics include PDEs of fluid mechanics, max-norm error estimates, and Banach-space operator-interpolation techniques.

Instructor(s): L. R. Scott     Terms Offered: This course is offered in alternate years. Prerequisite(s): Consent of department counselor and instructor Equivalent Course(s): MATH 38300

CMSC 38400. Cryptography. 100 Units.

Cryptography is the use of algorithms to protect information from adversaries. Though its origins are ancient, cryptography now underlies everyday technologies including the Internet, wifi, cell phones, payment systems, and more. This course is an introduction to the design and analysis of cryptography, including how "security" is defined, how practical cryptographic algorithms work, and how to exploit flaws in cryptography. The course will cover algorithms for symmetric-key and public-key encryption, authentication, digital signatures, hash functions, and other primitives.

Instructor(s): David Cash

CMSC 38401. Topics in Cryptography. 100 Units.

Graduate study of topics in cryptography.

CMSC 38405. Arithmetic Combinatorics. 100 Units.

This course covers a variety of topics in arithmetic combinatorics such as inverse problems, incidence geometry, uniformity, regularity and pseudo-randomness. A special attention will be paid to connections to classical mathematics and theoretical computer science.

Instructor(s): Alexander Razborov     Terms Offered: Spring Equivalent Course(s): MATH 38405

CMSC 38410. Quantum Computing. 100 Units.

This course covers mathematical and complexity aspects of quantum computing, putting aside all questions pertaining to its physical realizability. Possible topics include: (1) quantum model of computation, quantum complexity classes, and relations to their classical counterparts; (2) famous quantum algorithms (including Shor and Grover); (3) black-box quantum models (lower and upper bounds); (4) quantum communication complexity (lower and upper bounds); and (5) quantum information theory.

Instructor(s): A. Razborov     Terms Offered: This course is offered in alternate years. Prerequisite(s): Consent of department counselor. Basic knowledge of computational complexity and linear algebra required; knowledge of quantum mechanics not required Note(s): Not offered in 2016-17. Equivalent Course(s): MATH 38410

CMSC 38420. Mathematics of Quantum Computing. 100 Units.

This course is a gentle introduction to mathematical foundations of quantum computing taught in completely rigorous format: we will completely disregard physical aspects and specific questions pertaining to particular implementations. An (approximate) list of topics: reversible, probabilistic and quantum computation. Quantum complexity classes and relations to their classical counterparts. Fundamental quantum algorithms, notably Grover's search and Shor's factoring algorithm. Quantum (query) complexity theory and quantum communication complexity. Quantum probability, super-operators and non-unitary quantum computation. Basics of quantum information theory and quantum error-correction.

Equivalent Course(s): MATH 38420

CMSC 38500. Computability and Complexity Theory. 100 Units.

Part one of this course consists of models for defining computable functions: primitive recursive functions, (general) recursive functions, and Turing machines; the Church-Turing Thesis; unsolvable problems; diagonalization; and properties of computably enumerable sets. Part two of this course deals with Kolmogorov (resource bounded) complexity: the quantity of information in individual objects. Part three of this course covers functions computable with time and space bounds of the Turing machine: polynomial time computability, the classes P and NP, NP-complete problems, polynomial time hierarchy, and P-space complete problems.

Instructor(s): A. Razborov Prerequisite(s): Consent of department counselor and instructor Note(s): Not offered in 2016-17. Equivalent Course(s): TTIC 31060, MATH 30500

CMSC 38502. Topics in Combinatorics and Logic. 100 Units.

We will discuss several ideas, methods and results in Combinatorics and those parts of Mathematical Logic that are close to Theoretical Computer Science. Complexity Theory itself is excluded this year since I will teach a more systematic course on the subject in the Spring Quarter.

Instructor(s): Alexander Razborov     Terms Offered: Winter Prerequisite(s): None Equivalent Course(s): MATH 38502

CMSC 38700. Complexity Theory B. 100 Units.

This course covers topics in computational complexity theory, with an emphasis on combinatorial problems in complexity.

Instructor(s): A. Razborov Prerequisite(s): Consent of department counselor and instructor Equivalent Course(s): MATH 38703

CMSC 38800. Complexity Theory. 100 Units.

Complexity Theory is the branch of Theoretical Computer Science that studies inherent limitations on the efficiency of performing various computational tasks. In this course I hope to cover at least the most fundamental results from uniform (Turing) complexity, circuit complexity, communication complexity, algebraic complexity and proof complexity.

Instructor(s): Alexander Razborov Prerequisite(s): None, but some familiarity with the book "Computational Complexity" by Arora and Barak might be helpful. Equivalent Course(s): MATH 38800

CMSC 38815. Geometric Complexity. 100 Units.

This course provides a basic introduction to geometric complexity theory, an approach to the P vs. NP and related problems through algebraic geometry and representation theory. No background in algebraic geometry or representation theory will be assumed.

Instructor(s): K. Mulmuley     Terms Offered: This course is offered in alternate years. Prerequisite(s): Consent of department counselor and instructor Note(s): Background in algebraic geometry or representation theory not required Equivalent Course(s): MATH 38815

CMSC 39000. Computational Geometry. 100 Units.

This course is a seminar on topics in computational geometry.

Instructor(s): K. Mulmuley     Terms Offered: This course is offered in alternate years. Note(s): Not offered in 2016-17.

CMSC 39010. Geometric Methods in Computer Science. 100 Units.

The course covers fundamental concepts, algorithms and techniques in computational and metric geometry. Topics covered include: convex hulls, polygon triangulations, range searching, segment intersection, Voronoi diagrams, Delaunay triangulations, metric and normed spaces, low-distortion metric embeddings and their applications in approximation algorithms, padded decomposition of metric spaces, Johnson-Lindenstrauss transform and dimension reduction, approximate nearest neighbor search and locality-sensitive hashing. Expected outcomes: -- Know standard algorithms and data structures for solving geometric problems -- Be able to design efficient algorithms and data structures for solving geometric problems -- Understand basic concepts of metric geometry such as metric and normed space, low distortion embedding, dimension reduction, nearest neighbor search. -- Understand applications of metric geometry to the field of approximation algorithms and other areas of computer science.

Instructor(s): Makarychev, Yury     Terms Offered: Spring Prerequisite(s): Undergraduate-level algorithms, linear algebra and probability classes; a good background in mathematical analysis/calculus. Equivalent Course(s): TTIC 31100

CMSC 39020. Geometry, Complexity and Algorithms. 100 Units.

This course will try to explore these three topics and their interactions. Among the topics likely to be discussed are metric measure geometry (e.g. concentration of measure) and its use designing algorithms, machine learning, manifold learning, the complexity of the construction of isotopies and nullcobordisms, the Blum-Cucker-Smale theory of real computation and estimates for the complexity of root finding and related problems, persistence homology and applications, and other topics that seem like a good idea as the course develops.

Equivalent Course(s): MATH 38900

CMSC 39100. The Physics of Computation. 100 Units.

The class will focus on the theory of quantum information, covering specific topics at the intersection of theoretical computer science and physics and bringing students to the research frontier in these areas. Of particular interest are the theoretical foundations needed to characterize the computational power of quantum experiments in the "Near-term Intermediate Scale Quantum" era, Hamiltonian complexity and the theory of QMA completeness, and the power of resource limited models of quantum computation. While no formal prerequisites are required, a working familiarity with the basics of computational complexity theory and quantum mechanics is recommended.

Instructor(s): Fefferman

CMSC 39600. Topics in Theoretical Computer Science. 100 Units.

Graduate study in current topics in theoretical computer science.

Equivalent Course(s): MATH 39600

CMSC 39800. Rdg/Rsch: Computer Science. 300.00 Units.

Directed reading and research in computer science, under the guidance of a faculty member.

CMSC 70000. Advanced Study: Computer Science. 300.00 Units.

Advanced Study: Computer Science

© 2014 The University of Chicago

5801 S. Ellis Ave. Chicago, IL 60637 United States

Accessibility

Print Options

Print this page.

The PDF will include all information unique to this page.

PhD in Data Science

The PhD in Data Science is designed to be completed fully in-person at UChicago’s Hyde Park campus. There are no online options at this time. Newly admitted students are guaranteed full-funding for up to 5 years and provided with an annual stipend, contingent on satisfactory progress towards the degree.

First-Year Requirements

The standard first-year program requires students to complete nine courses: four required courses (1-4 below); one elective either in mathematical foundations or scalability and computing (pick from either 5 or 6); and four graduate electives that can come from proposed courses in data science as well as existing courses in Computer Science or Statistics. Some students, after consulting with the graduate committee advisor, might decide to take the nine courses over the first two years:

Required Courses:

  • Foundations of Machine Learning and AI Part 1
  • Responsible Use of Data and Algorithms
  • Data Interaction
  • Systems for Data and Computers/Data Design
  • Foundations of Machine Learning and AI Part 2
  • Data Engineering and Scalable Computing

Synthesis project

Students will take courses during the first two years after which they focus primarily on their research. A milestone in this transition is completion of a synthesis project before the end of the second year in the program. Thesis projects can be done in partnership with any of DSI affiliates and aims to meaningfully connect PhD students to their chosen focus areas.

Thesis Advisor and Dissertation Committee

Students typically select a thesis advisor by the beginning of their second year. By the end of the third year, each PhD student, after consultation with their advisor, shall establish a thesis committee of at least three faculty members, including the advisor, with at least half of the members coming from the Committee on Data Science (CODAS) .

Proposal Presentation and Admission to Candidacy

By the end of the third year, students should have scheduled and completed a proposal presentation to their committee in order to be advanced to candidacy. The proposal presentation is typically an hour-long meeting that begins with a 30-minute presentation by the student followed by a question and discussion period with the committee.

Dissertation Defense

The PhD degree will be awarded to candidates following a successful defense and the electronic submission of the final version of the dissertation to the University’s Dissertation Office.

The Department of Computer Science at the University of Chicago

Frequently Asked Questions about admission to the Ph.D. program

  • Should I apply to the Ph.D. program or the Master's program?
  • Is the Ph.D. program in computer science at the University of Chicago appropriate for me?
  • Do students in the Ph.D. program receive a Master's Degree?
  • I don't need a Ph.D. but I'd like to get the Master's Degree in the Ph.D. program. What do I do?
  • Does the University of Chicago offer programs or courses in Engineering?
  • I have years of experience with a number of programming languages in an industrial or business environment. I am a successful software engineer or systems analyst. Do I qualify for your Ph.D. program?
  • How do I apply?
  • What is the deadline for applying to the Ph.D. program?
  • What is the fee for applying to the Ph.D. program?
  • Is it necessary to contact a potential advisor before applying?
  • What are the requirements for application to the Ph.D. program?
  • What are the TOEFL score requirements?
  • What are the minimum GRE and GPA scores?
  • What are the ETS GRE codes?
  • What should I write about in my Statement of Purpose?
  • I participated in student competitions. What do I need to write about them?
  • I have published research. What documentation do I need to provide?
  • I did not participate in student competitions and I have not done any research yet. Do I have any chance of admission to your Ph.D. program?
  • My grades are less than stellar. Do you care to know why?
  • How precisely do I need to specify my research interests?
  • If I state a preferred area of research, can I later change this?
  • How are Ph.D. students funded?
  • For how many years do I get funded?
  • Would I have the opportunity to teach?
  • How do I prepare for my duties as a Teaching Assistant?
  • When do the Ph.D. studies begin?
  • Is it possible to enter the Ph.D. program in Winter or Spring?
  • If I need more information, how do I obtain it?

If you have a strong background in computer science, mathematics, or a related field such as linguistics and you wish to do independent research in computer science in a highly competitive world-wide research environment, we encourage you to apply to our Ph.D. program .

If you are a computer professional or a novice to computer science and wish to gain a formal understanding of the principles and techniques of applied computer science, our Master's Program may be the right choice for you.

The key question is a match between your interests and faculty research. Please study our web-site to see which research group and which individual faculty members perform research to which you feel affinity.

Another key question is how you feel about our formal requirements. Please study the web-page about these requirements.

Upon successful completion of the Course requirements and the presentation of a research-oriented Master's Thesis, students in the Ph.D. program receive a Master's Degree. This concludes the first phase of their work toward their Ph.D. and is expected to take two years.

We do not offer the "Master's Degree in the Ph.D. program" as a separate program. Only students admitted into the Ph.D. program are eligible for this avenue toward the Master's Degree. If you are not interested in Ph.D.-level research, you may want to consider our Master's Program .

No. The University of Chicago does not offer study in any type of engineering. If you wish to study Electrical Engineering, Computer Engineering, Civil Engineering, etc., then the University of Chicago is not a good match to your interests.

This depends on your background and interest in performing Ph.D-level independent research in one of the areas of faculty interest. Please study our web-page to find out about the research areas pursued by our faculty.

An on-line application is now available. For a paper application, send email to [email protected].

The deadline is January 3rd. Late applications will be considered only if exceptional merit is demonstrated.

The fee for applying to the Ph.D. program is $55.

No, this is not necessary; in fact, we ask you to refrain from doing so because of the high volume of applications. You are, however, encouraged to mention on your application form as well as in your Personal Statement any faculty members whose research appeals to you.

The Admissions Committee assigns an initial advisor to each incoming student. Students can change advisors later, after personal interaction with our faculty.

  • Completed application, including Statement of Purpose
  • Three letters of recommendation
  • Official transcripts
  • GRE Subject Test scores are not required but strongly recommended
  • TOEFL scores (foreign applicants)
  • Curriculum Vitae
  • Any other supporting documentation you deem appropriate (e.g., copies of authored papers, diplomas from student competitions).

Applicants whose first or native language is not English must demonstrate an adequate command of both spoken and written English, and they are required to submit English proficiency test scores as part of their application. We recognize the internet-based test (iBT) of the Test of English as a Foreign Language (TOEFL) and the International English Language Testing System (IELTS). Applicants whose total score on the four-part TOEFL falls below 90 (or IELTS falls below 7) will not normally be admitted unless other demonstrable evidence of proficiency in English is available.

What we are most interested in is the applicant's research potential. These scores are just one of many criteria we consider. There are no minimum scores. We much prefer students who have taken challenging advanced courses to those with top scores on rudimentary courses. There are many ways for applicants to demonstrate their research potential.

Our GRE institution code is 1832 and our department code is 0402.

There are no rules about this. Make it as informative as you can. We love to hear details about your background, about your career so far, about your goals, about your research interests, about your reasons for choosing certain areas of research, about your reasons for choosing the University of Chicago, and any other thoughts you wish to share with us.

Please mention your participation and achievement in your Statement of Purpose. Please give a precise indication of what your achievement meant. We'd like to know the organization running the competition and the population of the area from where students were eligible to participate. If you received a prize, we'd like to know how many students shared each prize. We'd also like to know if there is a web-site where some of these data can be verified. It is also helpful if one of the letters of recommendation explicitly verifies your statements.

Please send us a copy. If the publication is not in English, an English translation is helpful. If the publication appeared in a local outlet not easily found in American libraries, it is helpful if at least one of your letters of recommendation specifically comments on the nature of the publication (student publication, major publication of new research, etc.).

Participation in student competitions and having a prior research record are not required for admission to our Ph.D. program; in fact, only a fraction of our current graduate students had such background at the time they applied to our program. The key to admission is your research potential as perceived by our Admissions Committee through the examination of all documents in your application material.

What we are interested in is not grades but research potential; grades are but one indicator. A lower grade in a challenging course is worth more than a perfect grade in an easy or irrelevant course. If you feel your grades do not reflect your academic potential, please let us know why.

We do not expect that applicants have decided upon a precise thesis topic. Applicants tend to have a preference for one or more of the broad areas of research pursued by the faculty in our department. These areas include algorithms and complexity, artificial intelligence, programming languages, computational mathematics, distributed systems, networks, databases, systems, computational biology. This list is incomplete; please study our web-page for departmental research for up-to-date information. Tell us why you prefer a particular area.

We fully expect students' interests to change over time, partly in response to their interaction with our faculty. (Please note that our faculty's interests also change.) Preferences you express in your Statement of Purpose will not be binding on you, they simply give us a chance to know more about you at the time of application.

Students enrolled in the Ph.D. program receive a stipend from the department as long as they make satisfactory progress toward their degree. The stipend is more than adequate to cover a student's typical living expenses, and also covers tuition. In return, students have to perform services for the department, most often as Teaching Assistants. Some advanced students may be funded by their advisor's research grant as Research Assistants for varying periods of time depending on the student's progress and on grant availability. During the periods of such funding, no service to the Department is required.

Funding depends on satisfactory progress toward your degree. Students are expected to graduate in five years or less. If sufficient progress is demonstrated, the faculty may extend funding through a sixth year. After the sixth year, support from the department is not generally available.

The department takes its undergraduate teaching responsibilities very seriously, and offers supervised teaching opportunities to the graduate students. Most graduate students will act as teaching assistants or work as lab assistants; qualifying graduate students will act as lecturers. The program allows students to develop their teaching abilities and gain significant classroom experience. The department also works with other University departments to make campus-wide teaching seminars available to its students.

Please check our undergraduate course descriptions . You are likely to teach a course with a course number beginning 10, 11, or 12. You may need to master specific programming languages such as C++ and Scheme to be able to perform your teaching duties.

Classes start in the third or fourth week of September.

Our program starts in Autumn. Only in cases of exceptional merit do we consider exceptions to this rule.

Your primary source of information is our web-site . Please study all aspects of it; especially the Ph.D. requirements , the departmental research and the profiles of the individual faculty members .

If, after having studied these web sources, you still have further questions, you may write to [email protected] . Please keep your message short. Due to the large volume of incoming mail, long messages and messages containing attachments run the risk of not being read.

  • Skip to Content
  • Catalog Home
  • Institution Home

2024-2025 Catalog

  • Computer Science
  • The Curriculum
  • Anthropology
  • Architectural Studies
  • Art History
  • Astrophysics
  • Biological Chemistry
  • Biological Sciences
  • Cinema and Media Studies
  • Classical Studies
  • Cognitive Science
  • Comparative Human Development
  • Comparative Literature
  • Computational and Applied Mathematics
  • Computational Social Science
  • Creative Writing
  • Critical Race and Ethnic Studies

Data Science

  • Democracy Studies
  • Digital Studies of Language, Culture, and History
  • East Asian Languages and Civilizations
  • Education and Society
  • English Language and Literature
  • Environmental Science
  • Environmental and Urban Studies
  • Environment, Geography, and Urbanization
  • Fundamentals: Issues and Texts
  • Gender and Sexuality Studies
  • Geographic Information Science
  • Geophysical Sciences
  • Germanic Studies
  • Global Studies
  • Health and Society
  • History, Philosophy, and Social Studies of Science and Medicine
  • Human Rights
  • Inequality, Social Problems, and Change
  • Inquiry and Research in the Humanities
  • Jewish Studies
  • Latin American and Caribbean Studies
  • Law, Letters, and Society
  • Linguistics
  • Mathematics
  • Media Arts and Design
  • Medieval Studies
  • Molecular Engineering
  • Near Eastern Languages and Civilizations
  • Neuroscience
  • Norwegian Studies
  • Political Science
  • Public Policy Studies
  • Quantitative Social Analysis
  • Race, Diaspora, and Indigeneity
  • Religious Studies
  • Renaissance Studies
  • Romance Languages and Literatures
  • Russian and East European Studies
  • Science Communication and Public Discourse
  • South Asian Languages and Civilizations
  • Theater and Performance Studies
  • Visual Arts
  • Yiddish Studies
  • Academic Regulations and Procedures
  • Examination Credit
  • Transfer Credit
  • Interdisciplinary Opportunities
  • Joint Degree Programs
  • Study Abroad
  • Career Preparation
  • Research and Fellowships
  • Archived Catalogs
  • Academic Calendar
  • The College Catalog 2024-2025 >
  • Programs of Study >

Contacts | Program of Study | Where to Start | Placement | Summary of Requirements for Computer Science Majors | Introductory Sequence | Systems Requirement | Theory Requirement | Machine Learning Requirement | Electives and Specializations | Grading | Honors | Computer Science Minor | Joint Bx/MS Program | Graduate Courses | Schedule Changes | Contact Us | Courses

Department Website: https://www.cs.uchicago.edu

Program of Study

The computer science program offers BA and BS degrees. Students who earn the BA degree study a breadth of foundational computer science topics, while students who earn the BS degree study these foundations in greater depth. Both degrees prepare students for various careers, including graduate study in computer science or a career in industry. The department also offers combined BA/MS and BS/MS degrees, as well as a minor.

In addition to the information below, please see the Undergraduate Program Overview page as well as  course-info.cs.uchicago.edu for the most up-to-date information about courses and course scheduling.

Where to Start

Computer Science offers an introductory sequence for students interested in further study in computer science:

  • CMSC 14100 Introduction to Computer Science I
  • CMSC 14200 Introduction to Computer Science II
  • CMSC 14300 Systems Programming I
  • CMSC 14400 Systems Programming II

Students with no prior experience in computer science should plan to start the sequence at the beginning in CMSC 14100 . Students with prior experience should plan to take the placement exam(s) (described below) to identify the appropriate place to start the sequence.

Note that, although these four courses form a sequence, not all CMSC 20000-level courses require all four courses as prerequisites.

Students who are interested in data science should consider starting with DATA 11800 Introduction to Data Science I .

Students who are interested in the visual arts or design should consider CMSC 11111 Creative Coding .

Exam Placement Paths

Students with prior experience may place out of one or more of the introductory courses by successfully completing placement exam(s). The College and the Department of Computer Science offer three placement exams to help determine the correct starting point:

The Online Introduction to Computer Science I Waiver Exam (i.e. "the 141 Waiver Exam")

The Online Introduction to Computer Science II Waiver Exam (i.e. "the 142 Waiver Exam")

The Systems Programming I Waiver Exam  (i.e. "the 143 Waiver Exam")

The waiver exams will be offered in Summer Quarter, possibly with additional offerings in Autumn Quarter. Students may take a particular waiver exam at most once in an academic year. See the Program Overview page  for more information about the schedule for placement exams.

Solely based on the 141 Waiver Exam, students may be placed into CMSC 14100  or  CMSC 14200 .

Students who place into CMSC 14200 will be invited to sit for the 142 Waiver Exam. Solely based on the 142 Waiver Exam, students may be placed into  CMSC 14300 .

Students who place into CMSC 14300 will be invited to sit for the 143 Waiver Exam. Solely based on the 143 Waiver Exam, students may be placed into CMSC 14400 .

Exam Credit

Students who place into CMSC 14200 will receive credit for CMSC 14100 upon successfully completing CMSC 14200 . 

Students who place into CMSC 14300 will receive credit for CMSC 14100 and  CMSC 14200 upon successfully completing CMSC 14300 .

Students who place into CMSC 14400 will receive credit for CMSC 14100 and CMSC 14200 (but not CMSC 14300 ) upon successfully completing  CMSC 14400 .

Summary of Requirements for Computer Science Majors

General education requirement in the mathematical sciences.

Both the BA and BS in computer science require the general education requirement in the mathematical sciences to be fulfilled by an approved two-quarter Calculus Sequence .

General Education Requirement in the Physical Sciences

To earn a BA in computer science, any sequence or pair of courses approved by the Physical Sciences Collegiate Division may be used to complete the general education requirement in the physical sciences.

To earn a BS in computer science, the general education requirement in the physical sciences must be satisfied by completing a two-quarter sequence chosen from the General Education Sequences for Science Majors . Students are encouraged, but not required, to fulfill this requirement with a physics sequence.

BA Requirements

BA students take at least 14 computer science courses as described below.

GENERAL EDUCATION
Any two-quarter calculus sequence that fulfills the mathematical sciences requirement 200
Any sequence or pair of courses that fulfills the physical sciences requirement200
Total Units400
MAJOR
Introductory Sequence (see below)400
Theory Requirement (two courses from the list below)200
Eight electives, spanning at least five curriculum areas, numbered CMSC 20000 or above 800
Total Units1400

(see footnotes below)

BS Requirements

BA students take at least 15 computer science courses as described below.

GENERAL EDUCATION
Any two-quarter calculus sequence that fulfills the mathematical sciences requirement 200
Any two-quarter sequence that fulfills the physical sciences requirement for science majors200
Total Units400
MAJOR
Introductory Sequence (see below)400
Systems Requirement (one course from the list below)100
Theory Requirement (three courses from the list below)300
Machine Learning Requirement (one course from the list below)100
Specialization Requirement (three courses from a designated curriculum area below)300
Three electives numbered CMSC 20000 or above 300
Total Units1500
*

Credit may be granted by examination.

§

While a student may enroll in CMSC 29700 or CMSC 29900 for multiple quarters, only one instance of each may be counted toward the major. Courses numbered at the CMSC 30000-level must be designated as PhD Core or PhD Elective in order to satisfy the electives requirement for the major. Because these courses can change on a quarterly basis, they are not listed in the catalog. Please see the PhD Course Designation section of  . Courses numbered CMSC 295xx or CMSC 395xx may be used as College electives but not as major electives.

Introductory Sequence

Students who major in computer science (either BA or BS) must complete the introductory sequence:

Introduction to Computer Science I100
Introduction to Computer Science II100
Systems Programming I100
Systems Programming II100

Students who place out of CMSC 14300 based on the 143 Waiver Exam are required to take an additional approved elective, increasing the total number of electives required by one (from three to four for the BS, or from eight to nine for the BA).

Students who entered the College prior to Autumn Quarter 2022 and have already completed the recently retired introductory sequence  ( CMSC 12100 Computer Science with Applications I , CMSC 15100 Introduction to Computer Science I ,  CMSC 15200 Introduction to Computer Science II , and/or CMSC 16100 Honors Introduction to Computer Science I ) should plan to follow the requirements in the Academic Year 2021-2022 Catalog . Students who were unable to complete the retired introductory sequence before it was retired should contact the Director of Undergraduate Studies for Computer Science for guidance.

Systems Requirement

BS students are required to take one of the following systems programming courses.

One of the following:100
Computer Architecture
Computer Architecture for Scientists
Compilers for Computer Languages
Operating Systems
Foundations of Computer Networks
Introduction to Database Systems
*

Students may take either CMSC 22200 or CMSC 22240 for major or minor requirements, but not both.

Theory Requirement

BA students must choose two courses from the following (one course each from areas A and B). BS students  must choose three courses from the following (one course each from areas A, B, and C).

Area A100
Discrete Mathematics
Honors Discrete Mathematics
Area B100
Theory of Algorithms
Honors Theory of Algorithms
Area C0-100
Honors Combinatorics
Graph Theory
Advanced Algorithms
Honors Graph Theory
Mathematical Logic I
Mathematical Logic II
Introduction to Formal Languages
Introduction to Complexity Theory
Honors Introduction to Complexity Theory
Introduction to Cryptography

The graduate versions of Discrete Mathematics and/or Theory of Algorithms can be substituted for their undergraduate counterparts. We strongly encourage all computer science majors to complete their theory courses by the end of their third year.

Machine Learning Requirement

BS students are required to take one of the following machine learning courses.

One of the following:100
Mathematical Foundations of Machine Learning
Machine Learning
Introduction to Machine Learning

Alternatively, this requirement may be fulfilled by taking a more advanced course from the Machine Learning curriculum area, described below.

Electives and Specializations

In addition to the Introductory and Theory AB requirements, BA students must complete eight additional elective computer science courses numbered 20000 or above. These courses must span at least five curriculum areas as described below.

In addition to the Introductory, Systems, Theory ABC, and Machine Learning requirements, BS students must complete one three-course specialization as described below, plus three additional elective computer science courses numbered 20000 or above.

Students may enroll in CMSC 29700 Reading and Research in Computer Science and CMSC 29900 Bachelor's Thesis for multiple quarters, but only one of each may be counted as a major elective.

Courses numbered at the CMSC 30000-level must be designated as PhD Core or PhD Elective in order to satisfy the electives requirement for the major. Because these courses can change on a quarterly basis, they are not listed in the catalog. Please see the PhD Course Designation section of course-info.cs.uchicago.edu .

Courses numbered CMSC 295xx or CMSC 395xx may be used as College electives but not as major electives.

Curriculum Areas

CMSC 20000-level courses are organized into the following curriculum areas:

Computer Security and Privacy *

Computer Systems *

Data Science *

Human Computer Interaction *

Machine Learning *

Programming Languages *

Quantum Computing

Software Engineering

Visual Computing

Miscellaneous

Each course may be included in multiple areas. The areas marked with an asterisk (*) are available as specializations for BS students. Please refer to course-info.cs.uchicago.edu for a detailed list of courses and their associated curriculum areas. Students may petition to have alternate courses count towards their breadth or specialization requirements via that page.

BA Breadth Requirement

The eight elective courses required for the BA must span at least five curriculum areas. For the purposes of the breadth requirement, a single course cannot be counted towards multiple curriculum areas. Please note that a course that is counted as an elective may not also be counted towards the Theory AB requirement.

BS Specialization Requirement

BS students are required to complete one three-course specialization. A specialization requires choosing three courses from one of the following designated curriculum areas. Please note that a course that is counted towards a specialization may not also be counted towards the Systems, Theory ABC, or Machine Learning requirements.  The graduate versions of the courses below can be substituted for their undergraduate counterparts.

The following specializations are currently available: 

Computer Security and Privacy

CMSC 23200 Introduction to Computer Security (required for this specialization)

CMSC 23206 Security, Privacy, and Consumer Protection

CMSC 23210 Usable Security and Privacy

CMSC 25910 Engineering for Ethics, Privacy, and Fairness in Computer Systems

​ CMSC 28400 Introduction to Cryptography

CMSC 29900 Bachelor's Thesis  as approved for this specialization

Computer Systems

CMSC 22200 Computer Architecture  

CMSC 22240 Computer Architecture for Scientists

CMSC 23000 Operating Systems

CMSC 23010 Parallel Computing

CMSC 23310 Advanced Distributed Systems

CMSC 23320 Foundations of Computer Networks

CMSC 23500 Introduction to Database Systems

CMSC 23530 Advanced Database Systems

CMSC 25422 Machine Learning for Computer Systems

CMSC 21800 Data Science for Computer Scientists (required for this specialization)

CMSC 23900 Data Visualization  

CMSC 25025 Machine Learning and Large-Scale Data Analysis

CMSC 25300 Mathematical Foundations of Machine Learning  

CMSC 25400 Machine Learning  

CMSC 29900 Bachelor's Thesis as approved for this specialization

Human Computer Interaction

CMSC 20300 Introduction to Human-Computer Interaction (required for this specialization)

CMSC 20370 Inclusive Technology: Designing for Underserved and Marginalized Populations

CMSC 20380 Actuated User Interfaces and Technology

​ CMSC 20900 Computers for Learning

​ CMSC 23210 Usable Security and Privacy

​ CMSC 23220 Inventing, Engineering and Understanding Interactive Devices

CMSC 23230 Engineering Interactive Electronics onto Printed Circuit Boards

​ CMSC 23240 Emergent Interface Technologies

​ CMSC 23400 Mobile Computing

​ CMSC 23900 Data Visualization

Machine Learning

CMSC 25040 Introduction to Computer Vision

CMSC 25400 Machine Learning

CMSC 25460 Introduction to Optimization

CMSC 25500 Introduction to Neural Networks

CMSC 25700 Natural Language Processing

Some TTIC courses are approved for this specialization. See course-info.cs.uchicago.edu .

Programming Languages

CMSC 22100 Programming Languages

CMSC 22300 Functional Programming

CMSC 22400 Programming Proofs

CMSC 22450 Foundations of Programming Languages

CMSC 22500 Type Theory

CMSC 22600 Compilers for Computer Languages

CMSC 27410 Honors Combinatorics

CMSC 27500 Graph Theory

CMSC 27502 Advanced Algorithms

CMSC 27530 Honors Graph Theory

CMSC 27700 Mathematical Logic I

CMSC 27800 Mathematical Logic II

CMSC 28000 Introduction to Formal Languages

CMSC 28100 Introduction to Complexity Theory

CMSC 28130 Honors Introduction to Complexity Theory

CMSC 28400 Introduction to Cryptography

Computer science majors must take courses in the major for quality grades. A grade of C- or higher must be received in each course counted towards the major. Any CMSC 20000-level course taken as an elective beyond requirements for the major may, with consent of the instructor, be taken for P/F grading.  Courses fulfilling general education requirements must be taken for quality grades.

Non-majors may take courses either for quality grades or, subject to College regulations and with consent of the instructor, for P/F grading. A Pass grade is given only for work of C- quality or higher.

Students can earn a BA or BS degree with honors by attaining a grade of B or higher in all courses in the major and a grade of B or higher in three courses from an approved list of graduate and undergraduate courses. The list of approved courses, which draws from PhD Core courses, PhD Elective courses, and 20000-level “Honors” courses, can be found at course-info.cs.uchicago.edu . The three courses counted towards the Honors requirement must be courses counting towards the major requirements. At most one of these three courses may be taken during the graduation quarter, while the other two must be completed at least one quarter prior to graduation.

Students may also earn a BA or BS degree with honors by attaining the same minimum B grade in all courses in the major and by writing a successful bachelor's thesis as part of CMSC 29900 Bachelor's Thesis . This thesis must be based on an approved research project that is directed by a faculty member and approved by the Bx Thesis Program Director . See the Bx Thesis Program page for more information.

Computer Science Minor

The Department of Computer Science offers a seven-course minor. Courses in the minor must be taken for quality grades, with a grade of C– or higher in each course.

Summary of Requirements

Introduction to Computer Science I100
Introduction to Computer Science II100
Systems Programming I 100
Systems Programming II 100
Three electives numbered CMSC 20000 or above 300
Total Units700
*

Students may replace CMSC 14300 and/or CMSC 14400 with CMSC 20000-level electives (for which the prerequisites have been met).

Upper-Level Courses

The computer science minor must include at least three courses chosen from CMSC 20000-level courses and above. A 20000-level course must replace each 10000-level course in the list above that was used to meet general education requirements or the requirements of a major.  Courses numbered CMSC 295xx or CMSC 395xx may not be used for minor credit. 

Additional Requirements

As per College policy , no courses in the minor can be double counted with the student's major(s) or with other minors, nor can they be counted toward general education requirements. More than half of the requirements for the minor must be met by registering for courses bearing University of Chicago course numbers. Prospective minors should arrange to meet the Computer Science Minor Advisor no later than May 1 of their third year. The Minor Advisor must approve the student's Consent to Complete a Minor Program form, and the student must submit that form to the student's College adviser by the end of Spring Quarter of the student's third year.

Joint Bx/MS Program

Outstanding undergraduates may apply to complete an MS in computer science along with a BA or BS (generalized to "Bx") during their four years at the College. Students must be admitted to the joint MS program. There are three different paths to a Bx/MS : a research-oriented program for computer science majors, a professionally oriented program for computer science majors, and a professionally oriented program for non-majors.

Graduate Courses

Graduate courses offered by the Department of Computer Science are open to College students with consent of the instructor.  Not all graduate courses, however, may count as major or minor electives; only those that are designated as PhD Core or PhD Elective courses (not Seminars) for the graduate program can be used to satisfy undergraduate requirements. See course-info.cs.uchicago.edu for more information on the designations for graduate courses.

Schedule Changes

Please be aware that course information is subject to change, and the catalog does not necessarily reflect the most recent information. Students should consult course-info.cs.uchicago.edu  for up-to-date information.

The contacts listed below work together on all administrative and scheduling aspects of the academic programs described above. Each of us is happy to hear from and help you, but depending on the specific nature of your question you may choose to contact a particular person as follows. 

The Computer Science Director of Undergraduate Studies is responsible for approval of specific courses and petitions, and responds as needed to changing course offerings in our program and other programs.

The Computer Science Major and Minor Advisors are available to consult with students regarding questions about specific courses they are considering taking to meet the major and minor requirements, respectively.

Computer Science Courses

CMSC 11111. Creative Coding. 100 Units.

This course is an introduction to programming, using exercises in graphic design and digital art to motivate and employ basic tools of computation (such as variables, conditional logic, and procedural abstraction). We will write code in JavaScript and related languages, and we will work with a variety of digital media, including vector graphics, raster images, animations, and web applications.

Note(s): Students who have taken CMSC 11800, STAT 11800, CMSC 12100, CMSC 15100, or CMSC 16100 are not allowed to register for CMSC 11111. Equivalent Course(s): MADD 21111

CMSC 12100-12200-12300. Computer Science with Applications I-II-III.

This three-quarter sequence teaches computational thinking and skills to students who are majoring in the sciences, mathematics, and economics, etc. Lectures cover topics in (1) programming, such as recursion, abstract data types, and processing data; (2) computer science, such as clustering methods, event-driven simulation, and theory of computation; and to a lesser extent (3) numerical computation, such as approximating functions and their derivatives and integrals, solving systems of linear equations, and simple Monte Carlo techniques.

CMSC 12100. Computer Science with Applications I. 100 Units.

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. Students can find more information about this course at http://bit.ly/cmsc12100-aut-20.

Prerequisite(s): First year students are not allowed to register for CMSC 12100. Placement into MATH 15100 or completion of MATH 13100. Note(s): First year students are not allowed to register for CMSC 12100. This course meets the general education requirement in the mathematical sciences.

CMSC 12200. Computer Science with Applications II. 100 Units.

This course is the second in a three-quarter sequence that teaches computational thinking and skills to students in the sciences, mathematics, economics, etc. Lectures cover topics in (1) data representation, (2) basics of relational databases, (3) shell scripting, (4) data analysis algorithms, such as clustering and decision trees, and (5) data structures, such as hash tables and heaps. Applications and datasets 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 a course search engine and a system to do speaker identification. Students will program in Python and do a quarter-long programming project.

Prerequisite(s): CMSC 12100 Note(s): This course meets the general education requirement in the mathematical sciences.

CMSC 12300. Computer Science with Applications III. 100 Units.

The course revolves around core ideas behind the management and computation of large volumes of data ("Big Data"). Topics include (1) Statistical methods for large data analysis, (2) Parallelism and concurrency, including models of parallelism and synchronization primitives, and (3) Distributed computing, including distributed architectures and the algorithms and techniques that enable these architectures to be fault-tolerant, reliable, and scalable. Students will continue to use Python, and will also learn C and distributed computing tools and platforms, including Amazon AWS and Hadoop. This course includes a project where students will have to formulate hypotheses about a large dataset, develop statistical models to test those hypotheses, implement a prototype that performs an initial exploration of the data, and a final system to process the entire dataset.

Prerequisite(s): CMSC 12200

CMSC 14100. Introduction to Computer Science I. 100 Units.

This course is the first of a pair of courses that are designed to introduce students to computer science and will help them build computational skills, such as abstraction and decomposition, and will cover basic algorithms and data structures. Students will also be introduced to the basics of programming in Python including designing and calling functions, designing and using classes and objects, writing recursive functions, and building and traversing recursive data structures. Students will also gain basic facility with the Linux command-line and version control.

Prerequisite(s): Placement into MATH 15100 or completion of MATH 13100, or instructor’s consent, is a prerequisite for taking this course.

CMSC 14200. Introduction to Computer Science II. 100 Units.

This course is a direct continuation of CMSC 14100. Students will explore more advanced concepts in computer science and Python programming, with an emphasis on skills required to build complex software, such as object-oriented programming, advanced data structures, functions as first-class objects, testing, and debugging. The class will also introduce students to basic aspects of the software development lifecycle, with an emphasis on software design. Students will also gain further fluency in working with the Linux command-line, including some basic operating system concepts, as well as the use of version control systems for collaborative software development.

Prerequisite(s): CMSC 14100, or placement into CMSC 14200, is a prerequisite for taking this course.

CMSC 14300. Systems Programming I. 100 Units.

This course is the first in a pair of courses designed to teach students about systems programming. In this course, students will develop a deeper understanding of what a computer does when executing a program. In order to make the operations of the computer more transparent, students will study the C programming language, with special attention devoted to bit-level programming, pointers, allocation, file input and output, and memory layout. In the context of the C language, the course will revisit fundamental data structures by way of programming exercises, including strings, arrays, lists, trees, and dictionaries. Furthermore, the course will examine how memory is organized and structured in a modern machine. Students will gain basic fluency with debugging tools such as gdb and valgrind and build systems such as make.

Prerequisite(s): CMSC 14200, or placement into CMSC 14300, is a prerequisite for taking this course.

CMSC 14400. Systems Programming II. 100 Units.

This course is a direct continuation of CMSC 14300. This course covers the basics of computer systems from a programmer's perspective. Topics include machine language programming, exceptions, code optimization, performance measurement, system-level I/O, and concurrency. Students will gain further fluency with debugging tools and build systems.

Prerequisite(s): CMSC 14300, or placement into CMSC 14400, is a prerequisite for taking this course.

CMSC 15100-15200. Introduction to Computer Science I-II.

This sequence, which is recommended for all students planning to take more advanced courses in computer science, introduces computer science mostly through the study of programming in functional (Scheme) and imperative (C) programming languages. Topics include program design, control and data abstraction, recursion and induction, higher-order programming, types and polymorphism, time and space analysis, memory management, and data structures including lists, trees, and graphs. NOTE: Non-majors may use either course in this sequence to meet the general education requirement in the mathematical sciences; students who are majoring in Computer Science must use either CMSC 15100-15200 or 16100-16200 to meet requirements for the major.

CMSC 15100. Introduction to Computer Science I. 100 Units.

Prerequisite(s): Placement into MATH 15100 or completion of MATH 13100. Note(s): This course meets the general education requirement in the mathematical sciences. Non-majors may use either course in this sequence to meet the general education requirement in the mathematical sciences; students who are majoring in Computer Science must use either CMSC 15100-15200 or 16100-16200 to meet requirements for the major.

CMSC 15200. Introduction to Computer Science II. 100 Units.

Prerequisite(s): CMSC 15100, CMSC 16100, CMSC 12100, or CMSC 10500. Note(s): This course meets the general education requirement in the mathematical sciences. Non-majors may use either course in this sequence to meet the general education requirement in the mathematical sciences; students who are majoring in Computer Science must use either CMSC 15100-15200 or 16100-16200 to meet requirements for the major.

CMSC 15400. Introduction to Computer Systems. 100 Units.

This course covers the basics of computer systems from a programmer's perspective. Topics include data representation, machine language programming, exceptions, code optimization, performance measurement, memory systems, and system-level I/O. Extensive programming required.

Prerequisite(s): CMSC 12100, 15100, or 16100, and CMSC 15200, 16200, or 12300.

CMSC 16100-16200. Honors Introduction to Computer Science I-II.

Both courses in this sequence meet the general education requirement in the mathematical sciences; students who are majoring in Computer Science must use either CMSC 15200 or 16200 to meet requirements for the major.

CMSC 16100. Honors Introduction to Computer Science I. 100 Units.

Programming in a functional language (currently Haskell), including higher-order functions, type definition, algebraic data types, modules, parsing, I/O, and monads. Basic data structures, including lists, binary search trees, and tree balancing. Basic mathematics for reasoning about programs, including induction, inductive definition, propositional logic, and proofs.

Prerequisite(s): Placement into MATH 16100 or equivalent and programming experience, or by consent. Note(s): This course meets the general education requirement in the mathematical sciences.

CMSC 16200. Honors Introduction to Computer Science II. 100 Units.

This course emphasizes the C Programming Language, but not in isolation. Instead, C is developed as a part of a larger programming toolkit that includes the shell (specifically ksh), shell programming, and standard Unix utilities (including awk). Nonshell scripting languages, in particular perl and python, are introduced, as well as interpreter (#!) files that use the command-line version of DrScheme. We cover various standard data structures, both abstractly, and in terms of concrete implementations-primarily in C, but also from time to time in other contexts like scheme and ksh. The course uses a team programming approach. There is a mixture of individual programming assignments that focus on current lecture material, together with team programming assignments that can be tackled using any Unix technology. Team projects are assessed based on correctness, elegance, and quality of documentation. We teach the "Unix way" of breaking a complex computational problem into smaller pieces, most or all of which can be solved using pre-existing, well-debugged, and documented components, and then composed in a variety of ways.

Prerequisite(s): CMSC 16100, or CMSC 15100 and by consent. Note(s): Students who have taken CMSC 15100 may take 16200 with consent of instructor. This course meets the general education requirement in the mathematical sciences.

CMSC 19911. Introduction to Creative Coding. 100 Units.

This course is an introduction to programming, using exercises in graphic design and digital art to motivate and employ basic tools of computation (such as variables, conditional logic, and procedural abstraction). We will write code in JavaScript and related languages, and we will work with a variety of digital media, including vector graphics, raster images, animations, and web applications. This course is offered in the Pre-College Summer Immersion program.

CMSC 20300. Introduction to Human-Computer Interaction. 100 Units.

An introduction to the field of Human-Computer Interaction (HCI), with an emphasis in understanding, designing and programming user-facing software and hardware systems. This class covers the core concepts of HCI: affordances, mental models, selection techniques (pointing, touch, menus, text entry, widgets, etc), conducting user studies (psychophysics, basic statistics, etc), rapid prototyping (3D printing, etc), and the fundamentals of 3D interfaces (optics for VR, AR, etc). We compliment the lectures with weekly programming assignments and two larger projects, in which we build/program/test user-facing interactive systems.

Prerequisite(s): CMSC 14200 or CMSC 15400 or CMSC 22000 Equivalent Course(s): MADD 25300, CMSC 30300

CMSC 20310. Introduction to Designing Interaction. 100 Units.

We are surrounded by interactive systems and designs, from the user interfaces for our computers and smartphones to home appliances, doors, and furniture. This class will introduce basic techniques, theories, and practices in designing interactive objects and systems. Specifically, it will introduce students to developing user experience-centric perspectives on critically reflecting on existing (and future) interactive designs. It also provides practices for students to ideate new design solutions and prototype them using design and engineering methods. Centered in interaction design, the class covers broad topics touching human-computer interaction, industrial design, user experience design, and communication design.

Prerequisite(s): CMSC 15200, CMSC 15400, CMSC 14200, CMSC 14300, or CMSC 14400. Equivalent Course(s): MADD 20310

CMSC 20370. Inclusive Technology: Designing for Underserved and Marginalized Populations. 100 Units.

Creating technologies that are inclusive of people in marginalized communities involves more than having technically sophisticated algorithms, systems, and infrastructure. It involves deeply understanding various community needs and using this understanding coupled with our knowledge of how people think and behave to design user-facing interfaces that can enhance and augment human capabilities. When dealing with under-served and marginalized communities, achieving these goals requires us to think through how different constraints such as costs, access to resources, and various cognitive and physical capabilities shape what socio-technical systems can best address a particular issue. This course leverages human-computer interaction and the tools, techniques, and principles that guide research on people to introduce you to the concepts of inclusive technology design. You will learn about different underserved and marginalized communities such as children, the elderly, those needing assistive technology, and users in developing countries, and their particular needs. In addition, you will learn how to be mindful of working with populations that can easily be exploited and how to think creatively of inclusive technology solutions. You will also put your skills into practice in a semester long group project involving the creation of an interactive system for one of the user populations we study.

Prerequisite(s): CMSC 14400 or CMSC 15400 or CMSC 12300 or CMSC 22000 or CMSC 20300 Equivalent Course(s): MADD 20370, CMSC 30370

CMSC 20380. Actuated User Interfaces and Technology. 100 Units.

The recent advancement in interactive technologies allows computer scientists, designers, and researchers to prototype and experiment with future user interfaces that can dynamically move and shape-change. This class offers hands-on experience in learning and employing actuated and shape-changing user interface technologies to build interactive user experiences. The class provides a range of basic engineering techniques to allow students to develop their own actuated user interface systems, including 3D mechanical design, digital fabrication (e.g. 3D Printing), electronics (Arduino microcontroller), and actuator control (utilizing different kinds of motors). Through multiple project-based assignments, students practice the acquired techniques to build interactive tangible experiences of their own.

Prerequisite(s): CMSC 20300 Equivalent Course(s): MADD 20380, CMSC 30380

CMSC 20600. Introduction to Robotics. 100 Units.

The University of Chicago's CMSC 20600 Introduction to Robotics course gives students a hands-on introduction to robot programming covering topics including sensing in real-world environments, sensory-motor control, state estimation, localization, forward/inverse kinematics, vision, and reinforcement learning. This course is centered around 3 mini projects exploring central concepts to robot programming and 1 final project whose topic is chosen by the students. Each of these mini projects will involve students programming real, physical robots interacting with the real world. The use of physical robots and real-world environments is essential in order for students to 1) see the result of their programs 'come to life' in a physical environment and 2) gain experience facing and overcoming the challenges of programming robots (e.g., sensor noise, edge cases due to environment variability, physical constraints of the robot and environment).

Prerequisite(s): CMSC 14200 or CMSC 15400 Equivalent Course(s): CMSC 30600

CMSC 20630. Human-Robot Interaction: Research and Practice. 100 Units.

The field of human-robot interaction (HRI) is a new and growing field of research that explores the interface between people and robots. Applications of HRI research include developing robots to tutor elementary school students, assist human workers in manufacturing contexts, provide museum tours, interact with families within their homes, and help care for the elderly. The field of HRI is highly interdisciplinary, incorporating methods and techniques from human-computer interaction, robotics, psychology, artificial intelligence, and other fields. This course exposes students to a broad range of recent and cutting-edge research in HRI. The topics covered in this course include: nonverbal robot behavior, verbal robot behavior, social dynamics, norms and ethics, collaboration and learning, group interactions, applications, and future challenges of HRI. Course meetings will involve students in the class leading discussions about cutting-edge peer-reviewed research HRI publications. Throughout the quarter, teams of students in the course will also complete an HRI course project of their choosing where they will investigate an HRI research question of interest to them.

Prerequisite(s): CMSC 14200 or CMSC 15400 Equivalent Course(s): CMSC 30630

CMSC 20900. Computers for Learning. 100 Units.

Over time, technology has occupied an increasing role in education, with mixed results. Massive Open Online Courses (MOOCs) were created to bring education to those without access to universities, yet most of the students who succeed in them are those who are already successful in the current educational model. This course focuses on one intersection of technology and learning: computer games. This course covers education theory, psychology (e.g., motivation, engagement), and game design so that students can design and build an educational learning application. Labs focus on developing expertise in technology, and readings supplement lecture discussions on the human components of education.

Prerequisite(s): CMSC 14300 or CMSC 15400 or CMSC 22000 Equivalent Course(s): CMSC 30900, MADD 20900

CMSC 21010. Mathematical Foundations. 100 Units.

This course is an introduction to formal tools and techniques which can be used to better understand linguistic phenomena. A major goal of this course is to enable students to formalize and evaluate theoretical claims.

Equivalent Course(s): CMSC 31010, LING 21010, LING 31010

CMSC 21400. Creative Machines and Innovative Instrumentation. 100 Units.

An understanding of the techniques, tricks, and traps of building creative machines and innovative instrumentation is essential for a range of fields from the physical sciences to the arts. In this hands-on, practical course, you will design and build functional devices as a means to learn the systematic processes of engineering and fundamentals of design and construction. The kinds of things you will learn may include mechanical design and machining, computer-aided design, rapid prototyping, circuitry, electrical measurement methods, and other techniques for resolving real-world design problems. In collaboration with others, you will complete a mini-project and a final project, which will involve the design and fabrication of a functional scientific instrument. The course will be taught at an introductory level; no previous experience is expected. The iterative nature of the design process will require an appreciable amount of time outside of class for completing projects. The course is open to undergraduates in all majors (subject to the pre-requisites), as well as Master's and Ph.D. students.

Instructor(s): Scott Wakely (Autumn), John Carlstrom (Winter), Stephan Meyer (Spring)     Terms Offered: Autumn Spring Winter Prerequisite(s): PHYS 12200 or PHYS 13200 or PHYS 14200; or CMSC 12100 or CMSC 12200 or CMSC 12300; or consent of instructor. Equivalent Course(s): ASTR 21400, CHEM 21400, PSMS 31400, ASTR 31400, PHYS 21400

CMSC 21800. Data Science for Computer Scientists. 100 Units.

Data-driven models are revolutionizing science and industry. This course covers computational methods for structuring and analyzing data to facilitate decision-making. We will cover algorithms for transforming and matching data; hypothesis testing and statistical validation; and bias and error in real-world datasets. A core theme of the course is "generalization"; ensuring that the insights gleaned from data are predictive of future phenomena. The course will include bi-weekly programming assignments, a midterm examination, and a final.

Prerequisite(s): CMSC 14300 or CMSC 15400 or CMSC 22000

CMSC 22000. Introduction to Software Development. 100 Units.

Besides covering a number of topics in software engineering, with an emphasis on software design, this course focuses on imparting a number of skills and industry best practices that are valuable in the development of large software projects, such as source control techniques and workflows, issue tracking, code reviews, testing, continuous integration, working with existing codebases, integrating APIs and frameworks, generating documentation, deployment, and logging and monitoring. The course also emphasizes the importance of collaboration in real-world software development, including interpersonal collaboration and team management. The course will be organized primarily around the development of a class-wide software project, with students organized into teams. Collaboration both within and across teams will be essential to the success of the project.

Prerequisite(s): CMSC 14200

CMSC 22001. Software Construction. 100 Units.

Large software systems are difficult to build. The course discusses both the empirical aspects of software engineering and the underlying theory. Topics will include, among others, software specifications, software design, software architecture, software testing, software reliability, and software maintenance. Students will be expected to actively participate in team projects in this course.

Prerequisite(s): CMSC 15400.

CMSC 22010. Digital Fabrication. 100 Units.

Digital fabrication involves translation of a digital design into a physical object. While digital fabrication has been around for decades, only now has it become possible for individuals to take advantage of this technology through low cost 3D printers and open source tools for 3D design and modeling. In this course we will cover the foundations of 3D object design including computational geometry, the type of models that can and can't be fabricated, the uses and applications of digital fabrication, the algorithms, methods and tools for conversion of 3D models to representations that can be directly manufactured using computer controlled machines, the concepts and technology used in additive manufacturing (aka 3D printing) and the research and practical challenges of developing self-replicating machines. We will have several 3D printers available for use during the class and students will design and fabricate several parts during the course.

Prerequisite(s): CMSC 15400 and some experience with 3D modeling concepts.

CMSC 22100. Programming Languages. 100 Units.

This course is an introduction to scientific programming language design, whereby design choices are made according to rigorous and well-founded lines of reasoning. The curriculum includes the lambda calculus, type systems, formal semantics, logic and proof, and, time permitting, a light introduction to machine assisted formal reasoning. Practical exercises in writing language transformers reinforce the the theory. While this course is not a survey of different programming languages, we do examine the design decisions embodied by various popular languages in light of their underlying formal systems.

Prerequisite(s): CMSC 14300 or CMSC 14400 or CMSC 15400

CMSC 22200. Computer Architecture. 100 Units.

Computing systems have advanced rapidly and transformed every aspect of our lives for the last few decades, and innovations in computer architecture is a key enabler. Residing in the middle of the system design layers, computer architecture interacts with both the software stack (e.g., operating systems and applications) and hardware technologies (e.g., logic gates, interconnects, and memories) to enable efficient computing with unprecedented capabilities. In this course, students will learn the fundamental principles, techniques, and tradeoffs in designing the hardware/software interface and hardware components to create a computing system that meets functional, performance, energy, cost, and other specific goals. Example topics include instruction set architecture (ISA), pipelining, memory hierarchies, input/output, and multi-core designs. In addition, we will discuss advanced topics regarding recent research and trends. This course also includes hands-on labs, where students will enhance their learning by implementing a modern microprocessor in a C simulator.

Prerequisite(s): CMSC 14400 or CMSC 15400

CMSC 22240. Computer Architecture for Scientists. 100 Units.

Designed to provide an understanding of the key scientific ideas that underpin the extraordinary capabilities of today's computers, including speed (gigahertz), illusion of sequential order (relativity), dynamic locality (warping space), parallelism, keeping it cheap - and low-energy (e-field scaling), and of course their ability as universal information processing engines. These scientific "miracles" are robust, and provide a valuable longer-term understanding of computer capabilities, performance, and limits to the wealth of computer scientists practicing data science, software development, or machine learning. This course can be used towards fulfilling the Programming Languages and Systems requirement for the CS major.

Prerequisite(s): CMSC 14300 or CMSC 15400

CMSC 22300. Functional Programming. 100 Units.

Programming languages often conflate the definition of mathematical functions, which deterministically map inputs to outputs, and computations that effect changes, such as interacting with users and their machines. In this course, students will develop an enriched perspective about these two related but distinct mechanisms, by studying the statically-typed pure functional programming language Haskell. Topics include: algebraic datatypes, an elegant language for describing and manipulating domain-specific data; higher-order functions and type polymorphism, expressive mechanisms for abstracting programs; and a core set of type classes, with strong connections to category theory, that serve as a foundational and practical basis for mixing pure functions with stateful and interactive computations. In addition to small and medium sized programming assignments, the course includes a larger open-ended final project.

Prerequisite(s): CMSC 14300 or CMSC 14400 or CMSC 15200

CMSC 22400. Programming Proofs. 100 Units.

In this course, we will explore the use of proof assistants, computer programs that allow us to write, automate, and mechanically check proofs. These tools have two main uses. They allow us to prove properties of our programs, thereby guaranteeing that our code is free of software errors. They also allow us to formalize mathematics, stating and proving mathematical theorems in a manner that leaves no doubt as to their meaning or veracity. At the intersection of these two uses lies mechanized computer science, involving proofs about data structures, algorithms, programming languages and verification itself.

Prerequisite(s): (CMSC 27100 or CMSC 27130 or CMSC 37000 or CMSC 37110), and (CMSC 14100 or CMSC 15100 or CMSC 16100 or CMSC 22100 or CMSC 22300) Note(s): This course can count toward the Programming Languages & Systems requirement for the CS Major. Equivalent Course(s): CMSC 32400

CMSC 22450. Foundations of Programming Languages. 100 Units.

This course is an introduction to the theory of programming languages. It develops the mathematical tools for specifying and reasoning about the static and dynamic semantics of programming languages. The course covers the λ-calculus, which underpins the semantics of many real-world languages, as well as various different techniques for specifying language semantics.

Prerequisite(s): (CMSC 27100 or CMSC 27130 or CMSC 37110) or (CMSC 27200 or CMSC 27230 or CMSC 37000). Equivalent Course(s): CMSC 32450

CMSC 22500. Type Theory. 100 Units.

Church's λ-calculus, β-reduction, the Church-Rosser theorem. Simple type theory, strong normalization. The Barendregt cube of type theories. Dependent types. The Curry-Howard Isomorphism. Formal constructive mathematics.

Prerequisite(s): (CMSC 15100 or CMSC 16100 or CMSC 22100 or CMSC 22300) and (CMSC 27100 or CMSC 27130 or MATH 28130 or CMSC 37110 or CMSC 27700 or MATH 27700)

CMSC 22600. Compilers for Computer Languages. 100 Units.

This course covers principles of modern compiler design and implementation. Topics include lexical analysis, parsing, type checking, optimization, and code generation. This is a project oriented course in which students will construct a fully working compiler, using Standard ML as the implementation language.

Prerequisite(s): CMSC 22100 or CMSC 22300

CMSC 22880. Introduction to Quantum Computing. 100 Units.

This introduction to quantum computing will cover the key principles of quantum information science and how they relate to quantum computing as well as the notation and operations used in QIS. We will then take these building blocks and linear algebra principles to build up to several quantum algorithms and complete several quantum programs using a mainstream quantum programming language.

Prerequisite(s): CMSC 14400 or CMSC 15400 Note(s): Students who have completed MENG 26400 may not enroll in CMSC 22880.

CMSC 22900. Quantum Computer Systems. 100 Units.

This course will explore the design, optimization, and verification of the software and hardware involved in practical quantum computer systems. The course will provide an introduction to quantum computation and quantum technologies, as well as classical and quantum compiler techniques to optimize computations for technologies. Verification techniques to evaluate the correctness of quantum software and hardware will also be explored.

Prerequisite(s): CMSC 14400 or CMSC 15400, and CMSC 22880 or MENG 26400 or CMSC 38410 or MATH 38410 Equivalent Course(s): CMSC 32900

CMSC 23000. Operating Systems. 100 Units.

This course provides an introduction to basic Operating System principles and concepts that form as fundamental building blocks for many modern systems from personal devices to Internet-scale services. Basic topics include processes, threads, concurrency, synchronization, memory management, virtual memory, segmentation, paging, caching, process and I/O scheduling, file systems, storage devices. The course will also cover special topics such as journaling/transactions, SSD, RAID, virtual machines, and data-center operating systems. The course project will revolve around the implementation of a mini x86 operating system kernel.

CMSC 23010. Parallel Computing. 100 Units.

This course provides an introduction to the concepts of parallel programming, with an emphasis on programming multicore processors. Topics include: Processes and threads, shared memory, message passing, direct-memory access (DMA), hardware mechanisms for parallel computing, synchronization and communication, patterns of parallel programming. The course will involve a substantial programming project implementing a parallel computations.

Prerequisite(s): CMSC 14400 or CMSC 15400 and (CMSC 22200, CMSC 22240, CMSC 23000, CMSC 23300, OR CMSC 23320)

CMSC 23200. Introduction to Computer Security. 100 Units.

This course introduces the principles and practice of computer security. It aims to teach how to model threats to computer systems and how to think like a potential attacker. It presents standard cryptographic functions and protocols and gives an overview of threats and defenses for software, host systems, networks, and the Web. It also touches on some of the legal, policy, and ethical issues surrounding computer security in areas such as privacy, surveillance, and the disclosure of security vulnerabilities. The goal of this course is to provide a foundation for further study in computer security and to help better understand how to design, build, and use computer systems more securely.

Prerequisite(s): CMSC 14400 or CMSC 15400 Equivalent Course(s): CMSC 33250

CMSC 23206. Security, Privacy, and Consumer Protection. 100 Units.

This course will cover the principles and practice of security, privacy, and consumer protection. Topics include: basic cryptography; physical, network, endpoint, and data security; privacy (including user surveillance and tracking); attacks and defenses; and relevant concepts in usable security. The course will place fundamental security and privacy concepts in the context of past and ongoing legal, regulatory, and policy developments, including: consumer privacy, censorship, platform content moderation, data breaches, net neutrality, government surveillance, election security, vulnerability discovery and disclosure, and the fairness and accountability of automated decision making, including machine learning systems. Students will learn both technical fundamentals and how to apply these concepts to public policy outputs and recommendations.

Instructor(s): Feamster, Nicholas Prerequisite(s): CMSC 14300 or CMSC 15400 or equivalent, and instructor consent. Note(s): Prerequisites: CMSC 14300 or CMSC 15400 or equivalent, or graduate student. Instructor consent required. Equivalent Course(s): CMSC 30350, CAPP 30350

CMSC 23210. Usable Security and Privacy. 100 Units.

Regardless of how secure a system is in theory, failing to consider how humans actually use the system leads to disaster in practice. This course will examine how to design for security and privacy from a user-centered perspective by combining insights from computer systems, human-computer interaction (HCI), and public policy. We will introduce core security and privacy technologies, as well as HCI techniques for conducting robust user studies. Topics will include usable authentication, user-centered web security, anonymity software, privacy notices, security warnings, and data-driven privacy tools in domains ranging from social media to the Internet of Things. Students will complete weekly problem sets, as well as conduct novel research in a group capstone project. No prior experience in security, privacy, or HCI is required.

Prerequisite(s): CMSC 12300 or CMSC 14200 or CMSC 15400 Equivalent Course(s): CMSC 33210

CMSC 23218. Surveillance Aesthetics: Provocations About Privacy and Security in the Digital Age. 100 Units.

In the modern world, individuals' activities are tracked, surveilled, and computationally modeled to both beneficial and problematic ends. Jointly with the School of the Art Institute of Chicago (SAIC), this course will examine privacy and security issues at the intersection of the physical and digital worlds. Through both computer science and studio art, students will design algorithms, implement systems, and create interactive artworks that communicate, provoke, and reframe pervasive issues in modern privacy and security. The course will unpack and re-entangle computational connections and data-driven interactions between people, built space, sensors, structures, devices, and data. Synthesizing technology and aesthetics, we will communicate our findings to the broader public not only through academic avenues, but also via public art and media. The first phase of the course will involve prompts in which students design and program small-scale artworks in various contexts, including (1) data collected from web browsing; (2) mobility data; (3) data collected about consumers by major companies; and (4) raw sensor data. Students will receive detailed feedback on their work from computer scientists, artists, and curators at the Museum of Science & Industry (MSI). The course culminates in the production and presentation of a capstone interactive artwork by teams of computer scientists and artists; successful products may be considered for prototyping at the MSI.

Prerequisite(s): One of CMSC 23200, CMSC 23210, CMSC 25900, CMSC 28400, CMSC 33210, CMSC 33250, or CMSC 33251 recommended, but not required. Note(s): Students interested in this class should complete this form to request permission to enroll: https://uchicago.co1.qualtrics.com/jfe/form/SV_5jPT8gRDXDKQ26a Equivalent Course(s): CMSC 33218, MADD 23218

CMSC 23220. Inventing, Engineering and Understanding Interactive Devices. 100 Units.

A physical computing class, dedicated to micro-controllers, sensors, actuators and fabrication techniques. The objective is that everyone creates their own, custom-made, functional I/O device.

Prerequisite(s): CMSC 14400 or CMSC 15400 Equivalent Course(s): MADD 23220

CMSC 23230. Engineering Interactive Electronics onto Printed Circuit Boards. 100 Units.

In this class we will engineer electronics onto Printed Circuit Boards (PCBs). We will focus on designing and laying out the circuit and PCB for our own custom-made I/O devices, such as wearable or haptic devices. In order for you to be successful in engineering a functional PCB, we will (1) review digital circuits and three microcontrollers (ATMEGA, NRF, SAMD); (2) use KICAD to build circuit schematics; (3) learn how to wire analog/digital sensors or actuators to our microcontroller, including SPI and I2C protocols; (4) use KICAD to build PCB schematics; (5) actually manufacture our designs; (6) receive in our hands our PCBs from factory; (7) finally, learn how to debug our custom-made PCBs.

Prerequisite(s): CMSC 14400 or CMSC 15400, and CMSC 23220 or CMSC 21400 or CMSC 20380 or PHYS 13300 or PHYS 14300 or PHYS 22700. Equivalent Course(s): CMSC 33230

CMSC 23240. Emergent Interface Technologies. 100 Units.

In this class, we critically examine emergent technologies that might impact the future generations of computing interfaces, these include: physiological I/O (e.g., brain and muscle computer interfaces), tangible computing (giving shape and form to interfaces), wearable computing (I/O devices closer to the user's body), rendering new realities (e.g., virtual and augmented reality), haptics (giving computers the ability to generate touch and forces) and unusual auditory interfaces (e.g., silent speech and microphones as sensors). In this class you will: (1) learn about these new developments during the lectures, (2) read HCI papers and summarize these in short weekly assignments, and lastly, (3) start inventing the future of computing interfaces by proposing a new idea in the form of a paper abstract, which you will present at the end of the semester and have it peer-reviewed in class by your classmates.

Prerequisite(s): CMSC 15400

CMSC 23300. Networks and Distributed Systems. 100 Units.

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, etc.); internet and routing protocols (IP, IPv6, ARP, etc.); end-to-end protocols (UDP, TCP); and other commonly used network protocols and techniques. This is a project-oriented course in which students are required to develop software in C on a UNIX environment.

CMSC 23310. Advanced Distributed Systems. 100 Units.

In recent years, large distributed systems have taken a prominent role not just in scientific inquiry, but also in our daily lives. When we perform a search on Google, stream content from Netflix, place an order on Amazon, or catch up on the latest comings-and-goings on Facebook, our seemingly minute requests are processed by complex systems that sometimes include hundreds of thousands of computers, connected by both local and wide area networks. Recent papers in the field of Distributed Systems have described several solutions (such as MapReduce, BigTable, Dynamo, Cassandra, etc.) for managing large-scale data and computation. However, building and using these systems pose a number of more fundamental challenges: How do we keep the system operating correctly even when individual machines fail? How do we ensure that all the machines have a consistent view of the system's state? (And how do we ensure this in the presence of failures?) How can we determine the order of events in a system where we can't assume a single global clock? Many of these fundamental problems were identified and solved over the course of several decades, starting in the 1970s. To better appreciate the challenges of recent developments in the field of Distributed Systems, this course will guide students through seminal work in Distributed Systems from the 1970s, '80s, and '90s, leading up to a discussion of recent work in the field.

Prerequisite(s): CMSC 23300 with at least a B+, or by consent.

CMSC 23320. Foundations of Computer Networks. 100 Units.

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, etc.); internet and routing protocols (IP, IPv6, ARP, etc.); end-to-end protocols (UDP, TCP); and other commonly used network protocols and techniques. This is a project-oriented course in which students are required to develop software in C on a UNIX environment. This course can be used towards fulfilling the Programming Languages and Systems requirement for the CS major.

Prerequisite(s): CMSC 14400 or CMSC 15400 Note(s): This course can be used towards fulfilling the Programming Languages and Systems requirement for the CS major. Students who have taken CMSC 23300 may not take CMSC 23320.

CMSC 23360. Advanced Networks. 100 Units.

Advanced networks

Prerequisite(s): CMSC 23300 or CMSC 23320 Note(s): A more detailed course description should be available later.

CMSC 23400. Mobile Computing. 100 Units.

Mobile computing is pervasive and changing nearly every aspect of society. Sensing, actuation, and mediation capabilities of mobile devices are transforming all aspects of computing: uses, networking, interface, form, etc. This course explores new technologies driving mobile computing and their implications for systems and society. Current focus areas include new techniques to capture 3d models (depth sensors, stereo vision), drones that enable targeted, adaptive, focused sensing, and new 3d interactive applications (augmented reality, cyberphysical, and virtual reality). Labs expose students to software and hardware capabilities of mobile computing systems, and develop the capability to envision radical new applications for a large-scale course project.

CMSC 23500. Introduction to Database Systems. 100 Units.

This course is an introduction to database design and implementation. Topics include DBMS architecture, entity-relationship and relational models, relational algebra, concurrency control, recovery, indexing, physical data organization, and modern database systems. The lab section guides students through the implementation of a relational database management system, allowing students to see topics such as physical data organization and DBMS architecture in practice, and exercise general skills such as software systems development.

Prerequisite(s): CMSC 14400 or CMSC 15400 Equivalent Course(s): CMSC 33550

CMSC 23530. Advanced Database Systems. 100 Units.

This course focuses on advanced concepts of database systems topics and assumes foundational knowledge outlined in CMSC 23500. Topics will include distribute databases, materialized views, multi-dimensional indexes, cloud-native architectures, data versioning, and concurrency-control protocols.

Prerequisite(s): CMSC 23500

CMSC 23700. Introduction to Computer Graphics. 100 Units.

This course introduces the basic concepts and techniques used in three-dimensional computer graphics. The focus is on real-time rendering techniques, such as those found in computer games. The course places an emphasis on developing a strong foundation for 3D graphics by covering topics such as the graphics pipeline, coordinate systems, coordinate transformations, lighting, texture mapping, and basic geometric algorithms and data structures. These foundations are applied using programmable shaders to implement real-time rendering techniques, such as real-time shadows and other effects. Students are required to complete both written assignments and programming projects using C++ and the Vulkan 3D graphics library.

Prerequisite(s): CMSC 14400 or CMSC 15400 Note(s): Prior experience with basic linear algebra (matrix algebra) is recommended. Equivalent Course(s): CMSC 33700

CMSC 23710. Scientific Visualization. 100 Units.

Scientific visualization combines computer graphics, numerical methods, and mathematical models of the physical world to create a visual framework for understanding and solving scientific problems. The mathematical and algorithmic foundations of scientific visualization (for example, scalar, vector, and tensor fields) will be explained in the context of real-world data from scientific and biomedical domains. The course is also intended for students outside computer science who are experienced with programming and computing with scientific data. Programming projects will be in C and C++.

Prerequisite(s): CMSC 14300 or CMSC 15400 Equivalent Course(s): CMSC 33710

CMSC 23740. Introduction to Real-time Graphics. 100 Units.

This course provides an introduction to Computer Graphics with a focus on real-time rendering techniques, such as those found in computer-game engines. Topics include coordinate systems and transformations; geometric modeling; the programmable graphics pipeline; shadows; level-of detail optimizations; and other rendering techniques. The course covers both the theory and practice of computer graphics. The lectures, homework assignments and exams focus on algorithms, data structures, and mathematical foundations, while the lab sessions and programming projects deal with translating theory into practice.

Prerequisite(s): CMSC 14400 or CMSC 15400. Prior experience with basic vector calculus and linear algebra is recommended.

CMSC 23900. Data Visualization. 100 Units.

Data visualizations provide a visual setting in which to explore, understand, and explain datasets. This class describes mathematical and perceptual principles, methods, and applications of "data visualization" (as it is popularly understood to refer primarily to tabulated data). A range of data types and visual encodings will be presented and evaluated. Visualizations will be primarily web-based, using D3.js, and possibly other higher-level languages and libraries.

Prerequisite(s): CMSC 12200, CMSC 14200, CMSC 15200, OR CMSC 16200

CMSC 25025. Machine Learning and Large-Scale Data Analysis. 100 Units.

This course is an introduction to machine learning and the analysis of large data sets using distributed computation and storage infrastructure. Basic machine learning methodology and relevant statistical theory will be presented in lectures. Homework exercises will give students hands-on experience with the methods on different types of data. Methods include algorithms for clustering, binary classification, and hierarchical Bayesian modeling. Data types include images, archives of scientific articles, online ad clickthrough logs, and public records of the City of Chicago. Programming will be based on Python and R, but previous exposure to these languages is not assumed.

Prerequisite(s): [CMSC 25300 or CMSC 35300 or STAT 27700 or TTIC 31020] and [STAT 24400 or STAT 24410 or STAT 24500 or STAT 24510] Note(s): The prerequisites are under review and may change. Equivalent Course(s): STAT 37601

CMSC 25040. Introduction to Computer Vision. 100 Units.

This course covers the fundamentals of digital image formation; image processing, detection and analysis of visual features; representation shape and recovery of 3D information from images and video; analysis of motion. We also study some prominent applications of modern computer vision such as face recognition and object and scene classification. Our emphasis is on basic principles, mathematical models, and efficient algorithms established in modern computer vision.

Prerequisite(s): CMSC 25300, CMSC 25400, CMSC 25025, STAT 24300, STAT 24500, or TTIC 31020

CMSC 25300. Mathematical Foundations of Machine Learning. 100 Units.

This course is an introduction to the mathematical foundations of machine learning that focuses on matrix methods and features real-world applications ranging from classification and clustering to denoising and data analysis. Mathematical topics covered include linear equations, regression, regularization, the singular value decomposition, and iterative algorithms. Machine learning topics include classification and regression, support vector machines, kernel methods, clustering, matrix completion, neural networks, and deep learning. Students are expected to have taken calculus and have exposure to numerical computing (e.g. Matlab, Python, Julia, R).

Prerequisite(s): CMSC 11900 or CMSC 12200 or CMSC 14100 or CMSC 15200 or CMSC 16200 Note(s): Undergraduate students are not allowed to enroll in CMSC 35300. Equivalent Course(s): CMSC 35300, STAT 27700

CMSC 25400. Machine Learning. 100 Units.

This course introduces the foundations of machine learning and provides a systematic view of a range of machine learning algorithms. Topics covered include two parts: (1) a gentle introduction of machine learning: generalization and model selection, regression and classification, kernels, neural networks, clustering and dimensionality reduction; (2) a statistical perspective of machine learning, where we will dive into several probabilistic supervised and unsupervised models, including logistic regression, Gaussian mixture models, and generative adversarial networks.

Prerequisite(s): CMSC 25300 or CMSC 35300 or STAT 24300 or STAT 24500 or ((MATH 18600 or MATH 20250) and (CMSC 12100 or CMSC 14100 or CMSC 15100 or CMSC 16100) and (STAT 25100 or STAT 25150)) Equivalent Course(s): STAT 27725

CMSC 25422. Machine Learning for Computer Systems. 100 Units.

This course will cover topics at the intersection of machine learning and systems, with a focus on applications of machine learning to computer systems. Topics covered will include applications of machine learning models to security, performance analysis, and prediction problems in systems; data preparation, feature selection, and feature extraction; design, development, and evaluation of machine learning models and pipelines; fairness, interpretability, and explainability of machine learning models; and testing and debugging of machine learning models. The topic of machine learning for computer systems is broad. Given the expertise of the instructor, many of the examples this term will focus on applications to computer networking. Yet, many of these principles apply broadly, across computer systems. You can and should think of this course as a practical hands-on introduction to machine learning models and concepts that will allow you to apply these models in practice. We'll focus on examples from networking, but you will walk away from the course with a good understanding of how to apply machine learning models to real-world datasets, how to use machine learning to help computer systems operate better, and the practical challenges with deploying machine learning models in practice."

Instructor(s): Nick Feamster Prerequisite(s): CMSC 14300 or CMSC 15400 Equivalent Course(s): DATA 25422, DATA 35422, CMSC 35422

CMSC 25440. Machine Learning in Medicine. 100 Units.

In this course we will study the how machine learning is used in biomedical research and in healthcare delivery. We will build and explore a range of models in areas such as infectious disease and drug resistance, cancer diagnosis and treatment, drug design, genomics analysis, patient outcome prediction, medical records interpretation and medical imaging. Students will become familiar with the types and scale of data used to train and validate models and with the approaches to build, tune and deploy machine learned models. We will use traditional machine learning methods as well as deep learning depending on the problem. The course will be fast moving and will involve weekly program assignments. We will introduce the machine learning methods as we go, but previous familiarity with machine learning will be helpful. Programming assignments will be in python and we will use Google Collaboratory and Amazon AWS for compute intensive training.

Prerequisite(s): CMSC 12200 or CMSC 15200 or CMSC 16200. Proficiency in Python is expected.

CMSC 25460. Introduction to Optimization. 100 Units.

Introduction to Optimization

Prerequisite(s): (CMSC 27200 or CMSC 27230 or CMSC 37000) and CMSC 25300

CMSC 25500. Introduction to Neural Networks. 100 Units.

This course will provide an introduction to neural networks and fundamental concepts in deep learning. It will cover the basics of training neural networks, including backpropagation, stochastic gradient descent, regularization, and data augmentation. It will explore network design principles, spanning multilayer perceptrons, convolutional and recurrent architectures, attention, memory, and generative adversarial networks. Students will gain experience applying neural networks to modern problems in computer vision, natural language processing, and reinforcement learning. Note: students can use at most one of CMSC 25500 and TTIC 31230 towards the computer science major.

Prerequisite(s): CMSC 25300 or CMSC 25400 or TTIC 31020 Note(s): Students can use at most one of CMSC 25500 and TTIC 31230 towards a CS major or CS minor.

CMSC 25610. Undergraduate Computational Linguistics. 100 Units.

This course is an introduction to topics at the intersection of computation and language. We will study computational linguistics from both scientific and engineering angles: the use of computational modeling to address scientific questions in linguistics and cognitive science, as well as the design of computational systems to solve engineering problems in natural language processing (NLP). The course will combine analysis and discussion of these approaches with training in the programming and mathematical foundations necessary to put these methods into practice. The course is designed to accommodate students both with and without prior programming experience. Our goal is for all students to leave the course able to engage with and evaluate research in cognitive/linguistic modeling and NLP, and to be able to implement intermediate-level computational models.

Equivalent Course(s): LING 28610

CMSC 25700. Natural Language Processing. 100 Units.

This course will introduce fundamental concepts in natural language processing (NLP). NLP includes a range of research problems that involve computing with natural language. Some are user-facing applications, such as spam classification, question answering, summarization, and machine translation. Others serve supporting roles, such as part-of-speech tagging and syntactic parsing. Solutions draw from machine learning (especially deep learning), algorithms, linguistics, and social sciences.

Prerequisite(s): CMSC 25300, CMSC 25400, or CMSC 25025

CMSC 25900. Ethics, Fairness, Responsibility, and Privacy in Data Science. 100 Units.

This course takes a technical approach to understanding ethical issues in the design and implementation of computer systems. Tensions often arise between a computer system's utility and its privacy-invasiveness, between its robustness and its flexibility, and between its ability to leverage existing data and existing data's tendency to encode biases. The course will demonstrate how computer systems can violate individuals' privacy and agency, impact sub-populations in disparate ways, and harm both society and the environment. It will also introduce algorithmic approaches to fairness, privacy, transparency, and explainability in machine learning systems. Through hands-on programming assignments and projects, students will design and implement computer systems that reflect both ethics and privacy by design. They will also wrestle with fundamental questions about who bears responsibility for a system's shortcomings, how to balance different stakeholders' goals, and what societal values computer systems should embed.

Prerequisite(s): CMSC 20300 or CMSC 20600 or CMSC 21800 or CMSC 22000 or CMSC 22001 or CMSC 23000 or CMSC 23200 or CMSC 23300 or CMSC 23320 or CMSC 23400 or CMSC 23500 or CMSC 23900 or CMSC 25025

CMSC 25910. Engineering for Ethics, Privacy, and Fairness in Computer Systems. 100 Units.

This course takes a technical approach to understanding ethical issues in the design and implementation of computer systems. Tensions often arise between a computer system's utility and its privacy-invasiveness, between its robustness and its flexibility, and between its ability to leverage existing data and existing data's tendency to encode biases. The course will demonstrate how computer systems can violate individuals' privacy and agency, impact sub-populations in disparate ways, and harm both society and the environment. It will also introduce algorithmic approaches to fairness, privacy, transparency, and explainability in machine learning systems. Through hands-on programming assignments and projects, students will design and implement computer systems that reflect both ethics and privacy by design. They will also wrestle with fundamental questions about who bears responsibility for a system's shortcomings, how to balance different stakeholders' goals, and what societal values computer systems should embed. Students may not take CMSC 25910 if they have taken CMSC 25900 or DATA 25900.

Prerequisite(s): CMSC 14400 or CMSC 15400. Note(s): anti-requisites: CMSC 25900, DATA 25900

CMSC 27100. Discrete Mathematics. 100 Units.

This course emphasizes mathematical discovery and rigorous proof, which are illustrated on a refreshing variety of accessible and useful topics. Basic counting is a recurring theme and provides the most important source for sequences, which is another recurring theme. Further topics include proof by induction; recurrences and Fibonacci numbers; graph theory and trees; number theory, congruences, and Fermat's little theorem; counting, factorials, and binomial coefficients; combinatorial probability; random variables, expected value, and variance; and limits of sequences, asymptotic equality, and rates of growth.

Prerequisite(s): CMSC 14200, CMSC 15200 or CMSC 16200 or CMSC 12200), or (MATH 15910 or MATH 16300 or MATH 16310 or MATH 19900 or MATH 20300 or MATH 20310 or MATH 20400 or MATH 20410 or MATH 20700 or MATH 25400 or MATH 25500 or MATH 25700) Note(s): This is a directed course in mathematical topics and techniques that is a prerequisite for courses such as CMSC 27200 and 27400.

CMSC 27130. Honors Discrete Mathematics. 100 Units.

We emphasize mathematical discovery and rigorous proof, which are illustrated on a refreshing variety of accessible and useful topics. Basic counting is a recurring theme. Further topics include proof by induction; number theory, congruences, and Fermat's little theorem; relations; factorials, binomial coefficients and advanced counting; combinatorial probability; random variables, expected value, and variance; graph theory and trees. Time permitting, material on recurrences, asymptotic equality, rates of growth and Markov chains may be included as well. The honors version of Discrete Mathematics covers topics at a deeper level.

Prerequisite(s): (CMSC 14200 or CMSC 15200 or CMSC 16200 or CMSC 12200) or (MATH 15910 or MATH 16300 or MATH 16310 or MATH 19900 or MATH 20300 or MATH 20310 or MATH 20400 or MATH 20410 or MATH 20700 or MATH 25400 or MATH 25500 or MATH 25700) Equivalent Course(s): MATH 28130

CMSC 27200. Theory of Algorithms. 100 Units.

This course covers design and analysis of efficient algorithms, with emphasis on ideas rather than on implementation. Algorithmic questions include sorting and searching, graph algorithms, elementary algorithmic number theory, combinatorial optimization, randomized algorithms, as well as techniques to deal with intractability, like approximation algorithms. Design techniques include "divide-and-conquer" methods, dynamic programming, greedy algorithms, and graph search, as well as the design of efficient data structures. Methods of algorithm analysis include asymptotic notation, evaluation of recurrent inequalities, amortized analysis, analysis of probabilistic algorithms, the concepts of polynomial-time algorithms, and of NP-completeness.

Prerequisite(s): CMSC 27100 or CMSC 27130 or CMSC 37110

CMSC 27230. Honors Theory of Algorithms. 100 Units.

This course covers design and analysis of efficient algorithms, with emphasis on ideas rather than on implementation. Algorithmic questions include sorting and searching, discrete optimization, algorithmic graph theory, algorithmic number theory, and cryptography. Design techniques include divide-and-conquer methods, dynamic programming, greedy algorithms, and graph search, as well as the design of efficient data structures. Methods of algorithm analysis include asymptotic notation, evaluation of recurrent inequalities, the concepts of polynomial-time algorithms, and NP-completeness. The honors version of Theory of Algorithms covers topics at a deeper level.

Prerequisite(s): CMSC 27100 or CMSC 27130 or CMSC 37110 or consent of the instructor.

CMSC 27410. Honors Combinatorics. 100 Units.

Methods of enumeration, construction, and proof of existence of discrete structures are discussed in conjunction with the basic concepts of probability theory over a finite sample space. Enumeration techniques are applied to the calculation of probabilities, and, conversely, probabilistic arguments are used in the analysis of combinatorial structures. Other topics include basic counting, linear recurrences, generating functions, Latin squares, finite projective planes, graph theory, Ramsey theory, coloring graphs and set systems, random variables, independence, expected value, standard deviation, and Chebyshev's and Chernoff's inequalities.

Prerequisite(s): MATH 19900 or MATH 15900 or MATH 25400 or MATH 25700, or CMSC 27100 or CMSC 27130 or CMSC 37110. Experience with mathematical proofs. Note(s): This course is offered in alternate years. Equivalent Course(s): MATH 28410

CMSC 27500. Graph Theory. 100 Units.

This course covers the basics of the theory of finite graphs. Topics include shortest paths, spanning trees, counting techniques, matchings, Hamiltonian cycles, chromatic number, extremal graph theory, Turan's theorem, planarity, Menger's theorem, the max-flow/min-cut theorem, Ramsey theory, directed graphs, strongly connected components, directed acyclic graphs, and tournaments. Techniques studied include the probabilistic method.

Prerequisite(s): CMSC 27100, or MATH 20400 or higher.

CMSC 27502. Advanced Algorithms. 100 Units.

CMSC 27530. Honors Graph Theory. 100 Units.

This course covers the basics of the theory of finite graphs. Topics include shortest paths, spanning trees, counting techniques, matchings, Hamiltonian cycles, chromatic number, extremal graph theory, Turan's theorem, planarity, Menger's theorem, the max-flow/min-cut theorem, Ramsey theory, directed graphs, strongly connected components, directly acyclic graphs, and tournaments. Techniques studied include the probabilistic method.

Prerequisite(s): CMSC 27100, CMSC 27130, or CMSC 37110, or MATH 20400 or MATH 20800. Equivalent Course(s): MATH 28530

CMSC 27700-27800. Mathematical Logic I-II.

Mathematical Logic I-II

CMSC 27700. Mathematical Logic I. 100 Units.

This course introduces mathematical logic. Topics include propositional and predicate logic and the syntactic notion of proof versus the semantic notion of truth (e.g., soundness, completeness). We also discuss the Gödel completeness theorem, the compactness theorem, and applications of compactness to algebraic problems.

Terms Offered: Autumn Prerequisite(s): MATH 25400 or 25700 Equivalent Course(s): MATH 27700

CMSC 27800. Mathematical Logic II. 100 Units.

Topics include number theory, Peano arithmetic, Turing compatibility, unsolvable problems, Gödel's incompleteness theorem, undecidable theories (e.g., the theory of groups), quantifier elimination, and decidable theories (e.g., the theory of algebraically closed fields).

Terms Offered: Winter Prerequisite(s): MATH 27700 or equivalent Equivalent Course(s): MATH 27800

CMSC 28000. Introduction to Formal Languages. 100 Units.

This course is a basic introduction to computability theory and formal languages. Topics include automata theory, regular languages, context-free languages, and Turing machines.

Prerequisite(s): CMSC 27100 or CMSC 27130 or CMSC 37110 or MATH 15900 or MATH 15910 or MATH 16300 or MATH 16310 or MATH 19900 or MATH 25500 or LING 21010 Equivalent Course(s): MATH 28000

CMSC 28100. Introduction to Complexity Theory. 100 Units.

Computability: Turing machines, Universal Turing machines and the Church-Turing thesis. Undecidability. Reducibilities. Complexity--the study of the amount of resources -- time, space, communication, randomness, etc -- needed in computations: Time and space complexity classes, nondeterministic and probabilistic computations. Complete problems. Lower bounds, and the big open problems: P vs NP, space vs. time, etc. Communication Complexity.

Prerequisite(s): CMSC 27200 or CMSC 27230 or CMSC 37000, or MATH 15900 or MATH 15910 or MATH 16300 or MATH 16310 or MATH 19900 or MATH 25500; experience with mathematical proofs. Equivalent Course(s): MATH 28100

CMSC 28130. Honors Introduction to Complexity Theory. 100 Units.

Computability topics are discussed (e.g., the s-m-n theorem and the recursion theorem, resource-bounded computation). This course introduces complexity theory. Relationships between space and time, determinism and non-determinism, NP-completeness, and the P versus NP question are investigated.

Prerequisite(s): CMSC 27100 or CMSC 27130, or MATH 15900 or MATH 19900 or MATH 25500; experience with mathematical proofs.

CMSC 28400. Introduction to Cryptography. 100 Units.

Cryptography is the use of algorithms to protect information from adversaries. Though its origins are ancient, cryptography now underlies everyday technologies including the Internet, wifi, cell phones, payment systems, and more. This course is an introduction to the design and analysis of cryptography, primarily from a theoretical perspective. It will cover how cryptography works, how security goals are formalized and analyzed theoretically, and the relationships between various cryptographic tasks. Topics will include symmetric encryption (aka: secret-key encryption), pseudorandomness, message authentication codes, collision-resistant hashing, asymmetric encryption (aka: public-key encryption), and digital signatures. We assume some background in discrete mathematics (e.g., the basics of discrete probability, counting, and modular arithmetic) and algorithms (e.g., big-O notation). We do not assume any prior knowledge of computer security, cryptography, or advanced mathematics. Problem sets will include writing proofs and will require applying the (many) new definitions and techniques that will be introduced over the course of the quarter. There may be a small number of assignments with a programming component.

Prerequisite(s): (CMSC 12200 or CMSC 14100 or CMSC 15200 or CMSC 16200) and ((CMSC 27200 or CMSC 27230 or CMSC 37000) or ((MATH 20300 or MATH 20310 or MATH 20320 or MATH 20700) and (MATH 25400 or MATH 25700)))

CMSC 28510. Introduction to Scientific Computing. 100 Units.

Basic processes of numerical computation are examined from both an experimental and theoretical point of view. This course deals with numerical linear algebra, approximation of functions, approximate integration and differentiation, Fourier transformation, solution of nonlinear equations, and the approximate solution of initial value problems for ordinary differential equations. We concentrate on a few widely used methods in each area covered.

Prerequisite(s): A year of calculus (MATH 15300 or higher), a quarter of linear algebra (MATH 19620 or higher), and CMSC 10600 or higher; or consent of instructor

CMSC 28515. Introduction to Numerical Partial Differential Equations. 100 Units.

This course deals with finite element and finite difference methods for second-order elliptic equations (diffusion) and the associated parabolic and hyperbolic equations. Some methods for solving linear algebraic systems will be used. Scalar first-order hyperbolic equations will be considered.

Prerequisite(s): A year of calculus (MATH 15300 or higher), a quarter of linear algebra (MATH 19620 or higher), CMSC 12200 or higher, and MATH 21100 or 21200 or CMSC 28510; or by consent.

CMSC 28540. Numerical Methods. 100 Units.

This is a practical programming course focused on the basic theory and efficient implementation of a broad sampling of common numerical methods. Each topic will be introduced conceptually followed by detailed exercises focused on both prototyping (using matlab) and programming the key foundational algorithms efficiently on modern (serial and multicore) architectures. The ideal student in this course would have a strong interest in the use of computer modeling as predictive tool in a range of discplines -- for example risk management, optimized engineering design, safety analysis, etc. The numerical methods studied in this course underlie the modeling and simulation of a huge range of physical and social phenomena, and are being put to increasing use to an increasing extent in industrial applications. After successfully completing this course, a student should have the necessary foundation to quickly gain expertise in any application-specific area of computer modeling.

Prerequisite(s): CMSC 15200 or CMSC 16200. Basic apprehension of calculus and linear algebra is essential

CMSC 29700. Reading and Research in Computer Science. 100 Units.

Students do reading and research in an area of computer science under the guidance of a faculty member. A written report is typically required.

Prerequisite(s): By consent of instructor and approval of department counselor. Note(s): Open both to students who are majoring in Computer Science and to nonmajors. Students are required to submit the College Reading and Research Course Form.

CMSC 29900. Bachelor's Thesis. 100 Units.

Open to fourth-year students.

Prerequisite(s): By consent of instructor and approval of department counselor.

Undergraduate Primary Contact

Director of Undergraduate Studies Ravi Chugh JCL 345 Email

Undergraduate Secondary Contacts

Computer Science Major Advisor Adam Shaw JCL 213 773.702.1269 Email

Assistant Director of Undergraduate Studies, Computer Science Minor Advisor, Bx/MS Advisor Jessica Garza JCL 374 773.702.2336 Email

© 2024-2025 The University of Chicago

  • University Homepage
  • My.UChicago
  • Parents and Families
  • The College
  • College Programming Office
  • College Directory
  • Campus Maps
  • Accessibility

University Registrar 1427 East 60th Street Chicago, IL 60637 United States Ph: 773-702-7891 Fax: 773-702-3562

Print this page.

The PDF will include all information unique to this page.

  • My.SiebelSchool

PhD Requirements

Requirements presented as a Table.

Breakdown of Credit Hours

  • Total number of hours required for a Ph.D.: 96 (64 with an approved M.S.)
  • Must complete a minimum of 48 credit hours of coursework (16 with an approved M.S.), of which 20 credit hours must be CS coursework (12 with an approved M.S.).
  • Must complete a minimum of 24 credit hours of 500-level coursework (16 with an approved M.S.), of which 12 credit hours must be CS 500-level coursework. Courses in computer science numbered CS 500-CS 590 or CS 598 are considered advanced coursework.
  • Must complete a minimum of 32 credit hours of Thesis Research (CS 599).

Note: CS 597 (Independent Study) and CS 591/491 (Seminar) may be applied towards bullet 2 above, but cannot be applied to bullet 3 above. Independent study coursework completed at other departments will be treated similar to CS 597 hours. A maximum of 16 credit hours of independent study coursework can be applied toward the degree.

Advanced Coursework

Courses in computer science numbered CS 500 - CS 590 or CS 598 are considered Advanced Coursework. Students must complete 24 credit hours (16 with an approved M.S.) of advanced coursework. In addition, 12 hours of the advanced coursework must be computer science courses.

Program of Study (Core Requirements)

The Program of Study is designed to allow students some flexibility to develop their curriculum in accordance with the Ph.D. graduation requirements outlined above and with the expectations of their advising/thesis committee. The Academic Office assigns students three committee members within the first month of starting the Ph.D. program. Students setup a time with their Program of Study committee to discuss their area of interests and determine what required courses must be completed and develop a strategy for meeting educational and career goals as well as the Ph.D. coursework requirements. For more detailed information, visit Program of Study .

Thesis Hours

A minimum of 32 hours of Thesis Research (CS 599) is required. Students may register for the advisor’s section of CS 599 after they successfully complete their qualifying examination. The CS 599 Thesis Advisor Agreement form must be on file prior to enrolling for thesis hours and prior to taking the qualifying exam.  ( Effective Fall 2022, registration in CS 599 hours during the term of the Qualifying Examination will not be approved. Students can register for CS 597 Individual Study credits until they pass the qualifying examination. )

Additional Requirements

  • CS 591 section PHD must be taken in the first semester. A maximum of 4 credit hours of CS 591 can be applied toward the Ph.D. degree.
  • The minimum program GPA is 3.0.

Effective Spring 2022, CS TA appointments which meet the following criteria will fulfill the PhD TA requirement : A 50% teaching assistantship or a 25% solo teaching assistantship for an entire term completed by the end of the 5th year, with a satisfactory performance evaluation by the department.  TAships for any CS 591 course will not count towards the TA requirement.

Ph.D. with Computational Science and Engineering (CSE) Option

The Ph.D. with a concentration in Computational Science and Engineering (CSE) is an interdisciplinary program which focuses on computationally oriented research. All Ph.D. degree requirements apply PLUS the following additional requirements.

  • Students must take 12 credit hours of coursework relevant to their CSE research areas, selected with the approval of their advisor, from one or more departments outside the Siebel School of Computing and Data Science.
  • CSE 500-level courses may be used to satisfy the advanced coursework (500-level) requirement.
  • The Ph.D. thesis must address some aspect of CSE.
  • The doctoral committee should include a faculty member from outside computer science whose interests are relevant to the student's research.

Ph.D. Requirements Table

A) phd students admitted for fall 2022 (or later).

Thesis Research – CS 599 (minimum applied toward degree) 32 32 32

500-level CS course work (minimum applied toward degree)

Does not include CS 597 nor CS 591.

12 12 12

Additional 500-level course work

Does not include independent study nor seminar hours.

4 4 4

Supplementary CS Graduate-level 400- or 500-level course work (Minimum applied toward degree.)

Does not include CS 597 nor CS 591.

  8 8

Additional graduate-level 400- or 500-level course work

    24
Remaining thesis research credit or graduate-level course work (Minimum applied toward degree. 400- or 500-level)
16 16 16
Total Hours 64 72 96
  • A teaching assistantship for an entire term, with a satisfactory performance evaluation by the department, is required by the end of the 5th year.
  • International Students must show demonstration of English proficiency (equivalent to that necessary to be a TA-see Financial Aid) before taking the Qualifying Exam.
  • Qualifying exam
  • Preliminary exam
  • Final exam or dissertation defense
  • Dissertation deposit
  • Minimum GPA: 3.0

PhD Students Admitted Fall 2021 or Prior

Requirements Entering with approved M.S. degree Entering with B.S. degree
Credit hours: Hours Hours
Total Credit for the Degree 64 96
Thesis Research – CS 599 (minimum applied toward degree) 32 32
Course Work 16 48
500-level course work 16 (12 must be CS courses) 24 (12 must be CS courses)
400- or 500-level course work 16 24
Additional graduate-level course work or thesis research credit (subject to Other Requirements and Conditions below) 16 16
Other Requirements and Conditions (may overlap):*
Minimum hours of CS course work 12 20

Graduate Advising

The Graduate Academic Office, a guiding hand for graduate students, offers weekday assistance.

course-info.cs.uchicago.edu

Course information for the department of computer science at the university of chicago.

Academic year 2024–2025:

  • New major course designations (as of April 2024).
  • Computer science course schedule 2024–2025 .
  • At a glance: Autumn 2024 , Winter 2025 , Spring 2025 .
  • Prerequisite listings for 2024–2025 .
  • PhD course designations 2024–2025 .

Academic year 2023–2024:

  • Computer science course schedule 2023–2024 .
  • At a glance: Autumn 2023 , Winter 2024 , Spring 2024 .
  • Prerequisite listings for 2023–2024 .
  • PhD course designations 2023–2024 .

Academic year 2022–2023:

  • Computer science course schedule 2022–2023 .
  • --> Autumn 2022 at a glance . --> Winter 2023 at a glance . --> Spring 2023 at a glance . --> Computer science course schedule 2021–2022 . --> Course offerings at a glance 2021–2022 (fewer details) . --> PhD course designations 2021–2022 . --> Prerequisite listings for Winter 2022 . --> Autumn 2021 (meeting times TBD) . --> Winter 2021 review --> Single-page course overview 2020–2021 . --> Computer science course schedule 2020–2021 . --> Prerequisite listings for the registrar 2020–2021 . --> Graduate electives 2020–2021. --> Mobile device friendly format . --> Computer science course schedule 2018–2019 . --> Spring 2019 TA assignments. --> CSIL timetables --> (click links at top to view desired quarter). --> Computer science major theory --> (modified for 2018–2019). --> 200-level CMSC courses 2018-2019 . -->