Bachelor of Science

The Department of Computer Science offers students in the College of Engineering a Bachelor of Science degree.

This program introduces students to core concepts and cutting-edge topics in computer science. The program provides students with hands-on experience and a depth of understanding of computer theory, systems, and applications that prepares them for successful careers in computer science and to participate in the next-generation of technological advances. 

info icon


Courses required for the major MUST be taken for letter grades. Pre-requisites are strictly enforced for all CS courses.

Info Icon

General Education

You can obtain a detailed list of GEs from the College of Engineering Undergraduate Office via email at Please refer all GE-related questions to the College advisors.

For information about requirements for College of Engineering majors, including Computer Science, and other program information, see the GEAR (General Engineering Academic Requirements) catalog associated with a student's year of entrance to UCSB.

All students must achieve a grade of C or above in CMPSC 16, 24, 32, and 40 to take any course for which any of these courses are a prerequisite. 

Course Units Title
Math 3A, 3B 8 Calculus with Applications, Courses 1-2
Math 4A, 4B 8 Linear Algebra with Applications; Differential Equations
Math 6A 4 Vector Calculus
CMPSC 16 4 Problem Solving with Computers I
CMPSC 24 4 Problem Solving with Computers II
CMPSC 32 4 Object Oriented Design and Implementation
CMPSC 40 5 Foundations of Computer Science
CMPSC 64 4 Computer Organization and Logic Design
PSTAT 120A 4

Probability and Statistics


Note: Students with no previous programming background should take CMPSC 8 before taking CMPSC 16. The AP Computer Science A Exam with a score of 4 or 5 will qualify students to start with CMPSC 16.

Course Units Title
PHYS 1, 2, 3 and 3L 12 Basic Physics (with 3L lab)


Note: AP Physics does not test you out of this series.

8 units required; The science electives must be selected from the following set of approved courses and taken for a LETTER GRADE.

Course Title


Intro Biological Anthropology

AP Biology

Advanced Placement Biology Exam (score of 3 or higher will credit you with 8 science elective units)


Basic Astronomy
ASTRO 2 History of the Universe
CHEM 1A + CHEM 1AL General Chemistry and Laboratory
CHEM 1B + CHEM 1BL General Chemistry and Laboratory
CHEM 1C + CHEM 1CL General Chemistry and Laboratory
EARTH 2 Principles of Physical Geology 
EARTH 4 or EARTH 4 W  Introduction to Oceanography
EARTH 6 Mountains, Boots, and Backpacks
EARTH 7 Dinosaurs
EARTH 8 Africa: Climate & Human Evolution
EARTH 9 Giant Earthquakes
EARTH 10 Antarctica: The Last Place on Earth
EARTH 20 or Earth W 20  Geological Catastrophes
EARTH 30 The History of Life
EARTH 111 Principles of Paleontology
EARTH 123 The Solar System
EARTH 130 Global Warming - Science and Society
ECON 1 Principles of Economics-Micro 
ECON 2 Principles of Economics-Macro
EEMB 21 General Botany
EEMB 22 Concepts & Controversies in Bio Sciences
EEMB 40 Ecology of Infectious Disease
EEMB 50 Biology of Non-Infectious Disease
ENV S 2 Intro to Environmental Science
GEOG 3 Oceans & Atmosphere
GEOG 4 Land, Water & Life
GEOG 8 Intro to Global Warming
GEOG 12 or GEOG W 12 Maps & Spatial Reasoning
GEOG 115A Remote Sensing of the Environment 1
GEOG 115B  Remote Sensing of the Environment 2
MCDB 1A + 1AL Introductory Biology I and Laboratory
MCDB 1B and EEMB 2, plus either MCDB 1BL or EEMB 2L Introductory Biology II and Laboratory
MCDB 20 Concepts of Biology
MCDB 21 The Immune System and Aids
MCDB 23 Biology of Cancer
MCDB 26 Contemporary Nutrition
MCDB 29 Fundamentals of Biomedical Research
PHYS 4 + PHYS 4L Basic Physics and Laboratory
PHYS 5 + PHYS 5L Basic Physics and Laboratory
PSY 108 Intro to Cognitive Psychology
PSY 129 Perception
Course Units Title
CMPSC 111 or 140 4 Intro to Computational Science or Parallel Scientific Computing
CMPSC 130A and 130B 8 Data Structures and Algorithms I and II
CMPSC 138 4 Automata and Formal Languages
CMPSC 148 or 156 or 172 4 Computer Science Project or Advanced Applications Programming or Software Engineering
CMPSC 154 4 Computer Architecture
CMPSC 160 or 162 4 Translation of Programming Languages or Programming Languages
CMPSC 170 4 Operating Systems
PSTAT 120B 4 Probability and Statistics
Course Units Title
ENGR 101 3 Ethics in Engineering

NOTE: As of Winter 2022, students do not need to complete or submit a"major elective approval" form if they attend a department faculty advising event.

