SEAS offers undergraduate and graduate courses in Computer Science. SEAS faculty also offer several Freshman Seminars. Many additional courses of interest to concentrators can be found in the Applied Mathematics, Engineering Sciences, Mathematics, Physics, and Statistics sections of the my.harvard course catalog.

The SEAS 4 year course plan contains the most up to date plan for courses to be offered in the near future. You can filter the “catalog” entry to **CS** to see only Computer Science courses. Note that each of these courses is offered at least once per year:

- CS20
- CS50
- CS51
- CS61
- CS121
- CS124
- CS181
- CS182

Most students start with CS50, even if they have had an AP course in Computer Science. The course is designed to accommodate both students who are starting from scratch and students with prior programming experience. However, some students have sufficient programming background to skip CS50 and start with CS51 or CS61. See the CS50 FAQs for more advice, or consult the Director of Undergraduate Studies.

Students should consult with the Mathematics Department, Chemistry Department, and Physics Department for advice about appropriate placement in courses in those departments.

CS20, Discrete Mathematics for Computer Science, teaches the mathematics needed for later computer science courses that is not covered in the calculus and linear algebra sequence in Mathematics and Applied Mathematics. Many students will not need to take CS20, but students with no background in writing mathematical proofs should consider taking this course. The CS121 page on Background and Prerequisites is a good source for figuring out if you need to take CS 20 before taking courses such as CS 121 and CS 124.

The official information is in the handbook entry but we summarize here which courses count for fulfilling various requirements. The list below is not exhaustive, and if there is any conflict between this list and the handbook, the handbook information is the correct one. We generally allow a student to replace a course with a more advanced course of the same type, though you should ask us for authorization in advance for each such case.

Harvard extension school courses do *not* count for CS concentration courses. Harvard summer courses could potentially count if they are equivalent to courses that are counted in the concentration (e.g., summer versions of CS 50 or Stat 110 or other math classes). Courses taken at other universities do not count towards the concentration, unless part of an official study abroad program, or you are a transfer student. (If you are a transfer student, come talks to us and we will make the decision on which courses to count on a case-by-case basis).

With the exception of CS 50 (which may be taken SAT/UNSAT, though not Pass/Fail), all courses for either fulfilling either the CS concentration or secondary requirement must be taken for a letter grade.

**Mathematical background:**The*Linear Algebra*requirement can be fulfilled by one of Math 21b/22b/23a/25a/55a or AM 21b. The*statistics/probability*requirement can be fulfilled by STAT 110. The*calculus*requirement can be fulfilled by one of Math 21a/22a/23b/23c/25b/55b or AM 21a. (Note that you don’t need to take both a statistics/probability course and a calculus course; if you do then you can count STAT 110 as a technical elective.)**Theory requirement:**The standard and recommended way to fulfill the theory requirement is to take CS 121 and CS 124. However, other CS 12x courses can replace CS 124, and AM 107 also counts as a theory course at the moment. (*Note:*As of fall 2018, AM 106 will no longer satisfy the theory requirement.) Replacing CS 121 requires a course with a significant computational complexity requirement such as CS 221.**Technical Electives:****Harvard CS courses:**The following Harvard Computer Science courses count as technical electives:**(1)**every CS 1xx or CS 2xx course,**(2)**CS 20,**(3)**CS 91r (only one semester) and CS 96,**(4)**If you took CS 50 + CS 51 + CS 61 then one of CS 51 or CS 61 can count. If a course is cross listed as both a computer science course and a course in another department then it counts even if you took the course under its other number (e.g., STAT 121a or AC 209a is considered the same as CS109a).**Other Harvard courses:**The following Harvard courses count as technical electives: STAT 110, STAT 195, Math 154, AM 106/107/120/121/207, ES 50/52/54/153/170, Physics 123.**Summer courses:**Provided you get college credit for it, CSCI S-20 counts as equivalent to CS 20, CSCI S-109A counts as equivalent to CS 109A, and CSCI S-50 (Summer 2020) or CSCI S-111 counts as equivalent to CS 50. Students may also take a Summer CS 91r, which would count as CS 91r.**Other courses:**Many*MIT course 6*courses can be used as technical electives: consult the DUS before enrolling. In particular, Harvard students have taken MIT courses 6.036, 6.042, 6.046, 6.045, 18.404 / 6.840, 6.841, and 6.806 in the past. Note that MIT 6.006 (“Introduction to Algorithms”) does*not*count for the CS concentration (MIT 6.046, “Design and Analysis of Algorithms”, does count). Please visit our cross-registration page for directions on cross-registration. Some study abroad courses count, though you should always check with the DUS’s in advance. Courses and requirements change, and you should not assume that a course will count even if you know it did so in the past.

**Breadth requirement:**A technical elective can count towards the breadth requirement if it is a CS course and its penultimate digit is between 3 and 8. Courses such as CS 10x or CS 19x do*not*count towards the breadth requirement.**Non Harvard CS courses:**Physics 123/Engineering Sciences 153 is considered equivalent to a CS course with penultimate digit 4. AM 207 is considered equivalent to a CS course with penultimate digit 8. Some MIT or study abroad courses might count for the breadth requirement on a case-by-case basis.**Secondary:**The requirements for a CS secondary are rather light (only four courses) but these have to be*Harvard CS*courses numbered 100 and higher, or CS 50/51/61. You cannot count non-CS Harvard courses, MIT courses, nor study abroad courses. See this web page for more information. If you are a*transfer student*, contact the CS DUS’s for information on whether courses from the previous institution can count.

