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. The following courses are guaranteed to be offered at least once per year: CS 20, CS 50, CS 51, CS 61, CS 120, CS 121, CS 124, CS 181, CS 182.
The Sample schedules and plans page contains some examples of plans of study that satisfy the CS concentration requirements.
Most students start with CS 50 or CS 32, even if they have had an AP course in Computer Science. These course are 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 CS 50 and start with CS 51 or CS 61. See the CS 50 FAQs for more advice, or consult the Directors 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.
CS 20, 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. Some students may already have the background covered in the course or may wish to self-study the material, in which case they may be able to “place out” of taking CS 20. The mechanism for doing so will be posted in early fall. The CS 121 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 120, CS 121, and CS 124.
Students following the 2020 concentration requirements should read that description instead.
The official information is in listed in our requirements page 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 talk to us and we will decide which courses to count on a case-by-case basis).
No more than two of the courses used to satisfy CS requirements may be taken PA/FL or SUS. Of the tag requirements, courses taken PA/FL or SUS can be used only for the Programming 1 and Advanced Computer Science tags. For instance, if taken PA/FL, CS 124 would not satisfy the Formal Reasoning or Algorithms tags.
Mathematical preparation: The Linear Algebra requirement can be fulfilled by one of Math 22a/23a/25a/55a/21b or AM 22a. The statistics/probability requirement can be fulfilled by STAT 110. Depending on math placement, students may need to take one or more out of Math Ma, Mb, 1a, or 1b as preparation for these courses. For students that place into the Math 21 or above series, we recommend they take a linear algebra course in first-year fall. Hence we recommend taking Math 22a, AM 22a or Math 21b over taking Math 21a in the first-year fall.
Programming requirement: A standard way to fulfill the programming 1 and 2 requirement is to take either CS 50 or CS 32 as a first programming course, and then take either CS 51 or CS 61 as a second programming course. However, depending on your background and interests, there can be other ways to fulfill it by either skipping CS 50 / 32, or taking an alternative course to CS 51 / 61 (see also placement above).
Formal reasoning requirement: Common combinations for fulfilling the formal reasoning requirement include CS 20 + CS 121 + CS 124 and CS 20 + CS 120 + CS 124. However, there are many other approaches. Some students may be able to skip CS 20 (see placement above), leaving room for other courses such as CS 136, CS 152, and CS 183 that also satisfy the formal reasoning requirement. We recommend all concentrators take CS 124 (algorithms), but it is only required for the honors track.
Computer science core courses: The full list of CS core courses is listed in the tags table, which includes all courses with CS numbers, as well as several courses from other concentrations/departments.
Summer courses: Summer courses that receive college credit and are the equivalent of courses that are offered during the term are treated equally. In particular, 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 & 2021) 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: Some MIT course 6 courses can be used as CS core courses: consult the DUSes before enrolling. Please visit our cross-registration page for directions on cross-registration. Some study abroad courses count, though you should always check with the DUSes 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. Note: Harvard CS does not ordinarily allow concentration credit for MIT courses that are equivalent to one of our annual core courses (CS 20, 50, 51, 61, 120, 121, 124, 181, and 182).
Tags: The following table contains information about which courses satisfy the following tags: programming 1, programming 2, formal reasoning, discrete mathematics, computational limitations, algorithms, intermediate algorithms, systems, computation and the world, artificial intelligence, advanced computer science.
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 at most two of CS 20, 32 or 50, 51, & 61. You cannot count non-CS Harvard courses, MIT courses, or study abroad courses. See this web page for more information. If you are a transfer student, contact the CS DUSes 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 substitution then you can use it in your plan of study instead of the original course. July 2021: Please note that we are still determining how some of these courses will be tagged. However, when you use a substitution, you should add a note saying so to the plan of study and mention it in your email to cs-dus submitting the plan of study. 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 DUSes. 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||Can be used in place of|
|Math 23b,23c, 25b, 55b, 110, 112, 113, 114, 115, 116, AM 105, 108, and 111||Math 21a: Multivariate Calculus|
|Math 22b (Fall 2019 and after)||Math 21a: Multivariate Calculus|
|Math 23a, 25a, 55a,121,122, AM 120, 121||Math 21b: Linear algebra|
|Math 22a (Fall 2019 and after)||Math 21b: Linear algebra|
|AM 22a: Solving and Optimizing||Math 21b: Linear algebra|
|STAT 185: Introduction to Dimension Reduction||Math 21b: Linear algebra|
|STAT 210: Probability Theory and Statistical Inference I||STAT 110: Probability|
|STAT 220: Bayesian Data Analysis||STAT 110: Probability|
|STAT 111: Introduction to Statistical Inference||STAT 110: Probability|
|Math 154 Probability Theory||STAT 110: Probability|
|ES 150: Introduction to Probability with Engineering Applications||STAT 110: Probability|
|STAT S-110 (Summer course: intro to probability)||STAT 110: Probability|
|ENSC S-138: (Summer course: intro to probability)||STAT 110: Probability|
|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-111 (Summer course intro to programming)||CS 50: Introduction to Computer Science|
|MIT 6.849: Computational Geometry||Tech elective|
|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)|
|STAT 110: Probability||Can be used as tech elective (not breadth) if not used to satisfy probability requirement.|
|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||Tech elective (no breadth)|
|AM 121: Introduction to Optimization: Models and Methods||Tech elective (no breadth)|
|AM 216: Inverse Problems in Science and Engineering||Tech elective (no breadth)|
|AM 231 (ES 201): Decision Theory||Tech elective (no breadth)|
|STAT 195: Statistical Machine Learning||Tech elective|
|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 6.338j: Parallel Computing and Scientific Machine Learning||Tech elective|
|MIT 6.809: Interactive Music Systems||Tech elective (no breadth)|
|MIT 8.370: Quantum Computation||Tech elective (no breadth)|
|MIT 6.857: Computer and Network Security||Tech elective (no breadth)|
|MIT 6.875: Cryptography and Cryptanalysis||Tech elective (no breadth)|
|PHYS 160||Tech elective (no breadth)|
|STAT 121a/b , AC 209a/b||CS 109a/b: Introduction to Data Science|
|CSCI S-109A (Summer course: intro to data science)||CS 109a: Introduction to Data Science I|
|CS 221: Computational Complexity||CS 121: Introduction to Theoretical Computer Science|
|AM 107: Graph Theory and Combinatorics||Tech elective (no breadth), also second theory course|
|CS 229r courses: theory advanced topics||Sometimes satisfy second theory course requirement but check with DUS as topics vary from term to term|
|MIT 6.841 / 18.405: Advanced Complexity Theory||CS 221: Computational Complexity|
|MIT 6.854: Advanced Algorithms||CS 224: Advanced Algorithms|
|PHY123, ES153: Laboratory Electronics||CS 14x|
|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|
|MIT 6.172: Performance Engineering of Software Systems||CS 16x|
|MIT 6.858: Comp Systems Security||CS 26x|
|MIT 6.170: Software Studio||CS 17x|
|MIT 6.837: Computer Graphics||CS 17x|
|ES 143: Computer Vision||CS 17x|
|AM 207: Stochastic Methods for Data Analysis, Inference and Optimization||CS 28x|
|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|
|MIT 6.042: Mathematics for Computer Science||As of Spring 2021, cannot be used for concentration requirements (CS 20 equivalent)|
|MIT 6.00: Introduction to Computer Science and Programming||As of Spring 2021, cannot be used for concentration requirements (CS 50 equivalent)|
|MIT 6.031: Software Construction||As of Spring 2021, cannot be used for concentration requirements (CS 51 equivalent)|
|MIT 6.004: Computation Structures||As of Spring 2021, cannot be used for concentration requirements (CS 61 equivalent)|
|MIT 6.045: Automata, Computability, and Complexity Theory||As of Spring 2021, cannot be used for concentration requirements (CS 121 equivalent)|
|MIT 6.840: Introduction to the Theory of Computation||As of Spring 2021, cannot be used for concentration requirements (CS 121 equivalent)|
|MIT 6.046: Algorithms||As of Spring 2021, cannot be used for concentration requirements (CS 124 equivalent)|
|MIT 6.036: Introduction to Machine Learning||As of Spring 2021, cannot be used for concentration requirements (CS 181 equivalent)|
|MIT 6.034: Artifical Intelligence||As of Spring 2021, cannot be used for concentration requirements (CS 182 equivalent)|
|MIT 18.600 (18.440) Probability and random variables||As of Spring 2021, cannot be used for concentration requirements (STAT 110 equivalent)|
|MIT 6.033: Computer Systems Engineering||As of Spring 2021, cannot be used for concentration requirements (CS 16x equivalent)|
If you have questions about what courses (at Harvard, MIT, or elsewhere) count for concentration credit, feel free to contact the DUSes.