As a graduation requirement, all Computer Science majors must receive faculty advising by attending a department faculty advising event. The best time for students to receive faculty advising regarding a range of topics such as research, internships, and elective courses is in Sophomore year (typically your second year). Students that participate in and attend a department faculty advising event will have their "Major Elective Approval" requirement marked as complete by a Computer Science staff advisor. As of Winter 2022, students do not need to complete or submit an approval form if they attend a department faculty advising event. 

The department usually hosts a faculty advising event every quarter: in Fall and Winter quarters students can meet one-on-one with faculty at the Speed Advising event, and in Spring quarter students can learn from faculty about the CS courses that are elective options for the major at the Major Electives Info Session event (view the Major Elective slide show and see a recording of the Spring 2021 Major Elective information session [use your UCSB NetID to view]).  

Depending on the GEAR major year, CS students must take either 28 units (GEAR years 2018-19, 2019-20) or 32 units (GEAR years 2020-21 and 2021-22) of upper-division major field electives. At least 8 units of these electives must be Computer Science courses. The required courses in the upper-division major do not count towards these electives. All upper-division elective courses must be taken for a letter grade.

Academic Support

Undergraduate Learning Assistant Program

About the CS ULA Program

The Computer Science Undergraduate Learning Assistant Program (ULA) was launched in Fall 2017 with the following goals in mind:

  • enhance the learning experience of students
  • meet the challenges of increased enrollments
  • build a sense of community among our undergraduate students
  • create a more supportive learning environment for those from underrepresented groups.

Student Tutoring

Faculty Co-ordinators

Dr. Mirza and Dr. Conrad are faculty involved with training and co-ordinating the tutor program. They serve as a point of contact for students interested in being tutors and faculty who would like to offer tutors in their courses. Dr. Richert Wang and Dr. Kate Kharitonova have been involved with the implementation of the program and have been among the early adopters of the program.

The CS Department ULA program, in its current instantiation compensates ULAs with course credit in their first quarter of service, while they are undergoing training: all first time ULAs are required to take a course (CMPSC 100), which is a 4-unit upper division course that counts towards the BS in Computer Science degree requirements as an upper-division elective. Students that have completed this course become eligible to apply for paid positions offered under the “Remedial Tutor” title. Upper division credit and paid positions are important to attract experienced ULAs who typically have competing offers from industry and research labs. The process of recruiting, selecting, training, organizing and evaluating ULAs is described below.

At least a month prior to the start of the quarter, the CMPSC 100 course and the paid positions are advertised to all undergrad CS majors, and students enrolled in CMPSC 24 and 32 (regardless of major). In each case, we require a minimum GPA of 3.0 (cumulative as well as Lower-Division and Upper-Division coursework). Students from all majors are invited to apply. We take major into account and prefer to offer positions to CS majors, but major is only one of several factors. Our primary criteria is the personal statement that the student makes about their reasons for wanting to participate in the program. Preference is given to students that demonstrate a sincere interest in helping other students succeed, in addition to developing their own skills. The application form also collects information about students’ availability to attend scheduled lab sections and lectures for the course that they will be tutoring for, as well as students’ course preferences. All these factors are taken into account when selecting ULAs for specific courses.

The instructors of courses that involve ULAs collaborate on selecting ULAs into their courses. Each instructor provides a rank-ordered list of ULAs to the coordinator of the program. The coordinator and instructors work together to resolve conflicts in the case multiple instructors select the same ULA. Selection is based on students’ personal statements, availability and course preference. In some cases, the instructors may conduct in-person interviews to evaluate communication skills. The coordinator sends a shortlist of ULAs selected for paid positions in each course to the CS staff who carry out the hiring. Students selected into CMPSC 100 are given add codes.

Training: All first-time ULAs are required to take CMPSC 100. The ULA course website is available at

Students enrolled in the course participate in one 75 minute lecture per week, and provide 5-6 hours of tutoring per week in a “learn by doing” model. The lecture section includes instruction in Computer Science education methods and research, as well as role-playing of direct instruction.

ULAs work for between 8-10 hours per week. They typically spend four hours per week in lab sections where they assist students with their programming assignments. During these sessions, the ULAs practice how to help students without giving away solutions and instead giving them the skills needed to debug their code on their own. They teach students how to reason about their code by tracing through it and communicating their logic. The ULAs learn how to ask students appropriate questions that would lead them in the right direction.

The ULAs attend weekly meetings, approximately 1 to 1.5 hours per week with the rest of the course staff (graduate TAs and Readers). The course instructor typically provides guidance for the upcoming week during these meetings. The TAs and ULAs provide the instructor feedback about their experiences in labs and raise any instructional or organizational issues that need to be addressed.

The ULAs spend the rest of their time providing written feedback to students about their assignments. They also offer open lab hours where students could get help outside of prescribed lab hours, which is a new feature in our classes. They create collaborative study guides and conduct study sessions to help students prepare for exams.

