Computer Science 61A — The Structure and Interpretation of Computer Programs (4 Units)

Course Overview


The purpose of CS61A is to teach you the core concepts of computer science. CS61A is not about learning a particular programming language, though the course does introduce the Python programming language and uses it, along with a little Scheme and SQL, to teach programming concepts. This course concentrates on the idea of abstraction and using this idea to solve problems. The course considers a series of techniques for controlling program complexity, such as functional programming, data abstraction, and object-oriented programming.


  • Math 1A (may be taken concurrently)

Although there are no formal programming-related prerequisites for CS61A, most students have some prior programming experience. For students interested in a basic exploration of computer science concepts, CS10 is a lighter class that may appeal to you. However, most EECS/intended CS majors take CS61A their first semester at Berkeley. Data 8/CS 8 is also another class that may have a lighter workload, given that it is more focused on the application of programming in data science rather than going through the core concepts of programming.

Topics Covered

  • Functions and Abstraction
  • Higher-Order Functions
  • Environments
  • Data Abstraction
  • Strings
  • Lists, Tuples, Sets, and Dictionaries
  • Mutable Data
  • Trees and Linked Lists
  • Object-Oriented Programming
  • Inheritance
  • Recursion
  • Orders of Growth
  • Functional Programming using Scheme
  • Iterators and Generators
  • Interpreters
  • Streams
  • Macros
  • Declarative Programming using SQL


Course Work

  • Coding assignment every week (graded on effort)
  • Lab exercises every week
  • Four projects
  • Two (sometimes three) midterms
  • One final

Time Commitment

There are 3 hours of lecture, 1.5 hours of lab, and 1.5 hours of discussion per week.

Outside of class, expect to spend around 3 to 4 hours per week on this course. During weeks when a project is due, expect to spend an extra 6 to 10 hours working on the project. Typically, most projects can be done in pairs.

Choosing the Course

When to take

Take this class as soon as possible (either your first or second semester) since CS61A is a prerequisite for CS61B and CS61C.

What's next?

  • CS61B: Data Structures.

Usefulness for Research or Internships

Although this course does not directly open opportunities for research/internships, future CS courses build on the concepts of CS61A.

Additional Comments/Tips

Depending on how much prior programming experience you have, the difficulty of CS61A and the time you will have to commit to the class can vary. If you are unsure you have enough experience to take CS61A, look at the lectures and assignments from past semesters. Generally, if you understand the concept of recursion, you are ready for CS61A.

Make sure you stay on top of lectures and discussion. Stay on top of homeworks and projects. It is important to understand that computer science assignments may take various amounts of time, often taking longer than you expect, so it is essential that you portion enough time to complete these assignments. It is very easy to get behind in this course and since it can be fast-paced, it can be difficult to catch up once you have fallen behind. The exams for this class can be particularly challenging; make sure you spend a lot of time working through past exams and practice problems. If at any point, you feel like you are struggling in the course, there are a lot of resources to get help in this large scale course including discussion, office hours, small group sections, one-on-one tutoring, etc.

Last edited: Summer 2020