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 introduction to computer science in the context of scientific, engineering, and commercial applications. The course will teach basic principles and practical issues, and will prepare 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. No prior programming experience required. Lectures, with labs and precepts.
- COS 217: Introduction to Programming SystemsDeveloping programming skills for systems building, including modular program design, programming style, testing, debugging, and performance tuning. Additionally, an introduction to ARM 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 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 318: Operating SystemsAn introduction to operating systems. Emphasis is on the fundamentals of how to design and implement an operating system. Topics include operating system structure, processes, threads, synchronizations, concurrent programming, interprocess communications, virtual memory, I/O device management, and file systems.
- COS 324: Introduction to Machine LearningThis course provides a broad introduction to machine learning paradigms Including supervised, unsupervised, deep learning, and reinforcement learning as a foundation for further study or independent work in ML, AI, and data science. Topics include linear models for classification and regression, clustering, low rank representations (PCA), n-gram language models, matrix factorization, feedforward neural nets and convolutional neural nets, Markov decision process, planning, and reinforcement learning. Interesting applications are presented for all these models. (Not recommended for students who have already taken a 4xx AI/ML course.)
- 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 & 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 340: 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 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)Provides an opportunity for a student to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. The final choice must be approved by the faculty advisor. Refer to course web page for additional details.
- 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 432/ECE 432: Information SecurityHow to secure computing systems, communications, and users. Basic cryptography; private and authenticated communication; software security; malware; operating system protection; network security; web security; physical security; cryptocurrencies and blockchains; privacy and anonymity; usable security; economics of security; ethics of security; legal and policy issues.
- COS 451: Computational GeometryThis course introduces the basic concepts of geometric computing, illustrating the importance of this field for a variety of applications areas, such as computer graphics, solid modeling, robotics, database, pattern recognition, and statistical analysis. Algorithms are presented and analyzed for a large number of geometric problems, and an array of fundamental techniques are discussed (e.g., convex hulls, Voronoi diagrams, intersection problems, multidimensional searching).
- COS 461: Computer NetworksSurvey of computer networks covering end-to-end principle, multiplexing, virtualization, packet switching vs. circuit switching, router design, network protocols, congestion control, internet routing architecture, network measurement, network management, and overlay networks. Survey of research papers from classic literature through contemporary research.
- 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)Provides an opportunity for a student to concentrate on a "state-of-the-art" project in computer science. 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 513/SML 513: Foundations of Probabilistic ModelingThis course covers fundamental topics in probabilistic modeling and allows you to contribute to this important area of machine learning and apply it to your work. We learn how to model data arising from different fields and devise algorithms to learn the structure underlying these data for the purpose of prediction and decision making. We cover several model classes--including deep generative models--and several inference algorithms, including variational inference and Hamiltonian Monte Carlo. Finally, we cover evaluation methods for probabilistic modeling as well as tools to challenge our models' assumptions.
- 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 526: Advanced Computer GraphicsThis course explores topics at the frontiers of Computer Graphics and Machine Learning where generative learned methods and conventional rendering approaches converge. The course focuses on recent advances in novel view synthesis and learned scene reconstruction. The course is appropriate for students who have taken COS 426 and COS 429 (or equivalent). Students are expected to present recent research work, with attention to developing oral and written scientific communication skills.
- COS 529: Advanced Computer VisionAdvanced topics in computer vision, with a focus on recent methods and current research. Topics include 3D vision, recognition, and the intersection of computer vision and other fields. Appropriate for students who have taken COS 429 or related courses and would like further exposure to computer vision.
- 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 561: Advanced Computer NetworksSurvey of computer networks covering end-to-end principle, multiplexing, virtualization, packet switching vs. circuit switching, router design, network protocols, congestion control, internet routing architecture, network measurement, network management, and overlay networks. Survey of research papers from classic literature through contemporary research.
- 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: New Directions in Algorithmic Mechanism DesignThis course focuses on Algorithmic Mechanism Design, the design of algorithms that interact with strategic users, with a focus on a particular application domain. The initial portion of the course may cover core background material. The bulk of the course studies a specific domain in depth via recent research papers, and domain-specific material such as whitepapers, reports, etc. The course website will be updated in Summer 2021 with more information on the specific domain of study.
- 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 597C: Advanced Topics in Computer Science: Computer Science for Public Policy and LawThis seminar prepares computer science graduate students and advanced undergraduate students to effectively engage on matters of public policy and law. The core of the course is a survey of computer science research that has successfully influenced government decision making or commercial practices. Topics include consumer privacy, data security, net neutrality, government surveillance, artificial intelligence fairness, election integrity, and cryptocurrencies. Assignments challenge participants to develop their own research interests into deliverables for public policy and law audiences.
- COS 597D: Advanced Topics in Computer Science: Advanced Computational GenomicsThis seminar introduces students to computational methods for analysis of multi-dimensional data from modern high-throughput genomics technologies, including single-cell and spatial genomics, epigenomics, multi-omics, and genome editing. The seminar consists of lectures, reading and discussion of recent scientific literature, and practical data analysis. No prior knowledge of biology is required and computational problems are abstracted from biological applications, but students should be ready to learn concepts from molecular biology and biotechnologies (necessary background is provided).
- COS 597F: Advanced Topics in Computer Science: Embodied Language UnderstandingRecent advances in machine 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. The course revolves around papers assigned for reading, and students complete a project.
- COS 597I: Advanced Topics in Computer Science: Social ComputingWe use computational systems to interact with our friends and foes, our team partners and romantic partners, and our organizations and societies. How do we design these social computing systems to be effective and responsible? How does technology shape social interaction? This seminar covers the design patterns for social computing, and the foundational social scientific and technical concepts that underpin them. We read and discuss foundational and recent papers exploring different methods in social computing. Students conduct a research project on building, evaluating, or theorizing about a new social computing design.
- COS 597J: Advanced Topics in Computer Science: Streaming and Sketching AlgorithmsThis course focuses on algorithms that compress data in a way such that certain pre-specified queries can be answered. The course covers the mathematical models, algorithm design and analysis, as well as provable limitations of efficient algorithms in those models. The topics covered in the course include counting in streams, linear sketches, graph streaming, dimensionality reduction, etc. Students are assumed to be comfortable with the analysis of algorithms, basic probability and linear algebra. No specific prior knowledge is required.
- ECE 206/COS 306: Contemporary Logic DesignIntroduction to the basic concepts in logic design that form the basis of computation and communication circuits. Logic gates and memeory elements. Timing methodologies. Finite state systems. Programmable logic. Basic computer organization.
- 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: Machine Learning TheoryThe course covers basic theories of modern machine learning: 1. statistical learning theory: generalization, uniform convergence, Rademacher complexity, VC theory, reproducing Hilbert kernel space and their applications on simple classification/regression models; 2. optimization theory: gradient descent, stochastic gradient descent and their convergence analyses for convex functions, nonconvex functions 3. deep learning theory: basic approximation, optimization and generalization results for deep neural networks; 4. reinforcement learning theory: MDP, Bellman equations, planning, and sample complexity results for value iteration/Q-learning.
- 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 539/COS 512: Special Topics in Data and Information Science: 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.
- 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).