Computer Science (CPSC)

* CPSC 0350b / MUSI 0035b, Twenty-First Century Electronic and Computer Music TechniquesScott Petersen

Exploration of twenty-first century electronic and computer music through the diverse subjects and issues at the intersection of technology and new music. How computers have changed and challenged the analysis, composition, production, and appreciation of music over the last fifty years. Knowledge of basic music theory and the ability to read Western musical notation is assumed. Enrollment limited to first-year students.   QR
HTBA

CPSC 1001a or b, Introduction to ProgrammingStaff

Development on the computer of programming skills, problem-solving methods, and selected applications. No previous experience with computers necessary.  QR0 Course cr
HTBA

CPSC 1100a, Python Programming for Humanities and Social SciencesSohee Park

Introduction to computer science and Python programming with domain-specific applications. Students learn how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, web development, and statistical tools. Students learn to apply computing techniques in the fields of social sciences & humanities by analyzing data. No previous programming experience is required. This course is intended for students of social sciences & humanities majors, but other majors are also welcome.  QR0 Course cr
MW 11:35am-12:50pm

CPSC 1230a or b / PLSC 3508a or b / S&DS 1230a or b / S&DS 5230a or b, YData: An Introduction to Data ScienceStaff

Computational, programming, and statistical skills are no longer optional in our increasingly data-driven world; these skills are essential for opening doors to manifold research and career opportunities. This course aims to dramatically enhance knowledge and capabilities in fundamental ideas and skills in data science, especially computational and programming skills along with inferential thinking. YData is an introduction to Data Science that emphasizes the development of these skills while providing opportunities for hands-on experience and practice. YData is accessible to students with little or no background in computing, programming, or statistics, but is also engaging for more technically oriented students through extensive use of examples and hands-on data analysis. Python 3, a popular and widely used computing language, is the language used in this course. The computing materials will be hosted on a special purpose web server.  QR
HTBA

CPSC 1700b / GLBL 2199b, AI for Future PresidentsBrian Scassellati

AI is becoming an essential tool for not only scientists and engineers, but also for physicians, judges, artists, and presidents. This course is designed for all students, with no prerequisites, and requires no programming. We look at topics that range from job loss due to automation, how machine learning systems are impacting healthcare, the impact of language models on education, and many other topics that are at the front of the headlines today. Will ChatGPT make essays obsolete? Will robots take my job? How smart will machines become? Students learn some of the basic limits of this technology, understand how to critically analyze public claims made about AI, and understand the societal impact that AI is having.  0 Course cr
HTBA

CPSC 1710a, Introduction to AI ApplicationsXiuye 'Sue' Chen

The capability and scale of modern AI applications is now something that we have to reckon with constantly. This class invites you to set aside dedicated time to focus on the study of the technology behind the news. We develop theoretical intuition and practical skills side by side. The central practice for this class is to use AI coding agents to study the subject of AI, which serves as a template for continued learning in this new age. We work through machine learning fundamentals and deep learning neural networks, language models and GenAI, extending to agentic AI and real-word use. Workshops and homework assignments introduce critical thinking frameworks for working with AI as a learning tutor and thinking partner, and for building AI applications. The class is designed for students who have at least introductory STEM background in either coding or math, as well as solid communication skills and the self-drive for craftsmanship. Prerequisite: one semester equivalent of coding or math.  QR
TTh 11:35am-12:50pm

CPSC 1750a, C Programming Language and LinuxOzan Erat

We discuss the basics of the software development toolchain using the C programming language in the Linux operating system environment. Topics include an overview of C programming language including pointers, malloc, free, function pointers, recursion, and C macros. We further discuss tools useful for developing complex programs including git, compilers, Linux environment, gdb, and valgrind. Finally, we apply the language and tools to multiple fields of computer science. Familiarity with basic programming. CPSC100 or CPSC112 recommended.  QR
TTh 11:35am-12:50pm

CPSC 1830a, Law, Technology, and CultureBrad Rosen

An exploration of the myriad ways in which law and technology intersect, with a special focus on the role of cyberspace. Topics include digital copyright, free speech, privacy and anonymity, information security, innovation, online communities, the impact of technology on society, and emerging trends. No previous experience with computers or law necessary.  SO
MW 4pm-5:15pm

* CPSC 1840b, Intellectual Property in the Digital AgeCecillia Xie

The seminar focuses on the evolving and oftentimes vexing intellectual property regime of the new digital age. Topics include copyright, fair use, remix culture, access to knowledge, technological innovations, the increasing relevance of trademarks in the new information society, the tension between creativity/creating and the intellectual property rules which either foster or inhibit it, and the new information culture of the digital age. Prerequisite: CPSC 183 or permission of instructor.  HU, SO
HTBA

CPSC 2000a or b, Introduction to Information SystemsStephen Slade

