Home  .   FAQ  .   Admissions .   Considering CS? .   Get Involved .   Program Planning .   Research  .   Who to See .   Faculty  .   Declare  .   Xenon  .   CSE

Course and Requirement Overview

This page discusses the various requirements for the CS major.

Front Side of Program Sheet Back Side of Program Sheet
Math Requirement
Science Requirement
Engineering Fundamentals
Technology in Society
CS 107
CS 108
CS 154
CS 161
EE 108B
Systems Electives
CS 121/221
Application Elective
Senior Project
Writing in the Major
Restricted Electives


Math Requirement

Science Requirements
You must take 11 units of science. Usually, once you have finished the Physics requirement and taken a science elective, you will be well over 11 units, but if you are not, then you must take more science electives until you have at least 11 units in total.

Engineering Fundamentals

Technology in Society
A list of approved TIS courses is listed here. You can take any one of them to fulfill the requirement. Also, if you go abroad to the SCTI program in Kyoto, the internship opportunities through those programs will fufil the TIS requirement. For more information on this option, contact the School of Engineering. If you are taking another course that you feel should fulfill the TIS requirement, you'll need to petition with the School of Engineering, see here for more info.

CS 107 - Programming Paradigms - (weekly programming assignments, midterm and final)
In CS 107 you will make the transition to programming on the UNIX machines. The class usually spends a couple of weeks on nitty gritty C++ pointers and memory management, and then a week or two each on LISP, and other programming languages such as Python, Objective C, and C#. The class tends to have the hardest assignments in the first few weeks (the C++ pointer stuff and transitioning to UNIX) and then gets a bit easier as you get into the other paradigms.

CS 108 - Object Oriented Systems - (weekly programming assignments, midterm and final)
Considered by many to be the first "rite of passage" in the major, CS108 is where you will write the infamous Bunny World. Bunny World is the first open-ended, group project in the CS major, and the idea is to give students a taste of this kind of assignment before they start taking upper level classes (which almost all have group projecs). Although 108 is not technically a prerequisite for many classes, we recommend that you try to take it before launching into the upper level CS classes unless you are quite comfortable with groupwork and open ended projects.

CS 154 - Intro to Automata and Complexity Theory - (weekly problem sets, midterm and final)
This is a pretty theoretical class and although not exactly time intensive, some people have trouble with the very abstract material. A good way to judge how hard this class (as well as CS 161) will be for you is to think about how comfortable you were with the material presented in CS 103 - especially the stuff towards the end.

CS 161 - Design and Analysis of Algorithms - (problem sets, midterm and final)
The material in this theory course is somewhat difficult, but not as abstract as 154. You'll learn many different algorithms that can be super useful in solving problems you may encounter down the round (especially in interviews).

EE 108B - Digital Systems II - (4-5problem sets, 2 programming assignments, midterm and final)
EE 108B officially lists EE 108A as a prerequisite, but as a CS major, you are not required to take 108A. From what we have been told, 108A is mostly a prerequisite for the lab portion of the class, and CS majors are not required to take the lab.

2 Systems Electives
You need to take 2 Systems Electives and one of them must be 140 or 143. In general, the systems electives get easier as you take more of them. For example people who've taken 143 find that they have an easier time in 242 and vice versa.

CS 121/221 Intro to Artificial Intelligence - (mix of problem sets and programs, midterm and final)
You must take either 121 or 221, both of which are an introduction to the field of AI. 121 is considered one of the easiest courses in the major, and 221 is considered one of the hardest (but also one of the best and most rewarding). If you have any interest in taking upper level courses in AI, you should probably take 221 since it is a much more rigorous introduction to the field and some upper level courses will require 221 as a prerequisite. 221 also teaches abstract problem solving and algorithm design skills that transcend AI, so even if you are not sure you are interested in AI, it is a worthwhile course. The problem sets in 221 are conceptually difficult and will take a significant amout of time, so be prepared. The final project in 221 is the infamous Othello competition (students write an AI powered Othello player and play them against each other).

Application Elective
You need to take one of the following Application Electives

Senior Project
Please see the Senior Project page for more information.

Writing in the Major
Almost everyone fulfills the WIM requirement when they do Senior Project. If you took CS 201 for your TIS requirement, then you do not need to fulfill WIM with Senior Project. This means that you will be able to skip some of the writing assignments in your Senior Project class. WIM is the only requirement that can be fulfilled by a class that also fulfills another requirement (so taking 194 or 191W fulfills the Senior Project Requirement as well as the WIM requirement).

Restricted Electives
If you took CS 103A/B, you need to take 2 CS Electives. If you took CS 103X, you need to take 3 CS Electives. Whether you took 106A/B or 106X has no effect on how many electives you need to take. You must take the electives in addition to the courses you take to fulfill other requirements. For example, if you take CS140, it can count as a Systems Elective or a Restricted Elective, but not both. A list of approved electives is listed on the program sheets. Many people use the electives to either explore more introductory classes in other areas of CS, or pursue a particular interest in more depth by taking some of the higher level grad classes. Many of the elective options are already described in different parts of this page, so please see those descriptions. The rest, you'll have to find out about yourself. The best way to do this is to check out previous versions of the class website.

If you have a class that you feel should count as a restricted elective but is not on the list, you should first check the program sheets from other years. If a class was approved as a restricted elective during the year that you took it, you can use it as an elective on any other year's sheet. If not, you can send an email to Jerry Cain (jerry@cs) with a cc to Claire Stager (stager@cs). Keep in mind that classes that are numbered below 100 (including freshman seminars) or above 400 are not usually approved as restricted electives. The 193's also are not approved.


Stanford University Computer Science
Site content maintained by the CS Course Advisor. Design by Linda Nguyen, '05.

01010011 01110111 01100101 01100101 01110100 01001000 01100001 01101100 01101100 01001100 01101111 01110110 01100101 00100001