## Computer Science

- COS 109/EGR 109: Computers in Our WorldComputers are all around us. How does this affect the world we live in? This course is a broad introduction to computing technology for humanities and social sciences students. Topics will be drawn from current issues and events, and will include discussion of how computers work; what programming is and why it is hard; how the Internet and the Web work; security and privacy.
- COS 126/EGR 126: Computer Science: An Interdisciplinary ApproachAn intro. to computer science in the context of scientific, engineering, and commercial applications. The goal of the course is to teach basic principles and practical issues, while at the same time preparing students to use computers effectively for applications in computer science, physics, biology, chemistry, engineering, and other disciplines. The course uses the Java programming language to introduce fundamental programming concepts, including conditionals, loops, arrays, functions, and object-oriented programming. Add topics include algorithms and data structures; theory of computing; hardware and software systems; and machine learning.
- COS 217: Introduction to Programming SystemsDeveloping skills for composing large programs, including modularity, abstraction, programming style, and best practices for code development, testing, debugging, and performance tuning. Additionally, an overview of computing environments and architectures, through the C programming language, assembly language, and machine language.
- COS 226: Algorithms and Data StructuresThis course surveys the most important algorithms and data structures in use on computers today. Topics include elementary data structures, sorting algorithms, search algorithms and data structures, graphs, and some more advanced topics (randomization, multiplicative weights and intractability). The course concentrates on developing implementations, understanding their performance characteristics, and estimating their potential effectiveness in applications.
- COS 240: Reasoning About ComputationAn introduction to mathematical topics relevant to computer science. Combinatorics, probability and graph theory will be covered in the context of computer science applications. The course will present a computer science approach to thinking and modeling. Students will be introduced to fundamental concepts in theoretical computer science, such as NP-completeness and cryptography that arise from the world view of efficient computation.
- COS 302/SML 305/ECE 305: Mathematics for Numerical Computing and Machine LearningThis course provides a comprehensive and practical background for students interested in continuous mathematics for computer science. The goal is to prepare students for higher-level subjects in artificial intelligence, machine learning, computer vision, natural language processing, graphics, and other topics that require numerical computation. This course is intended students who wish to pursue these more advanced topics, but who have not taken (or do not feel comfortable) with university-level multivariable calculus (e.g., MAT 201/203) and probability (e.g., ORF 245 or ORF 309). See "Other Information"
- COS 316: Principles of Computer System DesignThis course teaches students the design, implementation, and evaluation of computer systems, including operating systems, networking, and distributed systems.The course will teach students to evaluate the performance and study the design choices of existing systems. Students will also learn general systems concepts that support design goals of modularity, performance, and security. Students will apply materials learned in lectures and readings to design and build new systems components.
- COS 324: Introduction to Machine LearningThis course is a broad introduction to different machine learning paradigms and algorithms and provides a foundation for further study or independent work in machine learning and data science. Topics include linear models for classification and regression, support vector machines, clustering, dimensionality reduction, deep neural networks, Markov decision processes, planning, and reinforcement learning. The goals of this course are three-fold: to understand the landscape of machine learning, how to compute the math behind techniques, and how to use Python and relevant libraries to implement and use various methods.
- COS 326: Functional ProgrammingAn introduction to the principles of typed functional programming. Programming recursive functions over structured data types and informal reasoning by induction about the correctness of those functions. Functional algorithms and data structures. Principles of modular programming, type abstraction, representation invariants and representation independence. Parallel functional programming, algorithms and applications.
- COS 333: Advanced Programming TechniquesThis is a course about the practice of programming. Programming is more than just writing code. Programmers must also assess tradeoffs, choose among design alternatives, debug and test, improve performance, and maintain software written by themselves and others. At the same time, they must be concerned with compatibility, robustness, and reliability, while meeting specifications. Students will have the opportunity to develop these skills by working on their own code and in group projects.
- COS 350: Ethics of ComputingThe course aims to help students think critically about the ethical and social aspects of computing technology. Topics include ethical foundations; political economy of the tech industry; algorithmic fairness; AI and labor; AI safety; AI and climate; social media and platform power; information security; privacy; values in design; research ethics; professional ethics; technology and social good; digital colonialism; law & policy. Activities will include readings, technical work, and case studies of contemporary debates.
- COS 375/ECE 375: Computer Architecture and OrganizationAn introduction to computer architecture and organization. Instruction set design; basic processor implementation techniques; performance measurement; caches and virtual memory; pipelined processor design; design trade-offs among cost, performance, and complexity.
- COS 397: Junior Independent Work (B.S.E. candidates only)This course provides an opportunity for a student to pursue Independent Work in Computer Science driven by a student's interests and skills. The work must be conducted under the supervision of a faculty member, and must result in a final paper. Topics may be selected from suggestions by faculty members or proposed by the student. The final choice must be approved by the faculty advisor.
- COS 426: Computer GraphicsThis course will study topics in computer graphics, covering methods in image processing, 3D modeling, rendering, and animation. The course is mainly project based and encourages hands-on programming experience.
- COS 429: Computer VisionThis course is an introduction to the concepts of 2D and 3D computer vision. It surveys a wide range of topics from level-level vision to high-level recognition. We will discuss concepts such as filtering and edge detection; cameras and shape reconstruction; segmentation and clustering; optical flow and tracking; object recognition; motion recognition; statistical modeling of visual data, etc. Throughout the course, there will also be examination of aspects of human vision and perception that guide and inspire computer vision techniques.
- COS 433/MAT 473: CryptographyAn introduction to the theory of modern cryptography. Topics covered include private key and public key encryption schemes, digital signatures, pseudorandom generators and functions, zero-knowledge proofs, and some advanced topics.
- COS 436: Human-Computer InteractionThis course is a survey of the field of Human-Computer Interaction (HCI). We cover foundational as well as current research topics in HCI. The two core focus areas are interactive computing and social computing; breadth topics include AI+HCI, AR/VR, design tools, and accessibility.
- COS 497: Senior Independent Work (B.S.E. candidates only)Independent research in the student's area of interest. The work must be conducted under the supervision of a faculty member, and must result in a final paper. Research topics may be selected from suggestions by faculty members or proposed by the student. The final choice must be approved by the faculty advisor.
- COS 511: Theoretical Machine LearningIn this course we formally define and study various models that have been proposed for learning. We will present and rigorously analyze some of the most successful algorithms in machine learning that are extensively used today. Topics include: intro to statistical learning theory and generalization error bounds; learning in adversarial settings and the on-line learning model; mathematical optimization in machine learning; learning with partial observability; reinforcement learning; online control and learning in dynamical systems.
- COS 516/ECE 516: Automated Reasoning about SoftwareAn introduction to algorithmic techniques for reasoning about software. Basic concepts in logic-based techniques including model checking, invariant generation, symbolic execution, and syntax-guided synthesis; automatic decision procedures in modern solvers for Boolean Satisfiability (SAT) and Satisfiability Modulo Theory (SMT); and their applications in automated verification, analysis, and synthesis of software. Emphasis on algorithms and automatic tools.
- COS 521: Advanced Algorithm DesignBroadly covers algorithmic design ideas of the past few decades, preparing students to understand current research papers in algorithms. Although designed for computer science grads, it may be suitable for advanced undergrads and non-CS grads as well. The course is thematically distinct from undergrad algorithms (such as COS 423) in its extensive use of ideas such as randomness, optimization, approximation, and high dimensional geometry, which are increasingly important in applications. The course also exposes students to modern algorithmic concerns, including dealing with uncertainty and strategic (i.e., game-theoretic) behaviors.
- COS 528: Data Structures and Graph AlgorithmsAdvanced topics in data structures and algorithms for graph and network problems. The intent of the course is to examine the most efficient algorithms known for a variety of combinatorial problems and to discover the principles underlying the design and analysis of these algorithms. The emphasis is on asymptotic worst-case and amortized analysis. We discuss both sequential and concurrent data structures and algorithms.
- COS 533: CryptographyAn introduction to the theory of modern cryptography. Topics covered include private key and public key encryption schemes, digital signatures, pseudorandom generators and functions, zero-knowledge proofs, and some advanced topics.
- COS 551/MOL 551/QCB 551: Introduction to Genomics and Computational Molecular BiologyThis interdisciplinary course provides a broad overview of computational and experimental approaches to decipher genomes and characterize molecular systems. We focus on methods for analyzing "omics" data, such as genome and protein sequences, gene expression, proteomics and molecular interaction networks. We cover algorithms used in computational biology, key statistical concepts (e.g., basic probability distributions, significance testing, multiple hypothesis correction, data evaluation), and machine learning methods which have been applied to biological problems (e.g., hidden Markov models, clustering, classification techniques).
- COS 590: Extramural Research InternshipOne-term full time research internship at a host institution to perform scholarly research directly relevant to a student's dissertation work. Research objectives are determined by the student's advisor in consultation with the outside host. Monthly progress reports and a final paper are required. Enrollment limited to post-generals students. Students are permitted to enroll in this one-semester course at most twice. Participation is considered exceptional.
- COS 597A: Advanced Topics in Computer Science: Algorithmic Mechanism DesignThis advanced seminar covers core topics in Algorithmic Mechanism Design. We certainly cover Combinatorial Auctions and Bayesian Mechanism Design, and may cover applications in Decentralized Protocol Design. The entire course is proof-based math. The topics are (perhaps much) more advanced than a course like 521, but the volume is lighter.
- COS 597B: Advanced Topics in Computer Science: Recent Advances in Graph AlgorithmsThis course covers some recent developments in the theory of graph algorithms. The tentative topics include: expander decomposition and its applications, graph algorithms using continuous optimization, graph data structures, etc. Students are expected to read and present a recent paper in the field to the entire class and finish a final project.
- COS 597C: Advanced Topics in Computer Science: Theory of Natural AlgorithmsThis graduate seminar reviews the latest developments in the theory of natural algorithms with a focus on biology and collective behavior. The course covers a number of topics from dynamical systems, statistical mechanics, machine learning, dynamic networks, multiagent systems, and evolutionary biology. No prerequisites are assumed except for a solid, general mathematical background.
- COS 597D: Advanced Topics in Computer Science: Imaging the InvisibleThis course explores topics at the frontiers of imaging where algorithms promise super-human vision by extracting information deeply hidden in measurements. We focus on today's capture challenges, including harsh environmental conditions, ultra-fast or slow time scales, extreme scene scales and imaging via proxies using objects in the scene as cameras instead. We discuss how co-designing components in a vision system can enable us to tackle these challenges. Students are expected to present recent research work, with attention on developing oral and written scientific communication skills.
- COS 597E: Advanced Topics in Computer Science: Programming Languages (for distributed systems), Distributed SystemsWhat makes programming distributed systems hard? In the recent past, a great deal of effort has been spent trying answer this question. While much work appears in the systems community (building new abstractions) a great deal of work has also appeared in the programming languages community (making new abstractions easier to program against). But a gulf still remains: the assumptions that systems designers make of their languages, and that language designers make of their systems, do not yet reliably align. In this seminar, we explore work on both sides of this divide and take some initial steps towards bridging the gap between them.
- COS 597U: Advanced Topics in Computer Science: Spatial ComputingTopics involving current research in computer science and applications in other fields.
- ECE 206/COS 306: Contemporary Logic DesignIntroduction of the basic concepts in logic design that form the basis of computation and communication circuits. This course will start from scratch and end with building a working computer on which we will run small programs.
- ECE 396/COS 396: Introduction to Quantum ComputingThis course will introduce the matrix form of quantum mechanics and discuss the concepts underlying the theory of quantum information. Some of the important algorithms will be discussed, as well as physical systems which have been suggested for quantum computing.
- ECE 434/COS 434: Theoretical Machine LearningThe course covers fundamental results in statistical learning theory: 1. Supervised learning: generalization, uniform concentration, empirical risk minimizer, Rademacher complexity, VC theory, reproducing Hilbert kernel space and several applications including neural networks, sparse linear regression, and low-rank matrix problems; 2. Online learning: sequential Rademacher complexity, Littlestone dimension, online algorithms and applications; 3. Unsupervised learning: latent variable models, maximum likelihood estimation, method of moments, tensor methods.
- ECE 462/COS 462: Design of Very Large-Scale Integrated (VLSI) SystemsAnalysis and design of digital integrated circuits using deep sub-micron CMOS technologies as well as emerging and post-CMOS technologies (Si finFETs, III-V, carbon). Emphasis on design, including synthesis, simulation, layout and post-layout verification.Analysis of energy, power, performance, area of logic-gates, interconnect and signaling structures.
- ECE 470/COS 470: Principles of BlockchainsBlockchains are decentralized digital trust engines that are the underlying technology behind Web3, a loosely defined denotation of the Internet architecture in the years to come, including decentralization of the platform economy of the modern Internet (Web2). In this course, we conduct a full-stack study of blockchains, viewing them as a whole integrated computer system involving networking, incentives, consensus, data structures, cryptography and memory management. The course uses the Bitcoin architecture as a basis to construct the foundational design and algorithmic principles of blockchains.
- ECE 539/COS 512: Special Topics in Data and Information Science: Optimization for Machine LearningThe course is a graduate level course, focusing on the optimization theory (algorithms and complexity analysis) that arise in machine learning. It covers topics such as convex/nonconvex optimization, gradient methods, accelerations, stochastic algorithms, variance reduction, minimax optimization, etc. The course is proof-based, and mathematical oriented. A similar version of this course has been previously given by Prof. Elad Hazan in CS department in Spring 2019.
- ECE 539B/COS 597P: Special Topics in Information Sciences and Systems: Security and Performance Challenges in Networked SystemsMultiple services we use every day, from Zoom to cryptocurrency wallets, rely on large-scale networked systems. These systems consist of a complex series of interdependent components and control algorithms, which make their management particularly challenging. In effect, we often observe disturbances such as cross-layer security vulnerabilities and unpredictable interferences across seemingly independent applications. In this course we revisit a few fundamental network topics (such as routing, monitoring, and congestion avoidance) aiming at revealing and addressing their performance and security implications.
- MAE 345/COS 346/ECE 345: Introduction to RoboticsRobotics is a rapidly-growing field with applications including unmanned aerial vehicles, autonomous cars, and robotic manipulators. This course will provide an introduction to the basic theoretical and algorithmic principles behind robotic systems. The course will also allow students to get hands-on experience through project-based assignments on quadrotors. In the final project, students will implement a vision-based obstacle avoidance controller for a quadrotor. Topics include motion planning, control, localization, mapping, and vision.
- MUS 314/COS 314: Computer and Electronic Music through Programming, Performance, and CompositionAn introduction to the fundamentals of computer and electronic music. The music and sound programming language ChucK, developed here at Princeton, will be used in conjunction with Max/MSP, another digital audio language, to study procedural programming, digital signal processing and synthesis, networking, and human-computer interfacing.
- ORF 363/COS 323: Computing and Optimization for the Physical and Social SciencesAn introduction to several fundamental and practically-relevant areas of modern optimization and numerical computing. Topics include computational linear algebra, first and second order descent methods, convex sets and functions, basics of linear and semidefinite programming, optimization for statistical regression and classification, and techniques for dealing with uncertainty and intractability in optimization problems. Extensive hands-on experience with high-level optimization software. Applications drawn from operations research, statistics and machine learning, economics, control theory, and engineering.
- QCB 455/MOL 455/COS 455: Introduction to Genomics and Computational Molecular BiologyThis interdisciplinary course provides a broad overview of computational and experimental approaches to decipher genomes and characterize molecular systems. We focus on methods for analyzing "omics" data, such as genome and protein sequences, gene expression, proteomics and molecular interaction networks. We cover algorithms used in computational biology, key statistical concepts (e.g., basic probability distributions, significance testing, multiple hypothesis correction, data evaluation), and machine learning methods which have been applied to biological problems (e.g., hidden Markov models, clustering, classification techniques).
- SPI 352/COS 352: Artificial Intelligence, Law, & Public PolicyThis course examines the implications of AI, particularly foundation models, for law and public policy. Topics will include how AI affects and reshapes legal doctrine and policy, including: intellectual property law, administrative law, anti-discrimination law, and more. Also covered will be emerging regulatory policies and legislative efforts around AI, as well as the limits of proposed approaches. Emphasis will be placed juxtaposing the legal and policy considerations with technical design decisions, in an interdisciplinary and accessible way. This course is suitable for students of all backgrounds; no technical knowledge is assumed.