The following table summarizes some course substitutions that are allowed. It also includes the answers to some commonly asked questions about which courses satisfy certain requirements. If a course appears here as a valid subtitution then you can use it in your plan of study instead of the original course. However, you should add a note that you are using this subtitition in the plan of study and also mention this in your email to cs-dus. Courses change, and so can the allowed substitutions. If you have any question about a course that’s not listed here (or one that is) you can check with the DUS. These substitutions are only valid for the *computer science concentration*. These substitutions are *not valid* for a secondary in CS, for which the requirements are listed here.

Course(s) | Can be used in place of |
---|---|

Math 22a, 23b,23c, 25b, 55b, 110, 112, 113, 114, 115, 116, AM 105, 108, and 111 | Math 21a: Multivariate Calculus |

Math 22b,23a,25a,55a,121,122, AM 120,121 | Math 21b: Linear algebra |

AM 22a: Solving and Optimizing | Math 21b: Linear algebra |

STAT 210: Probability Theory and Statistical Inference I | STAT 110: Probability |

STAT 111: Introduction to Statistical Inference | STAT 110: Probability |

Math 154 Probability Theory | STAT 110: Probability |

MIT 18.440 Probability and random variables | STAT 110: Probability |

ES 150: Introduction to Probability with Engineering Applications | STAT 110: Probability |

STAT 121a/b , AC 209a/b | CS 109a/b: Introduction to Data Science |

CS 221: Computational Complexity | CS 121: Introduction to Theoretical Computer Science |

CSCI S-20 (Summer course: intro to discrete math) (Currently Summer 2020 only) | CS 20: Discrete Mathematics for Computer Science |

CSCI S-50 (Summer course: intro to programming) (Currently Summer 2020 only) | CS 50: Introduction to Computer Science |

CSCI S-109A (Summer course: intro to data science) | CS 109a: Introduction to Data Science I |

CSCI S-111 (Summer course: intro to programming) | CS 50: Introduction to Computer Science |

STAT S-110 (Summer course: intro to probability) | STAT 110: Probability |

MIT 6.00: Introduction to Computer Science and Programming | CS 50: Introduction to Computer Science |

MIT 6.042: Mathematics for Computer Science | CS 20: Discrete Mathematics |

MIT 6.046: Design and Analysis of Algorithms (not MIT 6.006!) | CS 124: Data Structures and Algorithms |

MIT 6.045: Automata, Computability, and Complexity Theory, MIT 6.840: Introduction to the Theory of Computation | CS 121: Introduction to Theoretical Computer Science |

MIT 6.849: Computational Geometry | CS 12x (i.e., satisfy second theory course requirement) |

MIT 6.841 / 18.405: Advanced Complexity Theory | CS 221: Computational Complexity |

MIT 6.034: Artifical Intelligence | CS 18x (check with instructor before taking CS 182) |

MIT 6.806 / 6.864: Advanced Natural Language Processing , MIT 9.19: Computational Psycholinguistics | CS 187: Introduction to Computational Linguistics |

MIT 6.036: Introduction to Machine Learning | CS 18x (check with instructor before taking CS 181) |

MIT 6.804 Computational Cognitive Science | CS 18x |

MIT 6.819 / 6.869 Advances in Computer Vision | CS 18x (check with instructor before taking CS 283) |

MIT 6.867 Machine Learning | CS 18x (check with instructor before taking CS 181) |

MIT 6.877 / 6.817 Principles of Autonomy and Decision Making | CS 18x (check with instructor before taking CS 182) |

MIT 6.815 Digital and Computational Photography | CS 17x |

AM 207: Stochastic Methods for Data Analysis, Inference and Optimization | CS 28x |

PHY123, ES153: Laboratory Electronics | CS 14x |

CS 1xx, 2xx | Tech elective, can satisfy breadth if penultimate digit 3-8 |

CS 20: Discrete Mathematics | Tech elective (no breadth) |

CS 91r: Supervised Reading and Research | Tech elective (one semester only) |

CS 96: System Design Projects | Tech elective (no breadth) |

CS 51: Abstraction and design in computation / CS 61: Systems Programming and Machine Organization | One of CS51/61 can satisfy breadth if student took CS50+51+61 |

STAT 110: Probability | Can be used as tech elective (not breadth) if not used to satisfy probability requirement. |

AM 107: Graph Theory and Combinatorics | Tech elective (no breadth), also second theory course |

AM 106: Applied Algebra | Tech elective (no breadth): as of fall 2018 cannot be used as second theory course |

AM 120: Applied linear algebra and big data, AM121: Introduction to Optimization: Models and Methods | Tech elective (no breadth) |

STAT 195: Statistical Machine Learning | Tech elective (no breadth) |

APCOMP 221 Critical Thinking in Data Science | Tech elective (no breadth) - equivalent to a CS 20x course |

ES 170: Engineering Quantum Mechanics | Tech elective (no breadth) |

SCI-6478 / ES 256: Informal robotics | Tech elective (no breadth) |

MIT 8.370: Quantum Computation | Tech elective (no breadth) |

CS 229r courses: theory advanced topics | Sometimes satisfy second theory course requirement but check with DUS as topics vary from term to term |

Study abroad courses | Case by case basis, check with DUS |

MIT 6.006: Introduction to Algorithms | Can not be used for concentration requirements |

AM 101: Statistical Inference for Scientists and Engineers | Can not be used for concentration requirements |

Math 157: Mathematics in the World | Can not be used for concentration requirements |

DPI 663: Tech and Innovation in Government | Can not be used for concentration requirements |

ES 21: The innovator’s practice | Can not be used for concentration requirements |

CS 1: Great Ideas in Computer Science | Can not be used for concentration requirements |

CS courses with “n” suffix (for example CS90nar and CS90nbr) | Can not be used for concentration requirements |