# Computer Science

**Director of undergraduate studies:** James Aspnes, AKW 401, 432-1232; cpsc.yale.edu

The Department of Computer Science offers both B.S. and B.A. degree programs, as well as four combined majors in cooperation with other departments: Electrical Engineering and Computer Science, Computer Science and Economics, Computer Science and Mathematics, and Computer Science and Psychology. Each major program not only provides a solid technical education but also allows students either to take a broad range of courses in other disciplines or to complete the requirements of a second major.

The Computer Science and combined major programs share a common core of five computer science courses. The first is CPSC 201, a survey that demonstrates the breadth and depth of the field to students who have taken the equivalent of an introductory programming course. The remaining core courses cover discrete mathematics, data structures, systems programming and computer architecture, and algorithm analysis and design. Together these courses include the material that every major should know.

The core courses are supplemented by electives (and, for the combined majors, core courses in the other discipline) that offer great flexibility in tailoring a program to each student's interests. The capstone is the senior project, through which students experience the challenges and rewards of original research under the guidance of a faculty mentor.

Prospective majors are encouraged to discuss their programs with the director of undergraduate studies (DUS) as early as possible.

#### Introductory Courses

The department offers a broad range of introductory courses to meet the needs of students with varying backgrounds and interests. Except for CPSC 200 and CPSC 201, none assumes previous knowledge of computers.

- CPSC 100, taught jointly with Harvard University, teaches students majoring in any subject area how to program a computer and solve problems. No prior experience is required.
- CPSC 112 teaches students majoring in any subject area how to program a computer and solve problems using the language Java. Students with previous programming experience should consider taking CPSC 201 instead.
- CPSC 134 provides an introduction to computer music, including musical representations for computing, automated music analysis and composition, interactive systems, and virtual instrument design.
- CPSC 150 explores how some of the key ideas in computer science have affected philosophy of mind, cognitivism, connectionism, and related areas. This humanities-style course requires a significant amount of reading and writing a paper, and satisfies the writing and the humanities and arts distributional requirements.
- CPSC 151 studies the history of the graphical user interface in an attempt to guess its future. This course also satisfies the writing distributional requirement.
- CPSC 183 explores the myriad ways that law and technology intersect, with a special focus on the role of cyberspace. This course satisfies the social science distributional requirement.
- CPSC 200, intended as a survey course for nonmajors, focuses on practical applications of computing technology while examining topics including computer hardware, computer software, and related issues such as security and software engineering.
- CPSC 201 teaches the basic concepts, techniques, and applications of computer science, including systems (computers and their languages) and theory (complexity and computability). Students with sufficient programming experience may elect CPSC 201 without taking CPSC 112. (These courses meet at the same time so that students are easily able to change levels if necessary.)
- CPSC 202 presents the formal methods of reasoning and the concepts of discrete mathematics and linear algebra used in computer science and related disciplines.

#### Requirements of the Major

The B.S. and the B.A. degree programs have the same required five core courses: CPSC 201; CPSC 202 or MATH 244; CPSC 223; CPSC 323; and CPSC 365 or 366. CPSC 280 and 490 may not be counted toward these core courses.

**B.S. degree program** The B.S. degree program requires a total of twelve term courses, the five core courses, six intermediate or advanced courses in Computer Science, and the senior requirement.

**B.A. degree program** The B.A. degree program requires a total of ten term courses, the five core courses, four intermediate or advanced courses in Computer Science, and the senior requirement.

**Combined B.S./M.S. degree **Exceptionally able and well-prepared students may complete a course of study leading to the simultaneous award of the B.S. and M.S. degrees after eight terms of enrollment. General eligibility requirements are described in the Academic Regulations, section K, Special Arrangements, “Simultaneous Award of the Bachelor's and Master's Degrees.” Specific requirements for the combined degree in Computer Science are as follows:

- Candidates must satisfy the Yale College requirements for the B.S. degree in Computer Science.
- At the end of their fifth term of enrollment candidates must have earned at least nine of their Computer Science required course credits, which together with three additional Computer Science required course credits, satisfy the requirements for the B.S. in Computer Science. Candidates must also have achieved A grades in at least three quarters of these courses.
- Candidates must also complete eight graduate courses from the approved list, up to two of which may, with the permission of the DUS and the director of graduate studies, also be applied toward completion of the B.S. degree. At most, one of these eight courses may be CPSC 690, 691, or 692. All eight graduate courses must be completed in the final four terms of enrollment, and at least six of them must be completed in the final three terms of enrollment.

**Credit/D/Fail** Courses taken Credit/D/Fail may not be counted toward the major. All courses in the major must be taken for a letter grade.