The real-world artifacts and implementations that comprise the vital computational organisms that populate our world. Hardware and software and the related issues of security, privacy, regulation, and software engineering. Examples stress practical applications of technology, as well as limitations and societal issues. After CPSC 100 or 112 or equivalent.  QR
HTBA

CPSC 2010a or b, Introduction to Computer ScienceStaff

Introduction to the concepts, techniques, and applications of computer science. Topics include computer systems (the design of computers and their languages); theoretical foundations of computing (computability, complexity, algorithm design); and artificial intelligence (the organization of knowledge and its representation for efficient search). Examples stress the importance of different problem-solving methods. After CPSC 100, CPSC 112 or equivalent.  QR
HTBA

CPSC 2020a or b, Mathematical Tools for Computer ScienceStaff

Introduction to formal methods for reasoning and to mathematical techniques basic to computer science. Topics include propositional logic, discrete mathematics, and linear algebra. Emphasis on applications to computer science: recurrences, sorting, graph traversal, Gaussian elimination.  QR0 Course cr
HTBA

CPSC 2021b, Mathematical Tools for Computer Science IIDylan McKay

This course is a second course in Mathematics for Computer Science students, intended to follow an initial course in Discrete Mathematics (such as CPSC 2020). The course is primarily focused on introducing Linear Algebra, while also expanding on Probability.  CPSC 2020, or an equivalent course in Discrete Mathematics.  QR0 Course cr
HTBA

* CPSC 2155b / AMST 2255b, Artificial Intelligence, Ethics, and SocietyJulian Posada

This seminar examines the development and implementation of artificial intelligence technologies across a broad array of social contexts, incorporating historical, cultural, economic, legal, and political perspectives. The course provides an in-depth study of contemporary AI, from its historical development and varied definitions to current issues, emphasizing the relationship between power dynamics and ethical considerations. After establishing a foundation in theories and the study of ethics and power, the course delves into diverse aspects of AI, including the implications of human labor and material infrastructures in the development of the technology, concerns related to bias and discrimination, and its impacts on the environment. The concluding module applies these discussions to real-world scenarios, exploring how to address ethical and societal issues through legal and human rights frameworks, governance and regulation, and grassroots initiatives. This course is ideal for both computer science and engineering students seeking a socio-humanistic perspective on artificial intelligence, and humanities and social sciences students interested in the societal implications of AI.  HU, SO
M 4pm-5:55pm

CPSC 2200b, Introduction to Data Analysis and Machine Learning for Humanities and Social SciencesSohee Park

Humanities and social sciences majors find it hard to learn contemporary machine learning and data Ssience techniques because existing courses require linear algebra, multivariate calculus, and extensive coding experiences. This course teaches a practical introduction to data analysis and machine learning for humanities and social sciences students without college-level math or extensive programming experiences. Prerequisites: Programming experience with Python; CPSC 110, CPSC 200, or similar. Basic knowledge of social science research methods or humanities analysis is helpful. Students who satisfy the math and computer science requirements for CPSC 381 should take that course instead. Students who have taken CPSC 381 are not eligible to enroll in this course.  QR0 Course cr
HTBA

CPSC 2230a or b, Data Structures and Programming TechniquesStaff

Topics include programming in C; data structures (arrays, stacks, queues, lists, trees, heaps, graphs); sorting and searching; storage allocation and management; data abstraction; programming style; testing and debugging; writing efficient programs. After CPSC 2000 or 2010 (formerly CPSC 200 or 201).  QR0 Course cr
HTBA

* CPSC 2265a / AMST 2265a, Topics in Critical ComputingJulian Posada and Theodore Kim

This course introduces the social, cultural, and political contexts shaping the contemporary development and use of computing and information technology. Through structured discussions, lectures, and collaborative activities, participants will explore computing's historical evolution, ethical and societal implications, and tangible impacts, including its reliance on transnational infrastructures and environmental effects. Emphasis will be placed on analyzing computer-related social issues through theoretical and critical approaches, empirical research, and governance frameworks, as well as both technical and social strategies for addressing key challenges. The course is designed for students from diverse academic backgrounds across all divisions, aiming to develop a nuanced understanding of computation's intersection with broader social systems and to equip them with tools to engage with critical issues in the rapidly shifting digital landscape.  HU, SC
M 1:30pm-3:25pm

* CPSC 2800a, Directed ReadingTheodore Kim

Individual study for qualified students who wish to investigate an area of computer science not covered in regular courses. A student must be sponsored by a faculty member who sets the requirements and meets regularly with the student. Requires a written plan of study approved by the faculty adviser and the director of undergraduate studies. May be taken more than once for credit.
HTBA

* CPSC 2900a, Directed ResearchTheodore Kim

Individual research. Requires a faculty supervisor and the permission of the director of undergraduate studies. May be taken more than once for credit.
HTBA

CPSC 3230a or b, Introduction to Systems Programming and Computer OrganizationStaff

