Princeton UniversityWebsiteAcademic Catalog
Computer ScienceDepartment Website
A.B. Degree in Computer Sciencesource 1source 2source 3source 4source 5source 6
CS Courses
- Computer Science: An Interdisciplinary ApproachCOS 126 (1)introCOS 126: Computer Science: An Interdisciplinary Approach
An 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. Video lectures, one class, two preceptorials. A. Kaplan, K. Wayne
- Introduction to Programming SystemsCOS 217 (1)introCOS 217: Introduction to Programming Systems
An introduction to computer organization and system software. The former includes topics such as processor and memory organization, input/output devices, and interrupt structures. The latter includes assemblers, loaders, libraries, and compilers. Programming assignments are implemented in assembly language and C using the UNIX operating system. Three lectures.
- Algorithms and Data StructuresCOS 226 (1)algsCOS 226: Algorithms and Data Structures
This course surveys the most important algorithms and data structures in use on computers today. Particular emphasis is given to algorithms for sorting, searching, and string processing. Fundamental algorithms in a number of other areas are covered as well, including geometric algorithms, graph algorithms, and some numerical algorithms. The course will concentrate on developing implementations, understanding their performance characteristics, and estimating their potential effectiveness in applications. Two online lectures, two class meetings, one precept. G. Kol, K. Wayne
- Reasoning About ComputationCOS 240 (1)mathCOS 240: Reasoning About Computation
An 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. R. Raz, M. Braverman
- Principles of Computer System DesignorCOS 316 (1)sysCOS 316: Principles of Computer System Design
This 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. A. Levy, R. Netravali
Operating SystemsorCOS 318 (1)sysCOS 318: Operating SystemsA study of the design and analysis of operating systems. Topics include: processes, mutual exclusion, synchronization, semaphores, monitors, deadlock prevention and detection, memory management, virtual memory, processor scheduling, disk management, file systems, security, protection, distributed systems. Two 90-minute lectures.
Computer Architecture and OrganizationorCOS 375 (1)sysCOS 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. Two 90-minute classes, one self-scheduled hardware laboratory.
Distributed SystemsorCOS 418 (1)sysCOS 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, security, 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.
Computer NetworksCOS 461 (1)sysCOS 461: Computer NetworksThis course studies computer networks and the services built on top of them. Topics include packet-switch and multi-access networks, routing and flow control, congestion control and quality-of-service, Internet protocols (IP, TCP, BGP), the client-server model and RPC, elements of distributed systems (naming, security, caching) and the design of network services (multimedia, peer-to-peer networks, file and Web servers, content distribution networks).
- Introduction to Machine LearningororCOS 324 (1)aiCOS 324: Introduction to Machine Learning
This 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.
Computer VisionorCOS 429 (1)aiCOS 429: Computer VisionAn introduction to the concepts of 2D and 3D computer vision. Topics include low-level image processing methods such as filtering and edge detection; segmentation and clustering; optical flow and tracking; shape reconstruction from stereo, motion, texture, and shading. Throughout the course, there will also be examination of aspects of human vision and perception that guide and inspire computer vision techniques.
Natural Language ProcessingCOS 484 (1)aiCOS 484: Natural Language ProcessingRecent advances have ushered in exciting developments in natural language processing (NLP), resulting in systems that can translate text, answer questions and even hold spoken conversations with us. This course will introduce students to the basics of NLP, covering standard frameworks for dealing with natural language as well as algorithms and techniques to solve various NLP problems, including recent deep learning approaches. Topics covered include language modeling, rep. learning, text classification, sequence tagging, syntactic parsing, and machine translation. The course will have programming assignments, a mid-term and a final project.
- Functional ProgrammingorCOS 326 (1)plsCOS 326: Functional Programming
An 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.
Advanced Programming TechniquesorCOS 333 (1)introCOS 333: Advanced Programming TechniquesThe practice of programming. Emphasis is on the development of real programs, writing code but also assessing tradeoffs, choosing among design alternatives, debugging and testing, and improving performance. Issues include compatibility, robustness, and reliability, while meeting specifications. Students will have the opportunity to develop skills in these areas by working on their own code and in group projects. Two 90-minute lectures.
Algorithms for Computational BiologyorCOS 343 (1)algsCOS 343: Algorithms for Computational BiologyThis course introduces algorithms for analyzing DNA, RNA, and protein, the three fundamental molecules in the cell. Students will learn algorithms on strings, trees, and graphs and their applications in: sequence comparison and alignment; molecular evolution and comparative genomics; DNA sequencing and assembly; recognition of genes and regulatory elements; and RNA structure and protein interaction networks. Students will also implement algorithms and apply them to biological data.
Computer GraphicsorCOS 426 (1)graphicsCOS 426: Computer GraphicsThe principles underlying the generation and display of graphical pictures by computer. Hardware and software systems for graphics. Topics include: hidden surface and hidden line elimination, line drawing, shading, half-toning, user interfaces for graphical input, and graphic system organization.
Information SecurityorCOS 432 (1)sysCOS 432: Information SecuritySecurity issues in computing, communications, and electronic commerce. Goals and vulnerabilities; legal and ethical issues; basic cryptology; private and authenticated communication; electronic commerce; software security; viruses and other malicious code; operating system protection; trusted systems design; network security; firewalls; policy, administration and procedures; auditing; physical security; disaster recovery; reliability; content protection; privacy.
Human-Computer InteractionorCOS 436 (1)humansCOS 436: Human-Computer InteractionHow do we create interactive technology centered around people and society at large? This course is a survey of the field of Human-Computer Interaction (HCI). Lectures, readings, and precept discussions cover foundational theories as well as topics in HCI. We focus on two core areas of interactive computing (e.g., input/output, ubiquitous computing) and social computing (e.g., collaboration, social media), and span a breadth of domains, such as AI+HCI, AR/VR, design tools, and accessibility. Put your learnings into practice, with a semester-long group project, by either studying how people think or by designing a novel technological system.
Innovating Across Technology, Business, and MarketplacesCOS 448 (1)impactCOS 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 business leaders of the organization, 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.
- ororEconomics and ComputingorCOS 445 (1)impactCOS 445: Economics and Computing
Computation and other aspects of our lives are becoming increasingly intertwined. In this course we will study a variety of topics on the cusp between economics and computation. Topics to be covered include: games on networks, auctions, mechanism and market design, reputation, computational social choice. The aim of the course is two-fold: (1) to understand the game-theoretic issues behind systems involving computation such as online networks, and (2) to learn how algorithms and algorithmic thinking can help with designing better decision and allocation mechanisms in the offline world.
Theory of ComputationCOS 487 (1)theoryCOS 487: Theory of ComputationStudies the limits of computation by identifying tasks that are either inherently impossible to compute, or impossible to compute within the resources available. Introduces students to computability and decidability, Godel's incompleteness theorem, computational complexity, NP-completeness, and other notions of intractability. This course also surveys the status of the P versus NP question. Additional topics may include: interactive proofs, hardness of computing approximate solutions, cryptography, and quantum computation.
- Junior Research Workshop methods coursePrinciples of Computer System DesignorCOS 316 (1)sysCOS 316: Principles of Computer System Design
This 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. A. Levy, R. Netravali
Introduction to Machine LearningorOther 3xx "Methods" courseCOS 324 (1)aiCOS 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.
- Single-term independent Work project
- Two semesters of Senior Thesiscapstone
Math/Stat Courses
- Linear Algebra with ApplicationsorMAT 202 (1)mathMAT 202: Linear Algebra with Applications
Companion course to MAT201. Matrices, linear transformations, linear independence and dimension, bases and coordinates, determinants, orthogonal projection, least squares, eigenvectors and their applications to quadratic forms and dynamical systems.
Advanced Linear Algebra with ApplicationsorMAT 204 (1)mathMAT 204: Advanced Linear Algebra with ApplicationsCompanion course to MAT203. Linear systems of equations, linear independence and dimension, linear transforms, determinants, (real and complex) eigenvectors and eigenvalues, orthogonality, spectral theorem, singular value decomposition, Jordan forms, other topics as time permits. More abstract than MAT202 but more concrete than MAT217. Recommended for prospective physics majors and others with a strong interest in applied mathematics.
Honors Linear AlgebraorMAT 217 (1)mathMAT 217: Honors Linear AlgebraA rigorous course in linear algebra with an emphasis on proof rather than applications. Topics include vector spaces, linear transformations, inner product spaces, determinants, eigenvalues, the Cayley-Hamilton theorem, Jordan form, the spectral theorem for normal transformations, bilinear and quadratic forms.
Science Courses
Other Courses
Goals for Student Learning
- Students will be able to understand, modify, debug, refactor and analyze programs in a variety of different programming languages;
- Students will be able to learn new programming languages and computational paradigms they encounter in the future;
- Students will be able to read and comprehend technical literature in computer science;
- Students will be able to plan and complete a one- or two-term project in an area of computer science of their choice;
- Students will be able to identify, isolate and solve important technical subproblems that lead to a solution to a more significant problem;
- Students will be able to present technical ideas in computer science clearly, both orally and in written form;
- Students will be able to identify and assess related work in their area of study;
- Students will demonstrate an ability to work independently in accomplishing all of the above goals.
Goals for Independent Work Requirement
- Students will be able to read and comprehend technical literature in computer science;
- Students will be able to plan and complete a one- or two-semester project in an area of computer science of their choice;
- Students will be able to identify, isolate and solve important technical subproblems that lead to a solution to a more significant problem;
- Students will be able to present technical ideas in computer science clearly, both orally and in written form;
- Students will be able to identify and assess related work in their area of study;
- Students will demonstrate an ability to work independently in accomplishing all of the above goals.
History of the Major
2024 | |
2023 | |
2022 | |
2021 | Add COS 240 (Reasoning about Computation). Replace "2 theory electives + 2 systems electives + 2 applications electives + 2 CS electives" → "1 theory elective + 1 systems elective + 1 applications elective + 1 AI/ML elective + 3 CS electives". Drop COS 333I (Advanced Programming Techniques) as an Independent-Work option. |
2020 | |
2019 | Add COS 511 (Theoretical Machine Learning) as a theory elective. Add COS 316 (Principles of Computer System Design) as a systems selective. Add COS 360 (Computational Models of Cognition) as applications electives. Drop COS 435 (Information Retrieval, Discovery, and Delivery) as applications elective. Change Independent Work guidelines. |
2018 | Drop COS 441 (Programming Languages) as a theory elective. Add COS 343 (Algorithms for Computational Biology) and COS 485 (Neural Networks) as applications electives. |
2017 |