Computer Science
Program Offerings
With computation and computer science now permeating all corners of society and the economy, a computer science education has become a good launching pad for almost any career. Core concepts and skills emphasized in the computer science curriculum include theoretical and quantitative analysis of computation; design/engineering principles of advanced computer systems; and foundations and methods of AI and machine learning. The curriculum provides additional flexibility to explore subdisciplines of computer science (programming languages, formal methods, software engineering, computer graphics, information security), or to branch out into exciting crossdisciplinary investigations (neuroscience and cognitive science, computational biology, information policy, robotics, data science, etc.). Most computer science majors enjoy programming. Quite a few start with zero or minimal background and can enhance their skills while progressing through the curriculum.
The plan below applies to the Class of 2025 and beyond; the requirements for the Class of 2024 and earlier are available from the Computer Science Department website and the archived version of the Undergraduate Announcement.
Goals for Student Learning
The following are the key learning goals for a major in computer science:
 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 twoterm 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.
Prerequisites
The prerequisites for A.B. students are any one of MAT 202/204/217 or EGR 154; COS 126 (or ECE 115); COS 217 and 226. Students should plan to take COS 126 in the first year. COS 217 and COS 226 must be completed before junior year. One or both of these are prerequisites for all later computer science courses.
Admission to the Program
Information for FirstYear Students. Students with a general interest in the sciences or engineering are encouraged to take COS 126 in the first year. This provides useful background for applications work in any science or engineering major and preserves the option of later electing a computer science major.
Program of Study
Departmental Requirements
Course Requirements: Majors must take at least eight departmental courses on a graded basis. These fall into three categories: foundation, core courses, and electives.
Foundation
Students must take COS 240 (Reasoning and Computation), to be completed before the end of junior year.
Core Courses
Students must take a total of four courses, one from each of the four categories listed below:
1. Computer Systems: COS 316 (Principles of Computer System Design) or COS 375 (Computer Architecture and Organization)
Alternatives:
 COS 318 (Operating Systems)
 COS 418 (Distributed Systems)
 COS 461 (Computer Networks)
2. Artificial Intelligence and Machine Learning: COS 324 (Introduction to Machine Learning)
Alternatives:
 COS 424 (Fundamentals of Machine Learning)
 COS 429 (Computer Vision)
 COS 484 (Natural Language Processing)
3. Theoretical Computer Science
 COS 423 (Theory of Algorithms)
 COS 433 (Cryptography)
 COS 445 (Networks, Economics, and Computing)
 COS 487 (Theory of Computation)
4. Breadth: This category contains courses that either explore another subdiscipline beyond Systems/Theory/AIML or provide experience with realworld applications. Students must complete at least one.
 COS 326 (Functional Programming)
 COS 333 (Advanced Programming Techniques)
 COS 343 (Algorithms for Computational Biology)
 COS 426 (Computer Graphics)
 COS 432 (Information Security)
 COS 436 (HumanComputer Interaction)
 COS 448 (Innovating across Technology, Business, and Markets)
