See this page for information about Fall 2020, including CS courses offered in the fall. See this page for SEAS and CS events for first year students. Many of these events are recorded. The Harvard Women In Computer Science (WiCS) club is also hosting at August 19 at 4-5 pm EDT Breakout rooms with all undergraduate fall CS classes and on August 20 at 3-4pm EDT Panel and live Q&A for CS50, CS61, and C121. These events are open to all Harvard students. Join our CS undergraduate Piazza forum for more information and the Zoom links.
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.
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 basic software requirements for CS students are to take two out of the three courses CS 50, CS 51, and CS 61. Most CS students satisfy the theory requirement by taking CS 121 and CS 124 in their sophomore year, though some students with CS/math background take one or both of these in their first year.
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.
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 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.
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.
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).
Probability / Multi-variate Calculus: Computer science students can choose to take either multivariate calculus or probability though many take both. The most common way to satisfy the probability requirement is to take Statistics 110. The calculus requirement is satisfied by many different courses including Math 21a/22b/23b/25b/55b or AM 22b. If you take both calculus and Statistics 110, then the latter course can count as computer science technical elective.
Proofs and discrete mathematics: Several computer science courses, including CS 121 and CS 124, require background in proofs and discrete mathematics, see this page. Some 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 will find it very useful to take CS 20: Discrete Mathematics, which counts as a CS technical elective.
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 21b or Math 22a is a common choice for a linear algebra course. While multivariate calculus is not required for Computer Science, it is useful and so many students will take a calculus and linear algebra sequence such as Math 21a/b. While it is common to take Math 21a before Math 21b, the courses can be taken in any order and both courses are offered in both the fall and the spring. Most students that take the Math 21 sequence (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 121 and CS 124. (Students that take Math 22 / 23 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.) Another potential good sequence is Math 23a+c.
Taking Applied Math 22a: Solving and Optimizing/Math 22a: Linear Algebra and Vector Analysis in the fall and CS 20: Discrete Mathematics for Computer Science in the spring can be a good combination in your first year if you’re interested in the Computer Science concentration. AM 22a satisfies the linear algebra requirement, while CS 20 is a technical elective that prepares you for theory and other CS courses. Multivariate calculus is very useful for both CS and other areas, and so taking Applied Math 22b: Integrating and Approximating in the spring of your first year can be a good idea. A multivariate calculus course such as AM 22b is not required for CS if you take Statistics 110, but it is required for other concentrations, and so taking this course is a good way to keep your options open.
If you enjoy math and proofs, and want to take a deeper introductory sequence than the above, you can take the Math 25a/b or the Math 55a/b. 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.
Although it is not required, we recommend all CS students take Statistics 110: Probability or a more advanced 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 senior Computer Science PCA provides an overview of the 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!