Computer Science

Directors of undergraduate studies: Y. Richard Yang, 432-6400, AKW 208A; cpsc.yale.edu

The Department of Computer Science offers both B.S. and B.A. degree programs, as well as four combined major programs in cooperation with other departments: Electrical Engineering and Computer Science, Computer Science and Economics, Computer Science and Mathematics, and Computer Science and Psychology. Each 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 (CPSC 202 or MATH 244), data structures (CPSC 223), systems programming and computer architecture (CPSC 323), and algorithm analysis and design CPSC 365366 or 368. Only one of CPSC 365366, and 368 may be taken for major credit. Together these courses include the material that every major should know.

The core courses are supplemented by electives (and, for a combined major, 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 (CPSC 490), through which students experience the challenges and rewards of original research under the guidance of a faculty adviser.

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.

  1. CPSC 100 is taught jointly with Harvard University and teaches students majoring in any subject area how to program a computer and solve problems. No prior programming experience is required. Students with previous programming experience should consider taking CPSC 201 instead. This course satisfies the Quantitative Reasoning distributional requirement.
  2. CPSC 110 teaches programming for humanities and social sciences using the Python programming language. No prior programming experience is required. This course satisfies the Quantitative Reasoning distributional requirement.
  3. CPSC 112 teaches students majoring in any subject area how to program a computer and solve problems using the Java programming language. No prior programming experience is required. Students with previous programming experience should consider taking CPSC 201 instead. This course satisfies the Quantitative Reasoning distributional requirement.
  4. CPSC 134 provides an introduction to computer music, including musical representations for computing, automated music analysis and composition, interactive systems, and virtual instrument design.
  5. 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.
  6. CPSC 151 studies the history of the graphical user interface in an attempt to guess its future. This course satisfies the Writing distributional requirement.
  7. 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 Sciences distributional requirement.
  8. CPSC 184 focuses on the evolving and oftentimes vexing intellectual property regime of the new digital age. This course satisfies the Social Sciences and the Humanities and Arts distributional requirements.
  9. CPSC 185 covers the evolution of various legal doctrines with and around technological development. This course satisfies the Social Sciences and the Writing distributional requirements.
  10. CPSC 200, intended as a survey course for non-majors, focuses on practical applications of computing technology while examining topics including computer hardware, computer software, and related issues such as security and software engineering. This course satisfies the Quantitative Reasoning distributional requirement.
  11. 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.) This course satisfies the Quantitative Reasoning distributional requirement.
  12. CPSC 202 presents the formal methods of reasoning and the concepts of discrete mathematics and linear algebra used in computer science and related disciplines. This course satisfies the Quantitative Reasoning distributional requirement.
  13. CPSC 210 examines the political challenges wrought by massive increases in the power of computational and communication technologies and the potential for citizens and governments to harness those technologies to solve problems. This course satisfies the Social Sciences distributional requirement.

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 223CPSC 323; and CPSC 365 or 366 or 368

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 L, Special Academic Arrangements, “Simultaneous Award of the Bachelor's and Master's Degrees.” Specific requirements for the combined degree in Computer Science are as follows:

  1. Candidates must satisfy the Yale College requirements for the B.S. degree in Computer Science.
  2. 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.
  3. 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.

Senior Requirement

In the senior year, students must take CPSC 490, an independent project course, in which a student selects an adviser to conduct original research with substantial work 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 review their programs with their class advisers and the DUS. Students majoring in Computer Science are advised to complete CPSC 201 and 223 by the end of their sophomore year.

Electives The field of computer science has broadened substantially in the last few decades and the Computer Science department advises its majors to choose intermediate and advanced electives covering the breadth of computer science, including theoretical computer science; computer systems and languages (e.g., database, networking, operating systems, programming languages, and systems security); and computer applications (e.g., artificial intelligence, computer graphics, computer vision, human-computer interactions, machine learning, natural language processing, and robotics).

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 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

SUMMARY OF MAJOR REQUIREMENTS

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 or 368 

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.

  1. CPSC 100 is taught jointly with Harvard University, and teaches students majoring in any subject area how to program a computer and solve problems. No prior programming experience is required. Students with previous programming experience should consider taking CPSC 201 instead. This course satisfies the Quantitative Reasoning distributional requirement.
  2. CPSC 110 teaches programming for humanities and social sciences using the Python programming language. No prior programming experience is required. This course satisfies the Quantitative Reasoning distributional requirement.
  3. CPSC 112 teaches students majoring in any subject area how to program a computer and solve problems using the Java programming language. No prior programming experience is required. Students with previous programming experience should consider taking CPSC 201 instead. This course satisfies the Quantitative Reasoning distributional requirement.
  4. CPSC 134 provides an introduction to computer music, including musical representations for computing, automated music analysis and composition, interactive systems, and virtual instrument design.
  5. 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.
  6. CPSC 151 studies the history of the graphical user interface in an attempt to guess its future. This course satisfies the Writing distributional requirement.
  7. 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 Sciences distributional requirement.
  8. CPSC 184 focuses on the evolving and oftentimes vexing intellectual property regime of the new digital age. This course satisfies the Social Sciences and the Humanities and Arts distributional requirements.
  9. CPSC 185 covers the evolution of various legal doctrines with and around technological development. This course satisfies the Social Sciences and the Writing distributional requirements.
  10. CPSC 200, intended as a survey course for non-majors, focuses on practical applications of computing technology while examining topics including computer hardware, computer software, and related issues such as security and software engineering. This course satisfies the Quantitative Reasoning distributional requirement.
  11. 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.) This course satisfies the Quantitative Reasoning distributional requirement.
  12. CPSC 202 presents the formal methods of reasoning and the concepts of discrete mathematics and linear algebra used in computer science and related disciplines. This course satisfies the Quantitative Reasoning distributional requirement.
  13. CPSC 210 examines the political challenges wrought by massive increases in the power of computational and communication technologies and the potential for citizens and governments to harness those technologies to solve problems. This course satisfies the Social Science distributional requirement.

Certificate in Programming

Certificate in programming advisor: Theodore Kim, AKW 412; cpsc.yale.edu

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 100110, 112, S115 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 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 or 368)
 

Advising

Theodore Kim from the Department of Computer Science is the Certificate Coordinator. He advises students pursuing the Certificate. Exceptions to the requirements, other than the substitution of a more advanced course for a required one, are limited. 

Summary of Requirements 

Prerequisite CPSC 100, 110, 112, S115 or AP Computer Science course

Number of courses 5 term courses 

Specific courses required  CPSC 201 or 200; CPSC 223; CPSC 327 or 323

Distribution of courses  2 electives, as specified

FACULTY OF THE DEPARTMENT OF COMPUTER SCIENCE

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

Associate Professors Abhishek Bhattacharjee, Yang Cai, Theodore Kim, Smita Krishnaswamy, Charalampos Papamanthou, Ruzica Piskac, Robert Soulé

Assistant Professors *Kim Blenman, Arman Cohan, Yongshan Ding, Benjamin Fisch, Tesca Fitzgerald, Anurag Khandelwal, Daniel Rakita, Marynel Vázquez, Andre Wibisono, Rex Ying

Senior Research Scientists Robert Bjornson, Andrew Sherman

Senior Lecturers James Glenn, Stephen Slade

Lecturers Timothy Barron, Andrew Bridy, Ozan Erat, Jay Lim, Dylan McKay, Cody Murphey, Sohee Park, Scott Petersen, Brad Rosen, Inyoung Shin, Alan Weide, Cecillia Xie 

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

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

For a complete list of Computer Science Department personnel, visit the department website.

See visual roadmap of the requirements.