Electives
Students must take three COS courses numbered at the 300 or 400 level (500level graduate courses do not count as electives). Alternatively, up to two electives may be chosen from a list of approved courses from other departments (see the department website for an uptodate list).
Students should consult with a computer science academic adviser on their course selections once they decide to become computer science majors. Academic advisers are listed on the Department of Computer Science webpage.
Interdisciplinary Studies
The pervasive nature of modern computing has introduced many interactions between computer science and other disciplines. Basic preparation in computer science is valuable for a broad variety of careers because of the computer's central role in society. Professionals who understand computers are far more effective in their work. In the past, a large amount of technical preparation was required before interesting applications could be considered; today's undergraduates can use computers to study important problems in other disciplines.
Some possible areas for interdisciplinary study are mathematics, music, art, economics, electrical and computer engineering, molecular biology, neurosciences and linguistics.
Many Princeton undergraduates view their four years at Princeton as an opportunity to gain an education before immersing themselves in rigorous training for careers in law, business or medicine. Computer science students are no exception. Through the choice of electives, students may create a specialized interdisciplinary program or a broad program with computer science as the core of preprofessional study. The former requires consultation with advisers in the related disciplines to determine what constitutes a reasonable cognate specialization, and the latter is constrained by the requirement of a coherent program of study in the major.
Independent Work
All A.B. majors will engage in independent work supervised by a member of the department. IW projects involve the study and solution of specific problems in or related to computer science. These may arise from varied motivations, such as research questions intrinsic to the field; entrepreneurial activities; software design; policy or ethics issues in the tech world; applications of computer science to other disciplines or societal problems. Many students come up with their own IW topics; others may formulate them with help from faculty advisers.
In the fall term of junior year, majors must enroll in a Junior Research Workshop (JRW), while simultaneously enrolling in a “Methods” 3xx course offered that term. The Methods course and the JRW complement each other and enable students to write a comprehensive proposal for a spring IW project by the end of the fall term, which can be used for a spring IW project. See the department website for details.
A.B. junior majors then use the spring term to complete their proposed IW project — or, in many cases, embark on a separate research endeavor for the spring term — through one of the following advising structures:
 OneonOne Advising. Students complete a project of their choosing while working oneonone with a faculty adviser. Students may also work within the context of a faculty research project. Students can explore the Undergraduate Research Topics for faculty research interests and advisers.
 Independent Work Seminars. Students with shared interests around a common theme meet weekly as a group with a faculty adviser. Seminar instructors and themes vary term to term.
A.B. senior majors must complete a fullyear senior thesis. The senior thesis may be a study in greater depth of one of the subjects considered in junior independent work, or it may deal with another aspect of computer science and its application. Students can explore the Undergraduate Research Topics for faculty research interests and advisers.
The COS AB Independent Work and Thesis Handbook provides more information about the COS department's independent work and thesis requirements.
The department also offers a curriculum leading to a B.S.E. degree. The primary differences between the A.B. and B.S.E. programs are in the University requirements for the degree programs.
Senior Departmental Examination
An oral examination, consisting of a defense of the thesis research, will be held in April.
Study Abroad
Become a citizen of the world! Computer science majors are allowed and encouraged to study abroad for a semester or year. The Office of International Programs (OIP) manages study abroad programs. See the Study Abroad Program page for specific information.
The computer science minor is designed for students who want to combine the study of computing and computers with another academic discipline. The program welcomes students not only from areas that traditionally make heavy use of computation (such as engineering, the natural sciences and mathematics) but also from newer and emerging application areas (such as neuroscience, digital humanities, technology policy, music, visual arts, economics, linguistics and philosophy). Many students find this program an effective way to apply computer science to their own specialties, and to understand how computation and technology are transforming our world.
Goals for Student Learning
The key learning goals for a minor in computer science are:
 To train students in computational thinking and to empower them to deploy computation to solve problems across a variety of application domains;
 To introduce students to some key subfields within computer science (e.g., artificial intelligence, humancomputer interaction, the theory of computation, computer systems, computer architecture, security and data science);
 To instruct students in the practice of software design and development (e.g., coding, testing, debugging, version control, usercentered design and prototyping).
Admission to the Program
The minor program is open to all undergraduates (except those majoring in computer science). Students are admitted to the program after they have declared their major and successfully completed both COS 126 and either COS 217 or COS 226.
Please refer to the computer science minor website for additional details.
Program of Study
Students are required to take a total of five computer science courses, as detailed below:
 Core: COS 126 ( or ECE 115) and either COS 217 or COS 226.
 Electives: Three additional Princeton COS courses at the 200, 300, or 400 level, except IW courses (COS 397, 398, 497 and 498). This includes courses crosslisted in COS, regardless of the home department. It excludes graduate courses and courses taken at other institutions. If a student takes COS 217 and COS 226, one of them may count as an elective.
