Courses offered by the Department of Computer Science are listed under the subject code CS on the Stanford Bulletin's ExploreCourses web site.
The Department of Computer Science (CS) operates and supports computing facilities for departmental education, research, and administration needs. All CS students have access to the departmental student machine for general use (mail, news, etc.), as well as computer labs with public workstations located in the Gates Building. In addition, most students have access to systems located in their research areas.
Each research group in Computer Science has systems specific to its research needs. These systems include workstations (PCs, Macs), multiCPU computer clusters, and local mail and file servers. Servers and workstations running Linux or various versions of Windows are commonplace. Support for course work and instruction is provided on systems available through University IT (UIT) and the School of Engineering (SoE).
Mission of the Undergraduate Program in Computer Science
The mission of the undergraduate program in Computer Science is to develop students' breadth of knowledge across the subject areas of computer science, including their ability to apply the defining processes of computer science theory, abstraction, design, and implementation to solve problems in the discipline. Students take a set of core courses. After learning the essential programming techniques and the mathematical foundations of computer science, students take courses in areas such as programming techniques, automata and complexity theory, systems programming, computer architecture, analysis of algorithms, artificial intelligence, and applications. The program prepares students for careers in government, law, and the corporate sector, and for graduate study.
Learning Outcomes (Undergraduate)
The department expects undergraduate majors in the program to be able to demonstrate the following learning outcomes. These learning outcomes are used in evaluating students and the department's undergraduate program. Students are expected to be able to:
 Apply the knowledge of mathematics, science, and engineering.
 Design and conduct experiments, as well to analyze and interpret data.
 Design a system, component, or process to meet desired needs within realistic constraints such as economic, environmental, social, political, ethical, health and safety, manufacturability, and sustainability.
 Function on multidisciplinary teams.
 Identify, formulate, and solve engineering problems.
 Understand professional and ethical responsibility.
 Communicate effectively.
 Understand the impact of engineering solutions in a global, economic, environmental, and societal context.
 Demonstrate a working knowledge of contemporary issues.
 Apply the techniques, skills, and modern engineering tools necessary for engineering practice.
 Transition from engineering concepts and theory to real engineering applications.
Learning Outcomes (Graduate)
The purpose of the master’s program is to provide students with the knowledge and skills necessary for a professional career or doctoral studies. This is done through course work in the foundational elements of the field and in at least one graduate specialization. Areas of specialization include artificial intelligence, biocomputation, computer and network security, humancomputer interaction, information management and analytics, mobile and internet computing, realworld computing, software theory, systems, and theoretical computer science.
The Ph.D. is conferred upon candidates who have demonstrated substantial scholarship and the ability to conduct independent research. Through course work and guided research, the program prepares students to make original contributions in Computer Science and related fields.
Graduate Programs in Computer Science
The University’s basic requirements for the M.S. and Ph.D. degrees are discussed in the "Graduate Degrees" section of this bulletin.
Computer Science Course Catalog Numbering System
The first digit of a CS course number indicates its general level of sophistication:
Digit  Description 

001099  Service courses for nontechnical majors 
100199  Other service courses, basic undergraduate 
200299  Advanced undergraduate/beginning graduate 
300399  Advanced graduate 
400499  Experimental 
500599  Graduate seminars 
The tens digit indicates the area of Computer Science it addresses:
Digit  Description 

0009  Introductory, miscellaneous 
1019  Hardware and Software Systems 
2039  Artificial Intelligence 
4049  Software Systems 
5059  Mathematical Foundations of Computing 
6069  Analysis of Algorithms 
7079  Computational Biology and Interdisciplinary Topics 
9099  Independent Study and Practicum 
Bachelor of Science in Computer Science
The department offers both a major in Computer Science and a minor in Computer Science. Further information is available in the Handbook for Undergraduate Engineering Programs (UGHB) published by the School of Engineering. The Computer Science major offers a number of tracks (programs of study) from which students can choose, allowing them to focus their program on the areas of most interest. These tracks also reflect the broad diversity of areas in computing disciplines. The department has an honors program.
In addition to Computer Science itself, Stanford offers several interdisciplinary degrees with a substantial computer science component. The Symbolic Systems major (in the School of Humanities and Sciences) offers an opportunity to explore computer science and its relation to linguistics, philosophy, and psychology. The Mathematical and Computational Sciences major (also Humanities and Sciences) allows students to explore computer science along with more mathematics, statistics, and operations research.
Computer Science (CS)
Completion of the undergraduate program in Computer Science leads to the conferral of the Bachelor of Science in Computer Science.
Mission of the Undergraduate Program in Computer Science
The mission of the undergraduate program in Computer Science is to develop students' breadth of knowledge across the subject areas of computer science, including their ability to apply the defining processes of computer science theory, abstraction, design, and implementation to solve problems in the discipline. Students take a set of core courses. After learning the essential programming techniques and the mathematical foundations of computer science, students take courses in areas such as programming techniques, automata and complexity theory, systems programming, computer architecture, analysis of algorithms, artificial intelligence, and applications. The program prepares students for careers in government, law, the corporate sector, and for graduate study.
Requirements
Mathematics (26 units minimum)—
Units  

CS 103  Mathematical Foundations of Computing  5 
CS 109  Introduction to Probability for Computer Scientists  5 
MATH 19  Calculus ^{1}  3 
MATH 20  Calculus ^{1}  3 
MATH 21  Calculus ^{1}  4 
Plus two electives ^{2} 
Science (11 units minimum)—
Units  

PHYSICS 41  Mechanics  4 
or PHYSICS 41E  Mechanics, Concepts, Calculations, and Context  
PHYSICS 43  Electricity and Magnetism  4 
Science elective ^{3}  3 
Technology in Society (35 units)—
One course; course chosen must be on the SoE Approved Courses list at <ughb.stanford.edu> the year taken; see Basic Requirements 4 in the School of Engineering section 
Engineering Fundamentals (13 units minimum; see Basic Requirement 3 in the School of Engineering section)—
Units  

CS 106B  Programming Abstractions  5 
or CS 106X  Programming Abstractions (Accelerated)  
ENGR 40M  An Intro to Making: What is EE (or ENGR 40A and ENGR 40B)  35 
Fundamentals Elective (May be an ENGR fundamentals or an additional CS Depth course. See Fig. 34 in the UGHB for approved ENGR fundamentals list. May not be any CS 106)  35  
*Students who take ENGR 40A or 40M for fewer than 5 units are required to take 12 additional units of ENGR Fundamentals (13 units minimum), or 12 additional units of Depth.  
Writing in the Major—
Units  

Select one of the following:  
Computers, Ethics, and Public Policy  
Writing Intensive Senior Project  
Software Project  
Software Project Experience with Corporate Partners  
Writing Intensive Research Project in Computer Science 
Computer Science Core (15 units)—
Units  

CS 107  Computer Organization and Systems  5 
or CS 107E  Computer Systems from the Ground Up  
CS 110  Principles of Computer Systems  5 
CS 161  Design and Analysis of Algorithms  5 
Senior Project (3 units)—
Units  

Senior Project  
Writing Intensive Senior Project  
Software Project  
User Interface Design Project  
Software Project  
Software Project Experience with Corporate Partners  
CS 294  ^{6}  
or CS 294W  Writing Intensive Research Project in Computer Science 
Computer Science Depth B.S.
Choose one of the following ten CS degree tracks (a track must consist of at least 25 units and 7 classes):
Artificial Intelligence Track—
Units  

CS 221  Artificial Intelligence: Principles and Techniques  4 
Select two courses, each from a different area:  
Area I, AI Methods:  
Probabilistic Graphical Models: Principles and Techniques  
Machine Learning  
Reinforcement Learning  
Decision Making under Uncertainty  
Area II, Natural Language Processing:  
From Languages to Information  
Natural Language Processing with Deep Learning  
Spoken Language Processing  
Natural Language Understanding  
Area III, Vision:  
Computer Vision: Foundations and Applications  
Computer Vision: From 3D Reconstruction to Recognition  
Convolutional Neural Networks for Visual Recognition  
Area IV, Robotics:  
Introduction to Robotics  
Select one additional course from the Areas above or from the following:  
AI Methods:  
Computational Logic  
Continuous Mathematical Methods with an Emphasis on Machine Learning  
Deep Learning  
Deep Generative Models  
Modern Applied Statistics: Learning  
Modern Applied Statistics: Data Mining  
Vision:  
CS 231B  
CS 231M  
CS 331A  
Comp Bio:  
CS 262  
Computational Biology: Structure and Organization of Biomolecules and Cells  
Computational Biology in Four Dimensions  
CS 374  
Information and the Web:  
Information Retrieval and Web Search  
Analysis of Networks  
Other:  
Logic Programming  
General Game Playing  
CS 277  
Interdisciplinary Topics  
Robotics and Control:  
Advanced Robotic Manipulation  
Topics in Artificial Intelligence (with advisor approval)  
Introduction to Control Design Techniques  
EE 209  
Introduction to Stochastic Control with Applications  
Dynamic Programming and Stochastic Control  
Track Electives: at least three additional courses selected from the Areas and lists above, general CS electives, or the following: ^{4}  
Decision Making under Uncertainty  
Logic and Artificial Intelligence  
Translational Bioinformatics  
Topics in Advanced Robotic Manipulation  
Convex Optimization I  
or EE 364A  Convex Optimization I  
Computation and Cognition: The Probabilistic Approach  
Introduction to Statistical Signal Processing  
Convex Optimization II  
Game Theory and Economic Applications  
Decision Analysis I: Foundations of Decision Analysis  
Decision Analysis II: Professional Decision Analysis  
Influence Diagrams and Probabilistics Networks  
Computability and Logic  
Human Neuroimaging Methods  
Computational Neuroimaging  
Neural Network Models of Cognition  
Introduction to Statistical Inference  
Data Mining and Analysis  
Introduction to Nonparametric Statistics 
Biocomputation Track—
Units  

The Mathematics, Science, and Engineering Fundamentals requirements are nonstandard for this track. See Handbook for Undergraduate Engineering Programs for details.  
Select one of the following:  34  
Artificial Intelligence: Principles and Techniques  
Probabilistic Graphical Models: Principles and Techniques  
Machine Learning  
Computer Vision: From 3D Reconstruction to Recognition  
Select one of the following:  
CS 262  
Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  
The Human Genome Source Code  
Representations and Algorithms for Computational Molecular Biology  
Translational Bioinformatics  
Computational Biology: Structure and Organization of Biomolecules and Cells  
One additional course from the lists above or the following:  34  
From Languages to Information  
Data Management and Data Systems  
Introduction to HumanComputer Interaction Design  
Introduction to Computer Graphics and Imaging  
Interactive Computer Graphics  
One course selected from the following:  34  
CS 108  ObjectOriented Systems Design  34 
CS 124  From Languages to Information  34 
CS 131  Computer Vision: Foundations and Applications  34 
CS 140  Operating Systems and Systems Programming  34 
or CS 140E  Operating systems design and implementation  
CS 141  Introduction to Computer Sound  3 
CS 142  Web Applications  3 
CS 143  Compilers  34 
CS 144  Introduction to Computer Networking  34 
CS 145  Data Management and Data Systems  34 
CS 146  Introduction to Game Design and Development  3 
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 148  Introduction to Computer Graphics and Imaging  34 
CS 149  Parallel Computing  34 
CS 151  Logic Programming  3 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 155  Computer and Network Security  3 
CS 157  Computational Logic  3 
or PHIL 151  Metalogic  
CS 164  
CS 166  Data Structures  34 
CS 167  
CS 168  The Modern Algorithmic Toolbox  34 
CS 190  Software Design Studio  3 
CS 195  Supervised Undergraduate Research (4 units max)  34 
CS 205L  Continuous Mathematical Methods with an Emphasis on Machine Learning  3 
CS 205B  3  
CS 210A  Software Project Experience with Corporate Partners  34 
CS 217  Hardware Accelerators for Machine Learning  34 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 223A  Introduction to Robotics  3 
CS 224N  Natural Language Processing with Deep Learning  34 
CS 224S  Spoken Language Processing  24 
CS 224U  Natural Language Understanding  34 
CS 224W  Analysis of Networks  34 
CS 225A  Experimental Robotics  3 
CS 227B  General Game Playing  3 
CS 228  Probabilistic Graphical Models: Principles and Techniques  34 
CS 229  Machine Learning  34 
CS 229T  Statistical Learning Theory  3 
CS 230  Deep Learning  34 
CS 231A  Computer Vision: From 3D Reconstruction to Recognition  34 
CS 231B  
CS 231M  
CS 231N  Convolutional Neural Networks for Visual Recognition  34 
CS 232  Digital Image Processing  3 
CS 233  Geometric and Topological Data Analysis  3 
CS 234  Reinforcement Learning  3 
CS 236  Deep Generative Models  3 
CS 238  Decision Making under Uncertainty  34 
CS 240  Advanced Topics in Operating Systems  3 
CS 242  Programming Languages  3 
CS 243  Program Analysis and Optimizations  34 
CS 244  Advanced Topics in Networking  34 
CS 244B  Distributed Systems  3 
CS 245  Principles of DataIntensive Systems  3 
CS 246  Mining Massive Data Sets  34 
CS 247  HumanComputer Interaction Design Studio  34 
CS 248  Interactive Computer Graphics  34 
CS 251  Cryptocurrencies and blockchain technologies  3 
CS 252  Analysis of Boolean Functions  3 
CS 254  Computational Complexity  3 
CS 255  Introduction to Cryptography  3 
CS 261  Optimization and Algorithmic Paradigms  3 
CS 262  
CS 263  Algorithms for Modern Data Models  3 
CS 264  Beyond WorstCase Analysis  3 
CS 265  Randomized Algorithms and Probabilistic Analysis  3 
CS 266  
CS 267  3  
CS 269I  Incentives in Computer Science  3 
CS 270  Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  3 
CS 272  Introduction to Biomedical Informatics Research Methodology  35 
CS 273A  The Human Genome Source Code  3 
CS 273B  Deep Learning in Genomics and Biomedicine  3 
CS 274  Representations and Algorithms for Computational Molecular Biology  34 
CS 275  Translational Bioinformatics  4 
CS 276  Information Retrieval and Web Search  3 
CS 278  Social Computing  3 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CS 348B  Computer Graphics: Image Synthesis Techniques  34 
CS 348C  Computer Graphics: Animation and Simulation  3 
CS 348K  Visual Computing Systems  34 
CS 371  Computational Biology in Four Dimensions  3 
CS 374  
CME 108  Introduction to Scientific Computing  3 
EE 180  Digital Systems Architecture  4 
EE 263  Introduction to Linear Dynamical Systems  3 
EE 282  Computer Systems Architecture  3 
EE 364A  Convex Optimization I  3 
BIOE 101  Systems Biology  3 
MS&E 152  Introduction to Decision Analysis  34 
MS&E 252  Decision Analysis I: Foundations of Decision Analysis  34 
STATS 206  Applied Multivariate Analysis  3 
STATS 315A  Modern Applied Statistics: Learning  23 
STATS 315B  Modern Applied Statistics: Data Mining  23 
GENE 211  Genomics  3 
One course from the following:  35  
CS 145  Data Management and Data Systems  34 
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 228  Probabilistic Graphical Models: Principles and Techniques  34 
CS 229  Machine Learning  34 
CS 262  
CS 270  Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  3 
CS 273A  The Human Genome Source Code  3 
CS 273B  Deep Learning in Genomics and Biomedicine  3 
CS 274  Representations and Algorithms for Computational Molecular Biology  34 
CS 275  Translational Bioinformatics  4 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CS 371  Computational Biology in Four Dimensions  3 
CS 373  Statistical and Machine Learning Methods for Genomics  3 
CS 374  
EE 263  Introduction to Linear Dynamical Systems  3 
EE 364A  Convex Optimization I  3 
MS&E 152  Introduction to Decision Analysis  34 
MS&E 252  Decision Analysis I: Foundations of Decision Analysis  34 
STATS 206  Applied Multivariate Analysis  3 
STATS 315A  Modern Applied Statistics: Learning  23 
STATS 315B  Modern Applied Statistics: Data Mining  23 
GENE 211  Genomics  3 
One course selected from the list above or the following:  
CHEMENG 150  Biochemical Engineering  3 
CHEMENG 174  Environmental Microbiology I  3 
APPPHYS 294  Cellular Biophysics  3 
BIO 104  Advance Molecular Biology: Epigenetics and Proteostasis  5 
BIO 118  4  
BIO 188  
BIO 189  
BIO 214  Advanced Cell Biology  4 
BIO 217  
BIO 230  Molecular and Cellular Immunology  4 
CHEM 141  The Chemical Principles of Life I  4 
CHEM 171  Physical Chemistry I  4 
BIOC 218  
BIOC 241  Biological Macromolecules  35 
One course from the following:  
BIOE 220  Introduction to Imaging and Imagebased Human Anatomy  3 
CHEMENG 150  Biochemical Engineering  3 
CHEMENG 174  Environmental Microbiology I  3 
CS 262  
CS 274  Representations and Algorithms for Computational Molecular Biology  34 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CS 371  Computational Biology in Four Dimensions  3 
CS 374  
ME 281  Biomechanics of Movement  3 
APPHYS 294  
BIO 104  Advance Molecular Biology: Epigenetics and Proteostasis  5 
BIO 112  Human Physiology  4 
BIO 118  4  
BIO 158  Developmental Neurobiology  4 
BIO 183  Theoretical Population Genetics  3 
BIO 188  
BIO 189  
BIO 214  Advanced Cell Biology  4 
BIO 217  
BIO 230  Molecular and Cellular Immunology  4 
CHEM 171  Physical Chemistry I  4 
BIOC 218  
BIOC 241  Biological Macromolecules  35 
DBIO 210  Developmental Biology  4 
GENE 211  Genomics  3 
SURG 101  Regional Study of Human Structure  5 
Computer Engineering Track—
Units  

For this track there is a 10 unit minimum for ENGR Fundamentals and a 29 unit minimum for Depth (for track and elective courses)  
EE 108 & EE 180  Digital System Design and Digital Systems Architecture  68 
Select two of the following:  8  
Circuits I  
Circuits II  
Signal Processing and Linear Systems I  
Signal Processing and Linear Systems II  
Satisfy the requirements of one of the following concentrations:  
1) Digital Systems Concentration  
Operating Systems and Systems Programming  
or CS 140E or CS 143  
Digital Systems Design Lab  
Introduction to VLSI Systems  
Plus two of the following (68 units):  
Operating Systems and Systems Programming (if not counted above)  
or CS 140E or CS 143  
Introduction to Computer Networking  
Parallel Computing  
Software Design Studio  
Hardware Accelerators for Machine Learning  
CS 240E  
Advanced Topics in Networking  
Digital Systems Engineering  
Computer Systems Architecture  
2) Robotics and Mechatronics Concentration  
Continuous Mathematical Methods with an Emphasis on Machine Learning  
Introduction to Robotics  
Introduction to Mechatronics  
Feedback Control Design  
Plus one of the following (34 units):  
Experimental Robotics  
Computer Vision: From 3D Reconstruction to Recognition  
Introduction to Control Design Techniques  
Linear Control Systems II  
3) Networking Concentration  
Operating Systems and Systems Programming and Introduction to Computer Networking (CS 140E can substitute for CS 140)  
Plus three of the following (911 units):  
Advanced Topics in Operating Systems  
Embedded Systems Workshop  
Advanced Topics in Networking  
Distributed Systems  
Analog and Digital Communication Systems 
Graphics Track—
Units  

CS 148 & CS 248  Introduction to Computer Graphics and Imaging and Interactive Computer Graphics  8 
Select one of the following: ^{5}  35  
Continuous Mathematical Methods with an Emphasis on Machine Learning  
Linear Algebra and Partial Differential Equations for Engineers (Note: students taking CME 104 are also required to take its prerequisite course, CME 102)  
Introduction to Scientific Computing  
Integral Calculus of Several Variables  
Linear Algebra and Matrix Theory  
Select two of the following:  68  
Introduction to Game Design and Development  
Computer Vision: From 3D Reconstruction to Recognition  
or CS 131  Computer Vision: Foundations and Applications  
Geometric and Topological Data Analysis  
Geometric Algorithms  
Computer Graphics: Geometric Modeling & Processing  
Computer Graphics: Image Synthesis Techniques  
Computer Graphics: Animation and Simulation  
Visual Computing Systems  
Topics in Computer Graphics  
Track Electives: at least two additional courses from the lists above, the general CS electives list, or the following: ^{4}  68  
Intro to Digital / Physical Design  
Photography I: Black and White  
Digital Art I  
Numerical Linear Algebra  
Numerical Solution of Partial Differential Equations  
Introduction to Digital Image Processing  
TwoDimensional Imaging  
Digital Signal Processing  
Introduction to Statistical Signal Processing  
Digital Image Processing  
Visual Thinking  
Introduction to Perception  
Image Systems Engineering 
HumanComputer Interaction Track—
Units  

CS 147  Introduction to HumanComputer Interaction Design  4 
CS 247  HumanComputer Interaction Design Studio  4 
Any three of the following:  
Web Applications  
Introduction to Game Design and Development  
Introduction to Computer Graphics and Imaging  
User Interface Design Project  
Exploring Computational Journalism  
Software Project Experience with Corporate Partners  
Social Computing  
HumanComputer Interaction Research  
Any CS 377 'Topics in HCI' of three or more units  
Data Visualization  
Introduction to the Design of Smart Products  
At least two additional courses from above list, the general CS electives list, or the following: ^{4}  36  
Any d.school class of 3 or more units  
Any class of 3 or more units at hci.stanford.edu under the 'courses' link  
Communication  
Behavior and Social Media  
Lies, Trust, and Tech  
or COMM 224  Lies, Trust, and Tech  
COMM 140  
or COMM 240  
The Politics of Algorithms  
Virtual People  
COMM 169  
or COMM 269  
Media Psychology  
or COMM 272  Media Psychology  
COMM 182  
The Politics of Algorithms  
Language and Technology  
Art Studio  
Intro to Digital / Physical Design  
Embodied Interfaces  
Drawing with Code  
DESIGN IN PUBLIC SPACES  
Social Media and Performative Practices  
Data as Material  
Advanced Interaction Design  
Sculptural Screens / Malleable Media  
Emerging Technology Studio  
Sym Sys  
Cognition in Interaction Design  
Psychology  
Introduction to Perception  
Minds and Machines  
Introduction to Learning and Memory  
Introduction to Cognitive Neuroscience  
Introduction to Developmental Psychology  
Self and Society: Introduction to Social Psychology  
Introduction to Cultural Psychology  
Introduction to Personality and Affective Science  
Introduction to Clinical Psychology  
Introduction to Abnormal Psychology  
PSYCH 131  
Judgment and DecisionMaking  
Empirical Methods  
Ethnographic Methods  
Introduction to Applied Statistics  
Experimental Methods  
Statistical Methods for Behavioral and Social Sciences  
HighDimensional Methods for Behavioral and Neural Data  
Introduction to Regression Models and Analysis of Variance  
Introduction to Survey Research  
Qualitative Research Methodology  
ME Design  
Visual Thinking  
Introduction to Human Values in Design  
Design and Manufacturing  
Introduction to Mechatronics  
Advanced Product Design: Needfinding  
Learning Design + Tech  
Beyond Bits and Atoms: Designing Technological Tools  
Technology for Learners  
Educating Young STEM Thinkers  
Innovations in Education  
Child Development and New Technologies  
MS&E  
Global Work  
MS&E 331  
Computer Music  
Fundamentals of ComputerGenerated Sound  
Compositional Algorithms, Psychoacoustics, and Computational Music  
Research Seminar in ComputerGenerated Music  
Physical Interaction Design for Music  
Music, Computing, Design I: The Art of Design  
Optional Elective ^{4} 
Information Track—
Units  

CS 124  From Languages to Information  4 
CS 145  Data Management and Data Systems  4 
Two courses, from different areas:  69  
1) Informationbased AI applications  
Natural Language Processing with Deep Learning  
Spoken Language Processing  
Machine Learning  
Geometric and Topological Data Analysis  
Reinforcement Learning  
2) Database and Information Systems  
Operating Systems and Systems Programming  
or CS 140E  Operating systems design and implementation  
Web Applications  
Logic Programming  
Principles of DataIntensive Systems  
Mining Massive Data Sets  
Project in Mining Massive Data Sets  
CS 345  (Offered occasionally)  
3) Information Systems in Biology  
CS 262  
Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  
Representations and Algorithms for Computational Molecular Biology  
4) Information Systems on the Web  
Analysis of Networks  
Information Retrieval and Web Search  
At least three additional courses from the above areas or the general CS electives list. ^{4} 
Systems Track—
Units  

CS 140  Operating Systems and Systems Programming  4 
or CS 140E  Operating systems design and implementation  
Select one of the following:  34  
Compilers  
Digital Systems Architecture  
Two additional courses from the list above or the following:  68  
Introduction to Computer Networking  
Data Management and Data Systems  
Parallel Computing  
Computer and Network Security  
Software Design Studio  
Hardware Accelerators for Machine Learning  
Advanced Topics in Operating Systems  
Programming Languages  
Program Analysis and Optimizations  
Advanced Topics in Networking  
Principles of DataIntensive Systems  
Introduction to VLSI Systems  
Computer Systems Architecture  
Track Electives: at least three additional courses selected from the list above, the general CS electives list, or the following: ^{4}  912  
Embedded Systems Workshop  
Advanced MultiCore Systems  
Project in Mining Massive Data Sets  
CS 343  (Not given this year)  
Topics in Computer Networks (3 or more units, any suffix)  
CS 345  (Advanced Topics in Database Systems  3 or more units, any suffix)  
Topics in Programming Systems (with permission of undergraduate advisor)  
Topics in Computer Graphics  
Digital System Design  
Interconnection Networks  
Internet Routing Protocols and Standards  
EE 384B  
Wireless Local and Wide Area Networks  
Performance Engineering of Computer Systems & Networks 
Theory Track—
Units  

CS 154  Introduction to Automata and Complexity Theory  4 
Select one of the following:  3  
The Modern Algorithmic Toolbox  
Introduction to Cryptography  
Optimization and Algorithmic Paradigms  
Beyond WorstCase Analysis  
Randomized Algorithms and Probabilistic Analysis  
Geometric Algorithms  
Two additional courses from the list above or the following:  68  
Compilers  
Logic Programming  
Computer and Network Security  
Computational Logic  
or PHIL 151  Metalogic  
Data Structures  
Continuous Mathematical Methods with an Emphasis on Machine Learning  
Probabilistic Graphical Models: Principles and Techniques  
Geometric and Topological Data Analysis  
Deep Generative Models  
Programming Languages  
Algebraic Error Correcting Codes  
Cryptocurrencies and blockchain technologies  
Analysis of Boolean Functions  
Computational Complexity  
CS 259  (with permission of undergraduate advisor)  
CS 262  
Algorithms for Modern Data Models  
CS 266  
CS 267  
Incentives in Computer Science  
PseudoRandomness  
Topics in Intractability: Unfulfilled Algorithmic Fantasies (Not given this year)  
Advanced Topics in Cryptography (Not given this year)  
CS 357  (Not given this year)  
Topics in Programming Language Theory  
Topics in the Theory of Computation (with permission of undergraduate advisor)  
CS 364A  
Topics in Analysis of Algorithms (with permission of undergraduate advisor)  
CS 374  
Linear Programming  
Track Electives: at least three additional courses from the lists above, the general CS electives list, or the following: ^{4}  912  
Almost Linear Time Graph Algorithms  
Numerical Linear Algebra  
Discrete Mathematics and Algorithms  
Computability and Logic 
Unspecialized Track—
Units  