This course is the 'Intensive' Introduction to Systems Programming and Computer Programming, and is an alternative to the regular two-course systems programming sequence of CPSC 3231 and CPSC 3232. The course covers machine architecture and computer organization, systems programming in a high-level language, issues in operating systems, software engineering, prototyping in scripting languages, and intensive problem sets. After CPSC 2230.  QR
HTBA

CPSC 3231a, Computer Systems 1: FoundationsMichael Shah

This course teaches the common underlying elements of computer systems from the programmers perspective. This is part of a two course sequence for understanding computer systems, and providing students a deeper understanding of current abstractions presented in software and hardware for both their own usage and implementation. Students will write, implement, and use debugging tools on programming projects aligned with the lecture content. The content of this course includes understanding issues on how software applications, the operating system, and hardware interface. Topics within these domains include computer architecture, instruction sets, operating systems, the program stack, compilers, and programming using a systems programming language. Other topics of emphasis include memory management, threads, and parallelism, and understanding the build process. Prerequisite: After CPSC 2230.  QR
MW 1:05pm-2:20pm

CPSC 3270a or b, Object-Oriented ProgrammingTimothy Barron

Object-oriented programming as a means to designing and writing efficient, reliable, modular, and reusable code. Covers core concepts and features of object-oriented languages (classes, inheritance, composition, encapsulation, polymorphism, and exceptions) as well as the use of object-oriented design patterns (iterator, decorator, strategy, adapter, observer, etc.). This course was previously number CPSC 427. After CPSC 223.  QR
HTBA

CPSC 3340a, Creative Embedded SystemsScott Petersen

Ubiquitous computing is creating new canvases and opportunities for creative ideas. This class explores the use of microprocessors, distributed sensor networks, IoT, and intermedia systems for the purposes of creative expression. The course is delivered in a mixed lecture and lab format that introduces the fundamental concepts and theory behind embedded systems as well as issues particular to their creative employment. The key objective of the course is for students to conceive of and implement creative uses of computation. To this end, skills to be obtained during the course are as follows: (1) appreciate the current efforts and motivation to push the limitations of computation for creative expression, both in new application and new foundational research; (2) weigh factors such as cost, power, processing, memory, I/O capabilities, and networking capabilities when choosing a set of embedded devices and sensors; (3) contextualize unfamiliar hardware and languages through examples, documentation, and familiar design pattern; and (4) manage communication between multiple languages, devices, and protocols. Additionally, at the end of the course students will have a portfolio of their work in the form of writing, code, video, audio, and physical artifacts. Prerequisite: CPSC 223 or equivalent or by permission of instructor.  QRRP
TTh 1:30pm-3:25pm

CPSC 3380b / ECE 3481b, Digital SystemsEdward Tracy

Development of engineering skills through the design and analysis of digital logic components and circuits. Introduction to gate-level circuit design, beginning with single gates and building up to complex systems. Hands-on experience with circuit design using computer-aided design tools and microcontroller programming. Recommended preparation: ECE 2011.  QR
TTh 4pm-5:15pm

* CPSC 3620b / AMTH 3620b / ECE 4351b, Decisions and Computations across NetworksA Stephen Morse

For a long time there has been interest in distributed computation and decision making problems of all types. Among these are consensus and flocking problems, the multi-agent rendezvous problem, distributed averaging, gossiping, localization of sensors in a multi-sensor network, distributed algorithms for solving linear equations, distributed management of multi-agent formations, opinion dynamics, and distributed state estimation. The aim of this course is to explain what these problems are and to discuss their solutions. Related concepts from spectral graph theory, rigid graph theory, non-homogeneous Markov chain theory, stability theory, and linear system theory are covered. Although most of the mathematics need is covered in the lectures, students taking this course should have a working understanding of basic linear algebra. The course is open to all students.  Prerequisite: Linear algebra or instructor permission.  SC
MW 2:35pm-3:50pm

CPSC 3640a, Decentralized Payments, Contracts, and Finance for Humans and AIFan Zhang

Blockchains provide a platform for humans to coordinate economic activity without relying on centralized intermediaries. Emerging standards such as EIP-8004 aim to extend these capabilities to autonomous agents, enabling AI systems to transact and coordinate through shared protocols. This introductory course explores such decentralized applications, including tokens, exchanges, lending protocols, stablecoins, oracles, decentralized governance, and emerging standards for AI coordination and interoperability. Students learn system architecture, security intuition, and how to build and debug decentralized applications. Required: CPSC 201 and 202 (or equivalent), and a basic understanding of computer systems and networks.  QR
MW 11:35am-12:50pm

CPSC 3650a or b / ECON 3365a or b, AlgorithmsStaff

Paradigms for algorithmic problem solving: greedy algorithms, divide and conquer, dynamic programming, and network flow. NP completeness and approximation algorithms for NP-complete problems. Algorithms for problems from economics, scheduling, network design and navigation, geometry, biology, and optimization. Provides algorithmic background essential to further study of computer science. Only one of CPSC 365 or CPSC 366 may be taken for credit. Prerequisites: CPSC 202 or MATH 244, CPSC 223.  QR
HTBA

