Course Listing

For a snapshot of courses being offered by Harvard School of Engineering over the next four years, visit our Multi Year Course Planning tool.

Great Ideas in Computer Science

COMPSCI 1
2025 Spring

Henry Leitner
Tuesday, Thursday
10:30am to 11:45am

An introduction to the most important discoveries and intellectual paradigms in computer science, designed for students with little or no previous background. Explores problem-solving and data analysis using Python, a programming language with a simple syntax and a powerful set of libraries. This course covers basic data types and collections (lists, dictionaries, tuples, and sets), control flow, recursion, supervised machine learning via regression, visualization, information hiding and encapsulation using classes and objects, and introduces the analysis of program performance. Presents an integrated view of computer systems, from switching circuits up through compilers, and examines theoretical and practical limitations related to unsolvable and intractable computational problems. Other topics include the social and ethical dilemmas presented by such issues as software unreliability, algorithmic bias, and invasions of privacy.

Course Website

Discrete Mathematics for Computer Science

COMPSCI 20
2024 Fall

Michael Mitzenmacher
Monday, Wednesday, Friday
9:45am to 11:00am

Widely applicable mathematical tools for computer science, including topics from logic, set theory, combinatorics, number theory, probability theory, and graph theory. Practice in reasoning formally and proving theorems.

Course Website

Discrete Mathematics for Computer Science

COMPSCI 20
2024 Spring

Rebecca Nesson, Michael Mitzenmacher
Monday, Wednesday, Friday
9:45am to 11:00am

Widely applicable mathematical tools for computer science, including topics from logic, set theory, combinatorics, number theory, probability theory, and graph theory. Practice in reasoning formally and proving theorems.

Course Website

Discrete Mathematics for Computer Science

COMPSCI 20
2025 Spring

Rebecca Nesson, Adam Hesterberg
Monday, Wednesday, Friday
9:45am to 11:00am

Widely applicable mathematical tools for computer science, including topics from logic, set theory, combinatorics, number theory, probability theory, and graph theory. Practice in reasoning formally and proving theorems.

Course Website

Computational Thinking and Problem Solving

COMPSCI 32
2024 Spring

Michael Smith
Monday, Wednesday
12:45pm to 2:00pm

An introduction to computational thinking, useful concepts in the field of computer science, and the art of computer programming using Python. Significant emphasis is placed on class meetings and learning to use computers to solve complex, real-world problems. Concepts and techniques are introduced as they are needed to help solve the problems confronting us. Students will learn how to go from an ambiguous problem description to a running solution and will leave the class knowing how to instruct computers to do what they want them to do. Prior experience in computer science or computer programming is not necessary.

Course Website

Computational Thinking and Problem Solving

COMPSCI 32
2025 Spring

Michael Smith
Monday, Wednesday
12:45pm to 2:00pm

An introduction to computational thinking, useful concepts in the field of computer science, and the art of computer programming using Python. Significant emphasis is placed on class meetings and learning to use computers to solve complex, real-world problems. Concepts and techniques are introduced as they are needed to help solve the problems confronting us. Students will learn how to go from an ambiguous problem description to a running solution and will leave the class knowing how to instruct computers to do what they want them to do. Prior experience in computer science or computer programming is not necessary.

Course Website

Incentives in the Wild: from Tanking in Sports to Mining Cryptocurrencies

COMPSCI 37
2025 Spring

Yannai Gonczarowski
Monday, Wednesday
1:30pm to 2:45pm

How could it be that paving a new road might increase congestion for all drivers? Why would a professional sports team ever try not to score in a game that it wants to win? Why would any student rank high schools not in their order of preference when applying? And what are some incentive pitfalls that the designer of a cryptocurrency system should be aware of? In this course, we will examine seemingly strange social phenomena, use mathematical tools to model them and to analyze how and why distorted incentives give rise to them, and explore potential mechanisms to eliminate such phenomena.

Course Website

Introduction to Computer Science

COMPSCI 50
2024 Fall

David J. Malan
Monday
1:30pm to 4:15pm

This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming, for concentrators and non-concentrators alike, with or without prior programming experience. (More than half of CS50 students have never taken CS before!) This course teaches you how to solve problems, both with and without code, with an emphasis on correctness, design, and style. Topics include computational thinking, abstraction, algorithms, data structures, and computer science more generally. Problem sets inspired by the arts, humanities, social sciences, and sciences. More than teach you how to program in one language, this course teaches you how to program fundamentally and how to teach yourself new languages ultimately. The course starts with a traditional but omnipresent language called C that underlies today's newer languages, via which you'll learn not only about functions, variables, conditionals, loops, and more, but also about how computers themselves work underneath the hood, memory and all. The course then transitions to Python, a higher-level language that you'll understand all the more because of C. Toward term's end, the course introduces SQL, via which you can store data in databases, along with HTML, CSS, and JavaScript, via which you can create web and mobile apps alike. Course culminates in a final project. See https://cs50.harvard.edu/college for advice, FAQs, syllabus, and what's new. Email the course's heads at heads@cs50.harvard.edu with questions.

Course Website

Introduction to Computer Science

COMPSCI 50
2024 Spring

David J. Malan, Carter Zenke
Tuesday
3:45pm to 6:30pm

This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming, for concentrators and non-concentrators alike, with or without prior programming experience. (Two thirds of CS50 students have never taken CS before.) This course teaches you how to solve problems, both with and without code, with an emphasis on correctness, design, and style. Topics include computational thinking, abstraction, algorithms, data structures, and computer science more generally. Problem sets inspired by the arts, humanities, social sciences, and sciences. More than teach you how to program in one language, this course teaches you how to program fundamentally and how to teach yourself new languages ultimately. The course starts with a traditional but omnipresent language called C that underlies today's newer languages, via which you'll learn not only about functions, variables, conditionals, loops, and more, but also about how computers themselves work underneath the hood, memory and all. The course then transitions to Python, a higher-level language that you'll understand all the more because of C. Toward term's end, the course introduces SQL, via which you can store data in databases, along with HTML, CSS, and JavaScript, via which you can create web and mobile apps alike. Course culminates in a final project. See https://cs50.harvard.edu/spring for advice, FAQs, syllabus, and what's new. Email the course's heads at heads@cs50.harvard.edu with questions.

Course Website

Introduction to Computer Science

COMPSCI 50
2024 Spring

David J. Malan, Carter Zenke
Tuesday
9:00am to 11:45am

This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming, for concentrators and non-concentrators alike, with or without prior programming experience. (Two thirds of CS50 students have never taken CS before.) This course teaches you how to solve problems, both with and without code, with an emphasis on correctness, design, and style. Topics include computational thinking, abstraction, algorithms, data structures, and computer science more generally. Problem sets inspired by the arts, humanities, social sciences, and sciences. More than teach you how to program in one language, this course teaches you how to program fundamentally and how to teach yourself new languages ultimately. The course starts with a traditional but omnipresent language called C that underlies today's newer languages, via which you'll learn not only about functions, variables, conditionals, loops, and more, but also about how computers themselves work underneath the hood, memory and all. The course then transitions to Python, a higher-level language that you'll understand all the more because of C. Toward term's end, the course introduces SQL, via which you can store data in databases, along with HTML, CSS, and JavaScript, via which you can create web and mobile apps alike. Course culminates in a final project. See https://cs50.harvard.edu/spring for advice, FAQs, syllabus, and what's new. Email the course's heads at heads@cs50.harvard.edu with questions.

Course Website

Introduction to Computer Science

COMPSCI 50
2024 Spring

David J. Malan, Carter Zenke
Wednesday
9:00am to 11:45am

This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming, for concentrators and non-concentrators alike, with or without prior programming experience. (Two thirds of CS50 students have never taken CS before.) This course teaches you how to solve problems, both with and without code, with an emphasis on correctness, design, and style. Topics include computational thinking, abstraction, algorithms, data structures, and computer science more generally. Problem sets inspired by the arts, humanities, social sciences, and sciences. More than teach you how to program in one language, this course teaches you how to program fundamentally and how to teach yourself new languages ultimately. The course starts with a traditional but omnipresent language called C that underlies today's newer languages, via which you'll learn not only about functions, variables, conditionals, loops, and more, but also about how computers themselves work underneath the hood, memory and all. The course then transitions to Python, a higher-level language that you'll understand all the more because of C. Toward term's end, the course introduces SQL, via which you can store data in databases, along with HTML, CSS, and JavaScript, via which you can create web and mobile apps alike. Course culminates in a final project. See https://cs50.harvard.edu/spring for advice, FAQs, syllabus, and what's new. Email the course's heads at heads@cs50.harvard.edu with questions.