CS 154  Introduction to Automata and Complexity Theory  4 
Select one of the following:  4  
Operating Systems and Systems Programming  
or CS 140E  Operating systems design and implementation  
Compilers  
One additional course from the list above or the following:  34  
Introduction to Computer Networking  
Computer and Network Security  
Software Design Studio  
Programming Languages  
Advanced Topics in Networking  
Digital Systems Architecture  
Select one of the following:  34  
Artificial Intelligence: Principles and Techniques  
Introduction to Robotics  
Probabilistic Graphical Models: Principles and Techniques  
Machine Learning  
Computer Vision: From 3D Reconstruction to Recognition  
Select one of the following:  34  
Data Management and Data Systems  
Introduction to HumanComputer Interaction Design  
Introduction to Computer Graphics and Imaging  
Interactive Computer Graphics  
CS 262  
At least two courses from the general CS electives list ^{4} 
Individually Designed Track—
Students may propose an individually designed track. Proposals should include a minimum of 25 units and seven courses, at least four of which must be CS courses numbered 100 or above. See Handbook for Undergraduate Engineering Programs for further information.
For additional information and sample programs see the Handbook for Undergraduate Engineering Programs (UGHB)
^{1}  MATH 19, MATH 20, and MATH 21 OR MATH 41 and MATH 42 OR AP Calculus Credit may be used as long as at least 26 MATH units are taken. AP Calculus Credit must be approved by the School of Engineering. 
^{2}  The math electives list consists of: MATH 51, Math 52, Math 53, MATH 104, MATH 108, MATH 109, MATH 110, MATH 113; CS 157, CS 205L; PHIL 151; CME 100, CME 102, CME 103 (or EE103), CME 104. Restrictions: CS 157 and PHIL 151 may not be used in combination to satisfy the math electives requirement. Students who have taken both MATH 51 and MATH 52 may not count CME 100 as an elective. Courses counted as math electives cannot also count as CS electives, and vice versa. 
^{3}  The science elective may be any course of 3 or more units from the School of Engineering Science list (Fig. 42 in the UGHB), PSYCH 30, or AP Chemistry Credit. Either of the PHYSICS sequences 61/63 or 21/23 may be substituted for 41/43 as long as at least 11 science units are taken. AP Chemistry Credit and AP Physics Credit must be approved by the School of Engineering. 
^{4}  General CS Electives: CS 108,CS 124, CS 131, CS 140 (or CS 140E), CS 141, CS 142, CS 143 CS 144, CS 145, CS 146, CS 147, CS 148, CS 149, CS 154, CS 155, CS 157(or PHIL 151), CS 166, CS 168, CS 190, CS 195 (4 units max), CS 205L, CS 205B, CS 210A, CS 217, CS 223A, CS 224N, CS 224S, CS 224U, CS 224W, CS 225A, CS 227B, CS 228, CS 229, CS 229T, CS 231A, CS 231B, CS 231M, CS 231N, CS 232, CS 233, CS 234, CS 238, CS 240, CS 242, CS 243, CS 244, CS 244B, CS 245, CS 246, CS 247, CS 248, CS 251, CS 252, CS 254, CS 255, CS 261, CS 262, CS 263, CS 264, CS 265, CS 266, CS 267, CS 269I, CS 270, CS 272, CS 273A, CS 273B, CS 274, CS 276, CS 278, CS 279, CS 348B, CS 348C, CS 348K, CS 352, CS 369L; CME 108; EE 180, EE 282, EE 364A. 
^{5}  CS 205L is strongly recommended in this list for the Graphics track. Students taking CME 104 Linear Algebra and Partial Differential Equations for Engineers are also required to take its prerequisite, CME 102 Ordinary Differential Equations for Engineers. 
^{6}  Independent study projects (CS 191 Senior Project or CS 191W Writing Intensive Senior Project) require faculty sponsorship and must be approved by the adviser, faculty sponsor, and the CS senior project adviser (P. Young). A signed approval form, along with a brief description of the proposed project, should be filed the quarter before work on the project is begun. Further details can be found in the Handbook for Undergraduate Engineering Programs (UGHB). 
^{7}  A course may only be counted towards one requirement; it may not be doublecounted. All courses taken for the major must be taken for a letter grade if that option is offered by the instructor. Minimum Combined GPA for all courses in Engineering Fundamentals and Depth is 2.0. 
Honors Program in Computer Science
The Department of Computer Science (CS) offers an honors program for undergraduates whose academic records and personal initiative indicate that they have the necessary skills to undertake highquality research in computer science. Admission to the program is by application only. To apply for the honors program, students must be majoring in Computer Science, have a grade point average (GPA) of at least 3.6 in courses that count toward the major, and achieve senior standing (135 or more units) by the end of the academic year in which they apply. Coterminal master’s students are eligible to apply as long as they have not already received their undergraduate degree. Beyond these requirements, students who apply for the honors program must find a Computer Science faculty member who agrees to serve as the thesis adviser for the project. Thesis advisers must be members of Stanford’s Academic Council.
Students who meet the eligibility requirements and wish to be considered for the honors program must submit a written application to the CS undergraduate program office by May 1 of the year preceding the honors work. The application must include a letter describing the research project, a letter of endorsement from the faculty sponsor, and a transcript of courses taken at Stanford. Each year, a faculty review committee selects the successful candidates for honors from the pool of qualified applicants.
In order to receive departmental honors, students admitted to the honors program must, in addition to satisfying the standard requirements for the undergraduate degree, do the following:
 Complete at least 9 units of CS 191 or CS 191W under the direction of their project sponsor.
 Attend a weekly honors seminar Winter and Spring quarters.
 Complete an honors thesis deemed acceptable by the thesis adviser and at least one additional faculty member.
 Present the thesis at a public colloquium sponsored by the department.
 Maintain the 3.6 GPA required for admission to the honors program.
Guide to Choosing Introductory Courses
Students arriving at Stanford have widely differing backgrounds and goals, but most find that the ability to use computers effectively is beneficial to their education. The department offers many introductory courses to meet the needs of these students.
For students whose principal interest is an exposure to the fundamental ideas behind computer science and programming, CS 101 or CS 105 are the most appropriate courses. They are intended for students in nontechnical disciplines who expect to make some use of computers, but who do not expect to go on to more advanced courses. CS 101 and CS 105 meet the new Ways of Thinking Ways of Doing breadth requirements in Formal Reasoning and include an introduction to programming and the use of modern Internetbased technologies. Students interested in learning to use the computer should consider CS 1C, Introduction to Computing at Stanford.
Students who intend to pursue a serious course of study in computer science may enter the program at a variety of levels, depending on their background. Students with little prior experience or those who wish to take more time to study the fundamentals of programming should take CS 106A followed by CS 106B. Students in CS 106A need not have prior programming experience. Students with significant prior exposure to programming or those who want an intensive introduction to the field should take CS 106X or may start directly in CS 106B. CS 106A uses Java, JavaScript, or Python as its programming language; CS 106B and X use C++. No prior knowledge of these languages is assumed, and the prior programming experience required for CS 106B or X may be in any language. In all cases, students are encouraged to discuss their background with the instructors responsible for these courses.
After the introductory sequence, Computer Science majors and those who need a significant background in computer science for related majors in engineering should take CS 103, CS 107 and CS 110. CS 103 offers an introduction to the mathematical and theoretical foundations of computer science. CS 107 exposes students to a variety of programming concepts that illustrate critical strategies used in systems development; CS 110 builds on this material, focusing on the development of largerscale software making use of systems and networking abstractions.
In summary:
For exposure:  
Introduction to Computing at Stanford  
For nontechnical use:  
Introduction to Computing Principles  
or CS 105  Introduction to Computers  
For scientific use:  
Programming Methodology  
For a technical introduction:  
Programming Methodology  
For significant use:  
Programming Methodology and Programming Abstractions  
or CS 106X  Programming Abstractions (Accelerated)  
Mathematical Foundations of Computing  
Computer Organization and Systems  
Principles of Computer Systems 
Overseas Studies Courses in Computer Science
For course descriptions and additional offerings, see the listings in the Stanford Bulletin's ExploreCourses web site (http://explorecourses.stanford.edu) or the Bing Overseas Studies web site (http://bosp.stanford.edu). Students should consult their department or program's student services office for applicability of Overseas Studies courses to a major or minor program.
Joint Major Program: Computer Science and a Humanities Major
The joint major program (JMP), was authorized by the Academic Senate for a pilot period of six years beginning in 201415, permitting students to major in both Computer Science and one of 14 Humanities majors. Based upon continuing assessment, including feedback from students and faculty, the pilot will be discontinued at the end of the academic year 201819.
All students with declared joint majors will be permitted to complete their degree; faculty and departments are committed to providing the necessary advising support. Students wishing to declare a joint major may do so until June 18, 2019. After that date, no new joint major declarations will be approved.
See the "Joint Major Program" section of this bulletin for a description of University requirements for the JMP. See also the Undergraduate Advising and Research JMP web site and its associated FAQs.
Students completing the JMP receive a B.A.S. (Bachelor of Arts and Science).
Mission
The Joint Major provides a unique opportunity to gain mastery in two disciplines: Computer Science and a selected humanities field. Unlike the double major or dual major, the Joint Major emphasizes integration of the two fields through a cohesive, transdisciplinary course of study and integrated capstone experience. The Joint Major not only blends the intellectual traditions of two Stanford departmentsit does so in a way that reduces the total unit requirement for each major.
Computer Science Major Requirements in the Joint Major Program
(See the respective humanities department Joint Major Program section of this bulletin for details on humanities major requirements.)
The CS requirements for the Joint Major follow the CS requirements for the CSBS degree with the following exceptions:
 Two of the depth electives are waived. The waived depth electives are listed below for each CS track.
 The Senior Project is fulfilled with a joint capstone project. The student enrolls in CS191 or 191W (3 units) during the senior year. Depending on the X department, enrollment in an additional Humanities capstone course may also be required. But, at a minimum, 3 units of CS191 or 191W must be completed.
 There is no doublecounting of units between majors. If a course is required for both the CS and Humanities majors, the student will work with one of the departments to identify an additional course  one which will benefit the academic plan  to apply to that major's total units requirement.
 For CS, WIM can be satisfied with CS181W or CS191W.
Depth Electives for CS Tracks for students completing a Joint Major:
Artificial Intelligence Track:
One Track Elective (rather than three).
Biocomputation Track:
One course from Note 3 of the Department Program Sheet, plus one course from Note 4 of the Program Sheet..
Computer Engineering Track:
 EE 108A and 108B
 One of the following: EE 101A, 101B, 102A, 102B
 Satisfy the requirements of one of the following concentrations:
 Digital Systems Concentration: CS 140 or 143; EE 109, 271; plus one of CS 140 or 143 (if not counted above), 144, 149, 240E, 244: EE 273, 282
 Robotics and Mechatronics Concentration: CS 205A, 223A; ME 210; ENGR 105
 Networking Concentration: CS 140, 144; plus two of the following, CS 240, 240E, 244, 244B, 244E, 249A, 249B, EE 179, EE 276
Graphics Track:
No Track Electives required (rather than two)
HCI Track:
No Interdisciplinary HCI Electives required
Information Track:
One Track Elective (rather than three)
Systems Track:
One Track Elective (rather than three)
Theory Track:
One Track Elective (rather than three)
Unspecialized Track:
No Track Electives required (rather than two)
Individually Designed Track:
Proposals should include a minimum of five (rather than seven) courses, at least four of which must be CS courses numbered 100 or above.
Declaring a Joint Major Program
To declare the joint major, students must first declare each major through Axess, and then submit the Declaration or Change of Undergraduate Major, Minor, Honors, or Degree Program. The MajorMinor and Multiple Major Course Approval Form is required for graduation for students with a joint major.
Dropping a Joint Major Program
To drop the joint major, students must submit the Declaration or Change of Undergraduate Major, Minor, Honors, or Degree Program. Students may also consult the Student Services Center with questions concerning dropping the joint major.
Transcript and Diploma
Students completing a joint major graduate with a B.A.S. degree. The two majors are identified on one diploma separated by a hyphen. There will be a notation indicating that the student has completed a "Joint Major." The two majors are identified on the transcript with a notation indicating that the student has completed a "Joint Major."
Computer Science (CS) Minor
The following core courses fulfill the minor requirements. Prerequisites include the standard mathematics sequence through MATH 51 (or CME 100).
Units  

Introductory Programming (AP Credit may be used to fulfill this requirement):  
CS 106B  Programming Abstractions  5 
or CS 106X  Programming Abstractions (Accelerated)  
Core:  
CS 103  Mathematical Foundations of Computing  5 
CS 107  Computer Organization and Systems  5 
or CS 107E  Computer Systems from the Ground Up  
CS 109  Introduction to Probability for Computer Scientists  5 
Electives (choose two courses from different areas):  
Artificial Intelligence—  
CS 124  From Languages to Information  4 
CS 221  Artificial Intelligence: Principles and Techniques  4 
CS 229  Machine Learning  34 
HumanComputer Interaction—  
CS 147  Introduction to HumanComputer Interaction Design  4 
Software—  
CS 108  ObjectOriented Systems Design  4 
CS 110  Principles of Computer Systems  5 
Systems—  
CS 140  Operating Systems and Systems Programming  4 
or CS 140E  Operating systems design and implementation  
CS 143  Compilers  4 
CS 144  Introduction to Computer Networking  4 
CS 145  Data Management and Data Systems  4 
CS 148  Introduction to Computer Graphics and Imaging  4 
Theory—  
CS 154  Introduction to Automata and Complexity Theory  4 
CS 157  Computational Logic  3 
CS 161  Design and Analysis of Algorithms  5 
Note: for students with no programming background and who begin with CS 106A, the minor consists of seven courses.
Master of Science in Computer Science
In general, the M.S. degree in Computer Science is intended as a terminal professional degree and does not lead to the Ph.D. degree. Most students planning to obtain the Ph.D. degree should apply directly for admission to the Ph.D. program. Some students, however, may wish to complete the master’s program before deciding whether to pursue the Ph.D. To give such students a greater opportunity to become familiar with research, the department has a program leading to a master’s degree with distinction in research. This program is described in more detail below.
Admission
Applications to the M.S. program and all supporting documents must be submitted and received online by the published deadline. Information on admission requirements is available on the department's web site; see also the department's deadlines page. Exceptions are made for applicants who are already students at Stanford and are applying to the coterminal program.
University Coterminal Requirements
Coterminal master’s degree candidates are expected to complete all master’s degree requirements as described in this bulletin. University requirements for the coterminal master’s degree are described in the “Coterminal Master’s Program” section. University requirements for the master’s degree are described in the "Graduate Degrees" section of this bulletin.
After accepting admission to this coterminal master’s degree program, students may request transfer of courses from the undergraduate to the graduate career to satisfy requirements for the master’s degree. Transfer of courses to the graduate career requires review and approval of both the undergraduate and graduate programs on a case by case basis.
In this master’s program, courses taken during or after the first quarter of the sophomore year are eligible for consideration for transfer to the graduate career; the timing of the first graduate quarter is not a factor. No courses taken prior to the first quarter of the sophomore year may be used to meet master’s degree requirements.
Course transfers are not possible after the bachelor’s degree has been conferred.
The University requires that the graduate adviser be assigned in the student’s first graduate quarter even though the undergraduate career may still be open. The University also requires that the Master’s Degree Program Proposal be completed by the student and approved by the department by the end of the student’s first graduate quarter.
Requirements
A candidate is required to complete a program of 45 units. At least 36 of these must be graded units, passed with a grade point average (GPA) of 3.0 (B) or better. The 45 units may include no more than 10 units of courses from those listed below in Requirement 1. Thus, students needing to take more than two of the courses listed in Requirement 1 actually complete more than 45 units of course work in the program. Only wellprepared students may expect to finish the program in one year; most students complete the program in six quarters. Students hoping to complete the program with 45 units should already have a substantial background in computer science, including course work or experience equivalent to all of Requirement 1 and some prior course work related to their specialization area.
Requirement 1: Foundations—
Students must complete the following courses, or waive out of them by providing evidence to their advisers that similar or more advanced courses have been taken, either at Stanford or another institution (total units used to satisfy foundations requirement may not exceed 10):
Logic, Automata, and Computability  
Mathematical Foundations of Computing  
Probability  
Select one of the following:  
Introduction to Probability for Computer Scientists  
Theory of Probability  
Probabilistic Analysis  
Introduction to Probability and Statistics for Engineers  
Algorithmic Analysis  
Design and Analysis of Algorithms  
Computer Organization and Systems  
Computer Organization and Systems  
or CS 107E  Computer Systems from the Ground Up  
Principles of Computer Systems  
Principles of Computer Systems 
Requirement 2: Significant Software Implementation—
Students must complete at least one course designated as having a significant software implementation component. The list of such courses includes:
CS 140  Operating Systems and Systems Programming  34 
or CS 140E  Operating systems design and implementation  
CS 143  Compilers  34 
CS 144  Introduction to Computer Networking  34 
CS 145  Data Management and Data Systems  34 
CS 148  Introduction to Computer Graphics and Imaging  34 
CS 190  Software Design Studio  3 
CS 210B  Software Project Experience with Corporate Partners  34 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 227B  General Game Playing  3 
CS 243  Program Analysis and Optimizations  34 
CS 248  Interactive Computer Graphics  34 
CS 341  Project in Mining Massive Data Sets  3 
CS 346  (Offered occasionally)  35 
Requirement 3: Specialization—
Students may choose to satisfy this requirement through one of two options, Single Depth or Dual Depth, outlined following. All courses taken for this requirement must be taken on a letter grade basis for three or more units.
Option 1—Single Depth
 A program of 27 units in a single area of specialization must be completed. A maximum of 9 units of independent study (CS 393, CS 395, CS 399) may be counted toward the specialization.
 Additionally, students must complete three breadth courses from the list of approved breadth courses associated with their chosen specialization. Individual specializations explicitly have different breadth requirements; see the individual specialization sheets on the department's web site for details.
 Breadth courses may not be waived, must be taken for at least 3 units each, and must be completed for a letter grade.
Option 2—Dual Depth
 Students select distinct primary and secondary areas.
 A program of 21 units in the primary area of specialization must be completed. A maximum of 9 units of independent study (CS 393, CS 395, CS 399) may be counted toward the primary specialization.
 Students must also complete a program of five courses satisfying the requirements for their secondary area of specialization.
 Breadth courses are not required.
Specialization Areas—
Ten approved specialization areas which may be used to satisfy Requirement 3 are listed following. Students may propose to the M.S. program committee other coherent programs that meet their goals and satisfy the basic requirements.
Courses marked with an asterisk (*) require consent of the faculty adviser. Courses marked with a double asterisk (**) may be waived by students with equivalent course work and with the approval of their adviser.
1. Artificial Intelligence—
A.  
Artificial Intelligence: Principles and Techniques ^{**}  
B. Select at least four of the following:  
Introduction to Robotics  
Natural Language Processing with Deep Learning  
Spoken Language Processing  
Natural Language Understanding  
Analysis of Networks  
Probabilistic Graphical Models: Principles and Techniques  
Machine Learning  
Computer Vision: From 3D Reconstruction to Recognition  
Convolutional Neural Networks for Visual Recognition  
Reinforcement Learning  
Decision Making under Uncertainty  
C. A total of at least 27 units from categories A, B, and the following:  
Continuous Mathematical Methods with an Emphasis on Machine Learning  
Hardware Accelerators for Machine Learning  
Experimental Robotics  
General Game Playing  
Statistical Learning Theory  
Deep Learning  
CS 231B  
CS 231M  
Digital Image Processing  
Geometric and Topological Data Analysis  
Deep Generative Models  
Advanced Topics in Sequential Decision Making  
Mining Massive Data Sets  
Logic and Artificial Intelligence  
CS 262  
Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  
The Human Genome Source Code  
Deep Learning in Genomics and Biomedicine  
Representations and Algorithms for Computational Molecular Biology  
Translational Bioinformatics  
Information Retrieval and Web Search  
Computational Biology: Structure and Organization of Biomolecules and Cells  
Research Project in Artificial Intelligence ^{*}  
Automated Reasoning: Theory and Applications  
CS 325  
Topics in Advanced Robotic Manipulation  
Advanced Robotic Manipulation (Not given this year)  
Topics in Computer Vision  
Topics in Artificial Intelligence  
CS 331A  
Representation Learning in Computer Vision  
Advanced Survey of Reinforcement Learning  
Safe and Interactive Robotics  
Convex Optimization I  
or EE 364A  Convex Optimization I  
Project in Mining Massive Data Sets  
CS 345  (Offered occasionally)  
CS 362  (Not given this year)  
CS 364A  
Algorithmic Techniques for Big Data  
Algorithmic Perspective on Machine Learning  
Metric Embeddings and Algorithmic Applications  
Computational Biology in Four Dimensions  
Statistical and Machine Learning Methods for Genomics  
CS 374  (not given this year)  
LargeScale Neural Network Modeling for Neuroscience  
Topics in HumanComputer Interaction (CS 377 with any suffix) ^{*}  
Interdisciplinary Topics (CS 379 with any suffix) ^{*}  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*}  
Computation and Cognition: The Probabilistic Approach  
Theoretical Neuroscience  
Introduction to Linear Dynamical Systems  
Introduction to Statistical Signal Processing  
Convex Optimization II  
Information Theory  
Information Theory and Statistics  
Inference, Estimation, and Information Processing  
Introduction to Control Design Techniques  
Analysis and Control of Nonlinear Systems  
"Small" Data: Prediction, Inference, Causality  
Introduction to Stochastic Control with Applications  
Decision Analysis I: Foundations of Decision Analysis  
Dynamic Programming and Stochastic Control  
Decision Analysis II: Professional Decision Analysis  
Decision Analysis III: Frontiers of Decision Analysis  
Neural Network Models of Cognition  
Data Mining and Analysis  
Modern Applied Statistics: Learning  
Modern Applied Statistics: Data Mining 
 Students with a 27 or 21unit depth option (Option 1 or 2 above) must take 27 or 21 units respectively subject to satisfying the area (A), (B), and (C) requirements above.
 Students with a secondary area of specialization (per Option 2 above) in Artificial Intelligence must take five total courses satisfying the area (A) and (B) requirements above.
 Those students who have waived out of CS 221 may take an additional course in either area (B) or (C).
Artificial Intelligence Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 140  Operating Systems and Systems Programming  34 
or CS 140E  Operating systems design and implementation  
CS 143  Compilers  34 
CS 144  Introduction to Computer Networking  34 
or EE 284  Introduction to Computer Networks  
CS 145  Data Management and Data Systems  34 
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 148  Introduction to Computer Graphics and Imaging  34 
CS 149  Parallel Computing  34 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 155  Computer and Network Security  3 
CS 157  Computational Logic  3 
CS 166  Data Structures  34 
CS 168  The Modern Algorithmic Toolbox  34 
CS 240  Advanced Topics in Operating Systems  3 
CS 242  Programming Languages  3 
CS 243  Program Analysis and Optimizations  34 
CS 244  Advanced Topics in Networking  34 
CS 244B  Distributed Systems  3 
CS 244E  
CS 255  Introduction to Cryptography  3 
CS 261  Optimization and Algorithmic Paradigms  3 
CS 264  Beyond WorstCase Analysis  3 
CS 265  Randomized Algorithms and Probabilistic Analysis  3 
CS 266  3  
CS 267  3  
CS 268  Geometric Algorithms  3 
CS 269I  Incentives in Computer Science  3 
CME 108  Introduction to Scientific Computing  34 
CME 302  Numerical Linear Algebra  3 
EE 180  Digital Systems Architecture  34 
EE 282  Computer Systems Architecture  3 
2. Biocomputation—
A. Select at least four of the following:  
CS 262  
Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  
Introduction to Biomedical Informatics Research Methodology  
The Human Genome Source Code  
Representations and Algorithms for Computational Molecular Biology  
Computational Biology: Structure and Organization of Biomolecules and Cells  
B. A total of at least 27 units from category (A) and the following:  
Probabilistic Graphical Models: Principles and Techniques  
Machine Learning  
Deep Learning  
Convolutional Neural Networks for Visual Recognition  
Geometric and Topological Data Analysis  
Deep Generative Models  
Principles of DataIntensive Systems  
Mining Massive Data Sets  
Optimization and Algorithmic Paradigms  
Beyond WorstCase Analysis  
Randomized Algorithms and Probabilistic Analysis  
Geometric Algorithms  
Deep Learning in Genomics and Biomedicine  
Translational Bioinformatics  
CS 325  
Project in Mining Massive Data Sets  
CS 345  (Offered occasionally )  
CS 346  
CS 362  (Not given this year)  
Computational Biology in Four Dimensions  
Statistical and Machine Learning Methods for Genomics  
CS 374  
LargeScale Neural Network Modeling for Neuroscience  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*}  
Theoretical Neuroscience  
BIOC 218  
Genomics 
 Students with a 27 or 21unit depth option (Option 1 or 2 above) must take 27 or 21 units respectively subject to satisfying the area (A) and (B) requirements above.
 Students with a secondary area of specialization (per Option 2 above) in Biocomputation must take five total courses, three courses of which must come from area (A) and the remaining two courses may come from either area (A) or (B).
Biocomputation Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 124  From Languages to Information  34 
CS 140  Operating Systems and Systems Programming  34 
or CS 140E  Operating systems design and implementation  
CS 143  Compilers  34 
CS 144  Introduction to Computer Networking  34 
or EE 284  Introduction to Computer Networks  
CS 145  Data Management and Data Systems  34 
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 148  Introduction to Computer Graphics and Imaging  34 
CS 149  Parallel Computing  34 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 155  Computer and Network Security  3 
CS 157  Computational Logic  3 
CS 166  Data Structures  34 
CS 168  The Modern Algorithmic Toolbox  34 
CS 205L  Continuous Mathematical Methods with an Emphasis on Machine Learning  3 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 223A  Introduction to Robotics  3 
CS 224N  Natural Language Processing with Deep Learning  34 
CS 224S  Spoken Language Processing  24 
CS 224U  Natural Language Understanding  34 
CS 224W  Analysis of Networks  3 
CS 227B  General Game Playing  3 
CS 231A  Computer Vision: From 3D Reconstruction to Recognition  3 
or CS 231B  
CS 234  Reinforcement Learning  3 
CS 240  Advanced Topics in Operating Systems  3 
CS 242  Programming Languages  3 
CS 243  Program Analysis and Optimizations  34 
CS 244  Advanced Topics in Networking  34 
CS 244B  Distributed Systems  3 
CS 255  Introduction to Cryptography  3 
CS 269I  Incentives in Computer Science  3 
CS 276  Information Retrieval and Web Search  3 
CME 108  Introduction to Scientific Computing  34 
CME 302  Numerical Linear Algebra  3 
EE 180  Digital Systems Architecture  34 
EE 282  Computer Systems Architecture  3 
3. Computer and Network Security—
A.  
Operating Systems and Systems Programming ^{**}  
or CS 140E  Operating systems design and implementation  
Introduction to Computer Networking ^{**}  
Computer and Network Security  
Advanced Topics in Networking  
Introduction to Cryptography  
B. Select at least three of the following:  
Web Applications  
Software Design Studio  
Advanced Topics in Operating Systems  
Distributed Systems  
Optimization and Algorithmic Paradigms  
Randomized Algorithms and Probabilistic Analysis  
Topics in Computer Systems  
Topics in Computer Networks (CS 344 with any suffix)  
Advanced Topics in Cryptography (Not given this year)  
Topics in Computer and Network Security  
C. A total of at least 27 units from categories (A), (B), and the following:  
Principles of DataIntensive Systems  
Cryptocurrencies and blockchain technologies  
Beyond WorstCase Analysis  
Research Project in Software Systems and Security (Not given this year) ^{*}  
Project in Mining Massive Data Sets  
CS 345  (Offered occasionally)  
CS 347  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*}  
Internet Routing Protocols and Standards  
Wireless Local and Wide Area Networks  
Performance Engineering of Computer Systems & Networks 
 Students with a 27 or 21unit depth option (Option 1 or 2 above) must take 27 or 21 units respectively subject to satisfying the area (A), (B), and (C) requirements above.
 Students with a secondary area of specialization (per Option 2 above) in Computer and Network Security must take five courses; those five courses must satisfy the area (A) requirement and additional courses from area (B) should be taken if any area (A) requirements are waived.