All first-time ULAs are evaluated as part of the CMPSC 100 course. In addition to evaluating written work and oral presentations, the instructors make direct observations of each ULA’s performance in assisting students in labs. Students in the course also evaluate the ULAs and the ULA program by filling out anonymous surveys at the end of the quarter.

ULA course website.

Instructions for Winter 2022.

Links below for Winter 2022 applications/CMPSC 100 enrollment will be updated closer to Winter quarter.

If you have never been a ULA before, read the instructions for first-time ULAs (below).

Apply to enroll in CMPSC 100

If you have successfully completed either CMPSC 190J or CMPSC 100, read the instructions for returning ULAs (below). 

Apply for a Paid ULA Position


First-time ULAs must apply to enroll in CMPSC 100. As a student in CMPSC 100, you'll be part of the instructional team for one of lower/upper division courses. You'll also participate in a weekly seminar in which you will learn about Computer Science Education by reading research papers, discussing techniques and actually putting those into practice. Students that complete the course may use it as one of their seven major field electives. Completing the course also makes you eligible to apply for paid undergraduate LA positions as/when those become available in future quarters. (It does not guarantee acceptance, but it does improve your chances.) Enrollment is by permission of the instructor only, and there are a limited number of slots.

First time ULAs commit to spending 7-8 hours per week tutoring for the course that they have been assigned with the approximate breakdown of the duties as follows:

(4-5 h) Assist students in scheduled lab sections and drop-in lab hours to discover solutions to problems and modeling study strategies,
(1 h) Work through labs and homework exercises in preparation for labs
(1 h) Assist with grading under the supervision of TA or instructor
(1 h) Weekly meeting with the instructor

Students who are currently enrolled in the elective course CMPSC 100 (Teaching Computer Science) and/or have worked in the capacity of a paid ULA in the past are eligible to apply for the paid ULA position for any of the lower/upper-division courses listed in the application form.

As a paid ULA, you will primarily assist students in their discussion sections and during open labs to answer questions, troubleshoot, and provide general assistance. You will also provide feedback on student work and participate in weekly staff meetings. You may be asked to participate in other course-specific activities.

All hours spent on tutoring-related activities will be paid, and you will be provided adequate support to help students with this course. The total commitment is 7 to 10 hours per week with the approximate breakdown of the duties as follows:

(4-5 h) Assist students in scheduled lab sections and drop-in lab hours to discover solutions to problems and modeling study strategies,
(1 h) Work through labs and homework exercises in preparation for labs
(1-2 h) Assist students with course concepts by attending weekly lectures

(1 h) Assist with grading under the supervision of TA or instructor
(1 h) Weekly meeting with the instructor

ULAs who are interested in leadership positions within the ULA program may apply to be program-leads or course-leads. In general students should have been in the role of course-lead for at least one quarter to be considered for the role of program-lead. Students in these positions will act as points of contact for students and instructors, assist with specific organizational tasks and training activities related to the ULA program. They will also be stakeholders in shaping the future of the program.

Description of program-lead position

Program-lead is a position for students who want to collaborate with faculty on high-level organization of the ULA program. Program-leads will coordinate closely with the director of the program and the instructors of the training course (CMPSC 100). Each quarter two students will be selected into these roles among current and past course-leads.

Description of course-lead position

Course-lead is a position for ULAs who want to try a more administrative role inside the ULA program. Every course that involves ULAs will have one course-lead selected among the paid ULAs. The lead ULA for each course will be the instructor's main point of contact, and a general lead for your team of ULAs (CMPSC 100 ULAs and paid ULAs). Duties of students selected into this role include:

(1) meeting with the instructor and establishing how all the ULAs will coordinate from week to week. Your instructor may want weekly meetings with the entire staff, or may want you to be in charge of meeting the ULAs weekly and then relaying any pertinent information back to the instructor, or may come up with another solution.

(2) being the main point of contact for ULAs within a course. If ULAs have questions about how to approach a particular student or problem, they will approach the course lead.The course-lead can always contact their instructor or program-leads for assistance.

Academic Advising

Academic Advising

Undergraduate Advising

The staff advisors are here to help and support our CS majors through their studies and answer questions related to the CS major.  We are available for appointments and limited outdoor drop-in advising, and encourage our students to book an appointment to guarantee that we are available and prepared to answer your questions related to your degree progress and requirements. 

Our hours are Monday through Friday 9am-12pm and 1-4pm and we are available by email at or by appointment at

Faculty Undergraduate Advisors

CS majors may contact their faculty class advisor for questions regarding their own faculty experiences, undergraduate research, graduate school, jobs in industry. Faculty members are not expected to answer questions about department petitions or degree requirements. Please see below for the contact links of the current faculty class advisors: 

Subhash Suri         Faculty contact for class of 2025

Jianwen Su            Faculty contact for class of 2024

Kate Kharitonova  Faculty contact for class of 2023

Tobias Höllerer     Faculty contact for class of 2022

Phillip Conrad       Faculty contact for Transfer Students