**Roadmap **See visual roadmap of the requirements.

#### Senior Requirement

In the senior year students must take CPSC 490, an independent project course in which students select an adviser to guide them in research in a subfield of computer science. With permission of the DUS, students may enroll in 490 more than once or before their senior year.

#### Advising

All Computer Science majors in the sophomore, junior, and senior years should have their programs approved by the DUS. Students majoring in Computer Science are advised to complete CPSC 201 and 223 by the end of the sophomore year.

**Electives **The Computer Science department encourages interdisciplinary study in which computer science plays a major role. Advanced courses in other departments that involve concepts from computer science and are relevant to an individual program may, with permission of the DUS, be counted toward the requirements, but no more than two such courses may be counted toward the B.S., and no more than one toward the B.A.

Students considering graduate study in computer science are advised to take CPSC 421 and 422, as well as courses covering the breadth of computer science, including programming languages and systems, artificial intelligence, scientific computing, and theoretical computer science.

Students interested in using computers to solve scientific and engineering problems are advised to take CPSC 440 as well as computational courses offered in Applied Mathematics and in Engineering and Applied Science.

The core mathematical background necessary to complete the Computer Science major is provided in CPSC 202. However, many advanced courses in graphics, computer vision, neural networks, and numerical analysis assume additional knowledge of linear algebra and calculus. Students who plan to take such courses as electives and who are unsure whether they have the appropriate mathematical background are encouraged to take MATH 222 or 225, MATH 226, and MATH 120.

**Typical programs **For students who already know how to program, typical B.S. programs starting in the first and sophomore years are indicated below. For typical B.A. programs, two of the electives would be omitted.

First-Year | Sophomore | Junior | Senior |
---|---|---|---|

CPSC 201 | CPSC 202 and CPSC 323 | Two electives | CPSC 490 |

CPSC 223 | CPSC 365 or 366 | Two electives | One elective |

One elective |

Sophomore | Junior | Senior | |
---|---|---|---|

CPSC 223 | CPSC 365 or 366 | Two electives | |

CPSC 201 | CPSC 323 | CPSC 490 | |

CPSC 202 | Two electives | Two electives | |

**REQUIREMENTS OF THE MAJOR**

**Prerequisites **None

**Number of courses ***B.S.*—12 term courses taken for letter grades (incl senior project); *B.A.*—10 term courses taken for letter grades (incl senior project)

**Specific courses required ***B.S. and B.A.*—CPSC 201; CPSC 202 or MATH 244; CPSC 223; CPSC 323; and CPSC 365 or 366

**Distribution of courses ***B.S.*—6 addtl intermediate or advanced Comp Sci courses; *B.A.*—4 addtl intermediate or advanced Comp Sci courses

**Substitution permitted **Advanced courses in other depts, with DUS permission

**Senior requirement **Senior project (CPSC 490)

The Computer Science department offers two degree programs, B.S. and B.A., and combined majors with Economics, Electrical Engineering, Mathematics, and Psychology. Each program provides a solid technical education yet allows students to take the broad range of courses in other disciplines that is an essential part of a liberal education.

The programs share a common core of five computer science courses, including CPSC 201 and courses in discrete mathematics, data structures, systems programming and computer architecture, and algorithm analysis and design. This core is supplemented by electives and, for the combined majors, core courses in the other discipline. The capstone of the major is the senior project, in which students conduct original research under the guidance of a faculty mentor.

Prospective majors are encouraged to discuss their program with the director of undergraduate studies (DUS) as early as possible.

The department offers a broad range of introductory courses for first-year students with varying backgrounds and interests. Except for CPSC 200 and CPSC 201, none assumes previous knowledge of computers.

- CPSC 100, Introduction to Computing and Programming, taught jointly with Harvard University, teaches students majoring in any subject area how to program a computer and solve problems. No prior experience is required.
- CPSC 112, Introduction to Programming, teaches students majoring in any subject area how to program a computer and solve problems using the language Java. Students with previous programming experience should consider taking CPSC 201 instead.
- CPSC 134, Programming Musical Applications, provides an introduction to computer music, including musical representations for computing, automated music analysis and composition, interactive systems, and virtual instrument design.
- CPSC 150, Computer Science and the Modern Intellectual Agenda, explores how some of the key ideas in computer science have affected philosophy of mind, cognitivism, connectionism, and related areas. This humanities-style course has significant readings and a paper, and satisfies the writing and the humanities and arts distributional requirements.
- CPSC 151, The Graphical User Interface, studies the history of the graphical user interface in an attempt to guess its future. This course also satisfies the writing distributional requirement.
- CPSC 183, Law, Technology, and Culture, explores the myriad ways that law and technology intersect, with a special focus on the role of cyberspace. This course satisfies the social science distributional requirement.
- CPSC 200, Introduction to Information Systems, intended as a survey course for nonmajors, focuses on practical applications of computing technology while examining topics including computer hardware, computer software, and related issues such as security and software engineering.
- CPSC 201, Introduction to Computer Science, surveys the field of computer science, including systems (computers and their languages) and theory (algorithms, complexity, and computability). Students with sufficient programming experience may elect CPSC 201 without taking CPSC 112. (These courses meet at the same time so that students are easily able to change levels if necessary.)
- CPSC 202, Mathematical Tools for Computer Science, presents the formal methods of reasoning and the concepts of discrete mathematics and linear algebra used in computer science and related disciplines.