Computer and Network Security Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 124  From Languages to Information  34 
CS 143  Compilers  34 
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 148  Introduction to Computer Graphics and Imaging  34 
CS 149  Parallel Computing  34 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 157  Computational Logic  3 
CS 166  Data Structures  34 
CS 168  The Modern Algorithmic Toolbox  34 
CS 205L  Continuous Mathematical Methods with an Emphasis on Machine Learning  3 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 223A  Introduction to Robotics  3 
CS 224N  Natural Language Processing with Deep Learning  34 
CS 224S  Spoken Language Processing  24 
CS 224U  Natural Language Understanding  34 
CS 224W  Analysis of Networks  3 
CS 227B  General Game Playing  3 
CS 228  Probabilistic Graphical Models: Principles and Techniques  34 
CS 229  Machine Learning  34 
CS 231A  Computer Vision: From 3D Reconstruction to Recognition  3 
or CS 231B  
CS 233  Geometric and Topological Data Analysis  3 
CS 234  Reinforcement Learning  3 
CS 242  Programming Languages  3 
CS 243  Program Analysis and Optimizations  34 
CS 246  Mining Massive Data Sets  34 
CS 262  3  
CS 267  3  
CS 268  Geometric Algorithms  3 
CS 269I  Incentives in Computer Science  3 
CS 270  Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  3 
CS 273A  The Human Genome Source Code  3 
CS 274  Representations and Algorithms for Computational Molecular Biology  34 
CS 276  Information Retrieval and Web Search  3 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CME 108  Introduction to Scientific Computing  34 
CME 302  Numerical Linear Algebra  3 
EE 180  Digital Systems Architecture  34 
EE 282  Computer Systems Architecture  3 
4. HumanComputer Interaction—
A.  
Introduction to HumanComputer Interaction Design ^{**}  
HumanComputer Interaction Design Studio ^{**}  
B. Select any three of the following:  
Web Applications  
Introduction to Game Design and Development  
Introduction to Computer Graphics and Imaging  
User Interface Design Project  
Exploring Computational Journalism  
Software Project Experience with Corporate Partners  
Interactive Computer Graphics  
Social Computing  
HumanComputer Interaction Research  
Topics in HumanComputer Interaction (CS 377 with any suffix)  
Data Visualization  
Introduction to the Design of Smart Products  
C. A total of at least 27 units from categories (A), (B), and the following:  
a. Broader CS  
Introduction to Computer Sound  
Artificial Intelligence: Principles and Techniques  
Natural Language Processing with Deep Learning  
Natural Language Understanding  
Analysis of Networks  
Machine Learning  
Computer Vision: From 3D Reconstruction to Recognition  
CS 231B  
Programming Languages  
Mining Massive Data Sets  
Project in Mining Massive Data Sets  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*}  
b. Art Studio  
Intro to Digital / Physical Design  
Embodied Interfaces  
Drawing with Code  
DESIGN IN PUBLIC SPACES  
Social Media and Performative Practices  
Data as Material  
Advanced Interaction Design  
Sculptural Screens / Malleable Media  
Emerging Technology Studio  
c. Communication  
Lies, Trust, and Tech  
COMM 240  
The Politics of Algorithms  
Virtual People  
COMM 269  
Media Psychology  
Comm 282  
Language and Technology  
d. Empirical Methods  
Ethnographic Methods  
Introduction to Qualitative Research Methods  
Introduction to Applied Statistics  
Experimental Methods  
Statistical Methods for Behavioral and Social Sciences  
HighDimensional Methods for Behavioral and Neural Data  
Introduction to Regression Models and Analysis of Variance  
e. Learning Design & Tech  
Beyond Bits and Atoms: Designing Technological Tools  
Educating Young STEM Thinkers  
Technology for Learners  
Innovations in Education  
Child Development and New Technologies  
f. Management Science & Engr  
Global Work  
MS&E 331  
Topics in Social Data  
g. Mechanical Engr  
Design and Manufacturing  
Introduction to Mechatronics  
Advanced Product Design: Needfinding  
h. Music  
Fundamentals of ComputerGenerated Sound  
Compositional Algorithms, Psychoacoustics, and Computational Music  
Research Seminar in ComputerGenerated Music  
Physical Interaction Design for Music  
Music, Computing, Design I: The Art of Design  
i. Psych  
Computation and Cognition: The Probabilistic Approach  
Neural Network Models of Cognition  
j. Sym Sys  
Cognition in Interaction Design  
Additional courses ^{1} 
^{1}  Any d.school course (listed at http://dschool.stanford.edu) or any HCI course (listed at http://hci.stanford.edu/courses); such courses must be numbered 100 or above and be taken for at least 3 units to count for this requirement 
 Students with a 27 or 21unit depth option (Option 1 or 2 above) must take 27 or 21 units respectively subject to satisfying the area (A) through (C) requirements above.
 Students with a secondary area of specialization (per Option 2 above) in HumanComputer Interaction must take five courses satisfying the areas (A) through (C).
HumanComputer Interaction Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 124  From Languages to Information  34 
CS 140  Operating Systems and Systems Programming  34 
or CS 140E  Operating systems design and implementation  
CS 143  Compilers  34 
CS 144  Introduction to Computer Networking  34 
or EE 284  Introduction to Computer Networks  
CS 145  Data Management and Data Systems  34 
CS 149  Parallel Computing  34 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 155  Computer and Network Security  3 
CS 157  Computational Logic  3 
CS 166  Data Structures  34 
CS 168  The Modern Algorithmic Toolbox  34 
CS 205L  Continuous Mathematical Methods with an Emphasis on Machine Learning  3 
CS 223A  Introduction to Robotics  3 
CS 224S  Spoken Language Processing  24 
CS 227B  General Game Playing  3 
CS 228  Probabilistic Graphical Models: Principles and Techniques  34 
CS 233  Geometric and Topological Data Analysis  3 
CS 234  Reinforcement Learning  3 
CS 240  Advanced Topics in Operating Systems  3 
CS 243  Program Analysis and Optimizations  34 
CS 244  Advanced Topics in Networking  34 
CS 244B  Distributed Systems  3 
CS 255  Introduction to Cryptography  3 
CS 261  Optimization and Algorithmic Paradigms  3 
CS 262  3  
CS 264  Beyond WorstCase Analysis  3 
CS 265  Randomized Algorithms and Probabilistic Analysis  3 
CS 266  3  
CS 267  3  
CS 268  Geometric Algorithms  3 
CS 269I  Incentives in Computer Science  3 
CS 270  Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  3 
CS 273A  The Human Genome Source Code  3 
CS 274  Representations and Algorithms for Computational Molecular Biology  34 
CS 276  Information Retrieval and Web Search  3 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CME 108  Introduction to Scientific Computing  34 
CME 302  Numerical Linear Algebra  3 
EE 180  Digital Systems Architecture  34 
EE 282  Computer Systems Architecture  3 
5. Information Management and Analytics—
A.  
CS 145  Data Management and Data Systems ^{**}  34 
B. Select at least four of the following:  
Natural Language Processing with Deep Learning  
Analysis of Networks  
Machine Learning  
Principles of DataIntensive Systems  
Mining Massive Data Sets  
Information Retrieval and Web Search  
CS 345  (Offered occasionally)  
C. A total of at least 27 units from categories (A), (B) and the following:  
Introduction to Computer Networking  
Logic Programming  
Software Design Studio  
Spoken Language Processing  
Natural Language Understanding  
Probabilistic Graphical Models: Principles and Techniques  
Statistical Learning Theory  
Deep Learning  
Computer Vision: From 3D Reconstruction to Recognition  
Convolutional Neural Networks for Visual Recognition  
Geometric and Topological Data Analysis  
Reinforcement Learning  
Deep Generative Models  
Advanced Topics in Operating Systems  
Programming Languages  
Program Analysis and Optimizations  
Advanced Topics in Networking  
Distributed Systems  
Cryptocurrencies and blockchain technologies  
Introduction to Cryptography  
CS 262  
Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  
Introduction to Biomedical Informatics Research Methodology  
The Human Genome Source Code  
Representations and Algorithms for Computational Molecular Biology  
Translational Bioinformatics  
Computational Biology: Structure and Organization of Biomolecules and Cells  
Advanced MultiCore Systems  
CS 325  
Project in Mining Massive Data Sets  
Topics in Computer Networks (CS 344 with any suffix)  
CS 362  (Not given this year)  
CS 374  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*}  
"Small" Data: Prediction, Inference, Causality  
Modern Applied Statistics: Learning  
Modern Applied Statistics: Data Mining 
 Students with a 27 or 21unit depth option (Option 1 or 2 above) must take 27 or 21 units respectively subject to satisfying the area (A), (B), and (C) requirements above.
 Students with a secondary area of specialization (per Option 2 above) in Information Management and Analytics must take five courses satisfying the area (A) and (B) requirements above. Note that if CS145 was waived in area (A), students should take an additional course from either area (B) or (C) in its place.
Information Management and Analytics Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 140  Operating Systems and Systems Programming  34 
or CS 140E  Operating systems design and implementation  
CS 143  Compilers  34 
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 148  Introduction to Computer Graphics and Imaging  34 
CS 149  Parallel Computing  34 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 155  Computer and Network Security  3 
CS 157  Computational Logic  3 
CS 166  Data Structures  34 
CS 168  The Modern Algorithmic Toolbox  34 
CS 205L  Continuous Mathematical Methods with an Emphasis on Machine Learning  3 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 223A  Introduction to Robotics  3 
CS 227B  General Game Playing  3 
CS 261  Optimization and Algorithmic Paradigms  3 
CS 264  Beyond WorstCase Analysis  3 
CS 265  Randomized Algorithms and Probabilistic Analysis  3 
CS 266  3  
CS 267  3  
CS 268  Geometric Algorithms  3 
CS 269I  Incentives in Computer Science  3 
CME 108  Introduction to Scientific Computing  34 
CME 302  Numerical Linear Algebra  3 
EE 180  Digital Systems Architecture  34 
EE 282  Computer Systems Architecture  3 
6. Mobile and Internet Computing—
A. Select two of the following:  
Operating Systems and Systems Programming ^{**}  
or CS 140E  Operating systems design and implementation  
Introduction to Computer Networking  
Advanced Topics in Networking  
B. Select one of the following:  
Web Applications  
Introduction to HumanComputer Interaction Design  
HumanComputer Interaction Design Studio  
C. Select one of the following:  
Computer and Network Security  
Introduction to Cryptography  
D.  
Research Project in Software Systems and Security  
E. A total of 27 units from categories (A), (B), (C), (D) and the following:  
Software Design Studio  
Analysis of Networks  
Embedded Systems Workshop  
Mining Massive Data Sets  
Cryptocurrencies and blockchain technologies  
Social Computing  
Topics in Computer Networks (CS 344 with any suffix)  
Topics in Computer and Network Security  
HumanComputer Interaction Research  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*}  
Wireless Communications  
Internet Routing Protocols and Standards  
EE 384B  (not given this year)  
Wireless Local and Wide Area Networks  
Networked Wireless Systems  
Performance Engineering of Computer Systems & Networks  
Statistical Methods for Behavioral and Social Sciences 
 Students with a 27 or 21unit depth option (Option 1 or 2 above) must take 27 or 21 units respectively subject to satisfying the area (A) through (E) requirements above.
 Students with a secondary area of specialization (per Option 2 above) in Mobile and Internet Computing must take five courses satisfying the area (A) through (D) requirements above.
Mobile and Internet Computing Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 124  From Languages to Information  34 
CS 143  Compilers  34 
CS 145  Data Management and Data Systems  34 
CS 148  Introduction to Computer Graphics and Imaging  34 
CS 149  Parallel Computing  34 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 157  Computational Logic  3 
CS 166  Data Structures  34 
CS 168  The Modern Algorithmic Toolbox  34 
CS 205L  Continuous Mathematical Methods with an Emphasis on Machine Learning  3 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 223A  Introduction to Robotics  3 
CS 224N  Natural Language Processing with Deep Learning  34 
CS 224S  Spoken Language Processing  24 
CS 224U  Natural Language Understanding  34 
CS 227B  General Game Playing  3 
CS 228  Probabilistic Graphical Models: Principles and Techniques  34 
CS 229  Machine Learning  34 
CS 231A  Computer Vision: From 3D Reconstruction to Recognition  3 
or CS 231B  
CS 233  Geometric and Topological Data Analysis  3 
CS 234  Reinforcement Learning  3 
CS 240  Advanced Topics in Operating Systems  3 
CS 242  Programming Languages  3 
CS 243  Program Analysis and Optimizations  34 
CS 244B  Distributed Systems  3 
CS 261  Optimization and Algorithmic Paradigms  3 
CS 262  3  
CS 264  Beyond WorstCase Analysis  3 
CS 265  Randomized Algorithms and Probabilistic Analysis  3 
CS 266  3  
CS 267  3  
CS 268  Geometric Algorithms  3 
CS 269I  Incentives in Computer Science  3 
CS 270  Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  3 
CS 273A  The Human Genome Source Code  3 
CS 274  Representations and Algorithms for Computational Molecular Biology  34 
CS 276  Information Retrieval and Web Search  3 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CME 108  Introduction to Scientific Computing  34 
CME 302  Numerical Linear Algebra  3 
EE 180  Digital Systems Architecture  34 
EE 282  Computer Systems Architecture  3 
7. RealWorld Computing—
A. Select at least three of the following:  
Introduction to Computer Graphics and Imaging  
Introduction to Robotics  
Computer Vision: From 3D Reconstruction to Recognition  
Interactive Computer Graphics  
B. Select at least three of the following:  
Introduction to Computer Sound  
Continuous Mathematical Methods with an Emphasis on Machine Learning  
Geometric and Topological Data Analysis  
CS 262  
Geometric Algorithms  
Computer Graphics: Geometric Modeling & Processing  
Computer Graphics: Image Synthesis Techniques  
Computer Graphics: Animation and Simulation  
Visual Computing Systems  
CS 374  
Numerical Linear Algebra  
Numerical Solution of Partial Differential Equations  
C. A total of at least 27 units from categories (A), (B), and the following:  
Introduction to Game Design and Development  
Experimental Robotics  
Probabilistic Graphical Models: Principles and Techniques  
Machine Learning  
Deep Learning  
CS 231B  
CS 231M  
Digital Image Processing  
or EE 368  Digital Image Processing  
HumanComputer Interaction Design Studio  
Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  
Introduction to Biomedical Informatics Research Methodology  
The Human Genome Source Code  
Representations and Algorithms for Computational Molecular Biology  
Research Project in Artificial Intelligence ^{*}  
Topics in Advanced Robotic Manipulation  
Advanced Robotic Manipulation (Not given this year)  
Topics in Computer Vision  
CS 331A  
Representation Learning in Computer Vision  
Safe and Interactive Robotics  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*}  
Topics in Computer Graphics (CS 448 with any suffix)  
Virtual Reality 
 Students with a 27 or 21unit depth option (Option 1 or 2 above) must take 27 or 21 units respectively subject to satisfying the area (A), (B), and (C) requirements above.
 Students with a secondary area of specialization (per Option 2 above) in RealWorld Computing must take five total courses satisfying area (A) and two of the three courses in the area (B) requirements above (i.e., three courses in area (a) and two courses in area (B).
RealWorld Computing Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 124  From Languages to Information  34 
CS 140  Operating Systems and Systems Programming  34 
or CS 140E  
CS 143  Compilers  34 
CS 144  Introduction to Computer Networking  34 
or EE 284  Introduction to Computer Networks  
CS 145  Data Management and Data Systems  34 
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 149  Parallel Computing  34 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 155  Computer and Network Security  3 
CS 157  Computational Logic  3 
CS 166  Data Structures  34 
CS 168  The Modern Algorithmic Toolbox  34 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 224N  Natural Language Processing with Deep Learning  34 
CS 224S  Spoken Language Processing  24 
CS 224U  Natural Language Understanding  34 
CS 224W  Analysis of Networks  3 
CS 227B  General Game Playing  3 
CS 234  Reinforcement Learning  3 
CS 240  Advanced Topics in Operating Systems  3 
CS 242  Programming Languages  3 
CS 243  Program Analysis and Optimizations  34 
CS 244  Advanced Topics in Networking  34 
CS 244B  Distributed Systems  3 
CS 246  Mining Massive Data Sets  3 
CS 255  Introduction to Cryptography  3 
CS 261  Optimization and Algorithmic Paradigms  3 
CS 264  Beyond WorstCase Analysis  3 
CS 265  Randomized Algorithms and Probabilistic Analysis  3 
CS 266  3  
CS 267  3  
CS 269I  Incentives in Computer Science  3 
CS 276  Information Retrieval and Web Search  3 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CME 108  Introduction to Scientific Computing  34 
EE 180  Digital Systems Architecture  34 
EE 282  Computer Systems Architecture  3 
8. Software Theory—
A.  
Program Analysis and Optimizations  
B. Select at least one of the following:  
Advanced Topics in Networking  
Principles of DataIntensive Systems  
Project in Mining Massive Data Sets  
CS 343  (Offered occasionally)  
CS 345  (Offered occasionally)  
C. Select at least two courses from the following:  
Programming Languages  
Introduction to Cryptography  
Optimization and Algorithmic Paradigms  
Algorithms for Modern Data Models  
Beyond WorstCase Analysis  
Randomized Algorithms and Probabilistic Analysis  
CS 266  
CS 267  
Geometric Algorithms  
Advanced Topics in Cryptography (Not given this year)  
CS 367  (Not given this year)  
D. A total of at least 27 units from (A), (B), (C), or the following:  
Logic Programming  
Algebraic Error Correcting Codes  
Cryptocurrencies and blockchain technologies  
Analysis of Boolean Functions  
Research Project in Software Systems and Security (Not given this year) ^{*}  
Topics in Computer and Network Security  
CS 362  (Not given this year)  
Algorithmic Perspective on Machine Learning  
Metric Embeddings and Algorithmic Applications  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*} 
 Students with a 27 or 21unit depth option (Option 1 or 2 above) must take 27 or 21 units respectively subject to satisfying the area (A) through (D) requirements above.
 Students with a secondary area of specialization (per Option 2 above) in Software Theory need to take 5 total courses satisfying the area (A) through (D) requirements above.
Software Theory Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 124  From Languages to Information  34 
CS 140  Operating Systems and Systems Programming  34 
or CS 140E  Operating systems design and implementation  
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 148  Introduction to Computer Graphics and Imaging  34 
CS 149  Parallel Computing  34 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 155  Computer and Network Security  3 
CS 157  Computational Logic  3 
CS 205L  Continuous Mathematical Methods with an Emphasis on Machine Learning  3 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 223A  Introduction to Robotics  3 
CS 224N  Natural Language Processing with Deep Learning  34 
CS 224S  Spoken Language Processing  24 
CS 224U  Natural Language Understanding  34 
CS 224W  Analysis of Networks  3 
CS 227B  General Game Playing  3 
CS 228  Probabilistic Graphical Models: Principles and Techniques  34 
CS 229  Machine Learning  34 
CS 231A  Computer Vision: From 3D Reconstruction to Recognition  3 
or CS 231B  
CS 233  Geometric and Topological Data Analysis  3 
CS 234  Reinforcement Learning  3 
CS 240  Advanced Topics in Operating Systems  3 
CS 244B  Distributed Systems  3 
CS 246  Mining Massive Data Sets  34 
CS 262  3  
CS 269I  Incentives in Computer Science  3 
CS 270  Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  3 
CS 273A  The Human Genome Source Code  3 
CS 274  Representations and Algorithms for Computational Molecular Biology  34 
CS 276  Information Retrieval and Web Search  3 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CME 108  Introduction to Scientific Computing  34 
CME 302  Numerical Linear Algebra  3 
EE 180  Digital Systems Architecture  34 
EE 282  Computer Systems Architecture  3 
9. Systems—
A.  
Operating Systems and Systems Programming ^{**}  
or CS 140E  Operating systems design and implementation  
Introduction to Computer Networking ^{**}  
Advanced Topics in Operating Systems  
B. Select at least four of the following:  
Software Design Studio  
Programming Languages  
Program Analysis and Optimizations  
Advanced Topics in Networking  
Principles of DataIntensive Systems  
Interactive Computer Graphics  
Computer Graphics: Image Synthesis Techniques  
Introduction to VLSI Systems  
Computer Systems Architecture  
C. A total of at least 27 units from categories (A), (B), and the following:  
Hardware Accelerators for Machine Learning  
Embedded Systems Workshop  
Distributed Systems  
Mining Massive Data Sets  
Cryptocurrencies and blockchain technologies  
Introduction to Cryptography  
CS 262  
Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  
Introduction to Biomedical Informatics Research Methodology  
Information Retrieval and Web Search  
Research Project in Software Systems and Security (Not given this year) ^{*}  
Parallel Computing Research Project  
Advanced MultiCore Systems  
Topics in Computer Systems  
Project in Mining Massive Data Sets  
CS 343  (Not given this year)  
Topics in Computer Networks (CS 344 with any suffix)  
CS 345  (Offered occasionally)  
Computer Graphics: Geometric Modeling & Processing  
Computer Graphics: Animation and Simulation  
Visual Computing Systems  
Topics in Programming Systems (CS 349 with any suffix)  
Topics in Computer and Network Security  
CS 374  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*}  
Topics in Computer Graphics (CS 448 with any suffix)  
Virtual Reality  
Digital Systems Engineering  
Interconnection Networks  
Internet Routing Protocols and Standards  
EE 384B  (not given this year)  
Wireless Local and Wide Area Networks  
Performance Engineering of Computer Systems & Networks 
 Students with a 27unit depth option (Option 1 above) must take 27 units subject to satisfying the area (A), (B), and (C) requirements above.
 Students with a 21unit depth option (Option 2 above) must take that many units subject to satisfying the area (A) and (B) requirements above, and additional courses may be taken from area (C) if any courses in the area (A) requirement are waived.
 Students with a secondary area of specialization (per Option 2 above) in Systems need to take five courses; those courses must satisfy the area (A) requirement and additional courses may be taken from area (B).
Systems Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 124  From Languages to Information  34 
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 154  Introduction to Automata and Complexity Theory  34 
CS 155  Computer and Network Security  3 
CS 157  Computational Logic  3 
CS 166  Data Structures  34 
CS 168  The Modern Algorithmic Toolbox  34 
CS 205L  Continuous Mathematical Methods with an Emphasis on Machine Learning  3 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 223A  Introduction to Robotics  3 
CS 224N  Natural Language Processing with Deep Learning  34 
CS 224S  Spoken Language Processing  24 
CS 224U  Natural Language Understanding  34 
CS 224W  Analysis of Networks  3 
CS 227B  General Game Playing  3 
CS 228  Probabilistic Graphical Models: Principles and Techniques  34 
CS 229  Machine Learning  34 
CS 231A  Computer Vision: From 3D Reconstruction to Recognition  3 
or CS 231B  
CS 233  Geometric and Topological Data Analysis  3 
CS 234  Reinforcement Learning  3 
CS 261  Optimization and Algorithmic Paradigms  3 
CS 264  Beyond WorstCase Analysis  3 
CS 265  Randomized Algorithms and Probabilistic Analysis  3 
CS 266  3  
CS 267  3  
CS 268  Geometric Algorithms  3 
CS 269I  Incentives in Computer Science  3 
CS 273A  The Human Genome Source Code  3 
CS 274  Representations and Algorithms for Computational Molecular Biology  34 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CME 108  Introduction to Scientific Computing  34 
CME 302  Numerical Linear Algebra  3 
10. Theoretical Computer Science—
A.  
Introduction to Automata and Complexity Theory ^{**}  
Optimization and Algorithmic Paradigms  
B. A total of at least 27 units from category (A) and the following:  
Logic Programming  
Data Structures  
The Modern Algorithmic Toolbox  
Probabilistic Graphical Models: Principles and Techniques  
Geometric and Topological Data Analysis  
Deep Generative Models  
Mining Massive Data Sets  
Algebraic Error Correcting Codes  
Cryptocurrencies and blockchain technologies  
Analysis of Boolean Functions  
Computational Complexity  
Introduction to Cryptography  
Logic and Artificial Intelligence  
CS 262  
Algorithms for Modern Data Models  
Beyond WorstCase Analysis  
Randomized Algorithms and Probabilistic Analysis  
CS 266  
CS 267  
Geometric Algorithms  
Almost Linear Time Graph Algorithms  
Incentives in Computer Science  
Introduction to Optimization Theory  
Convex Optimization I  
or EE 364A  Convex Optimization I  
Project in Mining Massive Data Sets  
CS 345  (Offered occasionally)  
PseudoRandomness  
Topics in Intractability: Unfulfilled Algorithmic Fantasies (Not given this year)  
Advanced Topics in Cryptography (Not given this year)  
CS 357  (Not given this year)  
Topics in Programming Language Theory  
Topics in the Theory of Computation ^{*}  
CS 362  (Not given this year)  
CS 364A  
CS 366  (Not given this year)  
CS 367  (Not given this year)  
Algorithmic Techniques for Big Data  
Topics in Analysis of Algorithms ^{*}  
CS 374  (not given this year)  
Computer Laboratory ^{*}  
Independent Database Project ^{*}  
Independent Project ^{*}  
Topics in Geometric Algorithms: Machine Learning for 3D Data ^{*}  
Linear Programming  
Matching Theory 
 Multiple CS 359, CS 369, and/or CS 468 courses may be taken as long as they are each on different topics, denoted by different letter suffixes for the courses.
 Students with a 27 or 21unit depth option (Option 1 or 2 above) must take 27 or 21 units respectively subject to satisfying the area (A) and (B) requirements above.
 Students with a secondary area of specialization (per Option 2 above) in Theoretical Computer Science need to take 5 total courses satisfying the area (A) and (B) requirements above.
Theoretical Computer Science Breadth Courses
Students in the single depth specialization must complete three of the following breadth courses and receive a letter grade for each.
CS 124  From Languages to Information  34 
CS 140  Operating Systems and Systems Programming  34 
or CS 140E  Operating systems design and implementation  
CS 143  Compilers  34 
CS 144  Introduction to Computer Networking  34 
or EE 284  Introduction to Computer Networks  
CS 145  Data Management and Data Systems  34 
CS 147  Introduction to HumanComputer Interaction Design  35 
CS 148  Introduction to Computer Graphics and Imaging  34 
CS 149  Parallel Computing  34 
CS 155  Computer and Network Security  3 
CS 157  Computational Logic  3 
CS 205L  Continuous Mathematical Methods with an Emphasis on Machine Learning  3 
CS 221  Artificial Intelligence: Principles and Techniques  34 
CS 223A  Introduction to Robotics  3 
CS 224N  Natural Language Processing with Deep Learning  34 
CS 224S  Spoken Language Processing  24 
CS 224U  Natural Language Understanding  34 
CS 224W  Analysis of Networks  3 
CS 227B  General Game Playing  3 
CS 229  Machine Learning  34 
CS 231A  Computer Vision: From 3D Reconstruction to Recognition  3 
or CS 231B  
CS 234  Reinforcement Learning  3 
CS 240  Advanced Topics in Operating Systems  3 
CS 242  Programming Languages  3 
CS 243  Program Analysis and Optimizations  34 
CS 244  Advanced Topics in Networking  34 
CS 244B  Distributed Systems  3 
CS 270  Modeling Biomedical Systems: Ontology, Terminology, Problem Solving  3 
CS 273A  The Human Genome Source Code  3 
CS 274  Representations and Algorithms for Computational Molecular Biology  34 
CS 276  Information Retrieval and Web Search  3 
CS 279  Computational Biology: Structure and Organization of Biomolecules and Cells  3 
CME 108  Introduction to Scientific Computing  34 
CME 302  Numerical Linear Algebra  3 
EE 180  Digital Systems Architecture  34 
EE 282  Computer Systems Architecture  3 
*  With consent of faculty adviser. 
**  Students with equivalent course work may waive with approval of their adviser. 
Requirement 4
Additional elective units must be technical courses (numbered 100 or above) related to the degree program and approved by the adviser and MS program administrator. All CS courses numbered above 110 (with the exception of CS 196 and 198) taken for 3 or more units are preapproved as elective courses. Additionally, up to a maximum of 3 units of 500level CS seminars, CS 300, EE 380, EE 385A, or other 12 unit seminars offered in the School of Engineering may be counted as electives. Elective courses may be taken on a satisfactory/no credit basis provided that a minimum of 36 graded units is presented within the 45unit program.
Master of Science with Distinction in Research
A student who wishes to pursue the M.S. in CS with distinction in research must first identify a faculty adviser who agrees to supervise and support the research work. The research adviser must be a member of the Academic Council and must hold an appointment in Computer Science. The student and principal adviser must also identify another faculty member, who need not be in the Department of Computer Science, to serve as a secondary adviser and reader for the research report. In addition, the student must complete the following requirements beyond those for the regular M.S. in CS degree:
 Research Experience—The program must include significant research experience at the level of a halftime commitment over the course of three academic quarters. In any given quarter, the halftime research commitment may be satisfied by a 50 percent appointment to a departmentally supported research assistantship, 6 units of independent study (CS 393, CS 395, or CS 399), or a prorated combination of the two (such as a 25 percent research assistantship supplemented by 3 units of independent study). This research must be carried out under the direction of the primary or secondary adviser.
 Supervised Writing and Research—In addition to the research experience outlined in the previous requirement, students must enroll in at least 3 units of independent research (CS 393, CS 395, or CS 399) under the direction of their primary or secondary adviser. These units should be closely related to the research described in the first requirement, but focused more directly on the preparation of the research report described in the next section. The writing and research units described in parts (1) and (2) may be counted toward the 45 units required for the degree.
 All independent study units (CS 393, CS 395, CS 399) must be taken for letter grades and a GPA of 3.0 (B) or better must be maintained.
 Research Report—Students must complete a significant report describing their research and its conclusions. The research report represents work that is publishable in a journal or at a highquality conference, although it is presumably longer and more expansive in scope than a typical conference paper. A copy of the research report must be submitted to the student services office in the department three weeks before the beginning of the examination period in the student’s final quarter. Both the primary and secondary adviser must approve the research report before the distinctioninresearch designation can be conferred.