CPSC 3700a, Introduction to Artificial IntelligenceTesca Fitzgerald

How can we enable computers to make rational, intelligent decisions? This course explores fundamental techniques for Artificial Intelligence (AI), covering topics such as search, planning, learning, and reasoning under uncertainty. Through hands-on programming projects, students learn conceptual, algorithmic, and practical considerations for implementing foundational AI algorithms. By the end of this class, students have an understanding of the history and breadth of AI problems and topics, and are prepared to undertake more advanced courses in robotics, computer vision, natural language processing, and machine learning. Prerequisites: CPSC 2020 or MATH 2440 and CPSC 2230. Students should also be familiar with basic object-oriented programming concepts in Python.
TTh 1:05pm-2:20pm

CPSC 3810b, Introduction to Machine LearningAlex Wong

This course focuses on fundamental topics in machine learning. We begin with an overview of different components of machine learning and types of learning paradigms. We introduce a linear function, discuss how one can train a linear function on a given dataset, and utilize it to tackle classification and regression problems. We then consider kernel methods to enable us to solve nonlinear problems. Additionally, we introduce the concept of generalization error and overfitting. We discuss the role of regularization and extend linear regression to ridge regression. We also cover optimization, beginning from gradient descent and extending it to stochastic gradient descent and its momentum variant; the concept of alternating optimization; the curse of dimensionality; and topics on dimensionality reduction. We conclude the course with neural networks: how to build them using the topics discussed, how to optimize them, and how to apply them to solve a range of machine learning tasks. Students should have passed courses in data structures and object-oriented programming (e.g. CPSC 223a or equivalent courses), foundational mathematical tools such as discrete math and linear algebra (e.g. CPSC 202 or equivalent courses), calculus (e.g. MATH 112, MATH 115, MATH 120, or equivalent courses), linear algebra (e.g. MATH 225, or equivalent courses), and artificial intelligence (e.g. CPSC 370/570). A background in statistics will be useful, but not required. Experience in programming with Python and familiarity with Google Colab, and numerical and image processing packages (i.e. NumPy, SciPy) will be helpful.
HTBA

* CPSC 4140b, Computing Then and Now: How Digital Technology EvolvesMichael Fischer

The goal of this course is to provide the historical perspective needed to think critically about today's emerging computing technologies such as AI, self-driving cars, autonomous drones, quantum computers, and blockchains. This course traces the evolution of selected examples of digital technology from their intellectual bases through ubiquitous deployment. Examples are drawn from computer hardware and software systems, networking, algorithms, and applications. NOTE:  This course meets during Reading Period: the week between the last week of classes and finals week. Prerequisite: CPSC 223 and junior or senior level standing in the major.
HTBA

CPSC 4190a, Full Stack Web ProgrammingAlan Weide

This course introduces students to a variety of advanced software engineering and programming techniques in the context of full-stack web programming. The focus of the course includes both client- and server-side programming (and database programming), client/server communication, user interface programming, and parallel programming. This course is designed for students who have taken CPSC 223 (but do not need CPSC 323 or higher-level computer science systems courses) and wish to learn the complete programming framework of Web programming. For a systematic treatment of core software engineering techniques, using Web programming as a running example framework, consider taking CPSC 439, which targets students with more extensive programming experiences (after CPSC 323). Prerequisite: CPSC 223
MW 9am-10:15am

CPSC 4230b, Design and Implementation of Operating SystemsAnurag Khandelwal

The design and implementation of operating systems. Topics include synchronization, deadlock, process management, storage management, file systems, security, protection, and networking. After CPSC 323.  QR
HTBA

CPSC 4260a, Building Distributed SystemsY. Richard Yang

Ubiquitous services such as Google, Facebook, and Amazon run on the back of massive distributed systems. This course covers the fundamental principles, abstractions, and mechanisms that inform the design of such systems, as well as the practical details of real-world implementations. Technical topics covered include properties such as consistency, availability, durability, isolation, and failure atomicity; as well as protocols such as RPC, consensus, consistent hashing, and distributed transactions. The final project involves implementing a real-world distributed service. After CPSC 323.  QR
HTBA

CPSC 4310a / MUSI 4228a, Computer Music: Algorithmic and Heuristic CompositionScott Petersen

Study of the theoretical and practical fundamentals of computer-generated music, with a focus on high-level representations of music, algorithmic and heuristic composition, and programming languages for computer music generation. Theoretical concepts are supplemented with pragmatic issues expressed in a high-level programming language. Ability to read music is assumed. After CPSC 2020 and 2230.  QR
MW 11:35am-12:50pm

CPSC 4370a, Database SystemsAvi Silberschatz

Introduction to database systems. Data modeling. The relational model and the SQL query language. Relational database design, integrity constraints, functional dependencies, and normal forms. Object-oriented databases. Database data structures: files, B-trees, hash indexes. After CPSC 2230.  QR
TTh 9am-10:15am

