## 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 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 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 LearningProvides a broad introduction to different machine learning paradigms and algorithms, providing a foundation for further study or independent work in machine learning, artificial intelligence, and data science. Topics include linear models for classification and regression, support vector machines, neural networks, clustering, principal components analysis, Markov decision processed, planning, and reinforcement learning.
- 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 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 418: Distributed SystemsThis course covers the design and implementation of distributed systems. Students will gain an understanding of the principles and techniques behind the design of modern, reliable, and high-performance distributed systems. Topics include server design, network programming, naming, concurrency and locking, consistency models and techniques, and fault tolerance. Modern techniques and systems employed at some of the largest Internet sites (e.g., Google, Facebook, Amazon) will also be covered. Through programming assignments, students will gain practical experience designing, implementing, and debugging real distributed systems.
- COS 423: Theory of AlgorithmsDesign and analysis of efficient data structures and algorithms. General techniques for building and analyzing algorithms. Introduction to NP-completeness.
- 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 432/ECE 432: Information SecurityCourse goals: learn how to design a secure system, probe systems for weaknesses, write code with fewer security bugs, use crypto libraries correctly, protect (or breach!) privacy, and use your powers ethically. Main topics: basic cryptography, system security, network security, firewalls, malware, web security, privacy technologies, cryptocurrencies, human factors, physical security, economics, and ethics of security.
- COS 448/EGR 448: Innovating Across Technology, Business, and MarketplacesCourse teaches engineering students about issues tackled by leading Chief Technology Officers: the technical visionaries and/or managers who innovate at the boundaries of technology and business by understanding both deeply, and who are true partners to the CEO, not just implementers of business goals. Focus will be on thinking like a CTO (of a startup and a large company) from technology and business perspectives, and on software and Internet-based businesses. Industry-leading guest speakers provide perspectives too.
- 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 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 518: Advanced Computer SystemsCOS 518 is a graduate course in computer systems. Its goals are: (1) To understand the core concepts of computer systems, rather than particular implementation details. (2) To understand the state of the art in distributed, storage, mobile, and operating systems. (3) To understand how to engage in cutting-edge systems research and development. This course assumes a basic familiarity with computer systems and networking concepts.
- 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 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 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 Design for Cryptocurrencies and DeFiThis course focuses on Algorithmic Mechanism Design, the design of algorithms that interact with strategic users, with a focus on applications to cryptocurrencies and Decentralized Finance. The initial portion of the course teaches background material on mechanism design for cryptocurrencies. The rest of the course involves in-depth presentations of recent research papers, and domain-specific material such as whitepapers, reports, etc.
- COS 597B: Advanced Topics in Computer Science: Recent Advances in Computer VisionComputer vision is a rapidly-evolving field, with technological innovations enabling societal impact, and societal needs fueling innovation. We select a few advanced computer vision topics to explore, focusing in particular on the robustness, transparency and fairness of computer vision systems. Students are expected to routinely read and present research papers, with special attention on developing excellent oral and written scientific communication skills
- COS 597C: Advanced Topics in Computer Science: Machine Learning for Health CareMachine learning is quickly becoming a powerful tool in healthcare, to analyze and personalize treatments, assist in diagnoses, understand the underlying biology of disease, and support decision making and medical interventions. In this seminar, we read papers on the topic of ML for health care and discuss these papers in class, focusing on the models and methods, and adaptions necessary to apply these methods to health care data.
- COS 597D: Advanced Topics in Computer Science: Computational Methods for Single-cell and Spatial BiologyThis seminar explores algorithmic, statistical, and machine learning challenges emerging from new technologies for measuring DNA, RNA, and molecular interactions from single cells and tissues. Topics include: clustering, dimensionality reduction and manifold learning for single-cell RNA sequencing and spatial transcriptomics data; inference of molecular interaction networks; temporal modeling of developmental processes; and phylogenetic tree reconstruction from single-cell DNA sequencing data. Seminar will include lectures and reading/discussion of recent research papers. Students complete a final project.
- COS 597E: Advanced Topics in Computer Science: Verification and SynthesisThis seminar explores research advances in automated reasoning with applications in formal verification and synthesis. We study recent papers from a variety of application domains - networks, distributed systems, systems-on-chip, machine learning. Students are expected to lead some class discussions and do a class project of their choice.
- COS 597G: Advanced Topics in Computer Science: Understanding Large Language ModelsLarge pre-trained language models have utterly transformed the field of natural language processing in the last 3-4 years. They form the basis of state-of-art systems and become ubiquitous in solving a wide range of language understanding and generation tasks. This course aims to cover cutting-edge research topics centering around large language models. We discuss their technical foundations, emerging capabilities, fine-tuning and adaptation, theoretical understanding, system design, as well as security and ethics. Students are expected to routinely read and present research papers and complete a research project at the end.
- 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 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: 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.
- PSY 454/COS 454: Probabilistic Models of CognitionThis seminar explores parallels between human cognition and ideas in probability and statistics, with an emphasis on statistical machine learning. Minds and machines face similar computational problems, meaning that we can develop new hypotheses about human cognition by seeing how those problems are solved in computer science and statistics and find new challenges for AI and machine learning by studying human cognition.
- 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 586F/COS 586: Topics in STEP: Technology Policy and LawThis course examines a range of infotech policy issues, including privacy, intellectual property, free speech, competition, regulation of broadcasting and telecommunications, cross-border and jurisdictional questions, broadband policy, spectrum policy, management of the Internet, computer security, education and workforce development, and research funding. Assignments consist of weekly reading, weekly writing assignments, and a final project. This course is suitable for students without any special technical background.