CS 292C: Formal Semantics and Type Systems

This course will investigate the formal specification of programming languages, focusing on their semantics (the behavior of a program when it is executed) and type systems (providing a static guarantee about how a well-typed program will behave), and connecting the two via a formal proof of type system soundness (i.e., that the guarantee provided by a type system correctly describes program behavior according to the programming language semantics).

CS 292G: Graduate Course in Cryptography

Recent breakthrough of "quantum supremacy" by Google has brought us one step closer to building quantum computers that pose a threat to secure systems being used in practice. The main goal of this course is to study the theory of post-quantum cryptographic systems -- those that are secure even if quantum computers come into existence. We will introduce different types of cryptographic schemes and show how to build them from mathematical assumptions that resist known quantum attacks.

CS 291I: Bionic Vision

What would the world look like with a bionic eye? This graduate course will introduce students to the multidisciplinary field of bionic vision, with an emphasis on both the computer science and neuroscience of the field. The course will give an overview of current bionic eye technology designed to restore vision to people living with incurable blindness.

CS 293G: Computing on Encrypted Data

The course will cover systems that handle and compute on encrypted data: databases that work over encrypted data, media streaming services that work on encrypted client requests, email services, anonymous messaging services, ML systems that perform training and inference on encrypted data, and so on. There are no official prerequisites; however, background in systems and/or cryptography will be very helpful. The course will be structured around paper readings, class discussions, high-quality paper review writing, quizzes, and perhaps an individual research project.

CS 291I: Computational Systems for Visual Art and Design

Computational systems of rules, relationships, and behaviors can extend traditional art and design practices or support new creative workflows and outcomes. In this course, we will explore the creation of computational systems for visual art and design. Following a studio format, we will learn creative coding platforms and algorithms to create visual works that are flexible, dynamic, and generative. In the process, we will touch on the design philosophy and abstractions of existing creative coding platforms and examine methods to create alternatives.

CS 291A: Scalable Internet Services

This course explores advanced topics in highly scalable Internet services and their underlying systems architecture. Software today is increasingly being delivered as a service: accessible globally via web browsers and mobile applications and backed by millions of servers. Modern frameworks and platforms are making it easier to build and deploy these systems, such as Ruby on Rails and Amazon’s EC2. Yet despite these advances, some concerns just don’t go away.

CS 292C: Computer-Aided Reasoning for Software

This is a graduate-level introduction to automated reasoning techniques and their application in tools for the design, analysis, and synthesis of software. In the first half of the course, we will study the logical foundations and algorithms behind modern SAT solvers, SMT solvers, and finite model finders. In the second half of the course, we will apply these techniques to automatic bug finding, program verification, and program synthesis.

CS 291K: Introduction to Deep Learning

CS291K is a graduate-level introductory course to machine learning, in particular deep learning and will cover mostly DL topics developed in the past 4 to 5 years. While previous exposure to pattern recognition, machine learning, artificial intelligence and neural networks is not required, older topics (more than 4 or 5 years old) will not be discussed in any detail. Graduate-level preparation in math (especially probability, random processes, and linear algebra) is a must and students should know how to program in Python.