CPSC 4371a, Database Design and ImplementationRobert Soule

This course covers advanced topics in Database Systems, expanding on the material covered in CPSC 4381. Topics include complex data types; application development; big data; data analytics; parallel and distributed storage; parallel and distributed query processing; advanced indexing techniques; advanced relational database design; and object-based databases.  QR
TTh 9am-10:15am

* CPSC 4380a, Big Data Systems: Trends & ChallengesAnurag Khandelwal

Today’s internet scale applications and cloud services generate massive amounts of data. At the same time, the availability of inexpensive storage has made it possible for these services and applications to collect and store every piece of data they generate, in the hopes of improving their services by analyzing the collected data. This introduces interesting new opportunities and challenges designing systems for collecting, analyzing and serving the so called “big data”. This course looks at technology trends that have paved the way for big data applications, survey state of the art systems for storage and processing of big data, and future research directions driven by open research problems. Our discussions span topics such as cluster architecture, big data analytics stacks, scheduling and resource management, batch and stream analytics, graph processing, ML/AI frameworks, serverless platforms and disaggregated architectures. Prerequisite: CPSC 323.
MW 4pm-5:15pm

CPSC 4390a, Software EngineeringTimos Antonopoulos

Introduction to fundamental concepts in software engineering and to the development and maintenance of large, robust software systems. The process of collecting requirements and writing specifications; project planning and system design; methods for increasing software reliability, including delta debugging and automatic test-case generation; type systems, static analysis, and model checking. Students build software in teams. After CPSC 323.  QR
TTh 11:35am-12:50pm

CPSC 4410a, Verifiable, Private, Decentralized Computing in the Age of AIBen Fisch

You type your question into ChatGPT and get back a response – how do you trust its accuracy? Perhaps you have reviewed the latest published benchmark results for GPT-4, or trust that others have. But how do you know the response you are getting from OpenAI’s servers is the true output of GPT-4? Perhaps due to a bug or system overload your question was handled by a weaker AI model. Or worse, perhaps the servers were hacked by someone maliciously giving you incorrect results. And, how do you trust that the sensitive questions you are sending to ChatGPT will not be leaked or used against you? This is a course in cryptographic proof systems. In the digital world today, we trust services to perform many kinds of computations on our data, from managing financial ledgers and databases to complex analytics, such as large-language model (LLM) inference. We trust these services not only to operate correctly, but also to keep our information private. Cryptographic systems allow us to remove this trust. A “succinct” cryptographic proof enables a service to attach a small certificate on the correctness of its computation which can be verified easily on a low-power device, even if the original computation was extremely complex. The proof of some ML computation that was run for hours on a GPU farm can fit in an email and take just milliseconds to verify on a mobile device! Beyond correctness, a “zero-knowledge” proof system enables us to prove knowledge of secret information, including hidden inputs to a computation that achieves a certain output. For instance, OpenAI could prove that the response is the true output of GPT-4 (a proprietary model) without revealing sensitive details about the model itself. In industry, the market for cryptographic proofs is currently around $75 million and projected to reach $10 billion by 2030, according to some estimates. Cryptographic proofs have become the leading technology for scaling blockchains and achieving privacy in cryptocurrencies. Verifiable and zero-knowledge computing also create an important foundation for decentralizing AI services. Training and serving large models currently require vast resources, leading to centralization. Decentralized ML networks offer a compelling alternative—letting many independent operators contribute incremental work to the overall task using their own resources big or small, from a single GPU to a server cluster, and earn a share of the payments clients make to use the service. In such a setting it is critical to verify that operators contribute incremental work correctly. Or, they may use private data to jointly train an ML model. Succinct zero-knowledge proofs would enable these operators to prove correctness of their work without revealing sensitive data. We will cover some of the other challenges and directions in decentralized model training and inference, such as reducing the amount of data that needs to be communicated between physically distributed islands of hardware and the potential role of reinforcement learning. Prerequisites: CPSC 201 and 202 (or equivalent, e.g. MATH 244). Recommended: CPSC 467 (Cryptography), MATH 225 (Linear Algebra).
MW 1:05pm-2:20pm

CPSC 4420a, Theory of ComputationDylan McKay

This course first introduces core, traditional ideas from the theory of computation with more modern ideas used in the process, including basic ideas of languages and automata. Building on the core ideas, the course then covers a breadth of topics in modular units, where each unit examines a new model and potentially a new perspective on computation. Topics may include: basic notions of Complexity Theory, provability and logic, circuits and non-uniform computation, randomized computation, quantum computation, query-based computation, notions of machine learning, compression, algebraic models of computation. Additional topics might be introduced in lectures or student projects, according to student interests, including mechanism design, voting schemes, cryptography, biological computation, distributed computation, and pseudorandomness. Prerequisite: one of CPSC 365, 366, or 368 is required. This course is a proof-based theory course and mathematical maturity is expected.
TTh 4pm-5:15pm