Joint M.S. and MBA Degree
The joint MS in Computer Science/MBA degree links two of Stanford University's worldclass programs. This joint degree offers students an opportunity to develop advanced technical and managerial skills for a broader perspective on both existing technologies and new technology ventures.
Admission to the joint MSCS/MBA program requires that students apply and be accepted independently to both the Computer Science Department in the School of Engineering and the Graduate School of Business. Students may apply concurrently, or elect to begin their course of study in CS and apply to the GSB during their first year.
Additional information on the MS in Computer Science/MBA Joint Degree Program and its requirements is available on the department's web site.
Joint M.S. and Law Degree
Law students interested in pursuing an M.S. in Computer Science must apply for admission to the Computer Science Department either (i) concurrently with applying to the Law School; or (ii) after being admitted to the Law School, but no later than the earlier of: (a) the end of the second year of Law School; or (b) the Computer Science Department's admission deadline for the year following that second year of Law School.
In addition to being admitted separately to the Law School and the Computer Science Department, students must secure permission from both academic units to pursue degrees in those units as part of a joint degree program.
J.D./M.S. students may elect to begin their course of study in either the Law School or the Computer Science Department. Faculty advisors from each academic unit participate in the planning and supervising of the student's joint program. Students must be enrolled fulltime in the Law School for the first year of law studies. Otherwise, enrollment may be in the graduate school or the Law School, and students may choose courses from either program regardless of where enrolled. Students must satisfy the requirements for both the J.D. degree as specified by the Law School and the M.S. degree as specified in this Bulletin.
The Law School approves courses from the Department of Computer Science that may count toward the J.D. degree, and the Computer Science Department approves courses from the Law School that may count toward the M.S. degree in Computer Science. In either case, approval may consist of a list applicable to all jointdegree students or may be tailored to each individual student program. No more than 45 units of approved courses may be counted toward both degrees. No more than 36 units of courses that originate outside the Law School may count toward the Law degree. To the extent that courses under this joint degree program originate outside of the Law School but count toward the Law degree, the Law School credits permitted under Section 17(1) of the Law School Regulations shall be reduced on a unitperunit basis, but not below zero. The maximum number of Law School credits that may be counted toward the M.S. in Computer Science is the greater of: (i) 12 units; or (ii) the maximum number of units from courses outside of the department that M.S. candidates in Computer Science are permitted to count toward the M.S. in the case of a particular student's individual program. Tuition and financial aid arrangements are normally through the school in which the student is then enrolled.
Teaching and Research Assistantships in Computer Science
Graduate student assistantships are available. Halftime assistants receive a tuition scholarship for 8, 9, or 10 units per quarter during the academic year, and in addition receive a monthly stipend.
Duties for halftime assistants during the academic year involve approximately 20 hours of work per week. Course assistants (CAs) help an instructor teach a course by conducting discussion sections, consulting with students, and grading examinations. Research assistants (RAs) help faculty and senior staff members with research in computer science. Many MS students are hired to staff teaching and research assistantships. However, MS students should not plan on being appointed to an assistantship.
Students with fellowships may have the opportunity to supplement their stipends by serving as graduate student assistants.
Doctor of Philosophy in Computer Science
The University’s basic requirements for the Ph.D. degree are outlined in the “Graduate Degrees” section of this bulletin. Department requirements are stated below.
Requirements
Applications to the Ph.D. program and all supporting documents must be submitted and received online by the published deadline. See the department's web site for admissions requirements and the application deadline. Changes or updates to the admission process are posted in September.
The following are general department requirements. Contact the Computer Science Ph.D. administrator for details.
 A student should plan and complete a coherent program of study covering the basic areas of computer science and related disciplines. The student’s adviser has primary responsibility for the adequacy of the program, which is subject to review by the Student Services Office.
 The first year of the Ph.D. program is spent working with 13 different professors on a rotating basis. The intent is to allow the firstyear Ph.D. student to work with a variety of professors before aligning with a permanent program adviser. Students who don't need the full year to find a professor to align with will have the option of aligning within the first or second quarter.
 The CS 300 Departmental Lecture Series seminar gives faculty the opportunity to explain their research to first year CS Ph.D. students. First year CS Ph.D. students are required to attend 2/3 of the classes to receive credit.
 A student must complete 135 course units for graduation. Computer Science Ph.D. students take 810 units per quarter. Credit for coursework done elsewhere (up to the maximum of 45 course units) may be applied to graduation requirements. Students must also take at least three units of coursework from four different faculty members. There are NO courses specifically required by the CS Ph.D. program except for the 1 unit CS 300 Departmental Lecture Series and CS 499 Advanced Reading and Research or its equivalent. At least one course must be taken for a letter grade. A 3.0 GPA must be maintained.
 Each student, to remain in the Ph.D. program, must satisfy the breadth requirement covering introductorylevel graduate material in major areas of computer science. A student must fulfill two breadtharea requirements in each of three general areas by the end of the second year in the program. If students have fulfilled the six breadtharea requirements, and taken courses from at least four different faculty members, they are eligible to apply for candidacy prior to the second year in the program. An uptodate list of courses that satisfy the breadth requirements can be found on the department's web site. The student must completely satisfy the breadth requirement by the end of the second year in the program and must pass a qualifying exam in the general area of their expected dissertation by the end of the third year in the program.

University policy requires that all doctoral students declare candidacy by the end of the sixth quarter in residence, excluding summers. However, after aligning with a permanent adviser, passing six breadth requirements, and taking classes with four different faculty, a student is eligible to file for candidacy prior to the sixth quarter. The candidacy form serves as a "contract" between the department and the student. The department acknowledges that the student is a bona fide candidate for the Ph.D. and agrees that the program submitted by the student is sufficient to warrant granting the Ph.D. upon completion. Candidacy expires five years from the date of submission of the candidacy form, rounded to the end of the quarter. In special cases, the department may extend a student's candidacy, but is under no obligation to do so.
 Each student is required to pass a qualifying exam in their area by the end of their third year in the program. A student may only take the qualifying exam twice. If the student fails the qualifying exam a second time, the Ph.D. program committee is convened to discuss the student's lack of reasonable academic progress. Failing the exam a second time is cause for dismissal from the Computer Science Ph.D. program and the committee meets to discuss the final outcome for the student.
 As part of the training for the Ph.D., the student is also required to complete at least four units (a unit is ten hours per week for one quarter) as a course assistant or instructor for courses in Computer Science numbered 100 or above.
 The Reading Committee form and Oral Thesis Proposal must be submitted within one year of passing the qualifying exam.
 The Oral Thesis Proposal must be submitted before the end of the fourth year.
 The most important requirement is the dissertation. After passing the required qualifying examination, each student must secure the agreement of a member of the department faculty to act as the dissertation adviser. The dissertation adviser is often the student's program adviser.
 The student must pass a University oral examination in the form of a defense of the dissertation. This is typically held after all or a substantial portion of the dissertation research has been completed.
 The student is expected to demonstrate the ability to present scholarly material orally in the dissertation defense.
 The dissertation must be accepted by a reading committee composed of the principal dissertation adviser, a second member from within the department, and a third member chosen from within or outside of the University. The department requires at least two committee members to be affiliated with the Computer Science department. The principal adviser and at least one of the other committee members must be Academic Council members.
Guidelines for Reasonable Progress
By the end of the first academic year, a student should be aligned with a permanent research advisor.
By Spring Quarter of the second year, a student should complete all six breadth area requirements, two breadth area requirements in each of three areas, and file for candidacy.
By Spring Quarter of the third year, a student should pass a Qualifying Examination in the area of his or her intended dissertation.
Within one year of passing the Qualifying Examination, a student should submit a signed Reading Committee Form.
By Spring Quarter of the fourth year, a student should submit the Thesis Proposal Form.
The teaching requirement may be satisfied at any time. The research requirement is routinely satisfied by participation in research throughout the student's career.
Ph.D. Minor in Computer Science
For a minor in Computer Science, a candidate must complete 20 units of Computer Science coursework numbered 200 or above, except for the 100level courses listed on the Ph.D. Minor Worksheet (pdf). At least three of the courses must be master’s core courses to provide breadth and one course numbered 300 or above to provide depth. One of the courses taken must include a significant programming project to demonstrate programming efficiency. Courses must be taken for a letter grade and passed with a grade of 'B' or better. Applications for a minor in Computer Science are submitted at the same time as admission to candidacy.
Graduate Advising Expectations
The Department of Computer Science is committed to providing academic advising in support of graduate student scholarly and professional development. When most effective, this advising relationship entails collaborative and sustained engagement by both the adviser and the advisee. As a best practice, advising expectations should be periodically discussed and reviewed to ensure mutual understanding. Both the adviser and the advisee are expected to maintain professionalism and integrity.
Faculty advisers guide students in key areas such as selecting courses, designing and conducting research, developing of teaching pedagogy, navigating policies and degree requirements, and exploring academic opportunities and professional pathways.
Graduate students are active contributors to the advising relationship, proactively seeking academic and professional guidance and taking responsibility for informing themselves of policies and degree requirements for their graduate program.
For a statement of University policy on graduate advising, see the "Graduate Advising" section of this bulletin.
Emeriti (Professors): Tom Binford, David Cheriton, David Dill*, Edward Feigenbaum, Richard Fikes, Hector GarciaMolina*, Donald E. Knuth*, JeanClaude Latombe, Marc Levoy*, Zohar Manna, Teresa Meng, William F. Miller, Nils J. Nilsson, Serge Plotkin, Vaughan Pratt, Eric Roberts, Ken Salisbury, Yoav Shoham, Jeffrey D. Ullman, Gio Wiederhold, Terry Winograd,
Chair: Alex Aiken
Associate Chair for Education: Mehran Sahami
Professors: Maneesh Agrawala, Alex Aiken, Dan Boneh, Moses Charikar, Ronald P. Fedkiw, Leonidas J. Guibas, Patrick Hanrahan, John Hennessy, Mark A. Horowitz, Doug James, Dan Jurafsky, Oussama Khatib, Monica Lam, James Landay, FeiFei Li, Christopher Manning, David Mazieres, Nick McKeown, John Mitchell, Subhasish Mitra, Kunle Olukotun, John Ousterhout, Balaji Prabhakar, Omer Reingold, Mendel Rosenblum, Tim Roughgarden (leaving Stanford 12/31/18), Jennifer Widom
Associate Professors: Gill Bejerano, Ron Dror, Dawson Engler, Michael Genesereth, Noah Goodman, Sachin Katti, Christoforos Kozyrakis, Jure Leskovec, Philip Levis, Christopher Re, Silvio Savarese
Assistant Professors: Peter Bailis, Michael Bernstein, Jeannette Bogh, Emma Brunskill, Zakir Durumeric, Stefano Ermon, Kayvon Fatahalian, Anshul Kundaje, Percy Liang, Tengyu Ma, Chris Piech, Aviad Rubinstein, Dorsa Sadigh, LiYang Tan, Greg Valiant, Keith Winstein, Mary Wootters, Matei Zaharia
Professors (Research): Clark Barrett, William J. Dally
Professor (Teaching): Mehran Sahami
Associate Professor (Teaching):
Courtesy Professors: Russ Altman, Stephen Boyd, Jacob Fox, Patrick Hayden, Michael Levitt, Roy Pea, Russell Poldrak
Courtesy Associate Professors: Ashish Goel, Allison Okamura, Chris Potts, Ge Wang,
Courtesy Assistant Professors: John Duchi, Sean Follmer, Surya Ganguli, Sharad Goel, Thomas Icard, Ramesh Johari, Mykel Kochenderfer, Stephen Montgomery, Aaron Sidford, Camille Utterback, Gordon Wetzstein, Dan Yamins, James Zou
Lecturers: Gerald Cain, Chris Gregg, Cynthia Lee, Nicholas J. Parlante, Keith Schwarz, Marty Stepp, Nick Troccoli, Patrick Young, Julie Zelenski
Adjunct Professors: Pei Cao, Stuart Card, Tom Dean, Daphne Koller, Bill MacCartney, P. Pandurang Nayak, Andrew Ng, Richard Socher, Sebastian Thrun
Visiting Professors: Thomas Funkhouser (will end 8/31/18)
Visiting Assistant Professors: Lucjan Hanzlik, Hamed Nemati, Marco Patrignani, Giancarlo Pellegrino, Michael Zollhoefer
Secondary Appointment in CS: Anshul Kundaje
* Recalled to active duty.
The Bing Overseas Studies Program manages Stanford study abroad programs for Stanford undergraduates. Students should consult their department or program's student services office for applicability of Overseas Studies courses to a major or minor program.
The Bing Overseas Studies course search site displays courses, locations, and quarters relevant to specific majors.
For course descriptions and additional offerings, see the listings in the Stanford Bulletin's ExploreCourses or Bing Overseas Studies.
Units  

