## 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 ApproachWeekly: two recorded video lectures, one class meeting, two preceptorials. An introduction 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. Topics include: hardware and software systems; programming in Java; algorithms and data structures; fundamental principles of computation; and scientific computing, including simulation, optimization, and data analysis.
- 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. Particular emphasis is given to algorithms for sorting, searching, graphs, and strings. 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 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 448/EGR 448: Innovating Across Technology, Business, and MarketplacesThis course introduces computer science and technology-oriented students to issues tackled by Chief Technology Officers: the technical visionaries and managers innovating at the boundaries of technology and business. These individuals are partners to the organization¿s business leaders, not merely implementers of business goals. The course covers companies from ideation and early-stage startup, to growth-stage startup, to mature company, covering the most relevant topics at each stage, including ideation, financing, product-market fit, go-to-market approaches, strategy, execution, and management. Exciting industry leaders guest lecture.
- COS 487/MAT 407: Theory of ComputationIntroduction to computability and complexity theory. Topics will include models of computation such as automata, and Turing machines; decidability and decidability; computational complexity; P, NP, and NP completeness; others.
- 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 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.
- COS 514: Fundamentals of Deep LearningMathematical and conceptual introduction to Deep Learning: basic concepts, model classes, paradigms, and attempts at analysis. Covers some ML theory (learning rate, SGD, generalization, etc.) and then some advanced topics: Normalization, Implicit Bias, Generative Models, Recurrent Nets, Contrastive Learning, Self-Supervised Learning, Transformers, Diffusion Models, Private Learning, Interpretability, Fine-tuning of Large Pretrained Models, etc. (Varies year to year.) 4 home-works. Term project done in groups of 2-3 --- can be experimental or theoretical. Course text available from Instructor¿s homepage.
- 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 533: Advanced CryptographyThis course covers a selection of topics in cryptography, including some or all of the following: one-way functions, mathematical foundations of group-based and lattice-based cryptography, proof systems, multi-party computation, fully homomorphic encryption, obfuscation, and (post-)quantum cryptography. This course is intended to serve as an introduction to cryptography from the foundations up to present-day research.
- 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: Long Term Memory in AI - Vector Search and DatabasesLong Term Memory is a fundamental capability in the modern AI Stack. At their core, these systems are using Vector search. Vector search is also a fundamental tool for systems that manipulate large collections of media like search engines, knowledge bases, content moderation tools, recommendation systems, etc. As such, the discipline lays at the intersection of Artificial Intelligence and Database Management Systems. This course will cover the scientific foundations and practical implementation of vector search applications, algorithms, and systems. The course will be evaluated with project and in-class presentation
- COS 597B: Advanced Topics in Computer Science: Computational Models of CognitionThis course provides an overview of computational models of human cognition. Computational modeling is one of the central methods in cognitive science research, and can help to provide insight into how people solve the challenging problems posed by everyday life, as well as how to bring computers closer to human performance for some of these problems. The course explores three ways in which researchers have attempted to formalize cognition - symbolic approaches, neural networks, and probability and statistics - considering the strengths and weaknesses of each.
- COS 597F: Advanced Topics in Computer Science: Embodied Language UnderstandingRecent advances in deep learning have ushered in exciting developments in natural language processing (NLP) but comprehending language requires an understanding of contextual signals beyond just reading text, such as visual stimuli, interactive signals from an agent's environment, or even the mental state of other agents. This seminar studies the latest research in the area of embodied language understanding, to develop artificial agents that can understand and generate natural language in the context of extra-linguistic signals.
- COS 597G: Advanced Topics in Computer Science: Understanding Large Language ModelsLarge language models (LLMs) have utterly transformed the field of natural language processing (NLP) in the last 3-4 years. They form the basis of state-of-art systems and become ubiquitous in solving a wide range of natural language understanding and generation tasks. With the unprecedented potential and capabilities, these models also give rise to new ethical and scalability challenges. This course aims to cover cutting-edge research topics centering around pre-trained language models.
- COS 597M: Advanced Topics in Computer Science: Privacy in the World of Big DataAn introduction to privacy challenges that arise due to ubiquitous use of technology and ease of data collection and analysis. An overview of algorithmic approaches to addressing them, with a focus on statistical data privacy -- the problem of making useful inferences based on data of many individuals while ensuring each individual's privacy. We survey plausible-sounding approaches that fail, followed by a study of privacy definitions and useful algorithms satisfying those definitions, including in real-world applications. We conclude with a survey of technical aspects of topics at the frontier of current privacy discourse, such as tracking.
- COS 597N: Advanced Topics in Computer Science: Machine Learning for Structural BiologyRecent breakthroughs in machine learning algorithms have transformed the study of the 3D structure of proteins and other biomolecules. This seminar class surveys recent papers on ML applied to tasks in protein structure prediction, structure determination, protein design, physics-based modeling, and more. We take a holistic approach when discussing papers, including discussing their historical context, algorithmic contributions, and potential impact on scientific discovery and applications such as drug discovery.
- COS 597O: Advanced Topics in Computer Science: Deep Generative Models:Methods, Applications & Societal ConsiderationsWe study the core methods behind different classes of deep generative models. For each class of models, we study an important application it is useful for, for example generative adversarial networks and weather forecasting, or probabilistic diffusion models and molecule generation in 3D. We discuss the good uses and bad uses of these models, touching on their societal impact. There are guest lectures from academia and industry. Students are required to submit a brief report about the readings and conduct a semester-long research project.
- COS 597Q: Advanced Topics in Computer Science: AI Safety and AlignmentWhat existential and social risks do modern AI systems and methods pose? How can we mitigate these risks and ensure that AI systems are safe and aligned with the intention of their builder? What is currently being done to ensure that AI systems are safe? Are current safeguards sufficient and if not how can we improve upon them? These are the questions we consider in this advanced seminar. Topics include algorithms and optimization-based methods for alignment, reinforcement learning from human feedback, the mind-body problem as applied to AI, accountability and the free choice problem, and more.
- COS 597R: Advanced Topics in Computer Science: Inference in Action: Probabilistic Topics in Reinforcement LearningReinforcement learning (RL) is about using machine learning to not just mimic past predictions, but instead to determine which decisions will lead to good, long-term outcomes. While RL is typically viewed and taught from the perspectives of control theory and stochastic optimization, this course will study RL through the lens of probabilistic inference. This perspective will provide new ways of thinking about RL methods and suggest how to build new RL methods using techniques from other areas of machine learning (e.g., self-supervised learning). The course will be split between interactive lectures and discussions of recent papers.
- 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 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 532/COS 572/MAE 572: Safety-Critical Robotic SystemsThe course covers the mathematical foundations of dynamical system safety analysis and modern algorithmic approaches for robotic decision making in safety-critical contexts. The focus is on safe robot learning, multiagent systems, and interaction with humans, paying special attention to uncertainty and the reality gap between mathematical models and the physical world.
- 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.
- ISC 231/CHM 231/COS 231/MOL 231/PHY 231: An Integrated, Quantitative Introduction to the Natural Sciences IAn integrated, mathematically and computationally sophisticated introduction to physics, chemistry, molecular biology, and computer science. This year long, four course sequence is a multidisciplinary course taught across multiple departments with the following faculty: COS: O. Troyanskaya; EEB: J. Akey; LSI: B. Bratton, J. Gadd, A. Mayer, Q. Wang; MOL: E. Wieschaus, M. Wuhr; PHY: T. Gregor, J. Shaevitz. Five hours of lecture, one three-hour lab, one three-hour precept, one required evening problem session.
- ISC 232/CHM 232/COS 232/MOL 232/PHY 232: An Integrated, Quantitative Introduction to the Natural Sciences IAn integrated, mathematically and computationally sophisticated introduction to physics, chemistry, molecular biology, and computer science. This year long, four course sequence is a multidisciplinary course taught across multiple departments with the following faculty: COS: O. Troyanskaya; EEB: J. Akey; LSI: B. Bratton, J. Gadd, A. Mayer, Q. Wang; MOL: E. Wieschaus, M. Wuhr; PHY: T. Gregor, J. Shaevitz. Five hours of lecture, one three-hour lab, one three-hour precept, one required evening problem session.
- 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.
- PSY 360/COS 360: Computational Models of CognitionThe objective of this course is to provide advanced students in cognitive science, psychology, and computer science with the skills to develop computational models of human cognition. Computational modeling is one of the central methods in cognitive science research, and can help to provide insight into how people solve the challenging problems posed by everyday life, as well as how to bring computers closer to human performance for some of these problems. The course will explore three ways in which researchers have attempted to formalize cognition-symbolic approaches, neural networks, and probability and statistics.
- 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).