CPSC 4470a, Introduction to Quantum ComputingYongshan Ding

This course introduces the fundamental concepts in the theory and practice of quantum computation. Topics include information processing, quantum programming, quantum compilation, quantum algorithms, and error correction. The objective of the course is to engage students in applying fresh thinking to what computers can do – we establish an understanding of how quantum computers store and process data, and discover how they differ from conventional digital computers. We anticipate this course will be of interest to students working in computer science, electrical engineering, physics, or mathematics. Prerequisites: CPSC 201 and CPSC 202. Basic familiarity with discrete probability and linear algebra is recommended. Prior experience in quantum computing is useful but not required.  SC
MW 11:35am-12:50pm

CPSC 4480a / ECE 4260a / ECE 8760a, Silicon CompilationRajit Manohar

An upper-level course on compiling computations into digital circuits using asynchronous design techniques. Emphasis is placed on the synthesis of circuits that are robust to uncertainties in gate and wire delays by the process of program transformations. Topics include circuits as concurrent programs, delay-insensitive design techniques, synthesis of circuits from programs, timing analysis and performance optimization, pipelining, and case studies of complex asynchronous designs. Prerequisite: EENG 201 and introductory programming, or permission of instructor.
MW 11:35am-12:50pm

CPSC 4540a, Software Analysis and VerificationRuzica Piskac

Introduction to concepts, tools, and techniques used in the formal verification of software.  State-of-the art tools used for program verification; detailed insights into algorithms and paradigms on which those tools are based, including model checking, abstract interpretation, decision procedures, and SMT solvers. After CPSC 202 and 323 or equivalents.  QRRP
TTh 2:35pm-3:50pm

CPSC 4550a / ECON 4425a, Algorithmic Game TheoryYang Cai

A mathematically rigorous investigation of the interplay of economic theory and computer science, with an emphasis on the relationship of incentive-compatibility and algorithmic efficiency. Our main focus is on algorithmic tools in mechanism design, algorithms and complexity theory for learning and computing Nash and market equilibria, and the price of anarchy. Case studies in Web search auctions, wireless spectrum auctions, matching markets, and network routing, and social networks. Prerequisite: CPSC 3650 (formerly CPSC 365) or permission of the instructor. Familiarity with basic microeconomic theory is helpful but not required.  QR
MW 2:35pm-3:50pm

* CPSC 4570a, Sensitive Information in a Connected WorldMichael Fischer

Issues of ownership, control, privacy, and accuracy of the huge amount of sensitive information about people and organizations that is collected, stored, and used by today's ubiquitous information systems. Readings consist of research papers that explore both the power and the limitations of existing privacy-enhancing technologies such as encryption and "trusted platforms." Junior or senior level standing with some background in computer science is required.
MW 2:35pm-3:50pm

* CPSC 4590a, Building Interactive MachinesMarynel Vazquez

This advanced course brings together methods from machine learning, computer vision, robotics, and human-computer interaction to enable interactive machines to perceive and act in a variety of environments. Part of the course examines approaches for perception with different sensing devices and algorithms; the other part focuses on methods for decision making and applied machine learning for control. Understanding of probability, differential calculus, linear algebra, and planning (in Artificial Intelligence) is expected for this course. Programming assignments require proficiency in Python and high-level familiarity with C++. Prerequisites: CPSC 201, CPSC 202, and CPSC 470 (or 570), or permission of the instructor.   QR
MW 11:35am-12:50pm

CPSC 4610a, Statistics and Learning Theory for Computer ScientistsManolis Zampetakis

This course explores the basic mathematical foundation of learning theory and statistics from a computer science perspective. This is a proof based course and mathematical maturity is necessary to follow the material of the course. The course is divided in three parts. The first part covers the basic mathematical theory of that is used in statistical analysis and includes: (a) log-likelihood estimation for parametric models, (b) density estimation, (c) hypothesis testing, p-values and confidence intervals. The second part covers statistical learning theory: (i) definition of PAC learning and agnostic learning, (ii) uniform convergence, (iii) learnability via VC dimension and Rademacher complexity, (iv) computational aspects of learning theory. The final part is related to modern challenges in statistics and learning theory from a computational perspective and includes: (1) statistical analysis with corrupted data, (2) missing data and causal inference, (3) computationally efficient methods for learning theory, and (4) statistical analysis while preserving privacy, i.e., the notion of differential privacy and its applications. This is an advanced course, which requires mathematical maturity and comfort with multivariate calculus, linear algebra, and probability theory. The course also assumes prior knowledge of discrete mathematics and algorithms (CPSC 202 and CPSC 365 or equivalent).
TTh 2:35pm-3:50pm

* CPSC 4640a, Algorithms and their Societal ImplicationsNisheeth Vishnoi

