Computer Science
>
>

CS 61A: Structure and Interpretation of Computer Programs

Fall 2022

UC Berkeley

A course that emphasizes software abstraction, equipping students with the skills to manage program complexity. Students will primarily use Python, with additional exposure to Scheme and SQL.

Course Page

Overview

The CS 61 series is an introduction to computer science, with particular emphasis on software and on machines from a programmer's point of view.

  1. CS 61A concentrates on the idea of abstraction, allowing the programmer to think in terms appropriate to the problem rather than in low-level operations dictated by the computer hardware.
  2. CS 61B deals with the more advanced engineering aspects of software, such as constructing and analyzing large programs.
  3. CS 61C focuses on machines and how they execute programs.

In CS 61A, we are interested in teaching you about programming, not about how to use one particular programming language. We consider a series of techniques for managing program complexity, such as functional programming and object-oriented programming.

CS 61A primarily uses the Python 3 programming language. Python is a popular language in both industry and academia. It is also particularly well-suited to the task of exploring the topics taught in this course. It is an open-source language developed by a large volunteer community that prides itself on the diversity of its contributors.

Mastery of a particular programming language is a very useful side effect of CS 61A. However, our goal is not to dictate what language you use in your future endeavors. Instead, our hope is that once you have learned the concepts involved in programming, you will find that picking up a new programming language is but a few days' work. In fact, you will be asked to learn at least two other languages, Scheme and SQL, during the course.

A complete list of lecture topics, readings, and assignments appears in the lecture schedule.

Prerequisites

Math 1A is listed as a corequisite for CS 61A. That is, it may be taken concurrently. Math 10A or Math 16A are also fine. It is possible to take CS 61A without knowing or learning calculus. Knowledge of calculus concepts will never be required to complete any assignments. However, taking calculus is a great way to brush up on the arithmetic and algebra that appear regularly in CS 61A.

There is no formal programming-related prerequisite for CS 61A, but taking the course without any prior programming experience is typically very challenging. Students who take the course without prior programming experience typically must work substantially harder to master the material and tend to receive lower final grades in the course. Most CS 61A students have had significant prior programming experience. A typical background includes at least one course equivalent to CS 10 or a score of 3 or above on the AP Computer Science A exam.

If you find it challenging to complete all of the required coursework in the first three weeks, you are strongly recommended to take another course first. You'll likely have a better experience taking 61A later. Taking CS 61A one semester later is unlikely to affect your degree progress or otherwise put you behind, but continuing to struggle in CS 61A despite this recommendation can lead to difficult academic circumstances that can affect your future opportunities. It's better to finish CS 61A with strong mastery of the course material, even if that means delaying by a semester, than to rush through it.

Learning objectives

No data.

Textbooks and other notes

The online textbook for the course is Composing Programs, which was created specifically for this course, based on the classic textbook Structure and Interpretation of Computer Programs. Readings for each lecture appear in the course schedule. We recommend that you complete the readings before attending lecture.

Lots of additional study materials including past exams appear on the Resources page.

Other courses in Computer Programming

CS 106S Coding for Social Good

Winter 2023

Stanford University

CSE 163 Intermediate Data Programming

Summer 2022

University of Washington

Courseware availability

Lecture slides available at Calendar

Lecture recordings available at Calendar

Labs and homework with solutions available at Calendar

Textbook available at Calendar

Resources available at Resources

Covered concepts