So you want to major in
Computer Science or CSE?
Below is an introduction to the 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 may also be applicable to you;
- If you
are a High School student considering becoming a CS major at Stanford, you
might also want to check out our High School
FAQ.
- If you are already enrolled here and are considering
majoring in CS, but not quite ready to declare, you should sign up for the
considering_cs list. We forward selected departmental announcements,
social events and class changes to this list periodically. To sign up,
just send email to majordomo@lists with
"subscribe considering_cs" (without the quotes) in the body of the
message.
- If you are ready to declare, you may want to look at the
pages on how to Declare CS/CSE or Choose an Advisor
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 for many years enjoyed the
reputation of being one of the top four 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.
Options for majoring in the computer science area
At
Stanford, most students interested in learning about computing major in
Computer Science itself. Within the CS major, students can pursue many
different interests such as programming languages, graphics, databases, theory of computation, human-computer interaction, robotics, artificial intelligence, and numerical analysis. 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.
Recently revamped, the Computer Systems Engineering (CSE) major has a blend of CS and electrical engineering (EE) classes, and emphasizes hardware and systems programming over theory. Students can specialize in digital systems, networking, or robotics and mechatronics.
CS v. CSE | Related Majors | CS Minor
Getting started
The usual first step in learning about computer science, which will
also serve you well if you end up in most engineering and scientific
disciplines, is to take CS106. Because students enter Stanford with
varying backgrounds, there are several different paths through the
CS106 course. The standard introductory sequence is to take CS106A
followed by CS106B. CS106A covers fundamental programming concepts
and software engineering techniques
using the Java programming language. CS106B uses the C++ language and
explores more advanced programming techniques such as recursion and
data abstraction.
CS106A starts right at the beginning and is appropriate both for
students with no programming background as well as those with some
previous exposure who would like to get a solid foundation before
moving on. If you have already covered the equivalent of a first
college course (such as the AP A course), consider starting in CS106B
instead. If you're looking for some extra challenge, we offer CS106X
as the accelerated/"honors" version of CS106B. CS106X covers the same
material as CS106B with added coverage of advanced topics and assigns
more challenging projects.
Even if you've had a considerable amount of programming experience,
you might still want to start with one of CS106B or X, particularly
if you don't have experience with 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.
Discrete mathematics
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 much more heavily on discrete mathematics, which you can think of as those branches of the discipline based on integers, as opposed to the continuous mathematics you study in calculus courses. Similar to the 106 course, student taking the 103 course have the option of taking it as a two quarter sequence (CS103A and CS103B) or as a one quarter accelerated course (CS103X). Particularly if you have some prior exposure to programming, it may make sense to take the CS103 courses before you take CS106. One of the advantages of doing so is that it will expose you to the theoretical foundations of computer science early in your academic program, which will give you a more holistic view of the discipline.
Completing the CS major
After you complete the courses in the first tier, the CS program goes on to require additional work in several different areas within computer science and related disciplines. All the current requirements are shown below along with the relevant course numbers:
- Mathematics
- Standard calculus sequence (Math 41, 42) (or AP Calc)
- Theory of probability (Stat 116, MS&E 120, or CME 106)
- Discrete Structures (CS 103A&B or CS103X)
- Two math electives from a restricted set
- Science
- Mechanics (Phys 41 or 21)
- Electricity and Magnetism (Phys 43 or 23)
- One elective course from the School of Engineering list, or Psych 30/40, or AP Chem
- Technology in Society
- Engineering Fundamentals
- Introductory Electronics (E 40)
- Programming Abstractions (CS106B or CS106X)
- One elective course from the School of Engineering list
- Programming
- Programming Paradigms (CS107)
- Object-Oriented Systems Design (CS108)
- Theory
- Automata and Complexity Theory (CS154)
- Design and Analysis of Algorithms (CS161)
- Systems
- Digital Systems II (EE 108B)
- Two of 140, 143, 155, 240D, 242 or 244A (must include either 140 or 143)
- Applications
- Introduction to AI (121 or 221)
- One of 145, 147, 148, 223A, 223B, 248, and 262
- Project
- Senior project (191, 191W, 194, 294, or 294W)
- Electives
- Two to three electives from a restricted set
Opportunities beyond graduation
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 such diverse areas as artificial intelligence, hardware design, numerical analysis, software theory, or graphics. 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 upon completion of 120 units, but no
later than the quarter prior to the expected completion of 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.
Exciting aspects of the Stanford program
Majoring in computer science at Stanford provides many opportunities which make life extremely exciting. These include:
- Undergraduates in CS have opportunities to get involved in research. With a 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.
- 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 their website for more information.
- The 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.

|