Today’s society comprises humans living in an interconnected world that is intertwined with a variety of sensing, communicating, and computing devices. Human-generated data is being recorded at unprecedented rates and scales, and powerful AI and ML algorithms, which are capable of learning from such data, are increasingly controlling various aspects of modern society: from social interactions. These data-driven decision-making algorithms have a tremendous potential to change our lives for the better, but, via the ability to mimic and nudge human behavior, they also have the potential to be discriminatory, reinforce societal prejudices, violate privacy, polarize opinions, and influence democratic processes. Thus, designing effective tools to govern modern society which reinforce its cherished values such as equity, justice, democracy, health, privacy, etc. has become paramount and requires a foundational understanding of how humans, data, and algorithms interact. This course is for students who would like to understand and address some of the key challenges and emerging topics at the aforementioned interplay between computation and society. On the one hand, we study human decision-making processes and view them through the lens of computation and on the other hand we study and address the limitations of artificial decision-making algorithms when deployed in various societal contexts. The focus is on developing solutions through a combination of foundational work such as coming up with the right definitions, modeling, algorithms, and empirical evaluation. The current focus is on bias and privacy, with additional topics including robustness, polarization, and democratic representation. Solid mathematical and programming background is necessary to enroll in this course. CPSC 365  and S&DS 251 are recommended.
T 9:25am-11:20am

CPSC 4670a, Introduction to CryptographyCharalampos Papamanthou

This class introduces modern symmetric and public-key cryptography as well as their broad applications, both from a theoretical and practical perspective. There is an initial emphasis on fundamental cryptographic primitives (e.g., block ciphers, pseudorandom functions, pseudorandom generators, one-way functions), their concrete efficiency and implementation as well as their security definitions and proofs. Ways of combining such primitives that lead to more complex objects used to secure today’s internet (e.g., via TLS), such as key exchange, randomized encryption, message authentication codes and digital signatures are also studied. The last part of the class is devoted to modern and more advanced applications of cryptography (some of which are deployed at scale today), such as authenticated data structures, zero-knowledge proofs, oblivious RAM, private information retrieval, secret sharing, distributed consensus and cryptocurrencies (e.g, Bitcoin). Some programming may be required. After CPSC 202 or MATH 244, and CPSC 223.  QR
TTh 11:35am-12:50pm

CPSC 4690a, Randomized AlgorithmsJames Aspnes

A study of randomized algorithms from several areas: graph algorithms, algorithms in algebra, approximate counting, probabilistically checkable proofs, and matrix algorithms. Topics include an introduction to tools from probability theory, including some inequalities such as Chernoff bounds. After CPSC 365 or 366; a solid background in probability is desirable.  QR
MW 2:35pm-3:50pm

CPSC 4710a, Trustworthy Deep LearningRex Ying

In recent years, deep learning has seen applications in many fields, from science and technology, to finance, humanity, and businesses. However, real-world, high-impact machine learning applications demand more than just model performance. In particular, deep learning models are often required to be “trustworthy,” so that domain experts can trust that the models consistently behave in a way that corresponds to their domain knowledge. For example, medical experts would expect a deep learning diagnosis model to be able to explicitly utilize medical domain knowledge in its prediction; an insurance company would expect a decision on insurance price to be explainable in terms of risk factors; a financial company would expect its fraud detection model to be robust to adversarial attacks; a physicist would expect models to provide consistency with the underlying laws. This course introduces various fields of trustworthy deep learning, including model robustness, defenses for adversarial attacks, interpretability, explainability, fairness, privacy, domain adaptation, rules, and constraints. The course covers some of these aspects in the context of graph neural networks but also covers many other ML models in general deep learning, natural language processing, and computer vision. Prerequisites: a course in linear algebra and multi-variable calculus. Familiarity with PyTorch and other common Python libraries such as Numpy, Sklearn. Deep learning courses such as CPSC 452 or 453 are recommended.
TTh 4pm-5:15pm

CPSC 4720a, Intelligent RoboticsBrian Scassellati

Introduction to the construction of intelligent, autonomous systems. Sensory-motor coordination and task-based perception. Implementation techniques for behavior selection and arbitration, including behavior-based design, evolutionary design, dynamical systems, and hybrid deliberative-reactive systems. Situated learning and adaptive behavior. After CPSC 201 and 202 or equivalents. May not be taken after CPSC 473.  QR
MWF 10:30am-11:20am

CPSC 4740a, Computational Intelligence for GamesJames Glenn

Introduction to techniques used for creating computer players for games, particularly board games. Topics include combinatorial and classical game theory, stochastic search methods, applications of neural networks, and procedural content generation. Prerequisites: CPSC 202 and CPSC 223.  QR
TTh 9am-10:15am

CPSC 4750a / BENG 4475a / ECE 4750a, Computational Vision and Biological PerceptionSteven Zucker