If a student places out of COS 126 (via the COS placement officer), an additional elective must be taken so that the total number of COS courses is five.
If a student receives a grade of D or F in a course, that course will not count toward satisfying the program requirements. Students may use at most one course taken on a pass/D/fail basis to satisfy the program requirements.
Students may use at most two courses to simultaneously satisfy requirements for this program and their major.
For questions about the program that are not answered in the COS minor FAQ, email us at [email protected].
Faculty

Chair
 Szymon M. Rusinkiewicz

Associate Chair
 Ryan P. Adams
 Wyatt A. Lloyd

Director of Undergraduate Studies
 Brian W. Kernighan (codirector)
 Kevin Wayne (codirector)

Director of Graduate Studies
 Aarti Gupta (codirector)
 Kyle A. Jamieson (codirector)

Professor
 Ryan P. Adams
 Andrew W. Appel
 Sanjeev Arora
 David I. August
 Mark Braverman
 Bernard Chazelle
 Zeev Dvir
 Adam Finkelstein
 Michael J. Freedman
 Tom Griffiths
 Aarti Gupta
 Elad Hazan
 Kyle A. Jamieson
 Brian W. Kernighan
 Kai Li
 Margaret R. Martonosi
 Radhika Nagpal
 Arvind Narayanan
 Ben Raphael
 Ran Raz
 Jennifer Rexford
 Szymon M. Rusinkiewicz
 H. Sebastian Seung
 Jaswinder P. Singh
 Mona Singh
 Robert E. Tarjan
 Olga G. Troyanskaya
 David P. Walker

Associate Professor
 Jia Deng
 Zachary Kincaid
 Gillat Kol
 Wyatt A. Lloyd
 Jonathan Mayer
 Karthik Narasimhan
 Ravi A. Netravali
 Olga Russakovsky
 Matt Weinberg

Assistant Professor
 Parastoo Abtahi
 Danqi Chen
 Tri Dao
 Adji Bousso Dieng
 Benjamin Eysenbach
 Felix Heide
 Peter Henderson
 Aleksandra Korolova
 Pravesh K. Kothari
 Amit A. Levy
 Lydia T. Liu
 Alex Lombardi
 Mae Milano
 Andrés MonroyHernández
 Yuri Pritykin
 Huacheng Yu
 Ellen Zhong

Associated Faculty
 Amir Ali Ahmadi, Oper Res and Financial Eng
 Christine AllenBlanchette, Mechanical & Aerospace Eng
 Maria Apostolaki, Electrical & Comp Engineering
 Jianqing Fan, Oper Res and Financial Eng
 Jaime Fernandez Fisac, Electrical & Comp Engineering
 Yasaman Ghasempour, Electrical & Comp Engineering
 Chi Jin, Electrical & Comp Engineering
 Jason D. Lee, Electrical & Comp Engineering
 Anirudha Majumdar, Mechanical & Aerospace Eng
 Prateek Mittal, Electrical & Comp Engineering
 Paul Seymour, Mathematics
 John D. Storey, Integrative Genomics
 Daniel L. Trueman, Music
 Janet A. Vertesi, Sociology
 Pramod Viswanath, Electrical & Comp Engineering
 Mengdi Wang, Electrical & Comp Engineering
 David Wentzlaff, Electrical & Comp Engineering

University Lecturer
 Kevin Wayne

Senior Lecturer
 Robert M. Dondero
 Robert S. Fish
 Alan Kaplan
 Xiaoyan Li
 Christopher M. Moretti

Lecturer
 Sebastian Caldas
 Marcel Dall'Agnol
 Ruth C. Fong
 Donna S. Gabai
 Pedro Paredes
 Iasonas Petras
 Vikram V. Ramaswamy
For a full list of faculty members and fellows please visit the department or program website.