# Requirements

## Overview

Computer science concentrators must take 8 departmental courses (departmentals) and do independent work. The minimum amount of independent work depends on whether you are an AB candidate (4 semesters minimum) or a BSE candidate (1 semester minimum). Departmental courses are any computer science course at the 300 or 400 level (except 397, 398, 497 and 498) and a specific set of courses in other departments (enumerated below). There is also a distribution requirement within the 8 departmental courses: you must take at least 2 Systems departmentals, at least 2 Theory departmentals, and at least 2 Applications departmentals. (Notice that leaves you 6 departmentals that are constrained and 2 departmentals that are unconstrained.) *Paths Through the Major* will illustrate some paths to earn a degree in the Computer Science concentration.

BSE candidates do independent work by signing up for COS 397 or 398 in the junior year, or COS 497 or 498 in the senior year. You encouraged to do more than one semester of independent work; the second semester of independent work may be counted as a departmental.

AB candidates do 2 one-semester junior independent work projects and a full year senior thesis. Numbered courses are not used to designate AB independent work.

## Course Offerings

Current course offerings can be found here and historical course information can be found on the Computer Science Course Schedule.

## Departmental Courses

Any computer science (COS) course at the 300 or 400 level (except independent work) counts as a computer science departmental. In addition, some graduate COS courses (500-level) count as undergraduate departmentals (COS 551, COS 534), depending on their content and structure. (Please ask if you need to use a graduate course as a departmental). However, graduate courses rarely count as special "tracked" departmentals (see the list below for the few exceptions).

In addition, any 300- or 400- level Math or ELE or *Physics** or ORF course that does not duplicate COS content,** Philosophy 312, MAE 345, CHM 301***

**(CHM 303**is now renumbered to

**CHM 301 as of 8/27/2018),**

**On occasion, special courses with computational content from other departments may fall in to this category. Note that it is very, very, very rare for courses outside the computer science department that are not cross-listed with the computer science department to count as track-specific (ie: Theory/Systems/Applications) departmentals.**

*ECO 312**, MOL 437/NEU 437, NEU 330, MUS 315, ECO 326, and SOC 414 count as departmentals.**Hence, in general, you will not be able to count more than 2 courses outside of the computer science department as COS departmentals.**

**Beginning with the Class of 2023 CHM 301, ECO 312 and Physics courses will no longer count as COS departmentals. *

**Course Tracks**

### Theoretical computer science

Courses in this track explore the theoretical underpinnings of computing systems. They all use mathematical proofs for rigorous development of the area of study.

**Theory courses:***

- 340 Reasoning about Computation
- 423 Theory of Algorithms
- 433**Cryptography
- 445 Networks, Economics and Computing
- 451 Computational Geometry
- 487 Theory of Computation
- 488 Introduction to Analytic Combinatorics
- 510* (441) Programming Languages
- 511Theoretical Machine Learning
- 516* Reasoning About Software
- 521 Advanced Algorithm Design
- 522 Computational Complexity
- 533** Advanced Cryptography

*If you take COS 510 (or 441) and COS 516 only *one* will count as a theory requirement.

**If you take COS 433 and COS 533 only *one* will count as a theory requirement.

### Systems

Courses in this track study the design and implementation of the foundational hardware and software that constitute a modern computing environment.

**Systems courses:***

- 306 (ELE 206) Introduction to Logic Design
- 316 Principles of Computer System Design (Fall 2019 Course)
- 318 Operating Systems
- 320 Compiling Techniques
- 333 Advanced Programming Techniques
- 375 (ELE 375) Computer Architecture and Organization
- 418 Distributed Systems**
- 425 Database and Information Management Systems
- 461 Computer Networks*
*463 Wireless Networks (Spring 2018 Course)*- 475 (ELE 475) Computer Architecture
- 518 Advanced Computer Systems**
- 561 Advanced Computer Networks*

*If you take COS 461 and COS 561 only *one* will count as a systems requirement.

**If you take COS 418 and COS 518 only *one* will count as a systems requirement.

### Applications

Courses in this track treat a broad range of topics.

**Applications courses:***

- 314 (MUS 314) Computer and Electronic Music through Programming, Performance, and Composition (with programming precept)
- 323 (ORF 363) Computing and Optimization
- 324 Introduction to Machine Learning
- 326 Functional Programming
*343 Algorithms for Computational Biology (Spring 2018 Course)**360 (PSY 360) Computational Models of Cognition (Fall 2019 Course)*- 401 (TRA 301) Introduction To Machine Translation
- 402 Machine Learning and Artificial Intelligence
- 424 Fundamentals of Machine Learning
- 426* Computer Graphics
- 429 Computer Vision
- 432 Information Security
- 436 Human-Computer Interface Technology
- 454 Probabilistic Models of Cognition
- 455 (MOL 455) Introduction to Genomics and Computational Molecular Biology
- 484 Natural Language Processing (Fall 2019 Course)
*485 Neural Networks (Spring 2018 Course)*- 526* Advanced Computer Graphics

*If a student takes both COS 426 and 526, *only one* will count as an applications requirement.

** Course offerings can vary from year to year.*

Some regular courses are COS departmentals but do not count in any specific track, such as COS 351 "Information technology and public policy". COS 495, Special Topics, is a departmental but may be associated with different tracks (or no track) depending on content. Other one-time courses may also be departmentals and may count in one of the tracks depending on level and content. Check with your adviser or the undergraduate coordinator for up-to-date information.

*. Historical course information can be found on the Computer Science Course Schedule.*

## Independent Work

Independent work is one of the unique features of a Princeton education. Independent projects typically arise either from an idea that excites you or from an idea put forth by a professor in the department. The department maintains a wiki of faculty research interests. This list is a good place to start in looking for a project or adviser. There is also some general advice on finding a topic, an adviser, and a successful outcome here.

Once you have a project, get a form (located on the bulletin board outside the Computer Science undergraduate office) and sign it along with your adviser to let us know what you'll be doing. Your project is then between you and your adviser, but there is always a COS Independent Work Coordinator who coordinates all independent work, and schedules public talks, checkpoints, and other requirements.

It is possible to do a project with a faculty member in another department if you have the approval of the Independent Work Coordinator.

## Summary of All Requirements

### BSE Requirements

- Engineering school requirements (physics, chemistry, etc.; see the Undergraduate Announcement)
- Prerequisites (COS 126, 217, 226)
- 8 Computer Science departmentals (2 from each track listed above)
- 1 semester of independent work (COS 397 or 398 in your junior year, or COS 497 or 498 in your senior year)

### AB Requirements

- The University requirements for the AB degree (language requirement, distribution requirements, etc.; see the Undergraduate Announcement
- Prerequisites
- COS 126, 217, 226
- MAT 103-104 and 175* (or 202 or 204 or 217)
**Beginning with the Class of '19 the prerequisite will be Math 103-104 and 202 or 204 or 217.* *EGR 154 may be taken instead of MAT 202/204.*

- 8 Computer Science departmentals (2 from each track listed above)
- 2 semesters of junior independent work
- Senior thesis