Course Website

Introduction to Computer Science

COMPSCI 50
2024 Spring

David J. Malan, Carter Zenke
Wednesday
6:00pm to 8:45pm

This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming, for concentrators and non-concentrators alike, with or without prior programming experience. (Two thirds of CS50 students have never taken CS before.) This course teaches you how to solve problems, both with and without code, with an emphasis on correctness, design, and style. Topics include computational thinking, abstraction, algorithms, data structures, and computer science more generally. Problem sets inspired by the arts, humanities, social sciences, and sciences. More than teach you how to program in one language, this course teaches you how to program fundamentally and how to teach yourself new languages ultimately. The course starts with a traditional but omnipresent language called C that underlies today's newer languages, via which you'll learn not only about functions, variables, conditionals, loops, and more, but also about how computers themselves work underneath the hood, memory and all. The course then transitions to Python, a higher-level language that you'll understand all the more because of C. Toward term's end, the course introduces SQL, via which you can store data in databases, along with HTML, CSS, and JavaScript, via which you can create web and mobile apps alike. Course culminates in a final project. See https://cs50.harvard.edu/spring for advice, FAQs, syllabus, and what's new. Email the course's heads at heads@cs50.harvard.edu with questions.

Course Website

Introduction to Computer Science

COMPSCI 50
2025 Spring

David J. Malan, Yuliia Zhukovets
Wednesday
6:00pm to 8:45pm

This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming, for concentrators and non-concentrators alike, with or without prior programming experience. (More than half of CS50 students have never taken CS before!) This course teaches you how to solve problems, both with and without code, with an emphasis on correctness, design, and style. Topics include computational thinking, abstraction, algorithms, data structures, and computer science more generally. Problem sets inspired by the arts, humanities, social sciences, and sciences. More than teach you how to program in one language, this course teaches you how to program fundamentally and how to teach yourself new languages ultimately. The course starts with a traditional but omnipresent language called C that underlies today's newer languages, via which you'll learn not only about functions, variables, conditionals, loops, and more, but also about how computers themselves work underneath the hood, memory and all. The course then transitions to Python, a higher-level language that you'll understand all the more because of C. Toward term's end, the course introduces SQL, via which you can store data in databases, along with HTML, CSS, and JavaScript, via which you can create web and mobile apps alike. Course culminates in a final project. See https://cs50.harvard.edu/college for advice, FAQs, syllabus, and what's new. Email the course's heads at heads@cs50.harvard.edu with questions.

Course Website

Introduction to Computer Science

COMPSCI 50
2025 Spring

David J. Malan, Yuliia Zhukovets
Tuesday
3:45pm to 6:30pm

This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming, for concentrators and non-concentrators alike, with or without prior programming experience. (More than half of CS50 students have never taken CS before!) This course teaches you how to solve problems, both with and without code, with an emphasis on correctness, design, and style. Topics include computational thinking, abstraction, algorithms, data structures, and computer science more generally. Problem sets inspired by the arts, humanities, social sciences, and sciences. More than teach you how to program in one language, this course teaches you how to program fundamentally and how to teach yourself new languages ultimately. The course starts with a traditional but omnipresent language called C that underlies today's newer languages, via which you'll learn not only about functions, variables, conditionals, loops, and more, but also about how computers themselves work underneath the hood, memory and all. The course then transitions to Python, a higher-level language that you'll understand all the more because of C. Toward term's end, the course introduces SQL, via which you can store data in databases, along with HTML, CSS, and JavaScript, via which you can create web and mobile apps alike. Course culminates in a final project. See https://cs50.harvard.edu/college for advice, FAQs, syllabus, and what's new. Email the course's heads at heads@cs50.harvard.edu with questions.

Course Website

Introduction to Computer Science

COMPSCI 50
2025 Spring

David J. Malan, Yuliia Zhukovets
Tuesday
9:00am to 11:45am

This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming, for concentrators and non-concentrators alike, with or without prior programming experience. (More than half of CS50 students have never taken CS before!) This course teaches you how to solve problems, both with and without code, with an emphasis on correctness, design, and style. Topics include computational thinking, abstraction, algorithms, data structures, and computer science more generally. Problem sets inspired by the arts, humanities, social sciences, and sciences. More than teach you how to program in one language, this course teaches you how to program fundamentally and how to teach yourself new languages ultimately. The course starts with a traditional but omnipresent language called C that underlies today's newer languages, via which you'll learn not only about functions, variables, conditionals, loops, and more, but also about how computers themselves work underneath the hood, memory and all. The course then transitions to Python, a higher-level language that you'll understand all the more because of C. Toward term's end, the course introduces SQL, via which you can store data in databases, along with HTML, CSS, and JavaScript, via which you can create web and mobile apps alike. Course culminates in a final project. See https://cs50.harvard.edu/college for advice, FAQs, syllabus, and what's new. Email the course's heads at heads@cs50.harvard.edu with questions.

Course Website

Introduction to Computer Science

COMPSCI 50
2025 Spring

David J. Malan, Yuliia Zhukovets
Wednesday
9:00am to 11:45am

This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming, for concentrators and non-concentrators alike, with or without prior programming experience. (More than half of CS50 students have never taken CS before!) This course teaches you how to solve problems, both with and without code, with an emphasis on correctness, design, and style. Topics include computational thinking, abstraction, algorithms, data structures, and computer science more generally. Problem sets inspired by the arts, humanities, social sciences, and sciences. More than teach you how to program in one language, this course teaches you how to program fundamentally and how to teach yourself new languages ultimately. The course starts with a traditional but omnipresent language called C that underlies today's newer languages, via which you'll learn not only about functions, variables, conditionals, loops, and more, but also about how computers themselves work underneath the hood, memory and all. The course then transitions to Python, a higher-level language that you'll understand all the more because of C. Toward term's end, the course introduces SQL, via which you can store data in databases, along with HTML, CSS, and JavaScript, via which you can create web and mobile apps alike. Course culminates in a final project. See https://cs50.harvard.edu/college for advice, FAQs, syllabus, and what's new. Email the course's heads at heads@cs50.harvard.edu with questions.

Course Website

Abstraction and Design in Computation

COMPSCI 51
2024 Spring

Stuart Shieber
Tuesday, Thursday
12:45pm to 2:00pm

Fundamental concepts in the design of computer programs, emphasizing the crucial role of abstraction. The goal of the course is to give students insight into the difference between programming and programming well. To emphasize the differing approaches to expressing programming solutions, you will learn to program in a variety of paradigms -- including functional, imperative, and object-oriented. Important ideas from software engineering and models of computation will inform these different views of programming.

Course Website

Abstraction and Design in Computation

COMPSCI 51
2024 Spring

Stuart Shieber
Tuesday, Thursday
3:45pm to 5:00pm

Fundamental concepts in the design of computer programs, emphasizing the crucial role of abstraction. The goal of the course is to give students insight into the difference between programming and programming well. To emphasize the differing approaches to expressing programming solutions, you will learn to program in a variety of paradigms -- including functional, imperative, and object-oriented. Important ideas from software engineering and models of computation will inform these different views of programming.

Course Website

Abstraction and Design in Computation

COMPSCI 51
2024 Spring

Stuart Shieber

Fundamental concepts in the design of computer programs, emphasizing the crucial role of abstraction. The goal of the course is to give students insight into the difference between programming and programming well. To emphasize the differing approaches to expressing programming solutions, you will learn to program in a variety of paradigms -- including functional, imperative, and object-oriented. Important ideas from software engineering and models of computation will inform these different views of programming.

Course Website

Abstraction and Design in Computation

COMPSCI 51
2025 Spring

Stuart Shieber
Tuesday, Thursday
3:45pm to 5:00pm

Fundamental concepts in the design of computer programs, emphasizing the crucial role of abstraction. The goal of the course is to give students insight into the difference between programming and programming well. To emphasize the differing approaches to expressing programming solutions, you will learn to program in a variety of paradigms -- including functional, imperative, and object-oriented. Important ideas from software engineering and models of computation will inform these different views of programming.