OSPKYOTO 109K  Probability for Computer Scientists  5 
OSPKYOTO 144K  Introduction to Computer Networking  34 
Courses
CS 1C. Introduction to Computing at Stanford. 1 Unit.
For those with limited experience with computers or who want to learn more about Stanford's computing environment. Topics include: computer maintenance and security, computing resources, Internet privacy, and copyright law. Onehour lecture/demonstration in dormitory clusters prepared and administered weekly by the Resident Computer Consultant (RCC). Final project. Not a programming course.
Same as: VPTL 1
CS 1U. Practical Unix. 1 Unit.
A practical introduction to using the Unix operating system with a focus on Linux command line skills. Class will consist of video tutorials and weekly handson lab sections. Topics include: grep and regular expressions, ZSH, Vim and Emacs, basic and advanced GDB features, permissions, working with the file system, revision control, Unix utilities, environment customization, and using Python for shell scripts. Topics may be added, given sufficient interest. Course website: http://cs1u.stanford.edu.
CS 7. Personal Finance for Engineers. 1 Unit.
Introduction to the fundamentals and analysis specifically needed by engineers to make informed and intelligent financial decisions. Course will focus on actual industrybased financial information from technology companies and realistic financial issues. Topics include: behavioral finance, budgeting, debt, compensation, stock options, investing and real estate. No prior finance or economics experience required.
CS 9. ProblemSolving for the CS Technical Interview. 1 Unit.
This course will prepare students to interview for software engineering and related internships and fulltime positions in industry. Drawing on multiple sources of actual interview questions, students will learn key problemsolving strategies specific to the technical/coding interview. Students will be encouraged to synthesize information they have learned across different courses in the major. Emphasis will be on the oral and combination writtenoral modes of communication common in coding interviews, but which are unfamiliar settings for problem solving for many students. Prerequisites: CS 106B or X.
CS 11SI. How to Make VR: Introduction to Virtual Reality Design and Development. 2 Units.
In this handson, experiential course, students will design and develop virtual reality applications. You'll learn how to use the Unity game engine, the most popular platform for creating immersive applications. The class will teach the design bestpractices and the creation pipeline for VR applications, and will include tangents that explore sister fields such as augmented reality and 360 video. Students will work in groups to present a final project in building an application for the Oculus Go headset. Enrollment is limited and by rolling application only. Prerequisite: CS 106A or equivalent.
CS 17SI. Frontiers in Reproductive Technology. 2 Units.
In the last decade, there have been two intersecting trends of major significance to human reproduction. On the one hand, the rapidly declining cost of sequencing human genomes has enabled an explosion of information about polygenic complex diseases as reported in ever larger GWA studies. In parallel, new (statistical, computational, and wetlab) techniques in single cell sequencing technology have emerged that enable high resolution sequence information in ever smaller sample sizes  including embryos. It is now technically and financially feasible to rankorder preimplantation embryos according to polygenic disease risk. This course brings together experts from the computer science, statistical, wet lab, and clinical domains to discuss opportunities to reduce the risk of disease in human embryos, and expand access to IVF to a broader population. Prerequisites: A desire to develop (and deploy) technology in the fertility space. Either: (1) a strong programming and/or math background or (2) a strong biology/clinical background.
CS 18SI. Geopolitical Ramifications of Technological Advances. 2 Units.
William Janeway describes the relationship between technological development, capital markets, and the government as a threeplayer game. Scientists and entrepreneurs develop breakthrough innovations, aided and amplified by financial capital. Meanwhile, the government serves to either subsidize (as in wartime) or stymie (through regulations) technological development. Often, the advances in economic and military might due to technological advances lead to conflicts between competing countries ¿ whether Japan and the U.S. in the 1970s or China and the U.S. today. Within societies, technological innovation drives outcomes like increased life expectancy, wealth inequality, and in rare cases changes to paradigms of daily life. In this discussiondriven course, we will explore the ripple effects that technological developments have had and will continue to have on the geopolitical world stage, focusing on trends we as computer scientists are uniquely positioned to understand and predict the ramifications of. Prerequisites: The following are not required but will facilitate understanding of the topics covered: computer systems (CS110+), artificial intelligence (CS221, CS231N, CS229, or CS230), and theory (CS161, cryptography).
CS 19SI. Evaluating Education Technology: Developing Frameworks to Make Sense of EdTech. 12 Unit.
This seminar assesses the impact of education technologies on learners, teachers, and education systems. Through weekly case studies of ed tech ventures, students will experience and evaluate popular education technologies such as VR,npersonalized learning, makerspaces, and MOOCs. Additionally, students will develop a toolkit of concepts including critical pedagogy, constructivism, behaviorism, and social reconstructionism which they can use to assess education technologies and their personal contributions to the field. This course will focus largely on ventures in the U.S., but the frameworks developed will be applicable to equity and access issues in education throughout the world.
CS 21SI. AI for Social Good. 2 Units.
Students will learn about and apply cuttingedge artificial intelligence techniques to realworld social good spaces (such as healthcare, government, education, and environment). Taught jointly by CS+Social Good and the Stanford AI Group, the aim of the class is to empower students to apply these techniques outside of the classroom. The class will focus on techniques from machine learning and deep learning, including regression, support vector machines (SVMs), neural networks, convolutional neural networks (CNNs), and recurrent neural networks (RNNs). The course alternates between lectures on machine learning theory and discussions with invited speakers, who will challenge students to apply techniques in their social good domains. Students complete weekly coding assignments reinforcing machine learning concepts and applications. Prerequisites: programming experience at the level of CS107, mathematical fluency at the level of CS103, comfort with probability at the level of CS109 (or equivalent). Application required for enrollment.
CS 22A. The Social & Economic Impact of Artificial Intelligence. 1 Unit.
(Formerly IPS 200.) Recent advances in computing may place us at the threshold of a unique turning point in human history. Soon we are likely to entrust management of our environment, economy, security, infrastructure, food production, healthcare, and to a large degree even our personal activities, to artificially intelligent computer systems. The prospect of "turning over the keys" to increasingly autonomous systems raises many complex and troubling questions. How will society respond as versatile robots and machinelearning systems displace an everexpanding spectrum of blue and whitecollar workers? Will the benefits of this technological revolution be broadly distributed or accrue to a lucky few? How can we ensure that these systems respect our ethical principles when they make decisions at speeds and for rationales that exceed our ability to comprehend? What, if any, legal rights and responsibilities should we grant them? And should we regard them merely as sophisticated tools or as a newly emerging form of life? The goal of CS22 is to equip students with the intellectual tools, ethical foundation, and psychological framework to successfully navigate the coming age of intelligent machines.
Same as: INTLPOL 200
CS 41. Hap.py Code: The Python Programming Language. 2 Units.
The fundamentals and contemporary usage of the Python programming language. Primary focus on developing best practices in writing Python and exploring the extensible and unique parts of Python that make it such a powerful language. Topics include: data structures (e.g. lists and dictionaries) and characteristic pythonic conventions such as list comprehensions, anonymous functions, iterables, and powerful builtins (e.g. map, filter, zip). We will also cover objectoriented design, the standard library, and common thirdparty packages (e.g. requests, pillow). Time permitting, we will explore modern Pythonbased web frameworks, data science toolkits (numpy, scipy, pandas) and project distribution. Prerequisite: 106B/X or equivalent. Application required.
CS 43. Functional Programming Abstractions. 2 Units.
This course explores the philosophy and fundamentals of functional programming, focusing on the Haskell language, its theoretical underpinnings, and practical applications. Topics include functional abstractions (function composition, higherorder functions), immutable data structures, type systems, and various functional design patterns (monads, etc). Prerequisites: CS107 (or equivalent experience).
CS 45N. Computers and Photography: From Capture to Sharing. 34 Units.
Preference to freshmen with experience in photography and use of computers. Elements of photography, such as lighting, focus, depth of field, aperture, and composition. How a photographer makes photos available for computer viewing, reliably stores them, organizes them, tags them, searches them, and distributes them online. No programming experience required. Digital SLRs and editing software will be provided to those students who do not wish to use their own.
CS 47. CrossPlatform Mobile Development. 2 Units.
The fundamentals of crossplatform mobile application development using the React Native framework (RN). Primary focus on developing best practices in creating apps for both iOS and Android by using Javascript and existing web + mobile development paradigms. Students will explore the unique aspects that made RN a primary tool for mobile development within Facebook, Instagram, Walmart, Tesla, and UberEats. Skills developed over the course will be consolidated by the completion of a final project. Required Prerequisites: CS106A/B. Website: https://web.stanford.edu/class/cs47/.
CS 49N. Using Bits to Control Atoms. 3 Units.
This is a crash course in how to use a strippeddown computer system about the size of a credit card (the rasberry pi computer) to control as many different sensors as we can implement in ten weeks, including LEDs, motion sensors, light controllers, and accelerometers. The ability to fearlessly grab a set of hardware devices, examine the data sheet to see how to use it, and stitch them together using simple code is a secret weapon that softwareonly people lack, and allows you to build many interesting gadgets. We will start with a "bare metal'' system  no operating system, no support  and teach you how to read device data sheets describing sensors and write the minimal code needed to control them (including how to debug when things go wrong, as they always do). This course differs from most in that it is deliberately mostly about what and why rather than how  our hope is that the things you are able at the end will inspire you to follow the rest of the CS curriculum to understand better how things you've used work. Prerequisites: knowledge of the C programming language. A Linux or Mac laptop that you are comfortable coding on.
CS 50. Using Tech for Good. 2 Units.
Students in the class will work in small teams to implement highimpact projects for partner organizations. Taught by the CS+Social Good team, the aim of the class is to empower you to leverage technology for social good by inspiring action, facilitating collaboration, and forging pathways towards global change. Recommended: CS 106B, CS 42 or 142. Class is open to students of all years. May be repeated for credit. Cardinal Course certified by the Haas Center.
CS 51. CS + Social Good Studio: Designing Social Impact Projects. 2 Units.
Introduces students to the tech + social good space. Students work in small teams to develop highimpact projects around problem domains provided by partner organizations, under the guidance and support of design/technical coaches from industry and nonprofit domain experts. Main class components are workshops, community discussions, guest speakers and mentorship. Studio provides an outlet for students to create social change through CS while engaging in the full product development cycle on realworld projects. The class culminates in a showcase where students share their project ideas and Minimum Viable Product prototypes with stakeholders and the public. Prerequisite: CS 147, equivalent experience, or consent of instructors.
CS 52. CS + Social Good Studio. 2 Units.
Continuation of CS51 (CS + Social Good Studio). Teams enter the quarter having completed and tested a minimal viable product (MVP) with a welldefined target user, and a community partner. Students will learn to apply scalable technical frameworks, methods to measure social impact, tools for deployment, user acquisition techniques and growth/exit strategies. The purpose of the class is to facilitate students to build a sustainable infrastructure around their product idea. CS52 will host mentors, guest speakers and industry experts for various workshops and coachingsessions. The class culminates in a showcase where students share their projects with stakeholders and the public. Prerequisite: CS 51, or consent of instructor.
CS 53. DISCUSSIONS IN TECH FOR GOOD. 1 Unit.
This course introduces students to applications of technology to social impact through a weekly discussion and speaker series. Invited speakers come from industry, academia, and nonprofit organizations. They will share their work in social impact technology, thoughts on issues of ethics in technology, and personal career paths. Topics span a broad variety of social issues  from education to healthcare to activism  and help students better understand how to lead careers in using computer science for social good.
CS 56N. Great Discoveries and Inventions in Computing. 3 Units.
This seminar will explore some of both the great discoveries that underlie computer science and the inventions that have produced the remarkable advances in computing technology. Key questions we will explore include: What is computable? How can information be securely communicated? How do computers fundamentally work? What makes computers fast? Our exploration will look both at the principles behind the discoveries and inventions, as well as the history and the people involved in those events. Some exposure to programming will be helpful, but it not strictly necessary.
CS 58. You Say You Want a Revolution. 2 Units.
This projectbased course will give creative students an opportunity to work together on revolutionary change leveraging blockchain technology. The course will provide opportunities for students to become operationally familiar with blockchain concepts, supported by presentation of blockchain fundamentals at a level accessible to those with or without a strong technical background. Specific topics include: incentives, ethics, cryptocommons, values, FOMO 3D, risks, implications and social good. Students will each discover a new possible usecase for blockchain and prototype their vision for the future accordingly. Application and impact areas may come from medicine, law, economics, history, anthropology, or other sectors. Student diversity of background will be valued highly.
Same as: Blockchain Edition
CS 80Q. Race and Gender in Silicon Valley. 3 Units.
This course interrogates the social challenges of Silicon Valley, a place of privilege, privation, and precarity, and encourages students to perform their own ethnographical studies through writing, coding, engagement, digital culture, and social practice. We will learn about the importance of technology in shaping our critical understanding of social conditions in our community and the global economy.
Same as: AFRICAAM 80Q
CS 83. Playback Theater For Research. 3 Units.
Playback combines elements of theater, community work and storytelling. In a playback show, a group of actors and musicians create an improvised performance based on the audience's personal stories. A playback show brings about a powerful listening and sharing experience. During the course, we will tell, listen, play together, and train in playback techniques. We will write diaries to process our experience in the context of education and research. The course is aimed to strengthen listening abilities, creativity and the collaborative spirit, all integral parts of doing great science. In playback, as in research, we are always moving together, from the known, to the unknown, and back. There is limited enrollment for this class. Application is required.
CS 93. Teaching AI. 1 Unit.
For graduate students who are TAing an AI course. This course prepares new AI section leaders to teach, write, and evaluate AI content. In class, you will be evaluating final projects individually and as a group. You will have discussions criticizing papers and assigning grades to them. You will analyze and solve discussion session problems on the board, explain algorithmsnlike backpropagation, and learn how to give constructive feedback to students. The class will also include a guest speaker who will give teaching advice and talk about AI. Focus is on teaching skills, techniques, and final projects grading. The class meets once a week for the first 6 weeks of the quarter.
CS 100A. Problemsolving Lab for CS106A. 1 Unit.
Additional problem solving practice for the introductory CS course CS 106A. Sections are designed to allow students to acquire a deeper understanding of CS and its applications, work collaboratively, and develop a mastery of the material. Limited enrollment, permission of instructor required. Concurrent enrollment in CS 106A required.
CS 100B. Problemsolving Lab for CS106B. 1 Unit.
Additional problem solving practice for the introductory CS course CS106B. Sections are designed to allow students to acquire a deeper understanding of CS and its applications, work collaboratively, and develop a mastery of the material. Limited enrollment, permission of instructor required. Concurrent enrollment in CS 106B required.
CS 101. Introduction to Computing Principles. 35 Units.
Introduces the essential ideas of computing: data representation, algorithms, programming "code", computer hardware, networking, security, and social issues. Students learn how computers work and what they can do through handson exercises. In particular, students will see the capabilities and weaknesses of computer systems so they are not mysterious or intimidating. Course features many small programming exercises, although no prior programming experience is assumed or required. CS101 is not a complete programming course such as CS106A. CS101 is effectively an alternative to CS105. A laptop computer is recommended for the inclass exercises.
CS 102. Big Data  Tools and Techniques. 34 Units.
Aimed at nonCS undergraduate and graduate students who want to learn the basics of big data tools and techniques and apply that knowledge in their areas of study. Many of the world's biggest discoveries and decisions in science, technology, business, medicine, politics, and society as a whole, are now being made on the basis of collecting and analyzing large volumes of data. At the same time, it is surprisingly easy to make errors or come to false conclusions from data analysis alone. This course provides a broad and practical introduction to big data: data analysis techniques including databases, data mining, and machine learning; data analysis tools including spreadsheets, relational databases and SQL, Python, and R; data visualization techniques and tools; pitfalls in data collection and analysis. Tools and techniques are handson but at a cursory level, providing a basis for future exploration and application. Prerequisites: comfort with basic logic and mathematical concepts, along with high school AP computer science, CS106A, or other equivalent programming experience.
CS 103. Mathematical Foundations of Computing. 35 Units.
What are the theoretical limits of computing power? What problems can be solved with computers? Which ones cannot? And how can we reason about the answers to these questions with mathematical certainty? This course explores the answers to these questions and serves as an introduction to discrete mathematics, computability theory, and complexity theory. At the completion of the course, students will feel comfortable writing mathematical proofs, reasoning about discrete structures, reading and writing statements in firstorder logic, and working with mathematical models of computing devices. Throughout the course, students will gain exposure to some of the most exciting mathematical and philosophical ideas of the late nineteenth and twentieth centuries. Specific topics covered include formal mathematical proofwriting, propositional and firstorder logic, set theory, binary relations, functions (injections, surjections, and bijections), cardinality, basic graph theory, the pigeonhole principle, mathematical induction, finite automata, regular expressions, the MyhillNerode theorem, contextfree grammars, Turing machines, decidable and recognizable languages, selfreference and undecidability, verifiers, and the P versus NP question. Students with significant proofwriting experience are encouraged to instead take CS154. Students interested in extra practice and support with the course are encouraged to concurrently enroll in CS103A. Prerequisite: CS106B or equivalent. CS106B may be taken concurrently with CS103.
CS 103A. Mathematical Problemsolving Strategies. 1 Unit.
Problem solving strategies and techniques in discrete mathematics and computer science. Additional problem solving practice for CS103. Inclass participation required. Prerequisite: consent of instructor. Corequisite: CS103.
CS 105. Introduction to Computers. 35 Units.
For nontechnical majors. What computers are and how they work. Practical experience in programming. Construction of computer programs and basic design techniques. A survey of Internet technology and the basics of computer hardware. Students in technical fields and students looking to acquire programming skills should take 106A or 106X. Students with prior computer science experience at the level of 106 or above require consent of instructor. Prerequisite: minimal math skills.
CS 106A. Programming Methodology. 35 Units.
Introduction to the engineering of computer applications emphasizing modern software engineering principles: objectoriented design, decomposition, encapsulation, abstraction, and testing. Emphasis is on good programming style and the builtin facilities of respective languages. No prior programming experience required. Alternative versions of CS106A may be available which cover most of the same material but in different programming languages.
Same as: ENGR 70A
CS 106AJ. Programming Methodology in JavaScript. 35 Units.
Introduction to the engineering of computer applications emphasizing modern software engineering principles: objectoriented design, decomposition, encapsulation, abstraction, and testing. Uses the JavaScript programming language. Emphasis is on good programming style and the builtin facilities of the JavaScript language. No prior programming experience required. This course covers most of the same material as CS106A Section 1 in Java and CS 106A Section 3 in Python, but this course uses the JavaScript programming language. To enroll in this class, enroll in CS 106A Section 2 for Fall Qtr. May be taken for 3 units by grad students. Satisfies WAYFR requirement.
CS 106AP. Programming Methodology in Python. 35 Units.
Introduction to the engineering of computer applications in Python, emphasizing modern software engineering principles: decomposition, abstraction, testing and good programming style. This course covers most of the same material as the other versions of CS106A, but using the Python programming language which is popular for general engineering and web development. Required readings will all be available for free on the web. Students are encouraged to bring a laptop to lecture to do the live exercises which are integrated with lecture. No prior programming experience required. To enroll in this class, enroll in CS 106A Section 3. Satisfies WAYFR requirement.
CS 106B. Programming Abstractions. 35 Units.
Abstraction and its relation to programming. Software engineering principles of data abstraction and modularity. Objectoriented programming, fundamental data structures (such as stacks, queues, sets) and datadirected design. Recursion and recursive data structures (linked lists, trees, graphs). Introduction to time and space complexity analysis. Uses the programming language C++ covering its basic facilities. Prerequisite: 106A or equivalent.
Same as: ENGR 70B
CS 106E. Practical Exploration of Computing. 34 Units.
A follow up class to CS106A for nonmajors which will both provide practical web programming skills and cover essential computing topics including computer security and privacy. Additional topics will include digital representation of images and music, an exploration of how the Internet works, and a look at the internals of the computer. Students taking the course for 4 units will be required to carry out supplementary programming assignments in addition to the course's regular assignments. Prerequisite: 106A or equivalent.
CS 106L. Standard C++ Programming Laboratory. 1 Unit.
Supplemental lab to 106B and 106X. Additional features of standard C++ programming practice. Possible topics include advanced C++ language features, standard libraries, STL containers and algorithms, object memory management, operator overloading, and inheritance. Prerequisite: consent of instructor. Corequisite: 106B or 106X.
CS 106S. Coding for Social Good. 1 Unit.
Survey course on applications of fundamental computer science concepts from CS 106B/X to problems in the social good space (such as health, government, education, and environment). Each week consists of inclass activities designed by student groups, local tech companies, and nonprofits. Introduces students to JavaScript and the basics of web development. Topics have included mental health chatbots, tumor classification with basic machine learning, sentiment analysis of tweets on refugees, and storytelling through virtual reality. Corequisite: 106B or 106X.
CS 106X. Programming Abstractions (Accelerated). 35 Units.
Intensive version of 106B for students with a strong programming background interested in a rigorous treatment of the topics at an accelerated pace. Significant amount of additional advanced material and substantially more challenging projects. Some projects may relate to CS department research. Prerequisite: excellence in 106A or equivalent, or consent of instructor.
Same as: ENGR 70X
CS 107. Computer Organization and Systems. 35 Units.
Introduction to the fundamental concepts of computer systems. Explores how computer systems execute programs and manipulate data, working from the C programming language down to the microprocessor. Topics covered include: the C programming language, data representation, machinelevel code, computer arithmetic, elements of code compilation, memory organization and management, and performance evaluation and optimization. Prerequisites: 106B or X, or consent of instructor.
CS 107A. Problemsolving Lab for CS107. 1 Unit.
Additional problem solving practice for the introductory CS course CS107. Sections are designed to allow students to acquire a deeper understanding of CS and its applications, work collaboratively, and develop a mastery of the material. Limited enrollment, permission of instructor required. Concurrent enrollment in CS 107 required.
CS 107E. Computer Systems from the Ground Up. 35 Units.
Introduction to the fundamental concepts of computer systems through bare metal programming on the Raspberry Pi. Explores how five concepts come together in computer systems: hardware, architecture, assembly code, the C language, and software development tools. Students do all programming with a Raspberry Pi kit and several addons (LEDs, buttons). Topics covered include: the C programming language, data representation, machinelevel code, computer arithmetic, compilation, memory organization and management, debugging, hardware, and I/O. Prerequisite: 106B or X, and consent of instructor. There is a $75 required course fee.
CS 108. ObjectOriented Systems Design. 34 Units.
Software design and construction in the context of large OOP libraries. Taught in Java. Topics: OOP design, design patterns, testing, graphical user interface (GUI) OOP libraries, software engineering strategies, approaches to programming in teams. Prerequisite: 107.
CS 109. Introduction to Probability for Computer Scientists. 35 Units.
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. Prerequisites: 103, 106B or X, multivariate calculus at the level of MATH 51 or CME 100 or equivalent.
CS 110. Principles of Computer Systems. 35 Units.
Principles and practice of engineering of computer software and hardware systems. Topics include: techniques for controlling complexity; strong modularity using clientserver design, virtual memory, and threads; networks; atomicity and coordination of parallel activities; security, and encryption; and performance optimizations. Prerequisite: 107.
CS 124. From Languages to Information. 34 Units.
Extracting meaning, information, and structure from human language text, speech, web pages, social networks. Methods include: string algorithms, edit distance, language modeling, the noisy channel, machine learning classifiers, inverted indices, collaborative filtering, neural embeddings, PageRank. Applications such as question answering, sentiment analysis, information retrieval, text classification, social network models, spell checking, recommender systems, chatbots. Prerequisites: CS103, CS107, CS109.
Same as: LINGUIST 180, LINGUIST 280
CS 131. Computer Vision: Foundations and Applications. 34 Units.
Robots that can navigate space and perform duties, search engines that can index billions of images and videos, algorithms that can diagnose medical images for diseases, or smart cars that can see and drive safely: Lying in the heart of these modern AI applications are computer vision technologies that can perceive, understand and reconstruct the complex visual world. This course is designed for students who are interested in learning about the fundamental principles and important applications of computer vision. Course will introduce a number of fundamental concepts in computer vision and expose students to a number of realworld applications, plus guide students through a series of projects such that they will get to implement cuttingedge computer vision algorithms. Prerequisites: Students should be familiar with Python (i.e. have programmed in Python before) and Linux; plus Calculus & Linear Algebra.
CS 140. Operating Systems and Systems Programming. 34 Units.
Operating systems design and implementation. Basic structure; synchronization and communication mechanisms; implementation of processes, process management, scheduling, and protection; memory organization and management, including virtual memory; I/O device management, secondary storage, and file systems. Prerequisite: CS 110.
CS 140E. Operating systems design and implementation. 34 Units.
Students will implement a simple, clean operating system (virtual memory, processes, file system) in the C programming language, on a rasberry pi computer and use the result to run a variety of devices and implement a final project. All hardware is supplied by the instructor, and no previous experience with operating systems, raspberry pi, or embedded programming is required.
CS 141. Introduction to Computer Sound. 3 Units.
Core mathematics and methods for computer sound with applications to computer science. Background on digital signal processing; time and frequencydomain methods. Projectfocussed exploration of computer sound areas: fundamentals of sound analysis & synthesis, robotics and learning (sound features, filterbanks & deep learning, perception, localization, tracking, manipulation), speech (recognition, synthesis), virtual and augmented reality (3D auralization, HRTFs, reverberation), computational acoustics (wave simulation, physicsbased modeling, animation sound), computer music (music synthesis, instrument modeling, audio effects, historical aspects), games (game audio, music and sound design, middleware), hardware acceleration (architectures, codecs, synthesizers). Prerequisite: CS 106A or equivalent programming experience.
CS 142. Web Applications. 3 Units.
Concepts and techniques used in constructing interactive web applications. Browserside web facilities such as HTML, cascading stylesheets, the document object model, and JavaScript frameworks and Serverside technologies such as serverside JavaScript, sessions, and objectoriented databases. Issues in web security and application scalability. New models of web application deployment. Prerequisites: CS 107 and CS 108.
CS 143. Compilers. 34 Units.
Principles and practices for design and implementation of compilers and interpreters. Topics: lexical analysis; parsing theory; symbol tables; type systems; scope; semantic analysis; intermediate representations; runtime environments; code generation; and basic program analysis and optimization. Students construct a compiler for a simple objectoriented language during course programming projects. Prerequisites: 103 or 103B, and 107.
CS 144. Introduction to Computer Networking. 34 Units.
Principles and practice. Structure and components of computer networks, packet switching, layered architectures. Applications: web/http, voiceoverIP, p2p file sharing and socket programming. Reliable transport: TCP/IP, reliable transfer, flow control, and congestion control. The network layer: names and addresses, routing. Local area networks: ethernet and switches. Wireless networks and network security. Prerequisite: CS 110.
CS 145. Data Management and Data Systems. 34 Units.
Introduction to the use, design, and implementation of database and dataintensive systems, including data models; schema design; data storage; query processing, query optimization, and cost estimation; concurrency control, transactions, and failure recovery; distributed and parallel execution; semistructured databases; and data system support for advanced analytics and machine learning. Prerequisites: 103 and 107 (or equivalent).
CS 146. Introduction to Game Design and Development. 3 Units.
This projectbased course provides an introduction to game design covering topics like 2D/3D Art, Audio, User Interfaces, Production, Narrative Design, Marketing, and Publishing. Speakers from the profession will provide relevant context during a weekly seminar. Weekly assignments include indepth materials and require students to independently create small video games. Classroom meetings will be used to foster student project discussions, and deepen understanding of material. The course culminates with students forming project teams to create a final video game. Assignments will be completed within the Unity game development engine; prior Unity experience is not required. Given class size limitations, an online survey will be distributed before class starts and students will be selected so to achieve a diverse class composition. Prerequisite: CS 106A or equivalent programming experience.
CS 147. Introduction to HumanComputer Interaction Design. 35 Units.
Introduces fundamental methods and principles for designing, implementing, and evaluating user interfaces. Topics: usercentered design, rapid prototyping, experimentation, direct manipulation, cognitive principles, visual design, social software, software tools. Learn by doing: work with a team on a quarterlong design project, supported by lectures, readings, and studios. Prerequisite: 106B or X or equivalent programming experience. Recommended that CS Majors have also taken one of 142, 193P, or 193A.
CS 148. Introduction to Computer Graphics and Imaging. 34 Units.
Introductory prerequisite course in the computer graphics sequence introducing students to the technical concepts behind creating synthetic computer generated images. Focuses on using OpenGL to create visual imagery, as well as an understanding of the underlying mathematical concepts including triangles, normals, interpolation, texture mapping, bump mapping, etc. Course will cover fundamental understanding of light and color, as well as how it impacts computer displays and printers. Class will discuss more thoroughly how light interacts with the environment, constructing engineering models such as the BRDF, plus various simplifications into more basic lighting and shading models. Also covers ray tracing technology for creating virtual images, while drawing parallels between ray tracers and real world cameras to illustrate various concepts. Antialiasing and acceleration structures are also discussed. The final class miniproject consists of building out a ray tracer to create visually compelling images. Starter codes and code bits will be provided to aid in development, but this class focuses on what you can do with the code as opposed to what the code itself looks like. Therefore grading is weighted toward in person "demos" of the code in action  creativity and the production of impressive visual imagery are highly encouraged. Prerequisites: CS 107, MATH 51.
CS 149. Parallel Computing. 34 Units.
This course is an introduction to parallelism and parallel programming. Most new computer architectures are parallel; programming these machines requires knowledge of the basic issues of and techniques for writing parallel software. Topics: varieties of parallelism in current hardware (e.g., fast networks, multicore, accelerators such as GPUs, vector instruction sets), importance of locality, implicit vs. explicit parallelism, shared vs. nonshared memory, synchronization mechanisms (locking, atomicity, transactions, barriers), and parallel programming models (threads, data parallel/streaming, MapReduce, Apache Spark, SPMD, message passing, SIMT, transactions, and nested parallelism). Significant parallel programming assignments will be given as homework. The course is open to students who have completed the introductory CS course sequence through 110.
CS 151. Logic Programming. 3 Units.
Logic Programming is a style of programming based on symbolic logic. In writing a logic program, the programmer describes the application area of the program (as a set of logical sentences) without reference to the internal data structures or operations of the system executing the program. In this regard, a logic program is more of a specification than an implementation; and logic programs are often called runnable specifications. This course introduces basic logic programming theory, current technology, and examples of common applications, notably deductive databases, logical spreadsheets, enterprise management, computational law, and game playing. Work in the course takes the form of readings and exercises, weekly programming assignments, and a termlong project. Prerequisite: CS 106B or equivalent.
CS 154. Introduction to Automata and Complexity Theory. 34 Units.
This course provides a mathematical introduction to the following questions: What is computation? Given a computational model, what problems can we hope to solve in principle with this model? Besides those solvable in principle, what problems can we hope to efficiently solve? In many cases we can give completely rigorous answers; in other cases, these questions have become major open problems in computer science and mathematics. By the end of this course, students will be able to classify computational problems in terms of their computational complexity (Is the problem regular? Not regular? Decidable? Recognizable? Neither? Solvable in P? NPcomplete? PSPACEcomplete?, etc.). Students will gain a deeper appreciation for some of the fundamental issues in computing that are independent of trends of technology, such as the ChurchTuring Thesis and the P versus NP problem. Prerequisites: CS 103 or 103B.
CS 155. Computer and Network Security. 3 Units.
For seniors and firstyear graduate students. Principles of computer systems security. Attack techniques and how to defend against them. Topics include: network attacks and defenses, operating system security, application security (web, apps, databases), malware, privacy, and security for mobile devices. Course projects focus on building reliable code. Prerequisite: 110. Recommended: basic Unix.
CS 157. Computational Logic. 3 Units.
Rigorous introduction to Symbolic Logic from a computational perspective. Encoding information in the form of logical sentences. Reasoning with information in this form. Overview of logic technology and its applications  in mathematics, science, engineering, business, law, and so forth. Topics include the syntax and semantics of Propositional Logic, Relational Logic, and Herbrand Logic, validity, contingency, unsatisfiability, logical equivalence, entailment, consistency, natural deduction (Fitch), mathematical induction, resolution, compactness, soundness, completeness.
CS 161. Design and Analysis of Algorithms. 35 Units.
Worst and average case analysis. Recurrences and asymptotics. Efficient algorithms for sorting, searching, and selection. Data structures: binary search trees, heaps, hash tables. Algorithm design techniques: divideandconquer, dynamic programming, greedy algorithms, amortized analysis, randomization. Algorithms for fundamental graph problems: minimumcost spanning tree, connected components, topological sort, and shortest paths. Possible additional topics: network flow, string searching. Prerequisite: 103 or 103B; 109 or STATS 116.
CS 166. Data Structures. 34 Units.
Techniques in the design, analysis, and implementation of data structures. Isometries between data structures (including red/black trees and 234 trees), amortized analysis (including Fibonacci heaps and splay trees), and randomization (including countmin sketches and dynamic perfect hash tables). Data structures for integers and strings (including van Emde Boas trees and suffix trees). Possible additional topics include functional data structures, concurrent data structures, and spatial data structures. Prerequisites: CS107 and CS161.
CS 168. The Modern Algorithmic Toolbox. 34 Units.
This course will provide a rigorous and handson introduction to the central ideas and algorithms that constitute the core of the modern algorithms toolkit. Emphasis will be on understanding the highlevel theoretical intuitions and principles underlying the algorithms we discuss, as well as developing a concrete understanding of when and how to implement and apply the algorithms. The course will be structured as a sequence of oneweek investigations; each week will introduce one algorithmic idea, and discuss the motivation, theoretical underpinning, and practical applications of that algorithmic idea. Each topic will be accompanied by a miniproject in which students will be guided through a practical application of the ideas of the week. Topics include hashing, dimension reduction and LSH, boosting, linear programming, gradient descent, sampling and estimation, and an introduction to spectral techniques. Prerequisites: CS107 and CS161, or permission from the instructor.
CS 170. Stanford Laptop Orchestra: Composition, Coding, and Performance. 15 Unit.
Classroom instantiation of the Stanford Laptop Orchestra (SLOrk) which includes public performances. An ensemble of more than 20 humans, laptops, controllers, and special speaker arrays designed to provide each computermediated instrument with its sonic identity and presence. Topics and activities include issues of composing for laptop orchestras, instrument design, sound synthesis, programming, and live performance. May be repeated four times for credit. Space is limited; see https://ccrma.stanford.edu/courses/128 for information about the application and enrollment process. May be repeat for credit.
Same as: MUSIC 128
CS 181. Computers, Ethics, and Public Policy. 4 Units.
Ethical and social issues related to the development and use of computer technology. Ethical theory, and social, political, and legal considerations. Scenarios in problem areas: privacy, reliability and risks of complex systems, and responsibility of professionals for applications and consequences of their work. Prerequisite: 106A.
Same as: COMM 181, ETHICSOC 181X, PHIL 75C, POLISCI 181, PUBLPOL 181
CS 181W. Computers, Ethics, and Public Policy. 4 Units.
Writingintensive version of CS181. Satisfies the WIM requirement for Computer Science, Engineering Physics, STS, and Math/Comp Sci undergraduates. To take this course, students need permission of instructor and may need to complete an assignment due at the first day of class.
Same as: WIM
CS 183E. Effective Leadership in HighTech. 1 Unit.
You will undoubtedly leave Stanford with the technical skills to excel in your first few jobs. But nontechnical skills are just as critical to making a difference. This seminar is taught by two industry veterans in engineering leadership and product management. In a small group setting, we will explore how you can be a great individual contributor (communicating with clarity, getting traction for your ideas, resolving conflict, and delivering your best work) and how you can transition into leadership roles (finding leadership opportunities, creating a great team culture, hiring and onboarding new team members). We will end by turning back to your career (picking your first job and negotiating your offer, managing your career changes, building a great network, and succeeding with mentors). Prerequisites: Preference given to seniors and coterms in Computer Science and related majors. Enrollment limited and application required for admittance.
CS 190. Software Design Studio. 3 Units.
This course teaches the art of software design: how to decompose large complex systems into classes that can be implemented and maintained easily. Topics include the causes of complexity, modular design, techniques for creating deep classes, minimizing the complexity associated with exceptions, incode documentation, and name selection. The class involves significant system software implementation and uses an iterative approach consisting of implementation, review, and revision. The course is taught in a studio format with inclass discussions and code reviews in addition to lectures. Prerequisite: CS 140 or equivalent. Apply at: https://web.stanford.edu/class/cs190.
CS 191. Senior Project. 16 Unit.
Restricted to Computer Science and Computer Systems Engineering students. Group or individual projects under faculty direction. Register using instructor's section number. A project can be either a significant software application or publishable research. Software application projects include substantial programming and modern userinterface technologies and are comparable in scale to shareware programs or commercial applications. Research projects may result in a paper publishable in an academic journal or presentable at a conference. Required public presentation of final application or research results. Prerequisite: Completion of at least 135 units.
CS 191W. Writing Intensive Senior Project. 36 Units.
Restricted to Computer Science and Computer Systems Engineering students. Writingintensive version of CS191. Register using the section number of an Academic Council member. Prerequisite: Completion of at least 135 units.
Same as: WIM
CS 192. Programming Service Project. 14 Unit.
Restricted to Computer Science students. Appropriate academic credit (without financial support) is given for volunteer computer programming work of public benefit and educational value.
CS 193A. Android Programming. 3 Units.
Introduction to building applications for Android platform. Examines key concepts of Android programming: tool chain, application lifecycle, views, controls, intents, designing mobile UIs, networking, threading, and more. Features weekly lectures and a series of small programming projects. Phone not required, but a phone makes the projects more engaging. Prerequisites: 106B or Java experience at 106B level. Enrollment limited and application required.
CS 193C. ClientSide Internet Technologies. 3 Units.
Clientside technologies used to create web sites such as Google maps or Gmail. Includes HTML5, CSS, JavaScript, the Document Object Model (DOM), and Ajax. Prerequisite: programming experience at the level of CS106A.
CS 193P. iOS Application Development. 3 Units.
Tools and APIs required to build applications for the iPhone and iPad platforms using the iOS SDK. User interface design for mobile devices and unique user interactions using multitouch technologies. Objectoriented design using modelviewcontroller paradigm, memory management, Swift programming language. Other topics include: objectoriented database API, animation, multithreading, networking and performance considerations. Prerequisites: C language and objectoriented programming experience exceeding 106B or X level. Previous completion of any one of the following is required: CS 107<https://explorecourses.stanford.edu/search?view=catalog&filtercoursestatusActive=on&page=0&q=CS107>, 108 (preferred) or 110. Recommended: UNIX, graphics, databases.
CS 193Q. Introduction to Python Programming. 1 Unit.
CS193Q teaches basic Python programming with a similar endcondition to CS106AP: strings, lists, numbers, dicts, loops, logic, functions, testings, decomposition and style, and modules. CS193Q assumes knowledge of some programming language, and proceeds by showing how each common programming idea is expressed in Python. CS193Q moves very quickly, meeting 2 times for 3 hours, plus lab time to complete the required python programs.
CS 194. Software Project. 3 Units.
Design, specification, coding, and testing of a significant team programming project under faculty supervision. Documentation includes capture of project rationale, design and discussion of key performance indicators, a weekly progress log and a software architecture diagram. Public demonstration of the project at the end of the quarter. Preference given to seniors. May be repeated for credit. Prerequisites: CS 110 and CS 161.
CS 194H. User Interface Design Project. 34 Units.
Advanced methods for designing, prototyping, and evaluating user interfaces to computing applications. Novel interface technology, advanced interface design methods, and prototyping tools. Substantial, quarterlong course project that will be presented in a public presentation. Prerequisites: CS 147, or permission of instructor.
CS 194W. Software Project. 3 Units.
Restricted to Computer Science and Electrical Engineering undergraduates. Writingintensive version of CS194. Preference given to seniors.
Same as: WIM
CS 195. Supervised Undergraduate Research. 34 Units.
Directed research under faculty supervision. Students are required to submit a written report and give a public presentation on their work.
CS 196. Computer Consulting. 2 Units.
Focus is on Macintosh and Windows operating system maintenance and troubleshooting through hardware and software foundation and concepts. Topics include operating systems, networking, security, troubleshooting methodology with emphasis on Stanford's computing environment. Not a programming course. Prerequisite: 1C or equivalent.
Same as: VPTL 196
CS 198. Teaching Computer Science. 34 Units.
Students lead a discussion section of 106A while learning how to teach a programming language at the introductory level. Focus is on teaching skills, techniques, and course specifics. Application and interview required; see http://cs198.stanford.edu.
CS 198B. Additional Topics in Teaching Computer Science. 1 Unit.
Students build on the teaching skills developed in CS198. Focus is on techniques used to teach topics covered in CS106B. Prerequisite: successful completion of CS198.
CS 199. Independent Work. 16 Unit.
Special study under faculty direction, usually leading to a written report. Letter grade; if not appropriate, enroll in 199P.
CS 199P. Independent Work. 16 Unit.
(Staff).
CS 202. Law for Computer Science Professionals. 1 Unit.
An overview of intellectual property law as it relates to computer science and other disciplines, including discussions of patents, trademarks, copyrights, trade secrets, computer fraud litigation and interesting historical tidbits. Emphasis on topics of current interest such as software and business method patents, copyright issues concerning software, music, art and artificial intelligence, and current disputes of note including the recentlysettled Waymo v. Uber lawsuit and the ongoing Oracle v. Google, Apple v. Samsung and hiQ v. LinkedIn sagas. Guest lectures typically have covered open source and the free software movement, practical issues for business founders (including corporate formation issues and nondisclosure, noncompete, workmadeforhire and license agreements), and other pertinent topics. Classes are presented in an open discussion format broadly directed to students with both technical and nontechnical backgrounds.
CS 203. Cybersecurity: A Legal and Technical Perspective. 2 Units.
(Formerly IPS 251) This class will use the case method to teach basic computer, network, and information security from technology, law, policy, and business perspectives. Using real world topics, we will study the technical, legal, policy, and business aspects of an incident or issue and its potential solutions. The case studies will be organized around the following topics: vulnerability disclosure, state sponsored sabotage, corporate and government espionage, credit card theft, theft of embarrassing personal data, phishing and social engineering attacks, denial of service attacks, attacks on weak session management and URLs, security risks and benefits of cloud data storage, wiretapping on the Internet, and digital forensics. Students taking the class will learn about the techniques attackers use, applicable legal prohibitions, rights, and remedies, the policy context, and strategies in law, policy and business for managing risk. Grades will be based on class participation, two reflection papers, and a final exam. Special Instructions: This class is limited to 65 students, with an effort made to have students from Stanford Law School (30 students will be selected by lottery) and students from Computer Science (30 students) and International Policy Studies (5 students). Elements used in grading: Class Participation (20%), Written Assignments (40%), Final Exam (40%). Crosslisted with the Law School (Law 4004) and International Policy Studies (IPS course number TBD).
Same as: INTLPOL 251
CS 204. Legal Informatics. 23 Units.
Legal informatics based on representation of regulations in computable form. Encoding regulations facilitate creation of legal information systems with significant practical value. Convergence of technological trends, growth of the Internet, advent of semantic web technology, and progress in computational logic make computational law prospects better. Topics: current state of computational law, prospects and problems, philosophical and legal implications. This course is *Cross* listed with LAW 4019. Prerequisite: basic concepts of programming.
CS 205L. Continuous Mathematical Methods with an Emphasis on Machine Learning. 3 Units.
A survey of numerical approaches to the continuous mathematics used in computer vision and robotics with emphasis on machine and deep learning. Although motivated from the standpoint of machine learning, the course will focus on the underlying mathematical methods including computational linear algebra and optimization, as well as special topics such as automatic differentiation via backward propagation, momentum methods from ordinary differential equations, CNNs, RNNs, etc. (Replaces CS205A, and satisfies all similar requirements.) Prerequisites: MATH 51; MATH 104 or 113 or equivalent or comfortable with the associated material.
CS 206. Exploring Computational Journalism. 3 Units.
This projectbased course will explore the field of computational journalism, including the use of Data Science, Info Visualization, AI, and emerging technologies to help journalists discover and tell stories, understand their audience, advance free speech, and build trust. Admission by application; please email R.B. Brenner at rbbrenner@stanford.edu to request application.
Same as: COMM 281
CS 208E. Great Ideas in Computer Science. 3 Units.
Great Ideas in Computer Science Covers the intellectual tradition of computer science emphasizing ideas that reflect the most important milestones in the history of the discipline. Topics include programming and problem solving; implementing computation in hardware; algorithmic efficiency; the theoretical limits of computation; cryptography and security; computer networks; machine learning; and the philosophy behind artificial intelligence. Readings will include classic papers along with additional explanatory material.
CS 209. Law, Bias, & Algorithms. 3 Units.
Human decision making is increasingly being displaced by predictive algorithms. Judges sentence defendants based on statistical risk scores; regulators take enforcement actions based on predicted violations; advertisers target materials based on demographic attributes; and employers evaluate applicants and employees based on machinelearned models. A predominant concern with the rise of such algorithmic decision making is that it may replicate or exacerbate human bias. Algorithms might discriminate, for instance, based on race or gender. This course surveys the legal and ethical principles for assessing the equity of algorithms, describes techniques for designing fair systems, and considers how antidiscrimination law and the design of algorithms may need to evolve to account for machine bias. Concepts will be developed in part through guided inclass coding exercises. Admission is by consent of instructor and is limited to 20 students. Grading is based on response papers, class participation, and a final project. Prerequisite: CS 106A or equivalent knowledge of coding.
Same as: CSRE 230, MS&E 330, SOC 279
CS 210A. Software Project Experience with Corporate Partners. 34 Units.
Twoquarter project course. Focus is on realworld software development. Corporate partners seed projects with loosely defined challenges from their R&D labs; students innovate to build their own compelling software solutions. Student teams are treated as startup companies with a budget and a technical advisory board comprised of instructional staff and corporate liaisons. Teams will typically travel to the corporate headquarters of their collaborating partner, meaning some teams will travel internationally. Open loft classroom format such as found in Silicon Valley software companies. Exposure to: current practices in software engineering; techniques for stimulating innovation; significant development experience with creative freedoms; working in groups; realworld software engineering challenges; public presentation of technical work; creating written descriptions of technical work. Prerequisites: CS 109 and 110.
CS 210B. Software Project Experience with Corporate Partners. 34 Units.
Continuation of CS210A. Focus is on realworld software development. Corporate partners seed projects with loosely defined challenges from their R&D labs; students innovate to build their own compelling software solutions. Student teams are treated as startup companies with a budget and a technical advisory board comprised of the instructional staff and corporate liaisons. Teams will typically travel to the corporate headquarters of their collaborating partner, meaning some teams will travel internationally. Open loft classroom format such as found in Silicon Valley software companies. Exposure to: current practices in software engineering; techniques for stimulating innovation; significant development experience with creative freedoms; working in groups; real world software engineering challenges; public presentation of technical work; creating written descriptions of technical work. Prerequisites: CS 210A.
CS 213. Creating Great VR: From Ideation to Monetization. 1 Unit.
Covering everything from VR fundamentals to futurecasting to launch management, this course will expose you to best practices and guidance from VR leaders that helps positions you to build great VR experiences.
CS 217. Hardware Accelerators for Machine Learning. 34 Units.
This course provides indepth coverage of the architectural techniques used to design accelerators for training and inference in machine learning systems. This course will cover classical ML algorithms such as linear regression and support vector machines as well as DNN models such as convolutional neural nets, and recurrent neural nets. We will consider both training and inference for these models and discuss the impact of parameters such as batch size, precision, sparsity and compression on the accuracy of these models. We will cover the design of accelerators for ML model inference and training. Students will become familiar with hardware implementation techniques for using parallelism, locality, and low precision to implement the core computational kernels used in ML. To design energyefficient accelerators, students will develop the intuition to make tradeoffs between ML model parameters and hardware implementation techniques. Students will read recent research papers and complete a design project. Prerequisites: CS 149 or EE 180. CS 229 is ideal, but not required.
CS 221. Artificial Intelligence: Principles and Techniques. 34 Units.
Artificial intelligence (AI) has had a huge impact in many areas, including medical diagnosis, speech recognition, robotics, web search, advertising, and scheduling. This course focuses on the foundational concepts that drive these applications. In short, AI is the mathematics of making good decisions given incomplete information (hence the need for probability) and limited computation (hence the need for algorithms). Specific topics include search, constraint satisfaction, game playing, Markov decision processes, graphical models, machine learning, and logic. Prerequisites: CS 103 or CS 103B/X, CS 106B or CS 106X, CS 107, and CS 109 (algorithms, probability, and programming experience).
CS 223A. Introduction to Robotics. 3 Units.
Robotics foundations in modeling, design, planning, and control. Class covers relevant results from geometry, kinematics, statics, dynamics, motion planning, and control, providing the basic methodologies and tools in robotics research and applications. Concepts and models are illustrated through physical robot platforms, interactive robot simulations, and video segments relevant to historical research developments or to emerging application areas in the field. Recommended: matrix algebra.
Same as: ME 320
CS 224N. Natural Language Processing with Deep Learning. 34 Units.
Methods for processing human language information and the underlying computational properties of natural languages. Focus on deep learning approaches: understanding, implementing, training, debugging, visualizing, and extending neural network models for a variety of language understanding tasks. Exploration of natural language tasks ranging from simple word level and syntactic processing to coreference, question answering, and machine translation. Examination of representative papers and systems and completion of a final project applying a complex neural network model to a largescale NLP problem. Prerequisites: calculus and linear algebra; CS124 or CS121/221.
Same as: LINGUIST 284
CS 224S. Spoken Language Processing. 24 Units.
Introduction to spoken language technology with an emphasis on dialogue and conversational systems. Deep learning and other methods for automatic speech recognition, speech synthesis, affect detection, dialogue management, and applications to digital assistants and spoken language understanding systems. Prerequisites: CS 124, 221, 224N, or 229.
Same as: LINGUIST 285
CS 224U. Natural Language Understanding. 34 Units.
Projectoriented class focused on developing systems and algorithms for robust machine understanding of human language. Draws on theoretical concepts from linguistics, natural language processing, and machine learning. Topics include lexical semantics, distributed representations of meaning, relation extraction, semantic parsing, sentiment analysis, and dialogue agents, with special lectures on developing projects, presenting research results, and making connections with industry. Prerequisites: one of LINGUIST 180, CS 124, CS 224N, CS224S, or CS221; and logical/semantics such as LINGUIST 130A or B, CS 157, or PHIL150.
Same as: LINGUIST 188, LINGUIST 288
CS 224W. Analysis of Networks. 34 Units.
Networks are a fundamental tool for modeling complex social, technological, and biological systems. Coupled with emergence of online social networks and largescale data availability in biological sciences, this course focuses on the analysis of massive networks which provide many computational, algorithmic, and modeling challenges. This course develops computational tools that reveal how the social, technological, and natural worlds are connected, and how the study of networks sheds light on these connections. nTopics include: how information spreads through society; robustness and fragility of food webs and financial markets; algorithms for the World Wide Web; friend prediction in online social networks; identification of functional modules in biological networks; disease outbreak detection.
CS 225A. Experimental Robotics. 3 Units.
Handson laboratory course experience in robotic manipulation. Topics include robot kinematics, dynamics, control, compliance, sensorbased collision avoidance, and humanrobot interfaces. Second half of class is devoted to final projects using various robotic platforms to build and demonstrate new robot task capabilities. Previous projects include the development of autonomous robot behaviors of drawing, painting, playing air hocket, yoyo, basketball, pingpong or xylophone. Prerequisites: 223A or equivalent.
CS 227B. General Game Playing. 3 Units.
A general game playing system accepts a formal description of a game to play it without human intervention or algorithms designed for specific games. Handson introduction to these systems and artificial intelligence techniques such as knowledge representation, reasoning, learning, and rational behavior. Students create GGP systems to compete with each other and in external competitions. Prerequisite: programming experience. Recommended: 103 or equivalent.
CS 228. Probabilistic Graphical Models: Principles and Techniques. 34 Units.
Probabilistic graphical modeling languages for representing complex domains, algorithms for reasoning using these representations, and learning these representations from data. Topics include: Bayesian and Markov networks, extensions to temporal modeling such as hidden Markov models and dynamic Bayesian networks, exact and approximate probabilistic inference algorithms, and methods for learning models from data. Also included are sample applications to various domains including speech recognition, biological modeling and discovery, medical diagnosis, message encoding, vision, and robot motion planning. Prerequisites: basic probability theory and algorithm design and analysis.
CS 229. Machine Learning. 34 Units.
Topics: statistical pattern recognition, linear and nonlinear regression, nonparametric methods, exponential family, GLMs, support vector machines, kernel methods, model/feature selection, learning theory, VC dimension, clustering, density estimation, EM, dimensionality reduction, ICA, PCA, reinforcement learning and adaptive control, Markov decision processes, approximate dynamic programming, and policy search. Prerequisites: linear algebra, and basic probability and statistics.
Same as: STATS 229
CS 229A. Applied Machine Learning. 34 Units.
You will learn to implement and apply machine learning algorithms. This course emphasizes practical skills, and focuses on giving you skills to make these algorithms work. You will learn about commonly used learning techniques including supervised learning algorithms (logistic regression, linear regression, SVM, neural networks/deep learning), unsupervised learning algorithms (kmeans), as well as learn about specific applications such as anomaly detection and building recommender systems. This class is taught in the flippedclassroom format. You will watch videos and complete indepth programming assignments and online quizzes at home, then come to class for discussion sections. This class will culminate in an openended final project, which the teaching team will help you on. Prerequisites: Programming at the level of CS106B or 106X, and basic linear algebra such as MATH 51.
CS 229T. Statistical Learning Theory. 3 Units.
How do we formalize what it means for an algorithm to learn from data? How do we use mathematical thinking to design better machine learning methods? This course focuses on developing mathematical tools for answering these questions. We will present various learning algorithms and prove theoretical guarantees about them. Topics include generalization bounds, implicit regularization, the theory of deep learning, spectral methods, and online learning and bandits problems. Prerequisites: A solid background in linear algebra and probability theory, statistics and machine learning (STATS 315A or CS 229).
Same as: STATS 231
CS 230. Deep Learning. 34 Units.
Deep Learning is one of the most highly sought after skills in AI. We will help you become good at Deep Learning. In this course, you will learn the foundations of Deep Learning, understand how to build neural networks, and learn how to lead successful machine learning projects. You will learn about Convolutional networks, RNNs, LSTM, Adam, Dropout, BatchNorm, Xavier/He initialization, and more. You will work on case studies from healthcare, autonomous driving, sign language reading, music generation, and natural language processing. You will master not only the theory, but also see how it is applied in industry. You will practice all these ideas in Python and in TensorFlow, which we will teach. AI is transforming multiple industries. After this course, you will likely find creative ways to apply it to your work. This class is taught in the flippedclassroom format. You will watch videos and complete indepth programming assignments and online quizzes at home, then come in to class for advanced discussions and work on projects. This class will culminate in an openended final project, which the teaching team will help you on. Prerequisites: Familiarity with programming in Python and Linear Algebra (matrix / vector multiplications). CS 229 may be taken concurrently.
CS 231A. Computer Vision: From 3D Reconstruction to Recognition. 34 Units.
(Formerly 223B) An introduction to the concepts and applications in computer vision. Topics include: cameras and projection models, lowlevel image processing methods such as filtering and edge detection; midlevel vision topics such as segmentation and clustering; shape reconstruction from stereo, as well as highlevel vision tasks such as object recognition, scene recognition, face detection and human motion categorization. Prerequisites: linear algebra, basic probability and statistics.
CS 231N. Convolutional Neural Networks for Visual Recognition. 34 Units.
Computer Vision has become ubiquitous in our society, with applications innsearch, image understanding, apps, mapping, medicine, drones, andnselfdriving cars. Core to many of these applications are the tasks of image classification, localization and detection. This course is a deep dive into details of neural network architectures with a focus on learning endtoend models for these tasks, particularly image classification. During the 10week course, students will learn to implement, train and debug their own neural networks and gain a detailed understanding of cuttingedge research in computer vision. The final assignment will involve training a multimillion parameter convolutional neural network and applying it on the largest image classification dataset (ImageNet). We will focus on teaching how to set up the problem of image recognition, the learning algorithms (e.g. backpropagation), practical engineering tricks for training and finetuning the networks and guide the students through handson assignments and a final course project. Much of the background and materials of this course will be drawn from the ImageNet Challenge: http://imagenet.org/challenges/LSVRC/2014/index. Prerequisites: Proficiency in Python; familiarity with C/C++; CS 131 and CS 229 or equivalents; MATH 21 or equivalent, linear algebra.
CS 232. Digital Image Processing. 3 Units.
Image sampling and quantization color, point operations, segmentation, morphological image processing, linear image filtering and correlation, image transforms, eigenimages, multiresolution image processing, noise reduction and restoration, feature extraction and recognition tasks, image registration. Emphasis is on the general principles of image processing. Students learn to apply material by implementing and investigating image processing algorithms in Matlab and optionally on Android mobile devices. Term project. Recommended: EE261, EE278.
Same as: EE 368
CS 233. Geometric and Topological Data Analysis. 3 Units.
Mathematical computational tools for the analysis of data with geometric content, such images, videos, 3D scans, GPS traces  as well as for other data embedded into geometric spaces. Global and local geometry descriptors allowing for various kinds of invariances. The rudiments of computational topology and persistent homology on sampled spaces. Clustering and other unsupervised techniques. Spectral methods for geometric data analysis. Nonlinear dimensionality reduction. Alignment, matching, and map computation between geometric data sets. Function spaces and functional maps.Networks of data sets and joint analysis for segmentation and labeling. The emergence of abstractions or concepts from data. Prerequisites: discrete algorithms at the level of 161; linear algebra at the level of CME103.
Same as: CME 251
CS 234. Reinforcement Learning. 3 Units.
To realize the dreams and impact of AI requires autonomous systems that learn to make good decisions. Reinforcement learning is one powerful paradigm for doing so, and it is relevant to an enormous range of tasks, including robotics, game playing, consumer modeling and healthcare. This class will briefly cover background on Markov decision processes and reinforcement learning, before focusing on some of the central problems, including scaling up to large domains and the exploration challenge. One key tool for tackling complex RL domains is deep learning and this class will include at least one homework on deep reinforcement learning. Prerequisites: proficiency in python, CS 229 or equivalents or permission of the instructor; linear algebra, basic probability.
CS 236. Deep Generative Models. 3 Units.
Generative models are widely used in many subfields of AI and Machine Learning. Recent advances in parameterizing these models using neural networks, combined with progress in stochastic optimization methods, have enabled scalable modeling of complex, highdimensional data including images, text, and speech. In this course, we will study the probabilistic foundations and learning algorithms for deep generative models, including Variational Autoencoders (VAE), Generative Adversarial Networks (GAN), and flow models. The course will also discuss application areas that have benefitted from deep generative models, including computer vision, speech and natural language processing, and reinforcement learning. Prerequisites: Basic knowledge about machine learning from at least one of CS 221, 228, 229 or 230. Students will work with computational and mathematical models and should have a basic knowledge of probabilities and calculus. Proficiency in some programming language, preferably Python, required.
CS 238. Decision Making under Uncertainty. 34 Units.
This course is designed to increase awareness and appreciation for why uncertainty matters, particularly for aerospace applications. Introduces decision making under uncertainty from a computational perspective and provides an overview of the necessary tools for building autonomous and decisionsupport systems. Following an introduction to probabilistic models and decision theory, the course will cover computational methods for solving decision problems with stochastic dynamics, model uncertainty, and imperfect state information. Topics include: Bayesian networks, influence diagrams, dynamic programming, reinforcement learning, and partially observable Markov decision processes. Applications cover: air traffic control, aviation surveillance systems, autonomous vehicles, and robotic planetary exploration. Prerequisites: basic probability and fluency in a highlevel programming language.
Same as: AA 228
CS 239. Advanced Topics in Sequential Decision Making. 34 Units.
Survey of recent research advances in intelligent decision making for dynamic environments from a computational perspective. Efficient algorithms for single and multiagent planning in situations where a model of the environment may or may not be known. Partially observable Markov decision processes, approximate dynamic programming, and reinforcement learning. New approaches for overcoming challenges in generalization from experience, exploration of the environment, and model representation so that these methods can scale to real problems in a variety of domains including aerospace, air traffic control, and robotics. Students are expected to produce an original research paper on a relevant topic. Prerequisites: AA 228/CS 238 or CS 221.
Same as: AA 229
CS 240. Advanced Topics in Operating Systems. 3 Units.
Recent research. Classic and new papers. Topics: virtual memory management, synchronization and communication, file systems, protection and security, operating system extension techniques, fault tolerance, and the history and experience of systems programming. Prerequisite: 140 or equivalent.
CS 241. Embedded Systems Workshop. 2 Units.
Projectcentric building hardware and software for embedded computing systems. Students work on an existing project of their own or join one of these projects. Syllabus topics will be determined by the needs of the enrolled students and projects. Examples of topics include: interrupts and concurrent programming, deterministic timing and synchronization, statebased programming models, filters, frequency response, and highfrequency signals, low power operation, system and PCB design, security, and networked communication. Prerequisite: CS107 (or equivalent).
Same as: EE 285
CS 242. Programming Languages. 34 Units.
This course explores models of computation, both old, like functional programming with the lambda calculus (circa 1930), and new, like memorysafe systems programming with Rust (circa 2010). Topics include type systems (polymorphism, algebraic data types, static vs. dynamic), control flow (exceptions, continuations), concurrency/parallelism, metaprogramming, and the semantic gap between computational models and modern hardware. The study of programming languages is equal parts systems and theory, looking at how a rigorous understanding of the syntax, structure, and semantics of computation enables formal reasoning about the behavior and properties of complex realworld systems. In light of today's Cambrian explosion of new programming languages, this course also seeks to provide a conceptual clarity on how to compare and contrast the multitude of programming languages, models, and paradigms in the modern programming landscape. Prerequisites: 103, 110.
CS 243. Program Analysis and Optimizations. 34 Units.
Program analysis techniques used in compilers and software development tools to improve productivity, reliability, and security. The methodology of applying mathematical abstractions such as graphs, fixpoint computations, binary decision diagrams in writing complex software, using compilers as an example. Topics include data flow analysis, instruction scheduling, register allocation, parallelism, data locality, interprocedural analysis, and garbage collection. Prerequisites: 103 or 103B, and 107.
CS 244. Advanced Topics in Networking. 34 Units.
Classic papers, new ideas, and research papers in networking. Architectural principles: why the Internet was designed this way? Congestion control. Wireless and mobility; softwaredefined networks (SDN) and network virtualization; content distribution networks; packet switching; datacenter networks. Prerequisite: 144 or equivalent.
CS 244B. Distributed Systems. 3 Units.
Distributed operating systems and applications issues, emphasizing highlevel protocols and distributed state sharing as the key technologies. Topics: distributed shared memory, objectoriented distributed system design, distributed directory services, atomic transactions and time synchronization, applicationsufficient consistency, file access, process scheduling, process migration, and storage/communication abstractions on distribution, scale, robustness in the face of failure, and security. Prerequisites: CS 144.
CS 245. Principles of DataIntensive Systems. 3 Units.
Architecture of data storage and processing systems, including relational databases, cluster computing systems, stream processing and machine learning systems. Topics include database system architecture, storage organization, query optimization, transaction management, fault recovery, and parallel processing, with a focus on the key design ideas shared across many types of dataintensive systems. Prerequisites: 145, 161.
CS 246. Mining Massive Data Sets. 34 Units.
Availability of massive datasets is revolutionizing science and industry. This course discusses data mining and machine learning algorithms for analyzing very large amounts of data. The focus is on algorithms and systems for mining big data. nTopics include: Big data systems (Hadoop, Spark, Hive); Link Analysis (PageRank, spam detection, hubsandauthorities); Similarity search (localitysensitive hashing, shingling, minhashing, random hyperplanes); Stream data processing; Analysis of socialnetwork graphs; Association rules; Dimensionality reduction (UV, SVD, and CUR decompositions); Algorithms for verylargescale mining (clustering, nearestneighbor search); Largescale machine learning (gradient descent, supportvector machines, classification, and regression); Submodular function optimization; Computational advertising. Prerequisites: At least one of CS107 or CS145.
CS 246H. Mining Massive Data Sets Hadoop Lab. 1 Unit.
Supplement to CS 246 providing additional material on Hadoop. Students will learn how to implement data mining algorithms using Hadoop, how to implement and debug complex MapReduce jobs in Hadoop, and how to use some of the tools in the Hadoop ecosystem for data mining and machine learning. Topics: Hadoop, MapReduce, HDFS, combiners, secondary sort, distributed cache, SQL on Hadoop, Hive, Cloudera ML/Oryx, Mahout, Hadoop streaming, implementing Hadoop jobs, debugging Hadoop jobs, TFIDF, Pig, Sqoop, Oozie, HBase, Impala. Prerequisite: CS 107 or equivalent.
CS 247. HumanComputer Interaction Design Studio. 34 Units.
Projectbased focus on interaction design process, especially earlystage design and rapid prototyping. Methods used in interaction design including needs analysis, user observation, sketching, concept generation, scenario building, and evaluation. Prerequisites: 147 or equivalent background in design thinking; 106B or equivalent background in programming. This course takes place entirely in studios; enroll in a studio section with an instructor.
CS 248. Interactive Computer Graphics. 34 Units.
This course provides a comprehensive introduction to interactive computer graphics, focusing on fundamental concepts and techniques, as well as their crosscutting relationship to multiple problem domains in interactive graphics (such as rendering, animation, geometry, image processing). Topics include: 2D and 3D drawing, sampling theory, interpolation, rasterization, image compositing, the realtime GPU graphics pipeline (and parallel rendering), VR rendering, geometric transformations, curves and surfaces, geometric data structures, subdivision, meshing, spatial hierarchies, image processing, time integration, physicallybased animation, and inverse kinematics. The course will involve several indepth programming assignments and a selfselected final project that explores concepts covered in the class. Prerequisite: CS 107, MATH 51.
CS 250. Algebraic Error Correcting Codes. 3 Units.
Introduction to the theory of error correcting codes, emphasizing algebraic constructions, and diverse applications throughout computer science and engineering. Topics include basic bounds on error correcting codes; ReedSolomon and ReedMuller codes; listdecoding, listrecovery and locality. Applications may include communication, storage, complexity theory, pseudorandomness, cryptography, streaming algorithms, group testing, and compressed sensing. Prerequisites: Linear algebra, basic probability (at the level of, say, CS109, CME106 or EE178) and "mathematical maturity" (students will be asked to write proofs). Familiarity with finite fields will be helpful but not required.
Same as: EE 387
CS 251. Cryptocurrencies and blockchain technologies. 3 Units.
For advanced undergraduates and for graduate students. The potential applications for Bitcoinlike technologies is enormous. The course will cover the technical aspects of cryptocurrencies, blockchain technologies, and distributed consensus. Students will learn how these systems work and how to engineer secure software that interacts with the Bitcoin network and other cryptocurrencies. Prerequisite: CS110. Recommended: CS255.
CS 252. Analysis of Boolean Functions. 3 Units.
Boolean functions are among the most basic objects of study in theoretical computer science. This course is about the study of boolean functions from a complexitytheoretic perspective, with an emphasis on analytic methods. We will cover fundamental concepts and techniques in this area, including influence and noise sensitivity, polynomial approximation, hypercontractivity, probabilistic invariance principles, and Gaussian analysis. We will see connections to various areas of theoretical computer science, including circuit complexity, pseudorandomness, classical and quantum query complexity, learning theory, and property testing. Prerequisites: CS 103 and CS 109 or equivalents. CS 154 and CS 161 recommended.
CS 254. Computational Complexity. 3 Units.
An introduction to computational complexity theory. Topics include the P versus NP problem; diagonalization; space complexity: PSPACE, Savitch's theorem, and NL=coNL; counting problems and #Pcompleteness; circuit complexity; pseudorandomness and derandomization; complexity of approximation; quantum computing; complexity barriers. Prerequisites: 154 or equivalent; mathematical maturity.
CS 255. Introduction to Cryptography. 3 Units.
For advanced undergraduates and graduate students. Theory and practice of cryptographic techniques used in computer security. Topics: encryption (symmetric and public key), digital signatures, data integrity, authentication, key management, PKI, zeroknowledge protocols, and realworld applications. Prerequisite: basic probability theory.
CS 257. Logic and Artificial Intelligence. 24 Units.
This is a course at the intersection of philosophical logic and artificial intelligence. After reviewing recent work in AI that has leveraged ideas from logic, we will slow down and study in more detail various components of highlevel intelligence and the tools that have been designed to capture those components. Specific areas will include: reasoning about belief and action, causality and counterfactuals, legal and normative reasoning, natural language inference, and Turingcomplete logical formalisms including (probabilistic) logic programming and lambda calculus. Our main concern will be understanding the logical tools themselves, including their formal properties and how they relate to other tools such as probability and statistics. At the end, students should expect to have learned a lot more about logic, and also to have a sense for how logic has been and can be used in AI applications. Prerequisites: A background in logic, at least at the level of PHIL 151, will be expected. In case a student is willing to put in the extra work to catch up, it may be possible to take the course with background equivalent to PHIL 150 or CS 157. A background in AI, at the level of CS 221, would also be very helpful and will at times be expected. 2 unit option only for PhD students past the second year. Course website: http://web.stanford.edu/class/cs257/.
Same as: PHIL 356C
CS 261. Optimization and Algorithmic Paradigms. 3 Units.
Algorithms for network optimization: maxflow, mincost flow, matching, assignment, and mincut problems. Introduction to linear programming. Use of LP duality for design and analysis of algorithms. Approximation algorithms for NPcomplete problems such as Steiner Trees, Traveling Salesman, and scheduling problems. Randomized algorithms. Introduction to sublinear algorithms and decision making under uncertainty. Prerequisite: 161 or equivalent.
CS 263. Algorithms for Modern Data Models. 3 Units.
We traditionally think of algorithms as running on data available in a single location, typically main memory. In many modern applications including web analytics, search and data mining, computational biology, finance, and scientific computing, the data is often too large to reside in a single location, is arriving incrementally over time, is noisy/uncertain, or all of the above. Paradigms such as mapreduce, streaming, sketching, Distributed Hash Tables, Bulk Synchronous Processing, and random walks have proved useful for these applications. This course will provide an introduction to the design and analysis of algorithms for these modern data models. Prerequisite: Algorithms at the level of CS 261.
Same as: MS&E 317
CS 264. Beyond WorstCase Analysis. 3 Units.
This course is motivated by problems for which the traditional worstcase analysis of algorithms fails to differentiate meaningfully between different solutions, or recommends an intuitively "wrong" solution over the "right" one. This course studies systematically alternatives to traditional worstcase analysis that nevertheless enable rigorous and robust guarantees on the performance of an algorithm. Topics include: instance optimality; smoothed analysis; parameterized analysis and condition numbers; models of data (pseudorandomness, locality, diffuse adversaries, etc.); averagecase analysis; robust distributional analysis; resource augmentation; planted and semirandom graph models. Motivating problems will be drawn from online algorithms, online learning, constraint satisfaction problems, graph partitioning, scheduling, linear programming, hashing, machine learning, and auction theory. Prerequisites: CS161 (required). CS261 is recommended but not required.
CS 265. Randomized Algorithms and Probabilistic Analysis. 3 Units.
Randomness pervades the natural processes around us, from the formation of networks, to genetic recombination, to quantum physics. Randomness is also a powerful tool that can be leveraged to create algorithms and data structures which, in many cases, are more efficient and simpler than their deterministic counterparts. This course covers the key tools of probabilistic analysis, and application of these tools to understand the behaviors of random processes and algorithms. Emphasis is on theoretical foundations, though we will apply this theory broadly, discussing applications in machine learning and data analysis, networking, and systems. Topics include tail bounds, the probabilistic method, Markov chains, and martingales, with applications to analyzing random graphs, metric embeddings, random walks, and a host of powerful and elegant randomized algorithms. Prerequisites: CS 161 and STAT 116, or equivalents and instructor consent.
Same as: CME 309
CS 268. Geometric Algorithms. 3 Units.
Techniques for design and analysis of efficient geometric algorithms for objects in 2, 3, and higher dimensions. Topics: convexity, triangulations and simplicial complexes, sweeping, partitioning, and point location. Voronoi/Delaunay diagrams and their properties. Arrangements of curves and surfaces. Intersection and visibility problems. Geometric searching and optimization. Random sampling methods. Range searching. Impact of numerical issues in geometric computation. Example applications to robotic motion planning, visibility preprocessing and rendering in graphics, and modelbased recognition in computer vision. Prerequisite: discrete algorithms at the level of 161. Recommended: 164.
CS 269G. Almost Linear Time Graph Algorithms. 3 Units.
Over the past decade there has been an explosion in activity in designing new provably efficient fast graph algorithms. Leveraging techniques from disparate areas of computer science and optimization researchers have made great strides on improving upon the best known running times for fundamental optimization problems on graphs, in many cases breaking longstanding barriers to efficient algorithm design. In this course we will survey these results and cover the key algorithmic tools they leverage to achieve these breakthroughs. Possible topics include but are not limited to, spectral graph theory, sparsification, oblivious routing, local partitioning, Laplacian system solving, and maximum flow. Prerequisites: calculus and linear algebra.
Same as: MS&E 313
CS 269I. Incentives in Computer Science. 3 Units.
Many 21stcentury computer science applications require the design of software or systems that interact with multiple selfinterested participants. This course will provide students with the vocabulary and modeling tools to reason about such design problems. Emphasis will be on understanding basic economic and game theoretic concepts that are relevant across many application domains, and on case studies that demonstrate how to apply these concepts to realworld design problems. Topics include auction and contest design, equilibrium analysis, cryptocurrencies, design of networks and network protocols, reputation systems, social choice, and social network analysis. Case studies include BGP routing, Bitcoin, eBay's reputation system, Facebook's advertising mechanism, Mechanical Turk, and dynamic pricing in Uber/Lyft. Prerequisites: CS106B/X and CS161, or permission from the instructor.
CS 269O. Introduction to Optimization Theory. 3 Units.
Introduction of core algorithmic techniques and proof strategies that underlie the best known provable guarantees for minimizing high dimensional convex functions. Focus on broad canonical optimization problems and survey results for efficiently solving them, ultimately providing the theoretical foundation for further study in optimization. In particular, focus will be on firstorder methods for both smooth and nonsmooth convex function minimization as well as methods for structured convex function minimization, discussing algorithms such as gradient descent, accelerated gradient descent, mirror descent, Newton's method, interior point methods, and more. Prerequisite: multivariable calculus and linear algebra.
Same as: MS&E 213
CS 269Q. Elements of Quantum Computer Programming. 3 Units.
For advanced undergraduates and for graduate students. Quantum computing is an emerging computational paradigm with vast potential. This course is an introduction to modern quantum programming for students who want to work with quantum computing technologies and learn about new paradigms of computation. A physics / quantum mechanics background is not required. Students will learn the model of quantum computation, quantum programming languages, hybrid quantum/classical programming, quantum algorithms, quantum error correction, and applications. The course is hands on using open source Python packages for working with publicly available quantum processors. Prerequisites: linear algebra and programming at the undergraduate level.
CS 270. Modeling Biomedical Systems: Ontology, Terminology, Problem Solving. 3 Units.
Methods for modeling biomedical systems and for building modelbased software systems. Emphasis is on intelligent systems for decision support and Semantic Web applications. Topics: knowledge representation, controlled terminologies, ontologies, reusable problem solvers, and knowledge acquisition. Students learn about current trends in the development of advanced biomedical software systems and acquire handson experience with several systems and tools. Prerequisites: CS106A, basic familiarity with biology, probability, and logic.
Same as: BIOMEDIN 210
CS 272. Introduction to Biomedical Informatics Research Methodology. 35 Units.
Capstone Biomedical Informatics (BMI) experience. Handson software building. Student teams conceive, design, specify, implement, evaluate, and report on a software project in the domain of biomedicine. Creating written proposals, peer review, providing status reports, and preparing final reports. Issues related to research reproducibility. Guest lectures from professional biomedical informatics systems builders on issues related to the process of project management. Software engineering basics. Because the team projects start in the first week of class, attendance that week is strongly recommended. Prerequisites: BIOMEDIN 210 or 214 or 215 or 217 or 260. Preference to BMI graduate students. Consent of instructor required.
Same as: BIOE 212, BIOMEDIN 212, GENE 212
CS 273A. The Human Genome Source Code. 3 Units.
A computational introduction to the most amazing programming language on the planet: your genome. Topics include genome sequencing (assembling source code from code fragments); the human genome functional landscape: variable assignments (genes), controlflow logic (gene regulation) and runtime stack (epigenomics); human disease and personalized genomics (as a hunt for bugs in the human code); genome editing (code injection) to cure the incurable; and the source code behind amazing animal adaptations. Algorithmic approaches will introduce ideas from computational genomics, machine learning and natural language processing. Course includes primers on molecular biology, and text processing languages. No prerequisites.
Same as: BIOMEDIN 273A, DBIO 273A
CS 273B. Deep Learning in Genomics and Biomedicine. 3 Units.
Recent breakthroughs in highthroughput genomic and biomedical data are transforming biological sciences into "big data" disciplines. In parallel, progress in deep neural networks are revolutionizing fields such as image recognition, natural language processing and, more broadly, AI. This course explores the exciting intersection between these two advances. The course will start with an introduction to deep learning and overview the relevant background in genomics and highthroughput biotechnology, focusing on the available data and their relevance. It will then cover the ongoing developments in deep learning (supervised, unsupervised and generative models) with the focus on the applications of these methods to biomedical data, which are beginning to produced dramatic results. In addition to predictive modeling, the course emphasizes how to visualize and extract interpretable, biological insights from such models. Recent papers from the literature will be presented and discussed. Students will be introduced to and work with popular deep learning software frameworks. Students will work in groups on a final class project using real world datasets. Prerequisites: College calculus, linear algebra, basic probability and statistics such as CS109, and basic machine learning such as CS229. No prior knowledge of genomics is necessary.
Same as: BIODS 237, BIOMEDIN 273B, GENE 236
CS 274. Representations and Algorithms for Computational Molecular Biology. 34 Units.
Topics: introduction to bioinformatics and computational biology, algorithms for alignment of biological sequences and structures, computing with strings, phylogenetic tree construction, hidden Markov models, basic structural computations on proteins, protein structure prediction, protein threading techniques, homology modeling, molecular dynamics and energy minimization, statistical analysis of 3D biological data, integration of data sources, knowledge representation and controlled terminologies for molecular biology, microarray analysis, machine learning (clustering and classification), and natural language text processing. Prerequisite: CS 106B; recommended: CS161; consent of instructor for 3 units.
Same as: BIOE 214, BIOMEDIN 214, GENE 214
CS 275. Translational Bioinformatics. 4 Units.
Computational methods for the translation of biomedical data into diagnostic, prognostic, and therapeutic applications in medicine. Topics: multiscale omics data generation and analysis, utility and limitations of public biomedical resources, machine learning and data mining, issues and opportunities in drug discovery, and mobile/digital health solutions. Case studies and course project. Prerequisites: programming ability at the level of CS 106A and familiarity with biology and statistics.
Same as: BIOE 217, BIOMEDIN 217, GENE 217
CS 275A. Symbolic Musical Information. 24 Units.
Focus on symbolic data for music applications including advanced notation systems, optical music recognition, musical data conversion, and internal structure of MIDI files.
Same as: MUSIC 253
CS 275B. Music Query, Analysis, and Style Simulation. 24 Units.
Leveraging off three synchronized sets of symbolic data resources for notation and analysis, the lab portion introduces students to the opensource Humdrum Toolkit for music representation and analysis. Issues of data content and quality as well as methods of information retrieval, visualization, and summarization are considered in class. Grading based primarily on student projects. Prerequisite: 253 or consent of instructor.
Same as: MUSIC 254
CS 276. Information Retrieval and Web Search. 3 Units.
Text information retrieval systems; efficient text indexing; Boolean, vector space, and probabilistic retrieval models; ranking and rank aggregation; evaluating IR systems; text clustering and classification; Web search engines including crawling and indexing, linkbased algorithms, web metadata, and question answering; distributed word representations. Prerequisites: CS 107, CS 109, CS 161.
Same as: LINGUIST 286
CS 278. Social Computing. 3 Units.
Today we interact with our friends and enemies, our team partners and romantic partners, and our organizations and societies, all through computational systems. How do we design these social computing systems to be effective? This course covers design patterns for social computing and crowdsourcing systems, and the foundational ideas that underpin them. Students will engage in the creation of new computationallymediated social environments.
CS 279. Computational Biology: Structure and Organization of Biomolecules and Cells. 3 Units.
Computational techniques for investigating and designing the threedimensional structure and dynamics of biomolecules and cells. These computational methods play an increasingly important role in drug discovery, medicine, bioengineering, and molecular biology. Course topics include protein structure prediction, protein design, drug screening, molecular simulation, cellularlevel simulation, image analysis for microscopy, and methods for solving structures from crystallography and electron microscopy data. Prerequisites: elementary programming background (CS 106A or equivalent) and an introductory course in biology or biochemistry.
Same as: BIOE 279, BIOMEDIN 279, BIOPHYS 279, CME 279
CS 294A. Research Project in Artificial Intelligence. 3 Units.
Student teams under faculty supervision work on research and implementation of a large project in AI. Stateoftheart methods related to the problem domain. Prerequisites: AI course from 220 series, and consent of instructor.
CS 294H. Research Project in HumanComputer Interaction. 3 Units.
Student teams under faculty supervision work on research and implementationnof a large project in HCI. Stateoftheart methods related to the problemndomain. Prerequisites CS 377, 147, 247, or permission from instructor.
CS 294S. Research Project in Software Systems and Security. 3 Units.
Topics vary. Focus is on emerging research themes such as programmable open mobile Internet that spans multiple system topics such as humancomputer interaction, programming systems, operating systems, networking, and security. May be repeated for credit. Prerequisites: CS 103 and 107.
CS 294W. Writing Intensive Research Project in Computer Science. 3 Units.
Restricted to Computer Science and Computer Systems Engineering undergraduates. Students enroll in the CS 294W section attached to the CS 294 project they have chosen.
CS 298. Seminar on Teaching Introductory Computer Science. 1 Unit.
Faculty, undergraduates, and graduate students interested in teaching discuss topics raised by teaching computer science at the introductory level. Prerequisite: consent of instructor.
Same as: EDUC 298
CS 300. Departmental Lecture Series. 1 Unit.
Priority given to firstyear Computer Science Ph.D. students. CS Masters students admitted if space is available. Presentations by members of the department faculty, each describing informally his or her current research interests and views of computer science as a whole.
CS 309. Industrial Lectureships in Computer Science. 1 Unit.
Guest computer scientist. By arrangement. May be repeated for credit.
CS 309A. Cloud Computing Seminar. 1 Unit.
For science, engineering, computer science, business, education, medicine, and law students. Cloud computing is bringing information systems out of the back office and making it core to the entire economy. Furthermore with the advent of smarter machines cloud computing will be integral to building a more precision planet. This class is intended for all students who want to begin to understand the implications of this technology. Guest industry experts are public company CEOs who are either delivering cloud services or using cloud services to transform their businesses.
CS 315B. Parallel Computing Research Project. 3 Units.
Advanced topics and new paradigms in parallel computing including parallel algorithms, programming languages, runtime environments, library debugging/tuning tools, and scalable architectures. Research project. Prerequisite: consent of instructor.
CS 316. Advanced MultiCore Systems. 3 Units.
Indepth coverage of the architectural techniques used in modern, multicore chips for mobile and server systems. Advanced processor design techniques (superscalar cores, VLIW cores, multithreaded cores, energyefficient cores), cache coherence, memory consistency, vector processors, graphics processors, heterogeneous processors, and hardware support for security and parallel programming. Students will become familiar with complex tradeoffs between performancepowercomplexity and hardwaresoftware interactions. A central part of CS316 is a project on an open research question on multicore technologies. Prerequisites: EE 180 (formerly 108B) and EE 282. Recommended: CS 149.
CS 319. Topics in Digital Systems. 3 Units.
Advanced material is often taught for the first time as a topics course, perhaps by a faculty member visiting from another institution. May be repeated for credit.
CS 323. Automated Reasoning: Theory and Applications. 34 Units.
Intelligent computer agents must reason about complex, uncertain, and dynamic environments. This course is a graduate level introduction to automated reasoning techniques and their applications, covering logical and probabilistic approaches. Topics include: logical and probabilistic foundations, backtracking strategies and algorithms behind modern SAT solvers, stochastic local search and Markov Chain Monte Carlo algorithms, variational techniques, classes of reasoning tasks and reductions, and applications.
CS 325B. Data for Sustainable Development. 35 Units.
The sustainable development goals (SDGs) encompass many important aspects of human and ecosystem wellbeing that are traditionally difficult to measure. This projectbased course will focus on ways to use inexpensive, unconventional data streams to measure outcomes relevant to SDGs, including poverty, hunger, health, governance, and economic activity. Students will apply machine learning techniques to various projects outlined at the beginning of the quarter. The main learning goals are to gain experience conducting and communicating original research. Prior knowledge of machine learning techniques, such as from CS 221, CS 229, CS 231N, STATS 202, or STATS 216 is required. Open to both undergraduate and graduate students. Enrollment limited to 24. Students must apply for the class by filling out the form at https://goo.gl/forms/9LSZF7lPkHadix5D3. A permission code will be given to admitted students to register for the class.
Same as: EARTHSYS 162, EARTHSYS 262
CS 326. Topics in Advanced Robotic Manipulation. 34 Units.
This course provides a survey of the most important and influential concepts in autonomous robotic manipulation. It includes classical concepts that are still widely used and recent approaches that have changed the way we look autonomous manipulation. We cover approaches towards motion planning and control using visual and tactile perception as well as machine learning. This course is especially concerned with new approaches for overcoming challenges in generalization from experience, exploration of the environment, and learning representation so that these methods can scale to real problems. Students are expected to present one paper in a tutorial, debate a paper once from the Pro and once from the Con side. They are also expected to propose an original research project and work on it towards a research paper. Recommended: CS 131, 223A, 229 or equivalents.
CS 327A. Advanced Robotic Manipulation. 3 Units.
Advanced control methodologies and novel design techniques for complex humanlike robotic and bio mechanical systems. Class covers the fundamentals in operational space dynamics and control, elastic planning, human motion synthesis. Topics include redundancy, inertial properties, haptics, simulation, robot cooperation, mobile manipulation, humanfriendly robot design, humanoids and wholebody control. Additional topcs in emerging areas are presented by groups of students at the endofquarter minisymposium. Prerequisites: 223A or equivalent.
CS 328. Topics in Computer Vision. 3 Units.
Fundamental issues of, and mathematical models for, computer vision. Sample topics: camera calibration, texture, stereo, motion, shape representation, image retrieval, experimental techniques. May be repeated for credit. Prerequisites: 205, 223B, or equivalents.
CS 329. Topics in Artificial Intelligence. 3 Units.
Advanced material is often taught for the first time as a topics course, perhaps by a faculty member visiting from another institution. May be repeated for credit.
CS 329M. Topics in Artificial Intelligence: Algorithms of Advanced Machine Learning. 3 Units.
This advanced graduate course explores in depth several important classes of algorithms in modern machine learning. We will focus on understanding the mathematical properties of these algorithms in order to gain deeper insights on when and why they perform well. We will also study applications of each algorithm on interesting, realworld settings. Topics include: spectral clustering, tensor decomposition, Hamiltonian Monte Carlo, adversarial training, and variational approximation. Students will learn mathematical techniques for analyzing these algorithms and handson experience in using them. We will supplement the lectures with latest papers and there will be a significant research project component to the class. Prerequisites: Probability (CS 109), linear algebra (MATH 113), machine learning (CS 229), and some coding experience.
CS 331B. Representation Learning in Computer Vision. 3 Units.
A representation performs the task of converting an observation in the real world (e.g. an image, a recorded speech signal, a word in a sentence) into a mathematical form (e.g. a vector). This mathematical form is then used by subsequent steps (e.g. a classifier) to produce the outcome, such as classifying an image or recognizing a spoken word. Forming the proper representation for a task is an essential problem in modern AI. In this course, we focus on 1) establishing why representations matter, 2) classical and moderns methods of forming representations in Computer Vision, 3) methods of analyzing and probing representations, 4) portraying the future landscape of representations with generic and comprehensive AI/vision systems over the horizon, and finally 5) going beyond computer vision by talking about nonvisual representations, such as the ones used in NLP or neuroscience. The course will heavily feature systems based on deep learning and convolutional neural networks. We will have several teaching lectures, a number of prominent external guest speakers, as well as presentations by the students on recent papers and their projects. nnRequired Prerequisites: CS131A, CS231A, CS231B, or CS231N. If you do not have the required prerequisites, please contact a member of the course staff before enrolling in this course.
CS 332. Advanced Survey of Reinforcement Learning. 3 Units.
This class will provide a core overview of essential topics and new research frontiers in reinforcement learning. Planned topics include: model free and model based reinforcement learning, policy search, Monte Carlo Tree Search planning methods, off policy evaluation, exploration, imitation learning, temporal abstraction/hierarchical approaches, safety and risk sensitivity, humanintheloop RL, inverse reinforcement learning, learning to communicate, and insights from human learning. Students are expected to create an original research paper on a related topic. Prerequisites: CS221 or AA238/CS238 or CS234 or CS229 or similar experience.
CS 333. Safe and Interactive Robotics. 34 Units.
Once confined to the manufacturing floor, robots are quickly entering the public space at multiple levels: drones, surgical robots, service robots, and selfdriving cars are becoming tangible technologies impacting the human experience. Our goal in this class is to learn about and design algorithms that enable robots to reason about their actions, interact with one another, the humans, and the environment they live in, as well as plan safe strategies that humans can trust and rely on.nThis is a projectbased graduate course that studies algorithms in formal methods, control theory, and robotics, which can improve the stateoftheart humanrobot systems. We focus on designing new algorithms for enhancing safe and interactive autonomy. nnRecommended: Introductory course in AI and robotics.
CS 334A. Convex Optimization I. 3 Units.
Convex sets, functions, and optimization problems. The basics of convex analysis and theory of convex programming: optimality conditions, duality theory, theorems of alternative, and applications. Leastsquares, linear and quadratic programs, semidefinite programming, and geometric programming. Numerical algorithms for smooth and equality constrained problems; interiorpoint methods for inequality constrained problems. Applications to signal processing, communications, control, analog and digital circuit design, computational geometry, statistics, machine learning, and mechanical engineering. Prerequisite: linear algebra such as EE263, basic probability.
Same as: CME 364A, EE 364A
CS 337. AIAssisted Care. 14 Unit.
AI has been advancing quickly, with its impact everywhere. In healthcare, innovation in AI could help transforming of our healthcare system. This course offers a diverse set of research projects focusing on cutting edge computer vision and machine learning technologies to solve some of healthcare's most important problems. The teaching team and teaching assistants will work closely with students on research projects in this area. Research projects include Care for Senior at Senior Home, Surgical Quality Analysis, AI Assisted Parenting, Burn Analysis & Assessment and more. AI areas include Video Understanding, Image Classification, Objected Detection, Segmentation, Action Recognition, Deep Learning, Reinforcement Learning, HCI, and more. The course is open to students in both school of medicine and school of engineering.
Same as: MED 277
CS 340. Topics in Computer Systems. 34 Units.
Topics vary every quarter, and may include advanced material being taught for the first time. May be repeated for credit.
CS 341. Project in Mining Massive Data Sets. 3 Units.
Team project in data mining and machine learning of very largescale data, including the problem statement, implementation, and evaluation of a solution. Students work on real problems on realworld data. The course provides access to large realworld data and access to big data cloud computing infrastructure (Amazon EC2, Google Cloud Platform). Some lectures on relevant materials will be given (Hadoop, Spark, Hive, Amazon EC2) as well as other topics of relevance to projects.
CS 344. Topics in Computer Networks. 3 Units.
Highperformance network system design. Students will work in teams of two to build a fully functioning Internet router. Students will design the control plane in C on a linux host and will design the data plane in the new P4 language on the NetFPGA 4 x 10GE switch. For the midterm milestone, teams must demonstrate that their routers can interoperate with the other teams by building a small scale datacenter topology. In the final 34 weeks of the class, teams will participate in an openended design challenge. Prerequisites: At least one student in each team must have taken CS144 at Stanford and completed Lab 3 (static router), Verilog experience for one member of each team is helpful but not required. Advanced material is often taught for the first time as a topics course, perhaps by a faculty member visiting from another institution. May be repeated for credit.
CS 345S. Dataintensive Systems for the Next 1000x. 34 Units.
The last decade saw enormous shifts in the design of largescale dataintensive systems due to the rise of Internet services, cloud computing, and Big Data processing. Where will we see the next 1000x increases in scale and data volume, and how should dataintensive systems accordingly evolve? This course will critically examine a range of trends, including the Internet of Things, drones, smart cities, and emerging hardware capabilities, through the lens of software systems research and design. Students will perform a comparative analysis by reading and discussing cuttingedge research while performing their own original research. Prerequisites: Strong background in software systems, especially databases (CS 245) and distributed systems (CS 244B), and/or machine learning (CS 229). Undergraduates who have completed CS 245 are strongly encouraged to attend.
CS 348A. Computer Graphics: Geometric Modeling & Processing. 34 Units.
The mathematical tools needed for the geometrical aspects of computer graphics and especially for modeling smooth shapes. Fundamentals: homogeneous coordinates, transformations, and perspective. Theory of parametric and implicit curve and surface models: polar forms, Bézier arcs and de Casteljau subdivision, continuity constraints, Bsplines, tensor product, and triangular patch surfaces. Subdivision surfaces and multiresolution representations of geometry. Representations of solids and conversions among them. Surface reconstruction from scattered data points. Geometry processing on meshes, including simplification and parameterization. Prerequisite: linear algebra at the level of CME103. Recommended: 248.
CS 348B. Computer Graphics: Image Synthesis Techniques. 34 Units.
Intermediate level, emphasizing highquality image synthesis algorithms and systems issues in rendering. Topics include: Reyes and advanced rasterization, including motion blur and depth of field; ray tracing and physically based rendering; Monte Carlo algorithms for rendering, including direct illumination and global illumination; path tracing and photon mapping; surface reflection and light source models; volume rendering and subsurface scattering; SIMD and multicore parallelism for rendering. Written assignments and programming projects. Prerequisite: 248 or equivalent. Recommended: Fourier analysis or digital signal processing.
CS 348C. Computer Graphics: Animation and Simulation. 3 Units.
Core mathematics and methods for computer animation and motion simulation. Traditional animation techniques. Physicsbased simulation methods for modeling shape and motion: particle systems, constraints, rigid bodies, deformable models, collisions and contact, fluids, and fracture. Animating natural phenomena. Methods for animating virtual characters and crowds. Additional topics selected from datadriven animation methods, realism and perception, animation systems, motion control, realtime and interactive methods, and multisensory feedback. Recommended: CS 148 and/or 205A. Prerequisite: linear algebra.
CS 348K. Visual Computing Systems. 34 Units.
Visual computing tasks such as computational photography, image/video analysis, 3D reconstruction, and realtime 3D graphics are key responsibilities of modern computer systems ranging from sensorrich smart phones, autonomous robots, and large data centers. These workloads demand exceptional system efficiency and this course examines the key ideas, techniques, and challenges associated with the design of parallel (and heterogeneous) systems that execute and accelerate visual computing applications. This course is intended for graduate and advanced undergraduatelevel systems students interested in architecting efficient graphics, image processing, and computer vision platforms (both new hardware architectures and domainoptimized programming frameworks) and for students in graphics, vision, and ML that seek to understand throughput computing principles so they can develop scalablenalgorithms that map efficiently these future platforms. Students will perform daily research paper readings, complete simple programming assignments, and compete a selfselected term project. Prerequisites: CS 107 or equivalent. Recommended: Parallel computing or computer architecture (CS 149, EE 282), some background in techniques in either deep learning (CS 230, CS 231N), computer vision (CS 231A), digital image processing (CS 232).
CS 349. Topics in Programming Systems. 3 Units.
Advanced material is often taught for the first time as a topics course, perhaps by a faculty member visiting from another institution. May be repeated for credit.
CS 349D. Cloud Computing Technology. 3 Units.
The largest change in the computer industry over the past five years has arguably been the emergence of cloud computing: organizations are increasingly moving their workloads to managed public clouds and using new, globalscale services that were simply not possible in private datacenters. However, both building and using cloud systems remains a black art with many difficult research challenges. This research seminar will cover industry and academic work on cloud computing and survey challenges including programming interfaces, cloud native applications, resource management, pricing, availability and reliability, privacy and security. Students will also propose and develop an original research project.n nPrerequisites: For graduate students, background in computer systems (CS 240, 244, 244B or 245) is strongly recommended. Undergrads will need instructor's approval.
CS 349E. Understanding Datacenter Software Dynamics. 3 Units.
A onetime graduate course for MS and PhD students (and possibly a few unusually savvy undergraduate Seniors). This is a programming lab course, actively building software tools to observe the detailed behavior of transactionoriented datacenterlike software. Students will observe and understand sources of userfacing tail latency, including that stemming from resource contention, crossprogram interference, bad software locking, and simple design errors. The course is particularly relevant for students who like performance mysteries in complex realworld computing environments such as Google datacenters. Students who successfully complete the course will be able to use and build lowoverhead software tools to observe complex database or datacenterlike transaction software, will be able to make proper performance measurements, will be able to identify the root causes for many longtail slow transactions, and will be able to articulate what performance issues they find and how to fix them. Prerequisites: Computer architecture, C/C++ programming, some exposure to networking, nsome exposure to Linux or other operating system design, ability to construct and run programs in a Linux/C++/ssh environment.
CS 349F. Technology for Financial Systems. 1 Unit.
Financial systems have spurred technological innovation and, in turn, are driven by cuttingedge technological developments. This seminar course explores the synergy. Students will learn from faculty and industry experts (from the finance and tech industries) how to build faster, fairer and better fintech. Topics include network infrastructure: packet switch architectures, data center fabrics, ultralow latency trading systems and financial exchange fabrics; cloud computing infrastructure: building largescale risk computation platforms using virtual machines, containers and serverless computing; challenges and opportunities in building cloudnative financial exchanges: the role of fairness and synchronized clocks; AI/ML in fintech; and trading systems based on distributed ledger technologies. Recommended: Knowledge of basic Networking , OS or Distributed Systems (CS 140, CS 144) and basic probability courses (CS 109, EE 178).
CS 350. Secure Compilation. 3 Units.
This course explores the field of secure compilation, which sits at the intersection between security and programming languages. The course covers the following topics: threat models for secure compilers, formal criteria for secure compilers to adhere to, security relevance of secure compilation criteria, security architectures employed to achieve secure compilation, proof techniques for secure compilation with a focus on backtranslation.
CS 352. PseudoRandomness. 34 Units.
Pseudorandomness is the widely applicable theory of efficiently generating objects that look random, despite being constructed using little or no randomness. Since psudorandom objects can replace uniformly distributed ones (in a welldefined sense), one may view pseudorandomness as an extension of our understanding of randomness through the computational lens. We will study the basic tools pseudorandomness, such as limited independence, randomness extractors, expander graphs, and pseudorandom generators. We will also discuss the applications of pseudrandomness to derandomization, cryptography and more. We will cover classic result as well as cuttingedge techniques. Prerequisites: CS 154 and CS 161, or equivalents.
CS 354. Topics in Intractability: Unfulfilled Algorithmic Fantasies. 3 Units.
Over the past 45 years, understanding NPhardness has been an amazingly useful tool for algorithm designers. This course will expose students to additional ways to reason about obstacles for designing efficient algorithms. Topics will include unconditional lower bounds (query and communicationcomplexity), total problems, Unique Games, averagecase complexity, and finegrained complexity. Prerequisites: CS 161 or equivalent. CS 254 recommended but not required.
CS 355. Advanced Topics in Cryptography. 3 Units.
Topics: Pseudo randomness, multiparty computation, pairingbased and latticebased cryptography, zero knowledge protocols, and new encryption and integrity paradigms. May be repeated for credit. Prerequisite: 255.
CS 356. Topics in Computer and Network Security. 3 Units.
Research seminar covering foundational work and current topics in computer and network security. Students will read and discuss published research papers as well as complete an original research project in small groups. Open to Ph.D. and masters students as well as advanced undergraduate students. Prerequisites: While the course has no official prerequisites, students need a mature understanding of software systems and networks to be successful. We strongly encourage students to first take CS155: Computer and Network Security.
CS 358. Topics in Programming Language Theory. 3 Units.
Advanced material is often taught for the first time as a topics course, perhaps by a faculty member visiting from another institution. May be repeated for credit.
CS 359. Topics in the Theory of Computation. 3 Units.
Advanced material is often taught for the first time as a topics course, perhaps by a faculty member visiting from another institution. May be repeated for credit.
CS 361. Engineering Design Optimization. 34 Units.
Design of engineering systems within a formal optimization framework. This course covers the mathematical and algorithmic fundamentals of optimization, including derivative and derivativefree approaches for both linear and nonlinear problems, with an emphasis on multidisciplinary design optimization. Topics will also include quantitative methodologies for addressing various challenges, such as accommodating multiple objectives, automating differentiation, handling uncertainty in evaluations, selecting design points for experimentation, and principled methods for optimization when evaluations are expensive. Applications range from the design of aircraft to automated vehicles. Prerequisites: some familiarity with probability, programming, and multivariable calculus.
Same as: AA 222
CS 368. Algorithmic Techniques for Big Data. 3 Units.
Designing algorithms for efficient processing of large data sets poses unique challenges. This course will discuss algorithmic paradigms that have been developed to efficiently process data sets that are much larger than available memory. We will cover streaming algorithms and sketching methods that produce compact datanstructures, dimension reduction methods that preserve geometric structure, efficient algorithms for numerical linear algebra, graph sparsification methods, as well as impossibility results for these techniques.
CS 369. Topics in Analysis of Algorithms. 3 Units.
Advanced material is often taught for the first time as a topics course, perhaps by a faculty member visiting from another institution. May be repeated for credit.
CS 369H. Hierarchies of Integer Programming Relaxations. 3 Units.
Mathematical programming relaxations of integer programming formulations are a popular way to apply convex optimization techniques to hard combinatorial optimization problems. Such relaxations can be made closer to their integer programming counterparts by adding constraints; a systematic way to achieve this is via hierarchies of relaxations. Several such hierarchies are wellstudied in the literature: LovaszSchrijver, SheraliAdams and the ParriloLasserre sumofsquares (SoS) hierarchy. Recently, these hierarchies have received a lot of attention due to their potential to make progress on long standing algorithmic questions, and connections to various other areas such as computational complexity, combinatorial and polynomial optimization, quantum computing, proof complexity and so on. In this course we will cover recent research results in this area for problems arising from optimization, machine learning, computational complexity and more, discussing both lower and upper bounds. Prerequisites: Mathematical maturity (required), exposure to algorithms (strongly recommended), and optimization (recommended).
CS 369L. Algorithmic Perspective on Machine Learning. 3 Units.
Many problems in machine learning are intractable in the worst case, andnpose a challenge for the design of algorithms with provable guarantees. In this course, we will discuss several success stories at the intersection of algorithm design and machine learning, focusing on devising appropriate models and mathematical tools to facilitate rigorous analysis.
CS 369M. Metric Embeddings and Algorithmic Applications. 3 Units.
Low distortion embeddings of finite metric spaces is a topic at the intersection of mathematics and theoretical computer science. Much progress in this area in recent years has been motivated by algorithmic applications. Mapping complicated metrics of interest to simpler metrics (normed spaces, trees, and so on) gives access to a powerful algorithmic toolkit for approximation algorithms, online algorithms as well as for efficient search and indexing of large data sets. In a different vein, convex relaxations are a useful tool for graph partitioning problems; central to the analysis are metric embedding questions for certainly computationally defined metrics. In this course, we will see several classical and recent results on metric embeddings with a focus on algorithmic applications. Students will be expected to have a strong background in algorithms and probability.
CS 371. Computational Biology in Four Dimensions. 3 Units.
Cuttingedge research on computational techniques for investigating and designing the threedimensional structure and dynamics of biomolecules, cells, and everything in between. These techniques, which draw on approaches ranging from physicsbased simulation to machine learning, play an increasingly important role in drug discovery, medicine, bioengineering, and molecular biology. Course is devoted primarily to reading, presentation, discussion, and critique of papers describing important recent research developments. Prerequisite: CS 106A or equivalent, and an introductory course in biology or biochemistry. Recommended: some experience in mathematical modeling (does not need to be a formal course).
Same as: BIOMEDIN 371, BIOPHYS 371, CME 371
CS 373. Statistical and Machine Learning Methods for Genomics. 3 Units.
Introduction to statistical and computational methods for genomics. Sample topics include: expectation maximization, hidden Markov model, Markov chain Monte Carlo, ensemble learning, probabilistic graphical models, kernel methods and other modern machine learning paradigms. Rationales and techniques illustrated with existing implementations used in population genetics, disease association, and functional regulatory genomics studies. Instruction includes lectures and discussion of readings from primary literature. Homework and projects require implementing some of the algorithms and using existing toolkits for analysis of genomic datasets.
Same as: BIO 268, BIOMEDIN 245, GENE 245, STATS 345
CS 375. LargeScale Neural Network Modeling for Neuroscience. 13 Unit.
Introduction to designing, building, and training neural networks for modeling brain and behavioral data, including: deep convolutional neural network models of sensory systems (vision, audition, somatosensation); recurrent neural networks for dynamics, memory and attention; integration of variational and generative methods for cognitive modeling; and methods and metrics for comparing such models to realworld neural data. Attention will be given both to established methods as well as cuttingedge techniques. Students will learn conceptual bases for deep neural network models, and will also implement learn to implement and train largescale models in Tensorflow using GPUs. Requirements: Fluency in Unix shell and Python programming, familiarity with differential equations, linear algebra, and probability theory, and one or more courses in cognitive or systems neuroscience.
Same as: PSYCH 249
CS 376. HumanComputer Interaction Research. 34 Units.
Prepares students to conduct original HCI research by reading and discussing seminal and cuttingedge research papers. Main topics are ubiquitous computing, social computing, and design and creation; breadth topics include HCI methods, programming, visualization, and user modeling. Student pairs perform a quarterlong research project. Prerequisites: For CS and Symbolic Systems undergraduates/masters students, an A or better in CS 147 or CS 247. No prerequisite for PhD students or students outside of CS and Symbolic Systems.
CS 377. Topics in HumanComputer Interaction. 23 Units.
Contents change each quarter. May be repeated for credit. See http://hci.stanford.edu/academics for offerings.
CS 377D. Topics in Learning and Technology: d.compress  Designing Calm. 3 Units.
Contents of the course change each year. The course can be repeated. Stress silently but steadily damages physical and emotional wellbeing, relationships, productivity, and our ability to learn and remember. This highly experiential and projectoriented class will focus on designing interactive technologies to enable calm states of cognition, emotion, and physiology for better human health, learning, creativity and productivity.
Same as: EDUC 328A
CS 377E. Designing Solutions to Global Grand Challenges. 34 Units.
In this course we creatively apply information technologies to collectively attack Global Grand Challenges (e.g., global warming, rising healthcare costs and declining access, and ensuring quality education for all). Interdisciplinary student teams will carry out needfinding within a target domain, followed by brainstorming to propose a quarter long project. Teams will spend the rest of the quarter applying usercentered design methods to rapidly iterate through design, prototyping, and testing of their solutions. This course will interweave a weekly lecture with a weekly studio session where students apply the techniques handson in a smallscale, supportive environment.
CS 377G. Designing Serious Games. 34 Units.
Over the last few years we have seen the rise of "serious games" to promote understanding of complex social and ecological challenges, and to create passion for solving them. This projectbased course provides an introduction to game design principals while applying them to games that teach. Run as a handson studio class, students will design and prototype games for social change and civic engagement. We will learn the fundamentals of games design via lecture and extensive reading in order to make effective games to explore issues facing society today. The course culminates in an endof quarter open house to showcase our games. Prerequisite: CS147 or equivalent. 247 recommended, but not required.
CS 377I. Designing for Complexity. 34 Units.
Complex problems require sophisticated approaches. In this projectbased handson course, students explore the design of systems, information and interface for human use. We will model the flow of interactions, data and context, and crafting a design that is useful, appropriate and robust. Students will create utilities or games as a response to the challenges presented. We will also examine the ethical consequences of design decisions and explore current issues arising from unintended consequences. Prerequisite: CS 147 or equivalent. 247 recommended, but not required. May be repeat for credit.
CS 377J. Designing Systems for Collaboration, Cooperation, and Collective Action. 3 Units.
This projectbased class focuses on the design of systems that support large groups to collaborate, cooperate, and act together. A large body of research in HumanComputer Interaction and Computer Supported Cooperative Work is devoted to the design of systems that assist large groups to come together and aggregate their efforts, whether in the form of information, code, or people power. Examples of these sociotechnical systems include Wikipedia, Facebook groups, and Change.org. Students will read papers in the HCI literature and participate in discussions that analyze the design of these systems, the various stakeholders, and how the systems play out in the real world. Prerequisites: CS 147; CS 376 recommended but not required.
CS 377N. Introduction to the Design of Smart Products. 34 Units.
This course will focus on the technical mechatronic skills as well as the human factors and interaction design considerations required for the design of smart products and devices. Students will learn techniques for rapid prototyping of smart devices, best practices for physical interaction design, fundamentals of affordances and signifiers, and interaction across networked devices. Students will be introduced to design guidelines for integrating electrical components such as PCBs into mechanical assemblies and consider the physical form of devices, not just as enclosures but also as a central component of the smart product. Prerequisites include: CS106A and E40 highly recommended, or instructor approval.
Same as: ME 216M
CS 377P. Advanced User Interface Design Patterns. 3 Units.
User interface design is about creating the most effective, intuitive design possible to help users achieve a specific goal. While understanding users is one part of the equation, the other part is a strong understanding of user interface design rules and patterns that you can apply to solve their needs. This course will deep dive into user interface design across mobile, desktop, and wearable platforms covering common patterns, when to use them, and when to break them. Each week will cover a different user interface design challenge and explore the patterns in areas such as data input, search & filters, tables and lists, content organization, navigation, dark patterns and more. Through the use of in class exercises, integrated design challenges, and an exploration of examples, students will leave the class knowing how to integrate user interface patterns into their design work to create powerful, effective digital experiences. Prerequisite: CS 147 or equivalent. 247 recommended but not required.
CS 377Q. Designing for Accessibility. 34 Units.
Designing for accessibility is a valuable and important skill in the UX community. As businesses are becoming more aware of the needs and scope of people with some form of disability, the benefits of universal design, where designing for accessibility ends up benefitting everyone, are becoming more apparent. This class introduces fundamental Human Computer Interaction (HCI) concepts and skills in designing for accessibility. Student projects will identify an accessibility need, prototype a design solution, and conduct a user study with a person with a disability. Prerequisites: Background in humancentered design (e.g., CS 147, CS 247, ME 115A, or a d.school class) is required. Web or mobile programming experience (e.g., CS 142), or experience with qualitative user studies may be helpful. The class involves team design projects and prototyping.
CS 377U. Understanding Users. 34 Units.
This projectbased class focuses on understanding the use of technology in the world. Students will learn generative and evaluative research methods to explore how systems are appropriated into everyday life in a quarterlong project where they design, implement and evaluate a novel mobile application. Quantitative (e.g. A/B testing, instrumentation, analytics, surveys) and qualitative (e.g. diary studies, contextual inquiry, ethnography) methods and their combination will be covered along with practical experience applying these methods in their project. Prerequisites: CS 147, 193A/193P (or equivalent mobile programming experience).
CS 379. Interdisciplinary Topics. 3 Units.
Advanced material is often taught for the first time as a topics course, perhaps by a faculty member visiting from another institution. May be repeated for credit.
CS 379C. Computational Models of the Neocortex. 3 Units.
This course emphasizes approaches to scaling the technologies of computer science and systems neuroscience to take advantage of the exponential trend in computational power known as Moore's Law. Modern methods in signal processing and machine learning are combined with technologies for managing large datasets common in industry. Classes feature scientists presenting novel approaches for analyzing the structure and function of complex neural circuits. Grading is based on class participation (30%), a project proposal due at midterm (20%), and a final project demonstration and report due by the end of finals (50%). Team projects are encouraged, especially multidisciplinary collaborations. Prerequisites are basic highschool biology, good math skills and familiarity with machine learning. Some background in computer vision and signal processing is important for projects in structural analysis. Familiarity with modern artificial neural network technologies is a plus for projects in functional analysis. For more detail, see http://www.stanford.edu/class/cs379c/ with special attention to the CALENDAR and DISCUSSION tabs from past classes available by following the ARCHIVES link.
CS 390A. Curricular Practical Training. 1 Unit.
Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in internship work and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. 390 A, B, and C may each be taken once.
CS 390B. Curricular Practical Training. 1 Unit.
Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in internship work and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. 390A,B,C may each be taken once.
CS 390C. Curricular Practical Training. 1 Unit.
Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in internship work and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. 390A,B,C may each be taken once.
CS 390D. Parttime Curricular Practical Training. 1 Unit.
For qualified computer science PhD students only. Permission number required for enrollment; see the CS PhD program administrator in Gates room 196. May be taken just once; not repeatable. Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in research and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. Students on F1 visas should be aware that completing 12 or more months of fulltime CPT will make them ineligible for Optional Practical Training (OPT).
CS 390P. Parttime Curricular Practical Training. 1 Unit.
For qualified computer science PhD students only. Permission number required for enrollment; see the CS PhD program administrator in Gates room 196. May be taken just once; not repeatable. Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in research and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. Students on F1 visas should be aware that completing 12 or more months of fulltime CPT will make them ineligible for Optional Practical Training (OPT).
CS 390Q. PartTime Curricular Practical Training. 1 Unit.
For qualified computer science PhD students only. Permission number required for enrollment; see the CS PhD program administrator in Gates room 196. May be taken just once; not repeatable. Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in research and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. Students on F1 visas should be aware that completing 12 or more months of fulltime CPT will make them ineligible for Optional Practical Training (OPT).
CS 390R. PartTime Curricular Practical Training. 1 Unit.
For qualified computer science PhD students only. Permission number required for enrollment; see the CS PhD program administrator in Gates room 196. May be taken just once; not repeatable. Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in research and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. Students on F1 visas should be aware that completing 12 or more months of fulltime CPT will make them ineligible for Optional Practical Training (OPT).
CS 390S. PartTime CPT. 1 Unit.
For qualified computer science PhD students only. Permission number required for enrollment; see the CS PhD program administrator in Gates room 196. May be taken just once; not repeatable. Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in research and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. Students on F1 visas should be aware that completing 12 or more months of fulltime CPT will make them ineligible for Optional Practical Training (OPT).
CS 390T. PartTime CPT. 1 Unit.
For qualified computer science PhD students only. Permission number required for enrollment; see the CS PhD program administrator in Gates room 196. May be taken just once; not repeatable. Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in research and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. Students on F1 visas should be aware that completing 12 or more months of fulltime CPT will make them ineligible for Optional Practical Training (OPT).
CS 390U. PartTime Curricular Practical Training. 1 Unit.
For qualified computer science PhD students only. Permission number required for enrollment; see the CS PhD program administrator in Gates room 196. May be taken just once; not repeatable. Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in research and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. Students on F1 visas should be aware that completing 12 or more months of fulltime CPT will make them ineligible for Optional Practical Training (OPT).
CS 390V. Parttime Curricular Practical Training. 1 Unit.
For qualified computer science PhD students only. Permission number required for enrollment; see the CS PhD program administrator in Gates room 196. May be taken just once; not repeatable. Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in research and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. Students on F1 visas should be aware that completing 12 or more months of fulltime CPT will make them ineligible for Optional Practical Training (OPT).
CS 390W. Parttime Curricular Practical Training. 1 Unit.
For qualified computer science PhD students only. Permission number required for enrollment; see the CS PhD program administrator in Gates room 196. May be taken just once; not repeatable. Educational opportunities in high technology research and development labs in the computing industry. Qualified computer science students engage in research and integrate that work into their academic program. Students register during the quarter they are employed and complete a research report outlining their work activity, problems investigated, results, and followon projects they expect to perform. Students on F1 visas should be aware that completing 12 or more months of fulltime CPT will make them ineligible for Optional Practical Training (OPT).
CS 393. Computer Laboratory. 19 Unit.
For CS graduate students. A substantial computer program is designed and implemented; written report required. Recommended as a preparation for dissertation research. Register using the section number associated with the instructor. Prerequisite: consent of instructor.
CS 395. Independent Database Project. 16 Unit.
For graduate students in Computer Science. Use of database management or file systems for a substantial application or implementation of components of database management system. Written analysis and evaluation required. Register using the section number associated with the instructor. Prerequisite: consent of instructor.
CS 399. Independent Project. 19 Unit.
Letter grade only. This course is for graduate students only. Undergraduate students should enroll in CS199.
CS 399P. Independent Project. 19 Unit.
Graded satisfactory/no credit. This course is for graduate students only. Undergraduate students should enroll in CS199P.
CS 402. Beyond Bits and Atoms: Designing Technological Tools. 34 Units.
This course is a practicum in the design of technologyenabled curricula and handson learning environments. It focuses on the theories, concepts, and practices necessary to design effective, lowcost educational technologies that support learning in all contexts for a variety of diverse learners. We will explore theories and design frameworks from constructivist and constructionist learning perspectives, as well as the lenses of critical pedagogy, Universal Design for Learning (UDL), and interaction design for children. The course will concretize theories, concepts, and practices in weekly presentations (including examples) from industry experts with significant backgrounds and proven expertise in designing successful, evidencebased, educational technology products. The Practicum provides the design foundation for EDUC 211 / CS 402 L, a handson lab focused on introductory prototyping and the fabrication of incipient interactive, educational technologies. (No prior prototyping experience required.) Interested students must also register for either EDUC 211 or CS 402L, complete the application at http://bit.ly/educ236 by January 4 at 5 p.m., and come to the first class at 8:30 a.m. in CERAS 108.
Same as: EDUC 236
CS 402L. Beyond Bits and Atoms  Lab. 13 Unit.
This lab course is a handson introduction to the prototyping and fabrication of tangible, interactive technologies, with a special focus on learning and education. (No prior prototyping experience required.) It focuses on the design and prototyping of lowcost technologies that support learning in all contexts for a variety of diverse learners. You will be introduced to, and learn how to use stateoftheart fabrication machines (3D printers, laser cutters, Go Go Boards, Sensors, etc.) to design educational toolkits, educational toys, science kits, and tangible user interfaces. The lab builds on the the theoretical and evidencebased foundations explored in the EDUC 236 / CS 402 Practicum. Interested students must also register for either EDUC 236 or CS 402, complete the application at http://bit.ly/educ236 by January 4 at 5 p.m., and come to the first class at 8:30 a.m. in CERAS 108.
Same as: EDUC 211
CS 421. Designing AI to Cultivate Human WellBeing. 2 Units.
Overview: This is a multidisciplinary crosslisted course focused on the goal of helping to build AI technology that promotes human flourishing. This course aims to expose (a) GSB students to deep learning and AI techniques focused on human wellbeing, and (b) CS students to behavioral science and design thinking, as well as frameworks and research to better understand human wellbeing and humancentered designs. Students will form crossdisciplinary teams and work on a final project that delves into an industry and proposes a detailed 5year road map on how that industry might evolve with AI algorithms that focused on human wellbeing. Course Description: The past decade of machine learning has given us selfdriving cars, practical speech recognition, video game playing robots, effective web search, and revolutionary drug treatments. While Artificial Intelligence has been impressive in achieving these specific tasks, this does not always correspond to the broader goal of cultivating human wellbeing. The goal of this class is to bridge the gap between technology and societal objectives: How do we design AI to promote human flourishing? On Day 1, we draw on behavioral research to discuss what makes humans thrive. Behavioral research shows that for people to flourish, they need meaning, which involves an ability to understand and value others, a sense of belonging, and knowledge that they are making a contribution bigger than themselves. The conditions for this occur when people feel they have the resources and insight to establish a sense of meaning for themselves. Students will draw on this research to focus on building AI technology that effectively understands, communicates with, collaborates with and augment people. On days 25, leaders across industries (e.g., healthcare, transportation) that fundamentally affect human wellbeing will participate in lightning round exchanges to delve deeply into the challenge of building technology focused on human wellbeing, followed by interactive discussion with students. On the last day, the fourperson crossdisciplinary teams will present their 2 page white paper proposals to invited guests. Of note: this course is entirely about highlevel "programming" and provides no technical insight on machine learning, datamining or statistical pattern recognition.
CS 424M. Learning Analytics and Computational Modeling in Social Science. 34 Units.
Computational modeling and datamining are dramatically changing the physical sciences, and more recently also the social and behavioral sciences. Traditional analysis techniques are insufficient to investigate complex dynamic social phenomena as social networks, online gaming, diffusion of innovation, opinion dynamics, classroom behavior, and other complex adaptive systems. In this course, we will learn about how modeling, network theory, and basic datamining can support research in cognitive, and social sciences, in particular around issues of learning, cognitive development, and educational policy.
Same as: EDUC 390
CS 428. Computation and Cognition: The Probabilistic Approach. 3 Units.
This course will introduce the probabilistic approach to cognitive science, in which learning and reasoning are understood as inference in complex probabilistic models. Examples will be drawn from areas including concept learning, causal reasoning, social cognition, and language understanding. Formal modeling ideas and techniques will be discussed in concert with relevant empirical phenomena.
Same as: PSYCH 204
CS 431. Highlevel Vision: From Neurons to Deep Neural Networks. 13 Unit.
Interdisciplinary seminar focusing on understanding how computations in the brain enable rapid and efficient object perception. Covers topics from multiple perspectives drawing on recent research in Psychology, Neuroscience, and Computer Science. Emphasis on discussing recent empirical findings, methods and theoretical debates in the field.
Same as: PSYCH 250
CS 448. Topics in Computer Graphics. 34 Units.
Topic changes each quarter. Recent topics: computational photography, datanvisualization, character animation, virtual worlds, graphics architectures, advanced rendering. See http://graphics.stanford.edu/courses for offererings and prerequisites. May be repeated for credit.
CS 448B. Data Visualization. 3 Units.
Techniques and algorithms for creating effective visualizations based on principles from graphic design, visual art, perceptual psychology, and cognitive science. Topics: graphical perception, data and image models, visual encoding, graph and tree layout, color, animation, interaction techniques, automated design. Lectures, reading, and project. Prerequisite: one of 147, 148, or equivalent.
CS 448H. Topics in Computer Graphics: Agile Hardware Design. 3 Units.
Topic changes each quarter. Recent topics: computational photography, data visualization, character animation, virtual worlds, graphics architectures, advanced rendering. See http://graphics.stanford.edu/courses for offerings and prerequisites. May be repeated for credit.
CS 448I. Computational Imaging and Display. 3 Units.
Spawned by rapid advances in optical fabrication and digital processing power, a new generation of imaging technology is emerging: computational cameras at the convergence of applied mathematics, optics, and highperformance computing. Similar trends are observed for modern displays pushing the boundaries of resolution, contrast, 3D capabilities, and immersive experiences through the codesign of optics, electronics, and computation. This course serves as an introduction to the emerging field of computational imaging and displays. Students will learn to master bits and photons.
Same as: EE 367
CS 448M. Making Making Machines for Makers. 34 Units.
An introductory, projectbased exploration of systems and processes for making things using computeraided design and manufacturing, and an introduction to machines and machine tools. Emphasis will be placed on building novel machines and related software for use by "makers" and interactive machines. Course projects will encourage students to understand, build and modify/hack a sequence of machines: (1) an embroidery machine for custom textiles, (2) a paper cutting machine (with drag knife) for ornamental design, and (3) an XY plotter with Arduino controller. Through these projects students explore both (i) principles of operation (mechanical, stepper motors and servos, electrical control, computer software), and (ii) computer algorithms (trajectory, tool path, design). Current trends in interactive machines will be surveyed. The course will culminate in a final studentselected project. Prerequisite: CS106A or equivalent programming experience. Students should have a desire to make things.
CS 448V. Topics in Computer Graphics: Computational Video Manipulation. 3 Units.
The goal of this graduate (advanced undergraduate also welcome) seminar is to survey recent work on computational video analysis and manipulation techniques. We will learn how to acquire, represent, edit and remix video. Several popular video manipulation algorithms will be presented, with an emphasis on using these techniques to build practical systems. Students will have the opportunity to acquire their own video and develop the processing tools needed to computationally analyze and manipulate it.
CS 468. Topics in Geometric Algorithms: Machine Learning for 3D Data. 3 Units.
Contents of this course change with each offering. Past offerings have included geometric matching, surface reconstruction, collision detection, computational topology. May be repeated for credit. Winter 2013/14 iteration will cover Computational Symmetry & Regularity and spring quarter 2013/14 will cover datadriven shape analysis. Prerequisites: MATH 52 or equivalent, basic coding.
CS 476A. Music, Computing, Design I: The Art of Design. 34 Units.
Creative design for computer music software. Programming, audiovisual design, as well as software design for musical tools, instruments, toys, and games. Provides paradigms and strategies for designing and building music software, with emphases on interactive systems, aesthetics, and artful product design. Course work includes several programming assignments and a "design+implement" final project. Prerequisite: experience in C/C++ and/or Java.See https://ccrma.stanford.edu/courses/256a/.
Same as: MUSIC 256A
CS 476B. Music, Computing, Design II: Virtual and Augmented Reality for Music. 34 Units.
Aesthetics, design, and exploration of creative musical applications of virtual reality (VR) and augmented reality (AR), centered around VR and mobile technologies. Comparison between AR, VR, and traditional software design paradigms for music. Topics include embodiment, interaction design, novel instruments, social experience, software design + prototyping. Prerequisite: MUSIC 256A / CS 476A.
Same as: MUSIC 256B
CS 499. Advanced Reading and Research. 115 Unit.
Letter grade only. Advanced reading and research for CS graduate students. Register using the section number associated with the instructor. Prerequisite: consent of instructor. This course is for graduate students only. Undergraduate students should enroll in CS199.
CS 499P. Advanced Reading and Research. 115 Unit.
Graded satisfactory/no credit. Advanced reading and research for CS graduate students. Register using the section number associated with the instructor. Prerequisite: consent of instructor. This course is for graduate students only. Undergraduate students should enroll in CS199P.
CS 521. Seminar on AI Safety. 1 Unit.
In this seminar, we will focus on the challenges in the design of safe and verified AIbased systems. We will explore some of the major problems in this area from the viewpoint of industry and academia. We plan to have a weekly seminar speaker to discuss issues such as verification of AI systems, reward misalignment and hacking, secure and attackresilient AI systems, diagnosis and repair, issues regarding policy and ethics, as well as the implications of AI safety in automotive industry. Prerequisites: There are no official prerequisites but an introductory course in artificial intelligence is recommended.
CS 522. Seminar in Artificial Intelligence in Healthcare. 1 Unit.
Artificial intelligence is poised to make radical changes in healthcare, transforming areas such as diagnosis, genomics, surgical robotics, and drug discovery. In the coming years, artificial intelligence has the potential to lower healthcare costs, identify more effective treatments, and facilitate prevention and early detection of diseases. This class is a seminar series featuring prominent researchers, physicians, entrepreneurs, and venture capitalists, all sharing their thoughts on the future of healthcare. We highly encourage students of all backgrounds to enroll (no AI/healthcare background necessary). Speakers and more at shift.stanford.edu/healthai.
CS 544. INTERACTIVE MEDIA AND GAMES. 1 Unit.
Interactive media and games increasingly pervade and shape our society. In addition to their dominant roles in entertainment, video games play growing roles in education, arts, and science. This seminar series brings together a diverse set of experts to provide interdisciplinary perspectives on these media regarding their history, technologies, scholarly research, industry, artistic value, and potential future.
Same as: BIOE 196, BIOPHYS 196
CS 547. HumanComputer Interaction Seminar. 1 Unit.
Weekly speakers on humancomputer interaction topics. May be repeated for credit.
CS 549. HumanComputer Interaction in the Real World. 1 Unit.
Intended for students who are pursuing a focus on HCI, this course focuses on showing students how HCI gets applied in industry across different types of companies. The course consists of onsite visits to large companies (for example Google, Yahoo, Square, Tesla) and to startups to talk to the HCI practitioners at these companies and learn first hand how HCI and design fits in at different companies. The objective of this class is to have students understand how HCI practitioners fit into organizations, the roles they play, and what skills they need in the real world to be able to do their magic.
CS 571. Surgical Robotics Seminar. 1 Unit.
Surgical robots developed and implemented clinically on varying scales. Seminar goal is to expose students from engineering, medicine, and business to guest lecturers from academia and industry. Engineering and clinical aspects connected to design and use of surgical robots, varying in degree of complexity and procedural role. May be repeated for credit.
Same as: ME 571
CS 581. Media Innovation. 1 Unit.
This course will introduce students interested in computer science, engineering, and media to what¿s possible and probable when it comes to media innovation. nnSpeakers from multiple disciplines and industry will discuss a range of topics in the context of evolving media with a focus on the technical trends, opportunities and challenges surfacing in the unfolding media ecosystem. Speakers will underscore the need to innovate to survive in the media and information industries. Open to both undergraduates and graduate students.
CS 801. TGR Project. 0 Units.
.
CS 802. TGR Dissertation. 0 Units.
.