**Certificate in Programming**

The Certificate in Programming prepares students to program computers in support of work in any area of study. While the certificate does not provide the grounding in theory and systems that the computer science majors do, it does provide a short path to programming literacy that can be completed in a span of four terms. Majors in Computer Science, and in the joint programs with Economics, Electrical Engineering, Mathematics, and Psychology, or in Computing and the Arts may not pursue the Certificate.

Refer to the Computer Science website for more information.

#### Prerequisite

The prerequisite for the Certificate is an introductory programming course, CPSC 100 or 112, or successful completion of an AP Computer Science course.

#### Requirements of the Certificate

Students may not use any of the five required courses, indicated below, to satisfy the requirements of any major, multidisciplinary academic program (MAP), or other certificate. If such a course is required for another program, the student must substitute another course from the same category or a more advanced one for the Programming Certificate. No course taken Credit/D/Fail may be used to satisfy any of the requirements; no course may be used to satisfy more than one of them.

**Programming** One from CPSC 201 or CPSC 200

**Data structures** CPSC 223

**Advanced programming** One from CPSC 327 or CPSC 323

**A programming elective **A CPSC course with CPSC 223 as a listed or implied prerequisite and a primary focus on programming (such as CPSC 424, 437, 439, 446, or 478) or a second course that satisfies the advanced programming requirement

**An applications or algorithms elective** Either a programming in context course that requires significant programming (such as CPSC 334, 335, 376, 431, 432, 474, 477, or LING 380) or a course in algorithms (such as CPSC 365 or 366)

#### Advising

A faculty member from the Department of Computer Science will be available to advise students pursuing the Certificate. Exceptions to the above requirements, other than the substitution of a more advanced course for a required one, are limited. Refer to the Computer Science website for a list.

**Requirements **

**Prerequisite** CPSC 100 or 112, or AP Computer Science course

**Number of courses **5 term courses

**Specific course required **CPSC 201 or 200; CPSC 223; CPSC 327 or 323

**Distribution of courses **2 additional courses as specified

#### FACULTY OF THE DEPARTMENT OF COMPUTER SCIENCE

**Professors **Dana Angluin, James Aspnes *(DUS)*, Dirk Bergemann,* Ronald Coifman,* Aaron Dollar,* Julie Dorsey, Joan Feigenbaum, Michael Fischer, David Gelernter, Mark Gerstein,* John Lafferty,* Rajit Manohar,* Drew McDermott (*Emeritus*), Dragomir Radev, Vladimir Rokhlin,† Holly Rushmeier, Brian Scassellati, Martin Schultz (*Emeritus*), Zhong Shao *(Chair)*, Avi Silberschatz, Daniel Spielman, Leandros Tassiulas,* Nisheeth Vishnoi, Y. Richard Yang, Lin Zhong, Steven Zucker†

**Associate Professors **Abhishek Bhattacharjee, Theodore Kim, Smita Krishnaswamy,* Sahand Negahban,* Ruzica Piskac, Phillip Strack

**Assistant Professors **Yang Cai, Wenjun Hu,* Julian Jara-Ettinger,* Amin Karbasi,* Anurag Khandelwal, Charalampos Papamanthou, Robert Soulé, Jakub Szefer,* David Van Dijk,* Marynel Vázquez, Andre Wibisono

**Senior Research Scientists** Robert Bjornson, Andrew Sherman

**Senior Lecturers** James Glenn, Kyle Jensen,* Stephen Slade

**Lecturers **Timothy Barron, Andrew Bridy,† Rob Brunstad, Cody Murphey, Scott Petersen, Brad Rosen, Andrew Sherman, Cecillia Xie

*A secondary appointment with primary affiliation in another department or school.

†A joint appointment with primary affiliation in another department or school.