# 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.)

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.

## 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 303, ECO 312, MOL 437/NEU 437, NEU 330, MUS 315, and ECO 326 – Economics of the Internet count as departmentals. 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. ** Hence, in general, you will not be able to count more than 2 courses outside of the computer science department 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
- 516* Reasoning About Software
- 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
- 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)*- 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
- 435 Information Retrieval, Discovery and Delivery
- 436 Human-Computer Interface Technology
- 455 (MOL 455) Introduction to Genomics and Computational Molecular Biology
*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 advisor or the undergraduate coordinator for up-to-date information.

## 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 advisor. 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 advisor to let us know what you'll be doing. Your project is then between you and your advisor, 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
- Math 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*

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

### Can courses outside the COS department, such as ORF 309 count as area-specific departmentals (ie: theory, systems, applications)?

### What about substitutions?

### Can I take departmentals and prerequisites pass/D/fail?

### Can I take departmentals in my sophomore year?

### I placed out of some of those math and science courses, so I have time for more computer science. What should I do?

### Can I get departmental credit for a course taken at another school, for example during the summer?

### If I get a D in a course, can it still count as a departmental?

### When do I have to declare which courses are departmentals?

### Does the COS department require some minimum departmental GPA?

### How are departmental averages computed for awarding honors?

### Did you say "senior departmental exam?"

### I want to take a CS course that conflicts with a course in another department that I also want to take. Can you please re-schedule the CS course?

### Can I study computer architecture in the EE department?

### There are often CS graduate students in my upper-level courses. How does this affect my grade?

### I want to go to grad school, which courses should I take?

If you plan to attend graduate school in CS to pursue a PhD, you are strongly encouraged to take (1) a semester of independent work by the end of your junior year and (2) 300- and 400- level courses in your area of research interest. (If you haven't narrowed down potential areas, take classes in core areas of the curricula, such as 318, 320, 375, 402, 423, and 461). Successful admission to top graduate programs requires both positive letters of recommendation from CS faculty (most commonly from taking independent research) and excellent course work.