An overview of computational vision with a biological emphasis. Suitable as an introduction to biological perception for computer science and engineering students, as well as an introduction to computational vision for mathematics, psychology, and physiology students. Prerequisite: CPSC 1001 and MATH 1200, or with permission of instructor.  QR, SCRP
MW 2:35pm-3:50pm

CPSC 4760b / BENG 4476b, Advanced Computational VisionSteven Zucker

Advanced view of vision from a mathematical, computational, and neurophysiological perspective. Emphasis on differential geometry, machine learning, visual psychophysics, and advanced neurophysiology. Topics include perceptual organization, shading, color and texture analysis, and shape description and representation. After CPSC 475.  QR, SC
HTBA

CPSC 4791a, Building Game EnginesMichael Shah

This course teaches the fundamentals of building a reusable software architecture by building games. This is a programming intensive course where the end product of this course is a data-driven game engine that students work in small teams to implement in a systems programming language (e.g. C, C++, D, etc.). Students apply data structures, algorithms, and systems programming skills in the domain of games. Discussion and implementation of the components of a game engine may include: resource management (allocators, resource managers, serialization), abstraction (design patterns, game objects, scripting, graphics layers), graphics management algorithms (scene graphs, level of detail), physics (linear algebra, collision detection and resolution algorithms), artificial intelligence (e.g. pathfinding,decision making), and performance (concurrency, parallelism, math). Students work on a final course project for their portfolio. Prerequisites: CPSC 2230 and CPSC 3230
MW 4pm-5:15pm

CPSC 4800a, Introduction to Computer VisionAlex Wong

This course focuses on fundamental topics in computer vision. We begin with the image formation process and discuss the role of camera models and intrinsic calibration in perspective projection. Basic image processing techniques (i.e. filtering) is introduced. After which, we discuss techniques to describe an image, from edges to feature descriptors and methods to establish correspondences between different images of the same scene. The course additionally covers topics in recognition (i.e. image classification, segmentation, detection, etc.) and reconstruction (i.e. stereo, structure-from-motion, optical flow). Machine learning and deep learning based methods in a subset of the topics covered are also introduced. Students get hands-on experience in implementing the techniques covered in the class and applying them to real world datasets and applications. Students taking this course must have successfully passed courses in data structures and object-oriented programming (e.g. CPSC 223a or equivalent courses), and foundational mathematical tools such as discrete math and linear algebra (e.g. CPSC 202 or equivalent courses). It is recommended that students have taken or successfully passed calculus (e.g. MATH 112, MATH 115, MATH 120, or equivalent courses), and linear algebra (e.g. MATH 225, or equivalent courses). A background in statistics, machine learning and deep learning is useful, but not required. Experience in programming with Python is preferable, as we use it for assignments and projects. Familiarity with Google Colab, and numerical and image processing packages (i.e. NumPy, SciPy, and Sci-kit Image) is helpful throughout the course.
TTh 1:05pm-2:20pm

CPSC 4844a / AMTH 3220a, Geometric and Topological Methods in Machine LearningSmita Krishnaswamy

This course provides an introduction to geometric and topological methods in data science. Our starting point is the manifold hypothesis: that high dimensional data live on or near a much lower dimensional smooth manifold. We introduce tools to study the geometric and topological properties of this manifold in order to reveal relevant features and organization of the data. Topics include: metric space structures, curvature, geodesics, diffusion maps, eigenmaps, geometric model spaces, gradient descent, data embeddings and projections, and topological data analysis (TDA) in the form of persistence homology and their associated “barcodes.” We see applications of these methods in a variety of data types.  Prerequisites: MATH 2250 or 2260; MATH 2550 or 2560; MATH 3020; and CPSC 1001 or equivalent programming experience.   QR, SC
TTh 11:35am-12:50pm

CPSC 4880a, Advances in Foundation ModelsArman Cohan

​​Foundation models are a recent class of AI models that are large-scale in terms of number of parameters and are trained on broad data (generally using self-supervision at scale). These models have demonstrated exceptional capabilities in natural language processing, computer vision, and other tasks. In this course, we explore advanced topics in modern AI, focusing on the principles, methods, and emerging directions underlying contemporary language models and systems. It emphasizes a deeper understanding of how such systems are developed, adapted, evaluated, and deployed, while situating current methods within the broader trajectory of natural language processing and machine learning. The course is designed to remain responsive to a fast-moving field. While its specific emphasis may evolve over time, it consistently addresses core questions about model design, capabilities, interpretability, reasoning, evaluation, reliability, and impact. The course primarily focuses on language models and natural language processing as the main domain, while covering select topics in computer vision and multi-modality. Prerequisite: Either CPSC 4770, CPSC 4520, or CPSC 4800, CPSC 4830, or permission of the instructor.
MW 2:35pm-3:50pm

* CPSC 4900a, Senior ProjectSohee Park

Individual research intended to fulfill the senior requirement. Requires a faculty supervisor and the permission of the director of undergraduate studies. The student must submit a written report about the results of the project.
F 1:30pm-3:20pm