Course Website

Abstraction and Design in Computation

COMPSCI 51
2025 Spring

Stuart Shieber
Tuesday, Thursday
12:45pm to 2:00pm

Fundamental concepts in the design of computer programs, emphasizing the crucial role of abstraction. The goal of the course is to give students insight into the difference between programming and programming well. To emphasize the differing approaches to expressing programming solutions, you will learn to program in a variety of paradigms -- including functional, imperative, and object-oriented. Important ideas from software engineering and models of computation will inform these different views of programming.

Course Website

Abstraction and Design in Computation

COMPSCI 51
2025 Spring

Stuart Shieber

Fundamental concepts in the design of computer programs, emphasizing the crucial role of abstraction. The goal of the course is to give students insight into the difference between programming and programming well. To emphasize the differing approaches to expressing programming solutions, you will learn to program in a variety of paradigms -- including functional, imperative, and object-oriented. Important ideas from software engineering and models of computation will inform these different views of programming.

Course Website

Systems Programming and Machine Organization

COMPSCI 61
2024 Fall

Eddie Kohler
Monday, Wednesday
2:15pm to 3:30pm

Fundamentals of computer systems programming, machine organization, and performance tuning. This course provides a solid background in systems programming and a deep understanding of low-level machine organization and design. Topics include C and assembly language programming, program optimization, memory hierarchy and caching, virtual memory and dynamic memory management, concurrency, threads, and synchronization.

Course Website

Code, Data, and Art

COMPSCI 73
2024 Fall

Fernanda Viegas, Martin Wattenberg
Tuesday, Thursday
11:15am to 12:30pm

A studio course where software is used as an artistic medium. The course is designed to expose students to current perspectives on the intersection of computer science and art, and to build skills that will allow them to express themselves creatively via software. An additional focus will be the role of data in modern artistic practice.

Course Website

Case Studies in Public and Private Policy Challenges of Artificial Intelligence

COMPSCI 90NDR
2024 Spring

Jonathan Zittrain
Monday, Tuesday
3:45pm to 5:15pm

The use of machine learning has skyrocketed in recent years, becoming embedded retail and wholesale across society without substantial reflection on its implications. Through engagement with those building some of the most provocative models and tools – many of which have become part of the public imagination – we will see what gives their builders pause; reflect on possible solutions or mitigations; and develop suggestions about what they might be missing in their own canvassing of the ethical and policy terrain.

Course Website

Supervised Reading and Research

COMPSCI 91R
2024 Fall

Boaz Barak, Stephen Chong, Eddie Kohler, Adam Hesterberg

Supervised individual study of advanced topics in computer science. A student wishing to enroll in Computer Science 91r must be accepted by a faculty member who will supervise the course work. Additional information and a form are available via https://harvardcs.info/forms/#cs-91r-form. The form must be filled out and signed by the student and faculty supervisor. Students writing theses may enroll in this course while conducting thesis research and writing.

Course Website

Supervised Reading and Research

COMPSCI 91R
2024 Spring

Stephen Chong, Adam Hesterberg

Supervised individual study of advanced topics in computer science. A student wishing to enroll in Computer Science 91r must be accepted by a faculty member who will supervise the course work. Additional information and a form are available via https://harvardcs.info/forms/#cs-91r-form. The form must be filled out and signed by the student and faculty supervisor. Students writing theses may enroll in this course while conducting thesis research and writing.

Course Website

Supervised Reading and Research

COMPSCI 91R
2025 Spring

Stephen Chong, Adam Hesterberg

Supervised individual study of advanced topics in computer science. A student wishing to enroll in Computer Science 91r must be accepted by a faculty member who will supervise the course work. Additional information and a form are available via https://harvardcs.info/forms/#cs-91r-form. The form must be filled out and signed by the student and faculty supervisor. Students writing theses may enroll in this course while conducting thesis research and writing.

Course Website

System Design Projects: Machine Learning for Social Impact

COMPSCI 96
2025 Spring

Milind Tambe
Monday, Wednesday
3:45pm to 5:00pm

Student teams will work with real partner organizations to use machine learning techniques on a directly impactful project. Students will learn how to effectively explore data, create and iterate on real models, communicate and work with external partners, and incorporate ethics into their technical work. The class will include guest lectures from experts in various fields of the social impact tech space.

Course Website

Data Science 2: Advanced Topics in Data Science

COMPSCI 109B
2024 Spring

Pavlos Protopapas, Alex Young
Monday, Wednesday, Friday
9:45am to 11:00am

Data Science 2 is the second half of a one-year introduction to data science. Building upon the material in Data Science 1, the course introduces advanced methods for statistical modeling, representation, and prediction. Topics include multiple deep learning architectures such as CNNs, RNNs, transformers, language models, autoencoders, and generative models as well as basic Bayesian methods, and unsupervised learning. Students are strongly encouraged to enroll in both the fall and spring course within the same academic year. Part two of a two-part series.

Course Website

Data Structures and Algorithms

COMPSCI 124
2024 Spring

Madhu Sudan, Sitan Chen
Monday, Wednesday
2:15pm to 3:30pm

Design and analysis of efficient algorithms and data structures. Algorithm design methods, graph algorithms, approximation algorithms, and randomized algorithms are covered.

Course Website

Convex Optimization and Applications in Machine Learning

COMPSCI 128
2024 Spring

Yiling Chen
Monday, Wednesday
9:45am to 11:00am

This course focuses on recognizing, formulating, and solving convex optimization problems. We will introduce basic convex analysis, discuss convex optimization theory, introduce algorithms for solving convex optimization problems, and touch on some advanced topics. We will explore all these in the context of machine learning applications as almost every machine learning problem can be formulated as an optimization problem. The objective is to give students the theoretical training to recognize and formulate convex optimization problems and provide students with the tools and methods to solve the problems of interest.

Course Website

Computing Hardware

COMPSCI 141
2024 Spring

Vijay Janapa Reddi
Monday, Wednesday
11:15am to 12:30pm

This course introduces fundamentals in designing and building modern information devices and systems that interface with the real world. It focuses on digital devices and systems, and it complements ENG-SCI 152, which focuses on devices and systems that use analog electronics. Topics include: combinational and sequential logic; computer architecture; machine code; and altogether the infrastructure and computational framework composing a MIPS processor. Consideration is given in design to interactions between hardware and software systems. Students will design application specific hardware for an embedded system.

Course Website

Networking at Scale

COMPSCI 145
2024 Spring

Minlan Yu
Tuesday, Thursday
9:45am to 11:00am

This course studies computer network topics including Layer 2/Layer 3 topology, routing, transport protocols, traffic engineering, network functions, programmable switches, and software-defined networking. Modern networks have grown to large scale (connecting millions of servers) and high speed (terabits per second) to meet the needs of cloud applications in business and society. Thus, in addition to learning the conventional concepts in networking, we will also discuss how to adapt these concepts to large-scale networks. These discussions will hopefully help deepen our understanding of networking technologies. This course includes lectures and system programming projects. More information can be found at https://github.com/minlanyu/cs145-site.

Course Website

Computer Architecture

COMPSCI 146
2024 Spring

David Brooks
Friday
9:00am to 11:45am

Review of the fundamental structures in modern processor design. Topics include computer organization, memory system design, pipelining, and other techniques to exploit parallelism. Discussion of modern topics including GPU architectures, datacenter architecture, mobile/embedded SoC architectures, and machine learning acceleration as time permits. Emphasis on a quantitative evaluation of design alternatives and an understanding of performance and energy consumption issues.

Course Website

Design of VLSI Circuits and Systems

COMPSCI 148
2024 Spring

Gage Hills
Monday, Wednesday
2:15pm to 3:30pm

Presentation of concepts and techniques for the design and fabrication of VLSI systems and digital MOS integrated circuits. Topics include: basic semiconductor theory; MOS transistors and digital MOS circuits design; synchronous machines, clocking, and timing issues; high-level description and modeling of VLSI systems; synthesis and place and route design flows; and testing of VLSI circuits and systems. Various CAD tools for design, simulation, and verification are extensively used.

Course Website

Programming Languages

COMPSCI 152
2024 Spring

Nada Amin
Tuesday, Thursday
11:15am to 12:30pm

