Skip to main content


Program Title
Computer Science (BS)
Degree Type
BS - Bachelor of Science
Computer Science
Program Overview

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.

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, course or course 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. course and course meet the Ways of Thinking Ways of Doing breadth requirements in Formal Reasoning and include an introduction to programming and the use of modern Internet-based technologies. Students interested in learning to use the computer should consider course, 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 course followed by course. Students in course need not have prior programming experience. Students with significant prior exposure to programming or those who want an intensive introduction to the field may start directly in coursecourse uses Python as its programming language; course uses C++. No prior knowledge of these languages is assumed, and the prior programming experience required for course 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 coursecourse and course or coursecourse offers an introduction to the mathematical and theoretical foundations of computer science. course exposes students to a variety of programming concepts that illustrate critical strategies used in systems development; course and course build on this material, focusing on the development of larger-scale 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 course

Introduction to Computers

For scientific use:


Programming Methodology

For a technical introduction:


Programming Methodology

For significant use:



Programming Methodology

and Programming Abstractions


Mathematical Foundations of Computing


Computer Organization and Systems


or course

Principles of Computer Systems Operating Systems Principles

Overseas Studies Courses in Computer Science

For course descriptions and additional offerings, see the listings in the Stanford Bulletin's ExploreCourses website ( or the Bing Overseas Studies website ( Students should consult their department or program's student services office for applicability of Overseas Studies courses to a major or minor program.

For additional information and sample programs see the Handbook for Undergraduate Engineering Programs (UGHB).

Program Learning Outcomes

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:

  1. Apply the knowledge of mathematics, science, and engineering.

  2. Design and conduct experiments, as well to analyze and interpret data.

  3. 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.

  4. Function on multidisciplinary teams.

  5. Identify, formulate, and solve engineering problems.

  6. Understand professional and ethical responsibility.

  7. Communicate effectively.

  8. Understand the impact of engineering solutions in a global, economic, environmental, and societal context.

  9. Demonstrate a working knowledge of contemporary issues.

  10. Apply the techniques, skills, and modern engineering tools necessary for engineering practice.

  11. Transition from engineering concepts and theory to real engineering applications.

External Credit Policies

Degree Requirements