Skip to main content Skip to secondary navigation

Email forwarding for @cs.stanford.edu is changing on Feb 1, 2024. More details here

 

BS | Core Requirements

Main content start

Overview

A 2.0 minimum grade point average (GPA) for all courses in ENGR Fundamentals and CS Core, Depth, and Senior Project (combined) is required. Transfer credits in Computer Science Core must be approved by the Computer Science undergraduate program office. You can find more information regarding transfer credits here

Note: CS 103, 107, 109, 111 and 161 must be taken for 5 units.

Systems

CS106B introduces students to many fundamental programming concepts and software engineering techniques using the C++ language. The course will focus on teaching problem solving skills, basic abstract data types, and recursion. General topics include basic programming methodology (engineering, modularity, documentation), data abstractions (stacks, queues, linked lists, hash tables, binary trees, generics and templates), recursion (procedural, backtracking), searching and sorting, and basic algorithmic analysis (including Big O notation).

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 (threading, synchronization).

Note: Formerly known as CS110. Explores operating system concepts, including concurrency, synchronization, scheduling, processes, virtual memory, I/O, file systems, and protection.

Theory

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; DFA's, NFA's, and Regular Expressions; Context-Free Grammars, Turing Machines, and NP-Completeness.

CS109 is designed to teach students material from probability and statistics that is relevant to computer science. Topics include combinatorics; probability theory; conditional probability, and independence; probability distributions; Bayes' Theorem, Law of Large Numbers, and the Central Limit Theorem; and hypothesis testing. The class will also cover applications of probability including hashing, data analysis, inference, and an introduction to machine learning.

CS161 gives students the tools to analyze data structures and algorithms. Students will also practice devising algorithms for various problems. These skills are widely applicable, and alumni describe CS161 as one of the most useful classes at Stanford. Topics include algorithmic complexity analysis (Big O, Omega, Theta), recurrence relations, and the master method. In addition, students learn about several different classes of algorithms and data structures, including randomized algorithms, divide and conquer strategies, greedy algorithms, hashing, heaps, graph algorithms, and search algorithms (including blind and A* search).