Comprehensive introduction to the principal features and overall design of both traditional and modern programming languages, including syntax, formal semantics, abstraction mechanisms, modularity, type systems, naming, polymorphism, closures, continuations, and concurrency. Provides the intellectual tools needed to design, evaluate, choose, and use programming languages.

Course Website

Operating Systems

COMPSCI 161
2024 Spring

Eddie Kohler
Monday, Wednesday
2:15pm to 3:30pm

This course focuses on the design and implementation of modern operating systems. The course discusses threads, processes, virtual memory, schedulers, and the other fundamental primitives that an OS uses to represent active computations. An exploration of the system call interface explains how applications interact with hardware and other programs which are concurrently executing. Case studies of popular file systems reveal how an OS makes IO efficient and robust in the midst of crashes and unexpected reboots. Students also learn how virtualization allows a physical machine to partition its resources across multiple virtual machines. Class topics are reinforced through a series of intensive programming assignments which use a real operating system.

Course Website

Computer Graphics

COMPSCI 175
2024 Spring

Steven Gortler
Tuesday, Thursday
12:45pm to 2:00pm

This course covers the fundamentals of 3D computer graphics using a modern shader-based version of OpenGL. Main topics include: geometric coordinate systems and transformations, keyframe animation and interpolation, camera simulation, triangle rasterization, material simulation, texture mapping, image sampling and color theory. The course also touches on ray tracing, geometric modeling and simulation-based animation.

Course Website

Engineering Usable Interactive Systems

COMPSCI 178
2024 Spring

Elena Glassman
Monday, Wednesday
3:45pm to 5:00pm

In this course, students learn critical techniques, concepts, and technologies for building usable interactive systems, alone and in pairs. Assignments provide hands-on experiences with different modern frameworks, platforms, and libraries while conceptual commonalities and distinctions are annotated and explained. Lectures cover relevant basic and advanced topics, such as human cognitive capabilities, iterative prototyping, and human-AI interaction. The final project will require both front-end and back-end development, iterative prototyping with humans, and a final evaluation with target users. Designed for advanced undergraduates.

Course Website

Machine Learning

COMPSCI 181
2024 Spring

Finale Doshi-Velez, David Alvarez Melis
Tuesday, Thursday
9:45am to 11:00am

Introduction to machine learning, providing a probabilistic view on artificial intelligence and reasoning under uncertainty. Topics include: supervised learning, ensemble methods and boosting, neural networks, support vector machines, kernel methods, clustering and unsupervised learning, maximum likelihood, graphical models, hidden Markov models, inference methods, and computational learning theory. Students should feel comfortable with multivariate calculus, linear algebra, probability theory, and complexity theory. Students will be required to produce non-trivial programs in Python.

Course Website

Classics of Computer Science

COMPSCI 191
2024 Spring

Harry Lewis
Tuesday, Thursday
2:15pm to 3:30pm

Papers every computer scientist should have read, from all areas of the field and dating from its origins to the present.

Course Website

Designing K–12 Computer Science Learning Experiences

COMPSCI 196
2024 Spring

Karen Brennan
Wednesday
9:00am to 11:45am

From computational thinking to workforce arguments, there is considerable interest in and excitement about including computer science education for all K–12 students. Yet, unlike other disciplines with a much longer history in formal schooling, the interest in computer science education is not yet supported by commensurate attention to research and teacher practice. In this course, we will examine the state of K–12 computing education: questioning its value, examining its history, and imagining and contributing to its potential. The course will be organized as both a reading group and a lab, building a community of people who are committed to K–12 CS education. Each week you will read classic and current research, and write accompanying memos to document your evolving understandings of the field. Throughout the course, either individually or with partners, you will develop an independent project that explores the design of K–12 computer science learning experiences. Some examples of possible projects include: designing CS-standalone or cross-curricular learning activities and curriculum, building a programming language for novices, developing an annotated bibliography, critically analyzing policy documents such as curriculum frameworks and standards from around the world, or contributing to current K–12 CS education research initiatives.

Course Website

High Performance Computing for Science and Engineering

COMPSCI 205
2024 Spring

Ignacio Becker Troncoso, Boris Kozinsky
Tuesday, Thursday
2:15pm to 3:30pm

With manufacturing processes reaching the limits in terms of transistor density on today’s computing architectures, efficient modern code must exploit parallel execution to maintain scaling of available hardware resources. The use of computers in academia, industry and society is a fundamental tool for solving (scientific) problems while the "think parallel" mindset of code developers is still lagging behind. The aim of this course is to introduce the student to the fundamentals of parallel programming and its relationship on computer architectures. Various forms of parallelism are discussed and exploited through different programming models with focus on shared and distributed memory programming. The learned techniques are tried out by means of homework, lab sessions and a term project.

Course Website

Topics in Theory for Society: The Theory of Algorithmic Fairness

COMPSCI 226R
2024 Spring

Cynthia Dwork
Monday, Wednesday
12:45pm to 2:00pm

As algorithms reach ever more deeply and broadly into our lives there is increasing interest that they be fair, despite a lack of consensus on the meaning of the term. The theory of algorithmic fairness is a still-new discipline exploring notions of fairness and their consequences: which fairness goals can be simultaneously achieved? How do various notions compose – are systems made up of parts that are fair in isolation also fair in toto? How can we move beyond fairness-as-correctness in the current, flawed, world, to fairness in a better world? The course will start with basics and move to highlights from a recent explosion of research showing broad applicability to problems in machine learning even when fairness is not a concern, as well as deep connections to notions in pseudorandomness.

Course Website

Optimized Democracy

COMPSCI 238
2024 Spring

Ariel Procaccia
Monday, Wednesday
11:15am to 12:30pm

