Below is an introduction to the undergraduate CS major at Stanford. It briefly covers the program requirements, what you can do with a CS degree after graduation, and how to get started in the major. The following links might also be useful.
If you are a High School student considering becoming a CS major at Stanford, you might also want to check out the High School FAQ.
If you are enrolled at Stanford and considering majoring in CS but are not quite ready to declare, you can sign up for the considering_cs list. We forward selected departmental announcements, social events, and class changes to this list periodically.
So you want to major in Computer Science?
In comparison to most academic disciplines, computer science is an unusual field. When Stanford was founded over 100 years ago, most of the scientific disciplines we study were already long established. The first computers, unbelievably primitive by today’s standards, would not be developed for another 50 years, and it took another 25 years for computer science to become established as an independent discipline. Stanford’s Computer Science Department was founded in 1965 and has consistently enjoyed the reputation of being one of the top computer science programs in the world.
In the last quarter of a century, progress in computer science has been enormously rapid, and computers have had a profoundly transforming impact on society. Computer science research has provided much of the intellectual underpinning and creative energy that have fueled that transformation, and it continues to be an extremely exciting field.
Exciting Aspects of Stanford CS
Undergraduates in CS have opportunities to get involved in research. With faculty and resources that are among the strongest in the world, a great deal of leading-edge academic research has been and continues to be carried out at Stanford. If you show that you can do the work, you can get involved in this type of research as an undergraduate, which will provide you with extraordinarily valuable training for future work in the field. The department also has a special program, called CURIS, which provides research opportunities for students during the summer.
Undergraduates in CS have opportunities to get involved in teaching. The discussion sections for the introductory CS106 courses are led primarily by undergraduates. As a section leader, you will have the chance to teach the next generation of CS majors and get them excited about programming. If you have done well in your CS courses and can demonstrate both an aptitude for and an interest in teaching, you should check out the online application!
Internships and Jobs
The Stanford CS department is right in the middle of Silicon Valley. The department has excellent connections to local companies (many of which were founded by people connected with the department). These connections provide help in getting summer internships as well as permanent positions after graduation.
The usual first step in learning about computer science is to take CS106. Even if you don't end up majoring in CS, this class will serve you well in most engineering and scientific disciplines. Because students enter Stanford with varying backgrounds, there are two different paths through the CS106 course.
The standard introductory sequence for students without significant background in computing is to take CS106A followed by CS106B. For those with some experience in programming (or who have passed the CS AP exam), you can reach basically the same point by taking the one-quarter course, CS106X.
CS106X covers the same topics as CS106B, but with more in-depth coverage and at a faster pace. Note that it is also possible to take CS106X (rather than CS106B) after taking CS106A. Even if you’ve had a considerable amount of prior programming experience, you might still want to take CS106X, particularly if you do not know C++. By doing so, you will learn a lot more about how to develop well-engineered software and get a more solid foundation for more advanced work than you are likely to have from high school programming courses.
If you haven’t done much programming before or don’t feel comfortable with your programming skills, take the CS106A/B sequence. Don’t let anyone tell you that ‘real engineers take CS106X’. Many student who take the CS106A/B sequence go on to be very successful computer scientists, and the last thing you want to do is get in over your head.
No matter which course you take, you will learn about the C++ programming language along with many fundamental programming concepts and software engineering techniques.
Along with the programming concepts covered in the CS106 courses, computer science requires the ability to think abstractly, often using the tools of mathematics. Unlike much of engineering, however, computer science depends heavily on discrete mathematics (as opposed to the continuous mathematics you study in calculus courses). Students take the CS103 course, which provides a solid foundation in the mathematics and theoretical topics needed for continued work in computer science.
The only prerequisite for taking CS103 is CS106A (or equivalent prior experience). As a result, you may want to consider taking CS103 early in your academic program to get more exposure to the theoretical foundations of computer science, which will give you a more holistic view of the discipline.
The CS Major Core
In addition to CS103 and CS106, the CS core is comprised of two additional courses in programming and systems (CS107 and CS110) as well as two additional courses in theoretical aspects of computing (CS109 and CS161).
Completing the CS major
After you complete the core courses, the CS program offers a variety of options for pursuing work in different areas within computer science. Students can choose to complete the requirements for any one track area within CS. The current tracks are listed below.
- Artificial Intelligence
- Computer Engineering
- Human-Computer Interaction
- Individually Designed
For details about individual tracks and advice for choosing a track, see the tracks page. For more details about the specific academic requirements for each track, please refer to the relevant program sheet.
In addition to completing the requirements for a track (4-5 courses, depending on the track), students also have options for elective courses in the CS program, including both courses in the CS department as well as other related disciplines. In this way, students may engage in more multi-disciplinary work as part of their program in the CS major.
Mathematics (26 Units)
- Calculus (MATH41, MATH42)
- Mathematical Foundations of Computing (CS103)
- Introduction to Probability for Computer Scientists (CS109)
- Two math electives from a restricted set
Science (11 Units)
- Mechanics (PHYSICS41)
- Electricity and Magnetism (PHYSICS43)
- One science elective from the School of Engineering list
Engineering Fundamentals (13 Units)
- Programming Abstractions (CS106B or CS106X)
- Introductory Electronics (ENGR40)
- One engineering fundamental elective from the School of Engineering list
Technology in Society (3-5 Units)
- One TiS class from the School of Engineering list
Computer Science Core (14 Units)
- Computer Organization and Systems (CS107)
- Principles of Computer Systems (CS110)
- Data Structures and Algorithms (CS161)
Computer Science Depth (26 Units)
- Complete the requirements for any one track (usually 4-5 courses)
- Additional electives from a restricted list (usually 2-3 courses)
Senior Capstone Project (3 Units)
- Senior Project (CS191, CS191W, CS194, CS210, CS294, CS294W)
After Stanford, computer science majors typically have many options in terms of pursuing their interest in the field. Many students get jobs immediately after leaving Stanford, both here in Silicon Valley and elsewhere. Others choose to pursue graduate studies in computer science, specializing in a diverse set of areas. Since the computer science curriculum gives students a broad exposure to the subject matter within the field, graduates are usually prepared to pursue any subfield in their graduate studies.
For those who want to go on to graduate study, the first decision is whether to pursue a master’s degree or a Ph.D. The master’s degree usually consists of additional coursework and will give you a stronger foundation of the same sort you had as an undergraduate. Getting a Ph.D. is a much longer commitment (often five or more years), the core of which is an independent research project leading to a doctoral dissertation. Still other graduates choose to pursue other forms of graduate studies, obtaining an M.B.A., J.D., or M.D., after receiving their B.S. in computer science.
At Stanford, you can pursue both a B.S. and M.S. degree concurrently by participating in the coterminal master’s program, or "coterm" for short. This program is extremely popular in computer science, with students from a variety of undergraduate backgrounds (including CS, CSE, EE, Psychology, etc.) pursuing an MSCS. You may apply to this program as soon as you’ve completed 120 units up until the quarter before you finish your undergraduate degree. Applications to the program are available from Graduate Admissions (in the Gates Building, Room 196) and differ very little from the regular application to the masters program in computer science. Students accepted to the coterminal program who have completed 180 units or more are officially considered graduate students and are therefore eligible to get teaching and research assistantships, graduate tuition rates, and so forth.
Options for Studying CS
Computer Science Major
At Stanford, most students interested in learning about computing major in computer science. Within the CS major, students can pursue many different interests such as artificial intelligence, programming languages, systems and networking, graphics, databases, theory of computation, human/computer interaction, robotics, and biocomputation. Particularly after the changes in requirements introduced in the last few years, the CS major is quite flexible and meets the needs of most students.
Computer Science Minor
A minor in CS exposes students to the undergraduate core of the CS major and gives them the opportunity to explore the major without the full engineering or course requirements. It consists of six to eight classes and is suited for schedules permitting two years. By completing the minor, students will gain a strong foundation in programming fundamentals and will be introduced to the theoretical branch of Computer Science. Furthermore, through two electives, students can take more advanced classes in areas they find interesting.
Some students interested in computer science, particularly those who are even more interested in hardware than those in CSE, major in electrical engineering, which has several undergraduate degree options that involve computer science. Outside of the hardware focus, the major difference between an EE degree and the others on this page is that the EE degree meets the ABET standards for engineering accreditation. While such accreditation is useful in certain disciplines such as civil engineering, it has no practical significance whatsoever in computer science. It does, however, mean that students have to take many more courses for the degree than in the standard CS or CSE tracks.
Mathematical and Computational Sciences
Mathematical and computational science (MCS) presents an opportunity to combine aspects of computer science with classes in pure mathematics. The major requires a core set of classes which include the introductory computer science classes (such as CS103 and CS106) along with a variety of math classes. Beyond these core classes, students are allowed to pick an emphasis in either computer science or mathematics, after which they select appropriate course work to complete the unit requirements for the major.
Symbolic systems is an interdisciplinary program that combines computer science, psychology, philosophy, and linguistics in order to better understand cognition in both humans and machines. Viewing people and computers as symbol processors, the symbolic systems major strives to understand how people and computers reason, perceive, and act. Within the symbolic systems major, there is a core set of required classes; beyond this core, students choose an area of concentration in order to gain depth.