Degree > Choosing Classes
> Program Planning
Welcome to the Stanford Master of Science in Computer Science (MSCS) program!
The degree requirements can seem a little complicated at first. But
here well try to give a high-level overview of how to approach them.
For a more in-depth look at the courses that currently fulfill
these requirements, and other fine-print details about the
requirements, we recommend all new students read the Guide to the MSCS Program Sheet
. Current and past Guides
are available for reference on our Program Sheets
For the official MSCS program description, see the Stanford Bulletin
To complete an MSCS degree, you need to do 45 units at
Stanford. (Units counting towards a Stanford BS program and transfer
units are not
eligible.) The units come from four areas:
Foundations (up to 10 units)
courses are required for all students in the program, but they
may be waived if a student has taken a similar previous course. All
waivers must be approved by a students advisor.
- CS103: Mathematical
Foundations of Computing. CS103 will give students the mathematical
foundations necessary for computer science. Topics include proof
techniques and logic; induction; sets, functions, and relations; an
introduction to formal languages; DFAs, NFAs, and Regular
Expressions; Context-Free Grammars, Turing Machines, and
- CS 107: Computer Organization
and Systems CS107 transitions students to programming on the
UNIX machines. The class aims to teach students about computer systems
from the hardware up to the source code. Topics include machine
architecture (registers, I/O, basic assembly language), memory models
(pointers, memory allocation, data representation), compilation (stack
frames, semantic analysis, code generation), and basic concurrency
- CS110: Principles of
Computer Systems. CS110 will teach students how to build larger scale
systems using operating system and networking abstractions. Topics
include processes (threading, context switching, interprocess
communication), storage and file management (file systems, virtual
memory), networking (sockets, TCP/IP, routing) and an understanding of
- CS109: Introduction to Probability for Computer Scientists. Topics include: counting and combinatorics, random variables, conditional probability, independence, distributions, expectation, point estimation, and limit theorems. Applications of probability in computer science including machine learning and the use of probability in the analysis of algorithms.
- CS161: Design and Analysis of Algorithms. CS161 builds mostly on CS103, teaching students algorithmic efficiency strategies for more advanced data structures (binary search trees, heaps, hash tables), popular algorithmic design techniques (divide-and-conquer, dynamic programming, greedy algorithms, amortized analysis, randomization) and fundamental graph algorithms (minimum-cost spanning tree, connected components, topological sort, and shortest paths).
Depth Options (choose one):
- Depth (27 units) -
Students are required to complete 27 units of course work in their chosen specialization area, satisfying the specific requirements of that specialization area. Most students complete one of the nine approved specializations, but you may also petition the MSCS committee to approve a specialization of your own design. In order to be approved, individually designed specializations must represent a coherent area of study and must include courses at both the 200 and 300 level. All course work must be taken for a letter grade.
- Breadth (3 course minimum) -
The breadth requirement is aimed at giving students exposure to topics in computing outside of their chosen depth area. The list of breadth courses generally includes the majority of non-experimental courses in CS, with one important caveat: for students in a particular depth area, courses that are part of the depth requirements in that area are not included in the list of breadth courses. This enforces breadth beyond the student`s chosen depth area. Note that more advanced versions of courses satisfying the breadth requirement can be substituted (e.g., CS 245 instead of CS 145). The breadth requirement must be satisfied by course work at Stanford – this requirement may not be waived by coursework elsewhere. All course work must be taken for a letter grade.
- Primary Depth (21 units) -
Students are required to complete 21 units of course work in their chosen primary specialization area, satisfying the specific requirements of that primary specialization area. All course work must be taken for a letter grade.
- Secondary Depth (5 courses, 15 units minimum) - Students are required to complete 5 courses (minimum of 3 units each) in their chosen secondary specialization area, satisfying the specific requirements of that secondary specialization area. All course work must be taken for a letter grade.
Significant Implementation (SI)
If a student has not already completed a SI course in his or her breadth, depth, or electives, he or she must complete one before graduating. The following is a list of the approved significant implementation courses:
- CS 140: Operating Systems and Systems Programming
- CS 143: Compilers
- CS 144: Introduction to Computer Networking
- CS 145: Introduction to Databases
- CS 148: Introduction to Computer Graphics and Imaging
- CS 210B: Software Project Experience with Corporate Partners
- CS 221: Artificial Intelligence: Principles and Techniques
- CS 243: Program Analysis and Optimizations
- CS 248: Interactive Computer Graphics
- CS 346: Database System Implementation
After finishing one of the two depth requirements, students may take qualified electives to get up to 45 units. "Qualified" electives
- Any CS course numbered above 110 (other than CS 196 and 198), including independent study and research units
- Courses from other departments numbered 100 or higher, that are technical in nature, relevant to your degree program, and approved by your advisor and the MS program
The Fine Print
Here are the other rules:
Back To Top
- At least 36 of your 45 units (including all your depth and breadth units) must be taken for a letter grade.
- The GPA for all courses on your program sheet must be at least a 3.0 (B).
- Units previously applied toward a BS program may not be double-counted toward the MSCS.
- You must complete at least 45 units at Stanford to receive the degree. Transfer credit is not allowed.
DeviationsUp to one deviation may be granted from ones advisor in the depth. No deviations may be approved in the breadth.
Distinction in Research
While we dont require all MSCS students to complete a research
thesis, some students pursue a departmental honor called a "distinction
in research". Its a great option if youre at all interested in
research or considering a possible Ph.D program or a career as a
researcher. The goal is to produce work that is publishable in a
journal or a conference.
The requirements are formally stated in the Bulletin, but heres how to go about doing a distinction in research:
Back To Top
- Find a faculty advisor.
It could be any CS professor. Discuss and agree on a research objective
for your work. Eventually the two of you will need to agree on a
secondary advisor who will also review your research report.
- Notify Claire Stager (stager@cs). Just let her know who your two advisors are and be sure your research plan is included in your program sheet.
- Do research. You need 18
units of independent study research (CS 393, 395, or 399), 3
quarters of a half-time research assistantship, or some pro-rated
combination (50% RA-ship = 6 units; 25% RA-ship = 3 units). This work
must be done with your primary or secondary advisor. Note that no more than 9 units of research may be counted towards your Depth requirement.
- Write a research report.
In addition to the research experience in (2) above, you need 3 units
of independent study that give you a chance to write a report on your
research--essentially a longer version of a conference paper. Two
copies of the report must be submitted to Claire in Gates 182 three
weeks before finals week in your last quarter, and they must be
approved by both your advisors.
Planning and Submitting Your Program Sheet
Your program sheet serves as a proposal showing how you could
graduate with your MSCS. Its not cast in stone, so youre free to
revise and resubmit your program sheet as you make changes. Completing
your program sheet is a valuable exercise though to help you focus your
academic career here.
We encourage new masters students to meet with their faculty
advisor (assigned at Orientation in September) in their first couple
weeks here to talk about their academic plans. Early on you should talk
about what waivers youd like to request, so that you can find out soon
whether youll have to take those foundation courses here.
In your first quarter, you should try to apply for any waivers and
file a program sheet. Again, youre free to change this later, but its
very helpful for planning to make the most of your time here.
To submit your program sheet:
- If you are using a program sheet from 2010-2011 or later, fill out an electronic program sheet via logging into GIN. Otherwise, fill out one of the hardcopy program sheets. (Paper copies are also available outside Gates 182.)
- Get your faculty advisor to sign it and approve any waivers or deviations.
- Bring your program sheet and any waiver documentation to Claire in Gates 182.
If you make changes to your plan later, you just need to resubmit
your program sheet. Its best to keep your plan reasonably up-to-date,
particularly if you want to do any deviations. If youve already gotten
your advisor to sign off on waivers or deviations, you can just write
"on-file" on the program sheet rather than reapplying for them.
Be sure to submit a final program sheet by the beginning of your final
quarter, but you dont need to wait until then if you already know what
classes youre going to take.
Back To Top
How to Choose Classes
The MSCS program is 45 units, and most full-time students take two
years to complete it. That works out to roughly 8-10 units per quarter,
which is the most common courseload for MSCS students (and the maximum
allowed if you are doing a 50% TAship or RAship). This typically
translates to two or three classes.
New students are often tempted to plunge right in and load up their
first quarter. We advise against this. Your first quarter here youre
probably still adjusting to Stanford, maybe want to explore the area
more, and are accustomed to coursework at another school that may be
significantly different. We suggest leaning toward a lighter quarter at
first and then ramping up later to find your comfort level.
Courses vary widely in the type and intensity of workload, and they
dont correspond to course number, number of units, or any other handy
rule of thumb. Most people find theyre happiest by balancing their
quarter with a variety of types of work (e.g. programming, problem
sets, design work). Taking three heavy programming classes with large
final projects in one quarter may not be a great idea.
Some factors to consider in evaluating how courses will fit together in a quarter:
- What are the assignments like? Problem sets, programming, or design assignments?
- How many assignments are there? Are there weekly problem sets, or four large programs?
- Is there a final project?
To get a feel for these sorts of things, you can take a look at the course syllabi, or talk to the Course Advisor.
Also, if you have units to spare, consider taking some fun 1-2 unit
activity courses in areas like athletics, dance, or music. While these
courses certainly wont count toward your 45 units, you can still
enroll in them and they can be a nice form of stress relief.
Stanford is somewhat unique in that it doesnt make on-campus
students pre-register for most classes. (There are a few notable
exceptions for classes with limited enrollment, such as some of the new
classes.) This gives you the opportunity to get a feel for what each
class is like before you commit to a schedule. HOWEVER, you must have
a preliminary study list filed (be
enrolled in at least 8 units) by 5:00pm on the first day of the quarter.
Heres how to shop for
classes (for exact dates, please visit the Stanford Academic Calendar):
- At the start of each quarter, make a list of classes youre considering. Use the CS schedule, Axess, and/or Explore Courses to find out when and where they meet.
- Go to the first couple lectures. Collect each classs syllabus
and ask questions until you have a feel for what the course is about,
what sort of workload to expect throughout the quarter, and whether you
like the material and instructor.
- By the end of the third week, add any classes youve forgotten to your study list, and drop
any courses you intend to drop.
- By the eigth week, withdraw from any courses you dont want to take and decide which courses you wish
to take "pass-fail" (credit/no-credit) as opposed to for a a letter grade
Back To Top
For More Information
- Stanford Bulletin: Official MSCS program description and course catalog for the CS department. (Other departments are available at bulletin.stanford.edu.)
- Program Sheets: The actual forms you fill out with the classes you plan to take, and a Guide on how to use them. The most up-to-date list of courses that qualify for each specializatons Depth requirement.
- Specializations: Descriptions of the specializations to help you choose between them.
- Back to Choosing Classes