Class of 2025 Welcome! Please be aware that we have updated our concentration requirements. In particular, we recommend that first-year students who place into the Math 18-55 level (i.e., do not need to take Math Ma/1a/1b) take a linear algebra course in the first-year fall term, instead of multivariate calculus. See mathematical preparation.
Welcome to Harvard! We’re glad you’re interested in Computer Science. This page contains some specific advice for which courses you can take in the first year. Some more information is on our FAQ, while the requirements for the CS concentration are detailed here. In addition, the CS Peer Concentration Advisors and our CS undergraduate Piazza forum are excellent places to get answers from fellow students.
If you would like to explore a concentration in Computer Science, a great way to begin is by taking CS and Math courses in your first year. If, however, you don’t discover Computer Science until your sophomore year, it’s not too late to start.
Aside from mathematical preparation courses, there are several CS courses to consider in your first year. Below is a list of some common choices. This is not an exclusive list; see the course catalog for more. The most common way to meet the Programming 1 & 2 requirements for CS students is to take CS 50 or CS 32 and CS 51 or CS 61. We expect that most CS students will satisfy the formal reasoning requirement by taking CS 20 their first-year Spring, CS 120 or CS121 their sophomore fall, and a third course later (CS 124 sophomore spring is recommended), though some students with CS/math background take one or two of CS 120, 121, or 124 in their first year. If you have a strong background in Computer Science and/or Mathematics, you may want to consider taking more advanced courses in your first year; see the concentration courses page for advanced courses that might let you explore the Computer Science concentration.
CS 50: Introduction to Computer Science is our introduction to the concentration and computer science. It is a popular course among concentrators and non-concentrators alike. 68% of CS50 students have never taken CS before.
CS 61: Systems Programming and Machine Organization Some students may already have the background to skip CS 50, and CS 61 is a great course on systems programming. See CS 61 Problem Set Zero to get a sense of whether your background is sufficient for this course. This course fulfills both the programming 2 and systems tags.
CS 120: Introduction to Algorithms and their Limitations is mostly taken by sophomores, but is also taken by some first-year students that already have the mathematical preparation for it and are interested in the more theoretical aspects of CS. This course fulfills both the Computational Limitations tag and the Algorithms tag for the CS formal reasoning requirements.
CS 121: Introduction to theoretical computer science is mostly taken by sophomores, but is also taken by some first-year students that already have the mathematical preparation for it and are interested in the more theoretical aspects of CS. See CS 121 Homework Zero to get a sense of whether your background is sufficient for this course.
CS 32: Title TBD is an alternative to CS 50. CS 32 takes a problem-solving approach to Computer Science and uses one programming language, Python. This course is appropriate for students who could not take CS 50 in the Fall term or who want a different introduction to Computer Science.
CS 51: Abstraction and Design in Computer Science is a common next course to take after CS 50 (though students can take CS 61 instead; they can also take all three of CS 50, 51, and 61).
CS 20: Discrete Mathematics for Computer Science is a very common course for first-year CS students and fulfills the Discrete Mathematics requirement for Formal Reasoning.
CS 124: Data Structures and Algorithms is mostly taken by sophomores but is sometimes taken by first-year students that have the proof/discrete math background for it.
Mathematics underlies many areas of computer science, whether it’s the use of linear algebra, probability, and calculus for machine learning, graphics, and optimization, the use of graphs in algorithms design, the use of logic in programming languages, and many more. Therefore, Computer Science concentrators will need a strong foundation in mathematics in order to succeed. Since math courses tend to be prerequisites to many other more advanced courses, we strongly encourage all Computer Science students do not delay taking their math courses. It is best you start working on satisfying the math requirements freshman fall. This also allows you to keep your options open in case you want to consider other concentrations with math requirements such as engineering, applied mathematics, statistics, economics, and others.
If you were placed into Math 1a or Math 1b and are interested in Computer Science then it is even more important that you take these courses right away, so you can satisfy your math requirements as soon as possible. If you were placed into the Math M sequence, you should contact the CS Directors of Undergraduate Studies as soon as possible to get advice on how to navigate the math requirements. Any path within CS can be completed starting with Math Ma with careful planning. Some examples are available on our sample plans page.
The main mathematical prerequisites for computer science students are:
Linear Algebra: The linear algebra requirement can be satisfied in many different ways, including by taking Math 21b/22a/23a/25a/55a or AM 22a (see below). We note that multivariate calculus is not required for the computer science concentration. Therefore, we recommend that students that take a linear algebra and multivariate calculus sequence, choose a sequence with linear algebra in the fall semester.
Probability: The most common way to satisfy the probability requirement is to take Statistics 110.
Proofs and discrete mathematics: Several computer science courses, including CS 120, CS 121, and CS 124, require background in proofs and discrete mathematics, see this page. A few students can get this background on their own (in particular students who took the Math 25 / 55 sequence and also some of the student who took the Math 22 / 23 or AM 22 sequence). However most CS students should take CS 20: Discrete Mathematics.
We strongly encourage first-year students to keep their options open and consider more than one concentration. Therefore, we recommend you check with other concentrations that you are considering which of the math courses below will satisfy their requirements (e.g., see the handbook entries for statistics and applied mathematics).
There are many math courses at Harvard, most offered by the math department but some offered by other departments as well. The Math Department has put together a document detailing the different introductory math courses they offer. For computer science students, the following are good ways to satisfy the concentration requirements for first year students that placed into Math 21a (or sophomores that completed the Math 1ab sequence). These are not the only way to satisfy the requirements, see here for more details.
Math 22a: Linear Algebra and Vector Analysis, Applied Math 22a: Solving and Optimizing, or Math 21b: Linear Algebra and Differential Equations, are common choices for a linear algebra course. If you are placed in the math 18-55 level (and hence do not need to take Math Ma/1a/1b in the first year fall), then we recommend you take one of these linear algebra courses (or a more advanced one such as Math 25a/55a) in the fall term. Note that Math 21b is offered in the fall, and it is possible to take it before Math 21a.
Most students that take Math 21 (as opposed to proof-based math courses such as Math 25 / 55) will want to take CS 20: Discrete Mathematics for Computer Science in the spring, since the latter will prepare you for CS theory courses such as CS 120, CS 121, and CS 124. (Students that take Math 22 or AM 22 which involve some proofs should decide whether or not CS 20 is for them on a case by case basis, and are always welcome to contact their advisors or the CS 20 instructors for advice.) While a multivariate calculus course such as Math 21a or AM 22b is not required for CS, these courses are required for other concentrations, and so taking such a course in the spring is a good way to keep your options open, and the math is still useful in Computer Science.
If you enjoy math and proofs, and want to take a deeper introductory sequence than the above, you can take Math 25a or Math 55a. Both are proof-based courses, but the latter is much more work intensive, and requires some prior math background. While neither is required for the CS concentration, students that take these courses will find them useful for the more mathematical aspects of CS such as theory and programming languages. Students that take Math 25 or 55 can and should skip CS 20 and catch up on the discrete math needed via self study.
All CS students should take Statistics 110: Probability or another approved course on probability. Probability and statistics are essential for many areas of CS including artificial intelligence, machine learning, and theoretical CS, and are also important for general “data literacy”. Most CS students take Stat 110 in their sophomore or junior fall.
We suggest exploring this website for more information about the concentration and requirements. Many students find our page on courses that count towards the concentration especially helpful.
To engage with the Computer Science Community, we suggest reaching out the Peer Concentration Advisors, joining the CS Undergraduate Piazza for thoughts from your peers, and getting involved with CS-related clubs and activities.
A recent CS alumna provides an overview of the 2020 computer science curriculum and provides her own tips and tricks for navigating the requirements in this CS degree overview video. She also shares her thoughts on common career tracks for CS concentrators, and her perspective on computer science at Harvard as a whole.
If you have any questions about CS at Harvard, please don’t hesitate to contact us!