The course examines the mathematical and algorithmic foundations of democracy, running the gamut from theory to applications. The goal is to provide students with a rigorous perspective on, and a technical toolbox for, the design of better democratic systems. Topics include computational social choice (identifying optimal voting rules), fair division with applications to political redistricting (avoiding gerrymandering) and apportionment (allocating seats on a representative body), sortition (randomly selecting citizens' assemblies), liquid democracy (transitively delegating votes), and weighted voting games (analyzing legislative power through cooperative game theory).

Course Website

Advanced Computer Architecture

COMPSCI 246
2024 Spring

David Brooks
Friday
9:00am to 11:45am

Review of the fundamental structures in modern processor design. Topics include computer organization, memory system design, pipelining, and other techniques to exploit parallelism. Discussion of modern topics including GPU architectures, datacenter architecture, mobile/embedded SoC architectures, and machine learning acceleration as time permits. Emphasis on a quantitative evaluation of design alternatives and an understanding of performance and energy consumption issues.

Course Website

Advanced Design of VLSI Circuits and Systems

COMPSCI 248
2024 Spring

Gage Hills
Monday, Wednesday
2:15pm to 3:30pm

Presentation of concepts and techniques for the design and fabrication of VLSI systems and digital MOS integrated circuits. Topics include: basic semiconductor theory; MOS transistors and digital MOS circuits design; synchronous machines, clocking, and timing issues; high-level description and modeling of VLSI systems; synthesis and place and route design flows; and testing of VLSI circuits and systems. Various CAD tools for design, simulation, and verification are extensively used.

The contents and course requirements are similar to those of Computer Science 148, with the exception that students enrolled in Computer Science 248 are expected to do a substantial design project and paper discussions on advanced topics.

Course Website

Formal Methods for Computer Security

COMPSCI 254
2024 Spring

Stephen Chong
Tuesday, Thursday
11:15am to 12:30pm

This course explores formal methods for computer security, including formal security models, relationships between security properties/policies and enforcement mechanisms, principled techniques and tools to specify, analyze, and construct secure computer systems. Specific topics include properties, hyperproperties, side channels, reasoning about cryptographic protocols, information flow, authorization logics, and verification techniques. Assessment will include homeworks and/or small projects during the semester as well as a final, larger project that is open-ended and driven by student interests.

Course Website

Systems Security

COMPSCI 263
2024 Spring

James Mickens
Tuesday, Thursday
12:45pm to 2:00pm

This course explores practical attacks on modern computer systems, explaining how those attacks can be mitigated using careful system design and the judicious application of cryptography. The course discusses topics like buffer overflows, web security, information flow control, and anonymous communication mechanisms such as Tor. The course includes several small projects which give students hands-on experience with various offensive and defensive techniques; the final, larger project is open-ended and driven by student interests.

Course Website

Big Data Systems

COMPSCI 265
2024 Spring

Stratos Idreos
Tuesday, Thursday
9:45am to 11:00am

Big data is everywhere. A fundamental goal across numerous modern businesses and sciences is to be able to utilize as many machines as possible, to consume as much information as possible and as fast as possible. The big challenge is how to turn data into useful knowledge. This is a moving target as both the underlying hardware and our ability to collect data evolve. In this class, we discuss how to design data systems, data structures, and algorithms for key data-driven areas, including relational systems, distributed systems, graph systems, noSQL, newSQL, machine learning, and neural networks. We see how they all rely on the same set of very basic concepts and we learn how to synthesize efficient solutions for any problem across these areas using those basic concepts.

Course Website

Topics in Data Visualization

COMPSCI 271
2024 Spring

Johanna Beyer
Monday, Wednesday
9:45am to 11:00am

This course covers advanced topics in data visualization. Over the course of the semester, we will examine seminal works and recent state-of-the-art research in information visualization, scientific visualization and visual analytics. Students will work on a semester-long visualization project that will allow them to visualize their own data sets and write a short paper about their project. We will employ peer-feedback and formal design critiques to analyze each other's work.

Course Website

Design, Technology, and Social Impact

COMPSCI 276
2024 Spring

Krzysztof Gajos
Tuesday, Thursday
9:45am to 11:00am

The course explores major areas of research and practice at the intersection of design, technology, and social impact. Specifically, we will explore the current state of research and interesting real-world examples related to the design, evaluation, and implementation of interventions comprising of technical, social, and organizational elements. We will also explore leading theories and methods for anticipating broader, indirect societal impacts of such intervention. Course activities will involve discussion of primary literature, some guided instruction, assignments, and a major research project.

Course Website

AI for Social Impact

COMPSCI 288
2024 Spring

Milind Tambe
Monday, Wednesday
3:45pm to 5:00pm

Recent years have seen AI successfully applied to societal challenge problems. Indeed, recognizing the potential of AI for tremendous social impact in the future, "AI for social impact" is growing as a subdiscipline within AI. In this course, we will discuss successful case studies of  use of AI for public health, environmental sustainability, public safety and public welfare. Simultaneously, we will discuss key foundations of the area of AI for social impact. To that end, among other topics, we will focus on challenges in AI for Social Impact, what makes projects successful, how to investigate project impact in the field and ethical considerations for such projects. A key part of this course will be AI4SI projects with non-profits.

Course Website

Seminar on Effective Research Practices and Academic Culture

COMPSCI 290B
2024 Spring

Martin Wattenberg, John Girash
Friday
9:45am to 11:45am

This is a reading and discussion-based seminar designed for entering Computer Science Ph.D. students. This course prepares students to manage the difficult and often undiscussed challenges of Ph.D. programs through sessions on research skill building (e.g. paper reading, communication), soft skill building (e.g. managing advising relationships, supporting your peers), and academic culture (e.g. mental health in academia, power dynamics in scientific communities), as well as research and professional-oriented discussions. 

This is a full-year, 4-unit course, meeting once a week in each of the fall and the spring. Students must complete both terms of this course (parts A and B) within the same academic year to receive credit.

 

Course Website

Special Topics in Computer Science

COMPSCI 299R
2024 Spring

Krzysztof Gajos

Supervision of experimental or theoretical research on acceptable problems in computer science and supervision of reading on topics not covered by regular courses of instruction.

Course Website

Privacy and Technology

COMPSCI 1050
2024 Fall

James Waldo
Tuesday, Thursday
12:45pm to 2:00pm

What is privacy, and how is it affected by recent developments in technology? This course critically examines popular concepts of privacy and uses a rigorous analysis of technologies to understand the policy and ethical issues at play. Case studies: database anonymity, research ethics, wiretapping, surveillance, and others. Course relies on some technical material, but is open and accessible to all students, especially those with interest in economics, engineering, political science, computer science, sociology, biology, law, government, philosophy.

Course Website

Systems Development for Computational Science

COMPSCI 1070
2024 Fall

Ignacio Becker Troncoso
Tuesday, Thursday
2:15pm to 3:30pm

This is a project-based course emphasizing designing, building, testing, maintaining, and modifying software for scientific computing and data sciences. The class is focusing on a thorough introduction of the Python programming language with discussion of core concepts in object-oriented programming as well as essential data structures useful in most programming tasks. Students will work in groups on a semester long project. Students will further learn how to work with SQL databases and how to integrate them in Python using SQLite3 and Pandas. After completion of this course, students will be able to adapt basic tools and techniques to design complex software systems aimed at solving computational and data processing problems in academic and industrial environments.

Course Website

Data Science 1: Introduction to Data Science

COMPSCI 1090A
2024 Fall

Pavlos Protopapas, Natesh Pillai
Monday, Wednesday, Friday
9:45am to 11:00am

Data Science 1 is the first half of a one-year introduction to data science. The course will focus on the analysis of messy, real life data to perform predictions using statistical and machine learning methods. Material covered will integrate the five key facets of an investigation using data: (1) data collection - data wrangling, cleaning, and sampling to get a suitable data set;  (2) data management - accessing data quickly and reliably; (3) exploratory data analysis – generating hypotheses and building intuition; (4) prediction or statistical learning; and (5) communication – summarizing results through visualization, stories, and interpretable summaries. Part one of a two part series. The curriculum for this course builds throughout the academic year. Students are strongly encouraged to enroll in both the fall and spring course within the same academic year.

Course Website

Data Science 2: Advanced Topics in Data Science

COMPSCI 1090B
2025 Spring

Pavlos Protopapas, Natesh Pillai
Monday, Wednesday, Friday
9:45am to 11:00am

Data Science 2 is the second half of a one-year introduction to data science. Building upon the material in Data Science 1, the course introduces advanced methods for statistical modeling, representation, and prediction. Topics include multiple deep learning architectures such as CNNs, RNNs, transformers, language models, autoencoders, and generative models as well as basic Bayesian methods, and unsupervised learning. Students are strongly encouraged to enroll in both the fall and spring course within the same academic year. Part two of a two-part series.

Course Website

Introduction to Algorithms and their Limitations

COMPSCI 1200
2024 Fall

Anurag Anshu, Salil Vadhan
Tuesday, Thursday
9:45am to 11:00am

An introductory course in theoretical computer science, aimed at giving students the power of using mathematical abstraction and rigorous proof to understand computation. Thus equipped, students will be able to design and use algorithms that apply to a wide variety of computational problems, with confidence about their correctness and efficiency, as well as recognize when a problem may have no algorithmic solution. At the same time, they will gain an appreciation for the beautiful mathematical theory of computation that is independent of (indeed, predates) the technology on which it is implemented.

Course Website

Introduction to Theoretical Computer Science

COMPSCI 1210
2024 Fall

Adam Hesterberg
Tuesday, Thursday
3:45pm to 5:00pm

Computation occurs over a variety of substrates including silicon, neurons, DNA, the stock market, bee colonies and many others. In this course we will study the fundamental capabilities and limitations of computation, including the phenomenon of universality and the duality of code and data. Some of the questions we will touch upon include: Are there functions that cannot be computed? Are there true mathematical statements that can't be proven? Are there encryption schemes that can't be broken? Is randomness ever useful for computing? Can we use the quirks of quantum mechanics to speed up computation?

Course Website

Data Structures and Algorithms

COMPSCI 1240
2025 Spring

Madhu Sudan, Sitan Chen
Monday, Wednesday
2:15pm to 3:30pm

Design and analysis of efficient algorithms and data structures. Algorithm design methods, graph algorithms, approximation algorithms, and randomized algorithms are covered.

Course Website

Fairness and Privacy: Perspectives from Law and Probability

COMPSCI 1260
2024 Fall

Cynthia Dwork
Monday
9:00am to 10:15am

Algorithms are mathematical objects with real life consequences. How do you say “fairness” and “privacy” in mathematics?  How do existing theoretical computer science formulations mesh with legal privacy and nondiscrimination notions? Drawing on key concepts from differential privacy, the theory of algorithmic fairness, and crytography, the course focuses on the analysis and mitigation of privacy loss and unfairness in machine learning and data analysis. Through joint readings and weekly class meetings with the HLS course of the same name, students will develop disciplinary “bilingualism.”

Course Website

Cryptography

COMPSCI 1270
2025 Spring

Boaz Barak
Monday, Wednesday
12:45pm to 2:00pm

Cryptography is as old as human communication itself, but has undergone a revolution in the last few decades. It is now about much more than "secret writing" and includes seemingly paradoxical notions such as communicating securely without a shared secret, and computing on encrypted data. In this challenging but rewarding course we will start from the basics of private and public key cryptography and go all the way up to advanced notions such as fully homomorphic encryption and software obfuscation. This is a proof-based course that will be best appreciated by mathematically mature students.

Course Website

Economics and Computation

COMPSCI 1360
2025 Spring

Ariel Procaccia
Monday, Wednesday
9:45am to 11:00am

The course examines the interplay between economic thinking and computational thinking as it relates to the design of online platforms and societal decision-making mechanisms. The focus is on fundamental concepts, modeling, and mathematical analysis. Topics covered include game theory, incentive alignment, matching, social choice, fair division and social networks. Special attention is given to ideas that draw on both disciplines, such as worst-case bounds on the inefficiency of equilibria, voting rules that are computationally hard to manipulate, and approximation algorithms that discourage strategic behavior.
 

Course Website

Computing Hardware

COMPSCI 1410
2024 Fall

Woodward Yang
Monday, Wednesday
12:45pm to 2:00pm

This course delves into the design principles and practices of high performance digital computing systems that are cost effectively and reliably manufactured with billions of near atomic scale semiconductor components. Key abstractions and foundational concepts are emphasized as the course covers the basic operation of CMOS transistors and logic gates, combinational and sequential logic including Finite State Machines (FSMs), digital memory subsystems, and machine code culminating with the implementation of a MIPS processor. Lab assignments will focus on the practical aspects of digital hardware design by utilizing Field Programmable Gate Arrays (FPGAs), Verliog (Hardware Description Language) and advanced CAD tools for the design, simulation and verification of digital computing hardware.

Course Website

Computer Networks

COMPSCI 1430
2025 Spring

H. Kung
Monday, Wednesday
3:45pm to 5:00pm

Computer networking has enabled the emergence of mobile and cloud computing, creating two of the most significant technological breakthroughs in computing. Computer networks have become even more critical these days since remote activities have become a new norm. We expect several focuses in the coming years. First, we will witness the emergence of 5G wireless mobile networks, which have already begun to replace the current 4G networks. Second, cybersecurity and privacy will receive unprecedented attention from the industry. Third, blockchain technology, which underlies Bitcoin, creates a new trusted network infrastructure for many new distributed applications. Fourth, distance learning and virtual meetings will push the limits of current multicast and network management technologies. In this course, students will learn basic networking protocols as well as these timely topics.

Course Website

Networking at Scale

COMPSCI 1450
2025 Spring

Minlan Yu
Tuesday, Thursday
11:15am to 12:30pm

This course studies computer network topics including Layer 2/Layer 3 topology, routing, transport protocols, traffic engineering, network functions, programmable switches, and software-defined networking. Modern networks have grown to large scale (connecting millions of servers) and high speed (terabits per second) to meet the needs of cloud applications in business and society. Thus, in addition to learning the conventional concepts in networking, we will also discuss how to adapt these concepts to large-scale networks. These discussions will hopefully help deepen our understanding of networking technologies. This course includes lectures and system programming projects. More information can be found at https://github.com/minlanyu/cs145-site.

Course Website

Programming Languages

COMPSCI 1520
2025 Spring

Nada Amin
Tuesday, Thursday
11:15am to 12:30pm

Comprehensive introduction to the principal features and overall design of both traditional and modern programming languages, including syntax, formal semantics, abstraction mechanisms, modularity, type systems, naming, polymorphism, closures, continuations, and concurrency. Provides the intellectual tools needed to design, evaluate, choose, and use programming languages.

Course Website

Operating Systems

COMPSCI 1610
2025 Spring

James Mickens
Monday, Wednesday
2:15pm to 3:30pm

This course focuses on the design and implementation of modern operating systems. The course discusses threads, processes, virtual memory, schedulers, and the other fundamental primitives that an OS uses to represent active computations. An exploration of the system call interface explains how applications interact with hardware and other programs which are concurrently executing. Case studies of popular file systems reveal how an OS makes IO efficient and robust in the midst of crashes and unexpected reboots. Students also learn how virtualization allows a physical machine to partition its resources across multiple virtual machines. Class topics are reinforced through a series of intensive programming assignments which use a real operating system.

Course Website

Data Systems

COMPSCI 1650
2024 Fall

Stratos Idreos
Tuesday, Thursday
9:45am to 11:00am

We are in the big data era and data systems sit in the critical path of everything we do. We are going through major transformations in businesses, sciences, as well as everyday life - collecting and analyzing data changes everything and data systems provide the means to store and analyze a massive amount of data. This course is a comprehensive introduction to modern data systems. The primary focus of the course is on the modern trends that are shaping the data management industry right now: column-store and hybrid systems, shared nothing architectures, cache conscious algorithms, hardware/software co-design, main-memory systems, adaptive indexing, stream processing, scientific data management, and key-value stores. We also study the history of data systems, traditional and seminal concepts and ideas such as the relational model, row-store database systems, optimization, indexing, concurrency control, recovery and SQL. In this way, we discuss both how and why data systems evolved over the years, as well as how these concepts apply today and how data systems might evolve in the future. We focus on understanding concepts and trends rather than specific techniques that will soon be outdated - as such the class relies largely on recent research material and on a semi-flipped class model with a lot of hands-on interaction in each class.

Course Website

Visualization

COMPSCI 1710
2024 Fall

Johanna Beyer
Monday, Wednesday
2:15pm to 3:30pm

An introduction to key design principles and techniques for visualizing data. Covers design practices, data and image models, visual perception, interaction principles, visualization tools, and applications. Introduces programming of web-based interactive visualizations.

Course Website

Engineering Usable Interactive Systems

COMPSCI 1780
2025 Spring

Elena Glassman
Monday, Wednesday
3:45pm to 5:00pm

In this course, students learn critical techniques, concepts, and technologies for building usable interactive systems, alone and in pairs. Assignments provide hands-on experiences with different modern frameworks, platforms, and libraries while conceptual commonalities and distinctions are annotated and explained. Lectures cover relevant basic and advanced topics, such as human cognitive capabilities, iterative prototyping, and human-AI interaction. The final project will require both front-end and back-end development, iterative prototyping with humans, and a final evaluation with target users. Designed for advanced undergraduates.

Course Website

Machine Learning

COMPSCI 1810
2025 Spring

Finale Doshi-Velez, David Alvarez Melis, Stephanie Gil
Tuesday, Thursday
9:45am to 11:00am

Introduction to machine learning, providing a probabilistic view on artificial intelligence and reasoning under uncertainty. Topics include: supervised learning, ensemble methods and boosting, neural networks, support vector machines, kernel methods, clustering and unsupervised learning, maximum likelihood, graphical models, hidden Markov models, inference methods, and computational learning theory. Students should feel comfortable with multivariate calculus, linear algebra, probability theory, and complexity theory. Students will be required to produce non-trivial programs in Python.

Course Website

Introduction to Reinforcement Learning

COMPSCI 1840
2024 Fall

Lucas Janson
Monday, Wednesday
10:30am to 11:45am

Modern AI systems often need the ability to make sequential decisions in an unknown, uncertain, possibly hostile environment, by actively interacting with the environment to collect relevant data. Reinforcement Learning (RL) is a general framework that can capture the interactive learning setting and has been used to design intelligent agents that achieve high-level performance in challenging applications such as Go, computer games, robotic manipulation, health care, and education.

This course provides an introduction to reinforcement learning covering a range of problem formulations, algorithms, and theory. The four main themes of the course are (1) Markov decision processes (Bellman equations/optimality, planning, UCB, unknown environments, linear quadratic control, exploration, imitation learning), (2) bandits (epsilon-greedy, UCB, Thompson sampling, contextual bandits, linear bandits, exploration in MDPs), and (3) methods for large-scale systems (policy gradient methods, deep RL, Monte Carlo tree search, Q-learning). There will also be an Embedded Ethics lecture on ethical issues arising in reinforcement learning. The assignments will focus on a mix of algorithmic and statistical principles, along with their programming implementations.

Course Website

Introduction to Computational Linguistics and Natural-language Processing

COMPSCI 1870
2024 Fall

Stuart Shieber
Monday, Wednesday, Friday
11:15am to 12:30pm

Natural-language-processing applications are ubiquitous: Alexa can set a reminder, or play a particular song, or provide your local weather if you ask; Google Translate can make documents readable across languages; ChatGPT can be prompted to generate convincingly fluent text, which is often even correct. How do such systems work? This course provides an introduction to the field of computational linguistics, the study of human language using the tools and techniques of computer science, with applications to a variety of natural-language-processing problems such as these. You will work with ideas from linguistics, statistical modeling, machine learning, and neural networks, with emphasis on their application, limitations, and implications. The course is lab- and project-based, primarily in small teams, and culminates in the building and testing of a question-answering system.

Course Website

Classics of Computer Science

COMPSCI 1910
2025 Spring

Harry Lewis
Tuesday, Thursday
2:15pm to 3:30pm

Papers every computer scientist should have read, from all areas of the field and dating from its origins to the present.

Course Website

Designing K–12 Computer Science Learning Experiences

COMPSCI 1960
2025 Spring

Karen Brennan
Wednesday
9:00am to 11:45am

From computational thinking to workforce arguments, there is considerable interest in and excitement about including computer science education for all K–12 students. Yet, unlike other disciplines with a much longer history in formal schooling, the interest in computer science education is not yet supported by commensurate attention to research and teacher practice. In this course, we will examine the state of K–12 computing education: questioning its value, examining its history, and imagining and contributing to its potential. The course will be organized as both a reading group and a lab, building a community of people who are committed to K–12 CS education. Each week you will read classic and current research, and write accompanying memos to document your evolving understandings of the field. Throughout the course, either individually or with partners, you will develop an independent project that explores the design of K–12 computer science learning experiences. Some examples of possible projects include: designing CS-standalone or cross-curricular learning activities and curriculum, building a programming language for novices, developing an annotated bibliography, critically analyzing policy documents such as curriculum frameworks and standards from around the world, or contributing to current K–12 CS education research initiatives.

Course Website

High Performance Computing for Science and Engineering

COMPSCI 2050
2025 Spring

Ignacio Becker Troncoso
Tuesday, Thursday
2:15pm to 3:30pm

With manufacturing processes reaching the limits in terms of transistor density on today’s computing architectures, efficient modern code must exploit parallel execution to maintain scaling of available hardware resources. The use of computers in academia, industry and society is a fundamental tool for solving (scientific) problems while the "think parallel" mindset of code developers is still lagging behind. The aim of this course is to introduce the student to the fundamentals of parallel programming and its relationship on computer architectures. Various forms of parallelism are discussed and exploited through different programming models with focus on shared and distributed memory programming. The learned techniques are tried out by means of homework, lab sessions and a term project.

Course Website

Applied Privacy for Data Science

COMPSCI 2080
2025 Spring

Salil Vadhan
Monday, Wednesday
11:15am to 12:30pm

The risks to privacy when making human subjects data available for research and how to protect against these risks using the formal framework of differential privacy. Methods for attacking statistical data releases, the mathematics of and software implementations of differential privacy, deployed solutions in industry and government. Assignments will include implementation and experimentation on data science tasks.

Course Website

Computational Complexity

COMPSCI 2210
2024 Fall

Madhu Sudan
Monday, Wednesday
11:15am to 12:30pm

A quantitative theory of the resources needed for computing and the impediments to efficient computation. The models of computation considered include ones that are finite or infinite, deterministic, randomized, quantum or nondeterministic, discrete or algebraic, sequential or parallel.

Course Website

Quantum Computation and Quantum Complexity

COMPSCI 2231
2025 Spring

Anurag Anshu
Wednesday, Friday
9:45am to 11:00am

An introduction to the quantum view on a variety of disciplines: algorithms, complexity, cryptography and information. Course will elucidate the source of quantum advantage in computation, ties of quantum computation with physics, and the power of entanglement.

Course Website

Algorithms at the Ends of the Wire

COMPSCI 2241
2025 Spring

Michael Mitzenmacher
Tuesday, Thursday
11:15am to 12:30pm

Covers topics related to algorithms for big data, especially related to networks and database systems. Themes include sketch-based data structures, compression, graph and link information, and information theory. Requires a major final research-based project.

Course Website

Algorithms for Data Science

COMPSCI 2243
2024 Fall

Sitan Chen
Monday, Wednesday
2:15pm to 3:30pm

This is a graduate topics class on algorithmic challenges in modern machine learning and data science. We will touch upon a number of domains (generative modeling, deep learning theory, robust statistics, Bayesian inference) and frameworks for algorithm design (spectral/tensor methods, moment methods, message passing, diffusions), focusing on provable guarantees. The theory draws upon a range of techniques from stochastic calculus, harmonic analysis, statistical physics, algebra, and beyond. We will also explore the myriad modeling challenges in building this theory and prominent paradigms (semi-random models, smoothed complexity, oracles) for going beyond traditional worst-case analysis.

Course Website

Cryptography

COMPSCI 2270
2025 Spring

Boaz Barak
Monday, Wednesday
12:45pm to 2:00pm

Cryptography is as old as human communication itself, but has undergone a revolution in the last few decades. It is now about much more than "secret writing" and includes seemingly paradoxical notions such as communicating securely without a shared secret, and computing on encrypted data. In this challenging but rewarding course we will start from the basics of private and public key cryptography and go all the way up to advanced notions such as fully homomorphic encryption and software obfuscation. This is a proof-based course that will be best appreciated by mathematically mature students.

Course Website

Computational Learning Theory

COMPSCI 2280
2025 Spring

Leslie Valiant
Tuesday, Thursday
12:45pm to 2:00pm

Possibilities of and limitations to performing learning by a computational process. Computationally feasible generalization and its limits. Topics include computational models of learning, polynomial time learnability, learning from examples and from queries to oracles. Applications to Boolean functions, languages and geometric functions. Darwinian evolution as learning.

Course Website

Economic Analysis as a Frontier of Theoretical Computer Science

COMPSCI 2370
2024 Fall

Yannai Gonczarowski
Monday, Wednesday
1:30pm to 2:45pm

How can we use tools from statistical learning theory to design better auctions? Can we use cryptography to better implement matching mechanisms? And how should we approach formally proving that welfare in Nash equilibria for many games is not "much worse" than in the social optimum? This course explores the application of diverse ideas, techniques, and solution aesthetics from theoretical computer science to derive meaningful new insights into classic economic problems. The three main themes are approximation theorems (including bounding the loss in revenue or welfare due to lack of information, to strategic behavior, or to impracticality of the optimal mechanism); various notions of complexity (including computational complexity, communication complexity, and sample complexity); and cryptographic tools (including cryptographic commitments, multiparty computation, and zero-knowledge proofs). Economic applications mostly include analysis of equilibria, pricing, and mechanism design.

Course Website

Computing at Scale

COMPSCI 2420
2024 Fall

H. Kung
Monday, Wednesday
3:45pm to 5:00pm

Specialized AI accelerators enable efficient AI computations for a variety of tasks at various scales using a wide range of parallel, distributed, and embedded computing platforms. For example, in generative AI applications such as ChatGPT and Stable Diffusion, these accelerators allow for (1) distributed model training and low-latency, high-throughput inference serving in the cloud, and (2) efficient private training and inference using local knowledge on resource-constrained edge devices. In this course, students will learn systematic methods for implementing parallel computations for computer vision and language models on numerous computing cores or nodes. They will also learn techniques for co-designing machine learning models, data curation methods, computing algorithms, and system architectures. Upon successful completion of this course, students will be equipped to tackle the challenging tasks of designing and utilizing energy-efficient, high-performance AI accelerators.

Course Website

Advanced Computer Networks

COMPSCI 2430
2024 Fall

Minlan Yu
Tuesday, Thursday
11:15am to 12:30pm

This is a graduate-level course on computer networks. This course offers an in-depth exploration of a subset of advanced topics in networked systems. We will discuss the latest developments in the entire networking stack, the interactions between networks and high-level applications, and their connections with other system components such as compute and storage.

In this year's edition, we will use machine learning as a prime example to understand its unique requirements and challenges in the context of networking. As machine learning applications increasingly rely on larger models and faster accelerators, the demand for enhanced networking capabilities becomes imperative. Throughout this course, we will study cutting edge networking solutions and principles for  co-designing networks with compute and storage, to meet the evolving needs of machine learning applications. The course will include lectures, in-class presentations, paper discussions, and a research project.

More information of this course is at https://github.com/minlanyu/cs243-site.

Course Website

Advanced Topics in Programming Languages

COMPSCI 2520R
2024 Fall

Nada Amin
Tuesday, Thursday
11:15am to 12:30pm

Seminar course exploring recent research in programming languages. Topics vary from year to year. Students typically read and present research papers, undertake a research project.

Course Website

Formal Methods for Computer Security

COMPSCI 2540
2025 Spring

Stephen Chong
Tuesday, Thursday
11:15am to 12:30pm

This course explores formal methods for computer security, including formal security models, relationships between security properties/policies and enforcement mechanisms, principled techniques and tools to specify, analyze, and construct secure computer systems. Specific topics include properties, hyperproperties, side channels, reasoning about cryptographic protocols, information flow, authorization logics, and verification techniques. Assessment will include homeworks and/or small projects during the semester as well as a final, larger project that is open-ended and driven by student interests.

Course Website

Research Topics in Operating Systems

COMPSCI 2610
2025 Spring

Eddie Kohler
Monday, Wednesday
5:15pm to 6:30pm

An introduction to operating systems research. Paper-based seminar course that introduces students to the state of the art in systems research through historical and quantitative lenses. Students will read and discuss research papers and complete a final research project.

Course Website

Introduction to Distributed Computing

COMPSCI 2620
2025 Spring

James Waldo
Monday, Wednesday
2:15pm to 3:30pm

An examination of the special problems associated with distributed computing such as partial failure, lack of global knowledge, asynchrony and coordination of time, and protocols that function in the face of these problems. Emphasis on both the theory that grounds thinking about these systems and in the ways to design and build such systems.

Course Website

Systems Security

COMPSCI 2630
2024 Fall

James Mickens
Monday, Wednesday
2:15pm to 3:30pm

This course explores practical attacks on modern computer systems, explaining how those attacks can be mitigated using careful system design and the judicious application of cryptography. The course discusses topics like buffer overflows, web security, information flow control, and anonymous communication mechanisms such as Tor. The course includes several small projects which give students hands-on experience with various offensive and defensive techniques; the final, larger project is open-ended and driven by student interests.

Course Website

Big Data Systems

COMPSCI 2650
2025 Spring

Stratos Idreos
Tuesday, Thursday
9:45am to 11:00am

Big data is everywhere. A fundamental goal across numerous modern businesses and sciences is to be able to utilize as many machines as possible, to consume as much information as possible and as fast as possible. The big challenge is how to turn data into useful knowledge. This is a moving target as both the underlying hardware and our ability to collect data evolve. In this class, we discuss how to design data systems, data structures, and algorithms for key data-driven areas, including relational systems, distributed systems, graph systems, noSQL, newSQL, machine learning, and neural networks. We see how they all rely on the same set of very basic concepts and we learn how to synthesize efficient solutions for any problem across these areas using those basic concepts.

Course Website

Conceptualizing, Building, and Evaluating Usable Novel Interactive Systems

COMPSCI 2780
2025 Spring

Elena Glassman
Monday, Wednesday
3:45pm to 5:00pm

Students learn critical techniques, concepts, and technologies for building usable novel interactive systems, alone and in teams. Assignments provide hands-on experiences with different modern frameworks, platforms, and libraries while conceptual commonalities and distinctions are annotated and explained at multiple levels, from the programming environments to the interfaces users interact with. Discussions grounded in readings will also cover human cognitive capabilities, iterative prototyping, and human-AI interaction. The final research project requires iteratively designing and building a novel interactive system informed by pilot user studies and a final evaluation with target users. Designed for PhD students interested in HCI or using interactive systems as tools for discovery in other fields.

Course Website

Research Topics in Human-Computer Interaction

COMPSCI 2790R
2024 Fall

Elena Glassman
Monday, Wednesday
1:30pm to 2:45pm

Students will read, write about, prepare presentations about, and discuss human-computer interaction (HCI) and HCI-relevant work with a focus on papers about interfaces and automation that work especially well with (or clash against) human cognitive capabilities. Papers will primarily be on the building and evaluation of novel systems, as well as theories of and studies characterizing human cognition relevant to human-AI interaction scenarios. As a semester-long final project, students will pursue a research project of their own design in self-organized groups and present their findings in writing and orally in a conference-style format, as means to understand more deeply the processes behind HCI research.

Course Website

Topics in Machine Learning: Computational Properties in Interpretable Machine Learning

COMPSCI 2822R
2024 Fall

Finale Doshi-Velez
Monday, Wednesday
9:45am to 11:00am

There has been growing interest in recent years for machine learning systems that are somehow transparent about their inner workings -- whether it be that the entire system is inherently interpretable, or that a single decision can somehow be explained. However, the question of what approach is best for what context remains elusive. In this course, we will focus on computational properties of interpretable machine learning methods, such as faithfulness or stability. Assessing methods with respect to these properties may allow us to rule out poorly-performing approaches without the need for expensive user studies. By categorizing methods by their computational properties, we will also be able to start thinking about which methods might be useful for a specific context. After a few initial assignments, the course will be focused on reading papers, discussion, and a semester-long project.

Course Website

Advanced Computer Vision

COMPSCI 2831
2024 Fall

Todd Zickler
Tuesday, Thursday
12:45pm to 2:00pm

Vision as an ill-posed inverse problem: image formation, two-dimensional signal processing; feature analysis; image segmentation; color, texture, and shading; multiple-view geometry; object and scene recognition; and applications.

Course Website

AI for Social Impact

COMPSCI 2880
2024 Fall

Milind Tambe
Monday, Wednesday
3:45pm to 5:00pm

Recent years have seen AI successfully applied to societal challenge problems. Indeed, recognizing the potential of AI for tremendous social impact in the future, "AI for social impact" is growing as a subdiscipline within AI. In this course, we will discuss successful case studies of  use of AI for public health, environmental sustainability, public safety and public welfare. Simultaneously, we will discuss key foundations of the area of AI for social impact. To that end, among other topics, we will focus on challenges in AI for Social Impact, what makes projects successful, how to investigate project impact in the field and ethical considerations for such projects. A key part of this course will be AI4SI projects with non-profits.

Course Website

Seminar on Effective Research Practices and Academic Culture

COMPSCI 2901
2024 Fall

John Girash
Friday
9:45am to 11:45am

This is a reading and discussion-based seminar designed for entering Computer Science Ph.D. students. This course prepares students to manage the difficult and often undiscussed challenges of Ph.D. programs through sessions on research skill building (e.g. paper reading, communication), soft skill building (e.g. managing advising relationships, supporting your peers), and academic culture (e.g. mental health in academia, power dynamics in scientific communities), as well as research and professional-oriented discussions. This is a full-year, 4-unit course, meeting once a week in each of the fall and the spring. Students must complete both terms of this course (CS 2901 and CS 2902) within the same academic year to receive credit.

Course Website

Seminar on Effective Research Practices and Academic Culture

COMPSCI 2902
2025 Spring

John Girash
Friday
9:45am to 11:45am

This is a reading and discussion-based seminar designed for entering Computer Science Ph.D. students. This course prepares students to manage the difficult and often undiscussed challenges of Ph.D. programs through sessions on research skill building (e.g. paper reading, communication), soft skill building (e.g. managing advising relationships, supporting your peers), and academic culture (e.g. mental health in academia, power dynamics in scientific communities), as well as research and professional-oriented discussions. This is a full-year, 4-unit course, meeting once a week in each of the fall and the spring. Students must complete both terms of this course (CS 2901 and CS 2902) within the same academic year to receive credit.

 

Course Website

Special Topics in Computer Science

COMPSCI 2990R
2024 Fall

Krzysztof Gajos

Supervision of experimental or theoretical research on acceptable problems in computer science and supervision of reading on topics not covered by regular courses of instruction.

Course Website

Special Topics in Computer Science

COMPSCI 2990R
2025 Spring

Krzysztof Gajos

Supervision of experimental or theoretical research on acceptable problems in computer science and supervision of reading on topics not covered by regular courses of instruction.

Course Website