EECS Major Requirements

Enrollment Policy

For information on enrollment precedence and procedures, see our EE Course Enrollment Policy.  There is also a CS Course Enrollment policy for those classes.

ABET Accreditation

Berkeley EECS has made the decision not to continue to pursue ABET accreditation as of December 2017. We have posted a letter in which our EECS Chair discusses our reasons behind this decision. Our program will be accredited through September 30, 2019 with ABET and will continue to be accredited after that time by the Accrediting Commission for Schools, Western Association for Schools and Colleges (ACS WASC), which accredits UC Berkeley as a whole.

Lower Division EECS Core Courses

Although engineers are becoming increasingly specialized, a broad understanding of general concepts is critical for the successful completion of engineering projects. The following set of lower division courses covers the field broadly and must be taken by all EECS students:

  • EE 16A and EE 16B will focus on the fundamentals of designing and building modern information devices and systems that interface with the real world. The course sequence provides a comprehensive introduction to core EECS topics in circuit design, signals, and systems in an application-driven context. 

  • CS 61A The Structure & Interpretation of Computer Programs: This course exposes students to techniques of abstraction within a programming language, using higher-order functions, manifest types, data-directed programming, and message-passing between programming languages, using functional and rule-based languages as examples. It also relates these techniques to the practical problems of implementation of languages and algorithms on a von Neumann machine. Students will use the Python programming language. 

  • CS 61B Data Structures: This course introduces fundamental dynamic data structures and elementary principles of software engineering. Students will study linear lists, queues, trees, arrays strings, hash tables, storage management, abstract data types, and algorithms for sorting and searching. The course uses Java.

  • CS 61C Machine Structures: Learn about the internal organization and operation of digital computers, machine architecture, support for high-level languages and operating systems, elements of computer logic design, and tradeoffs involved in fundamental architectural design decisions. Students will also learn the C programming language.

  • CS 70 Discrete Mathematics and Probability Theory: Students study logic, infinity, and induction, modular arithmetic and GCDs, polynomials, probability including sample spaces, independence, random variables, and the law of large numbers. 

If you have satisfied all of the prerequisites (or placed out of the prerequisites through Advanced Placement credit), we encourage you to start taking the EECS lower-division core courses as early as you can! Try to complete all five courses by the end of your sophomore year.

Upper Division Curriculum

Upper division courses give you in-depth exposure to one or more areas of EECS. For most courses, the only condition for enrolling is having completed prerequisite courses (listed in the Berkeley Academic Guide). Strive to balance breadth with specialization by choosing two or three areas and taking multiple related courses in each. The EECS degree requires a minimum of 20 units of upper division courses in the department and 45 technical units total (including EECS units) in the College of Engineering. Most students choose to take more units than the required minimum to pursue interests and to maximize opportunities after graduation.

To help you choose from the large number of available upper division courses, the table below lists related courses for several areas. Please refer to the Berkeley Academic Guide for detailed course descriptions. This list  is only meant to be a guide; many other combinations are also possible. Discuss your choices with your faculty adviser, fellow students, and, if you have a chance, practicing engineers; your plan may have a profound impact on your future. Plan early and revise readily when you see new opportunities or your interests change.

One course must provide a major design experience, and be selected from the following list:

  • EE C106A, C106B, C128, 130, 140, 143, C149, 192
  • CS C149, 160, 162, 164, 169, 184, 186
  • EECS 149, 151 and 151LA (must take both), 151 and 151LB (must take both).

Please note that some upper division courses may not fulfill these requirements. These include EE/CS H196 A or B, 197, 198, 199, and other non-technical courses. Undergraduate students must submit a petition to the department to use graduate-level courses to fulfill these requriements. If unsure if a course fulfills these requirements, please confirm with an Adviser. 

EECS Degree Requirement Worksheet: Admitted 2016 or before  |  Admitted 2017

Areas and Related Courses




EE 105, EE 119, EE 130, EE 143

Analog Circuits

EE 105, EE 140, EE 142, EE 113

Digital Circuits

EE 105, EE 141, CS 150

Computer Architecture

CS 150, CS 152


EE 120, EE 123, EE 126, EE C145B

Communication & Networking

EE 120, EE 121, EE 122

Robotics & Control

EE C125, EE C128

Laboratory & Projects

EE C145L, EE 145M, or C145M, EE 192


CS 170, CS 172, CS 174

Artificial Intelligence

CS 188


CS 186

Software & Languages

CS 169, CS 162, CS 164


CS 161

Interface & Graphics

CS 160, CS 184

Quantum Computing

CS C191