# CS61A: Structure and Interpretation of Computer Programs

## Descriptions

- Offered by: UC Berkeley
- Prerequisites: None
- Programming Languages: Python, Scheme, SQL
- Difficulty: 🌟🌟
- Class Hour: 50 hours

This is the first course in the Berkeley CS61 series, and my introductory course to Python.

The CS61 series is composed of introductory courses to the CS major at Berkeley, where

- CS61A: Emphasizes abstraction and equips students to use programs to solve real-world problems without focusing on the underlying hardware details.
- CS61B: Focuses on algorithms and data structures and the construction of large-scale programs, where students combine knowledge of algorithms and data structures with the Java language to build large-scale projects at the thousand-line code level (such as a simple Google Maps, a two-dimensional version of Minecraft).
- CS61C: Focusing on computer architecture, students will understand how high-level languages (e.g. C) are converted step-by-step into machine-understandable bit strings and executed on CPUs. Students will learn about the RISC-V architecture and implement a CPU on their own by using Logism.

CS61B and CS61C are both included in this guidebook.

Going back to CS61A, you will note that this is not just a programming language class, but goes deeper into the principles of program construction and operation. Finally you will implement an interpreter for Scheme in Python in Project 4. In addition, abstraction will be a major theme in this class, as you will learn about functional programming, data abstraction, object orientation, etc. to make your code more readable and modular. Of course, learning a programming language is also a big part of this course. You will master three programming languages, Python, Scheme, and SQL, and in learning and comparing them, you will be equiped with the ability to quickly master a new programming language.

Note: If you have no prior programming experience at all, getting started with CS61A requires a relatively high level of learning ability and self-discipline. To avoid the frustration of a struggling experience, you may choose a more friendly introductory programming course at first. For example, [CS10](https://cs10.org/sp22/) at Berkeley or [CS50](https://csdiy.wiki/编程入门/C/CS50/) at Harvard are both good choices.

## Course Resources

- Course Website: [spring2024](https://inst.eecs.berkeley.edu/~cs61a/sp24), [fall2023](https://inst.eecs.berkeley.edu/~cs61a/fa23/), [spring2023](https://inst.eecs.berkeley.edu/~cs61a/sp23), [fall2022](https://inst.eecs.berkeley.edu/~cs61a/fall22)
- Course Website (backup): [spring2022](https://cs61a.vercel.app/)
- Recordings: 
- Textbook: <https://www.composingprograms.com/>
- Assignments: refer to the course website

## Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS61A - GitHub](https://github.com/PKUFlyingPig/CS61A)
