Berkeley cs61a Spring 2011 Computer Science Course
This repo attempts to archive all the material publicly available for the cs61a spring 2011 course done at Berkeley by Brian Harvey. The course has moved on to use Python but in 2011 the course used a customization of Lisp. At one point Berkeley had a webcast program that made publicly available course lectures. In 2015 they decided to discontinue the public availability of course lectures in order to reduce costs. They offered this content on different platforms and in 2017 have decided to remove legacy content away from public access due to various legal issues. Also see this reddit post and this FAQ post on legacy content.
The course is based on the book Structure and Interpretation of Computer Programs a.k.a. SICP. Course prerequisite, as you will hear in lecture 1, is being comfortable with and being able to write recursive functions. If you need a quick primer on recursion look at cs61as week 0. I was made aware of the course through the website teachyourselfcs.com. If you find this course to be too difficult look below for alternative courses.
If you want to learn based on the book Structure and Interpretation of Computer Programs but instead of Lisp you are interested in using Python 3 check out Composing Programs.
Download Racket. At the time of this writing (03.2019)
I am using version 7.2. Open up Racket and navigate to "File" -> "Package Manager".
Inside the package manager we will download some dependencies to be able to use
Berkeley defined functions such as word
and sentence
as demonstrated in lecture 1. Select the tab "Available from Catalog". On the
left hand side you will see the button "Update Package List", click it. After the
update is complete search for the package planet-dyoo-simply-scheme1
. Select the
package and click the "Install" button at the bottom of the window. Next search
for the package berkeley
as description the package should say that it is for
the class cs61as
. Now close the package manager and navigate to "File" -> "New".
At the bottom of the screen click the toggle button "Determine language from source" -> "Choose Language".
Choose "The Racket Language" and click "OK". Now you should see a window with two boxes
- at the top the definitions window and on the bottom the interactions window.
Inside the definitions window should be:
#lang racket
Add the line:
(require berkeley)
(sentence 'hello 'world)
Now click the button "Run" and inside of the interactions window should be printed
'(hello world)
If you are more of the type that prefers working with the command line you can use
the raco
Racket command line tool.
To set it up on your system simple navigate to "Help" -> "Configure command line
for Racket". After setting this up open up a command line and type in the following:
raco pkg install --auto berkeley
and
raco pkg install --auto planet-dyoo-simply-scheme1
If you are having difficulties with installing packages you can also translate the original library files local or online from Scheme to Racket.
It is available here.
Video lectures and required corresponding reading from SICP
Readings should be done before lecture series.
- Functional programming (1.1)
- Functional programming (1.1)
- Higher-order procedures (1.3)
- Higher-order procedures (1.3)
- User interface Alan Kay (1.3)
- User interface Alan Kay (1.2.1–4)
- Orders of growth (1.2.1–4)
- Recursion and iteration (1.2.1–4)
- Data abstraction (2.1, 2.2.1)
- Sequences (2.1, 2.2.1)
- Example calculator (2.1, 2.2.1)
- Hierarchical data (2.2.2–3, 2.3.1,3)
- Hierarchical data (2.2.2–3, 2.3.1,3)
- Example Scheme (2.2.2–3, 2.3.1,3)
- No lecture available
- Generic operators (2.4–2.5.2)
- Generic operators (2.4–2.5.2)
- Object-oriented programming (OOP (reader))
- Object oriented programming (OOP (reader))
- Object oriented programming (OOP (reader))
- Assignment and state (3.1, 3.2)
- Environments (3.1, 3.2)
- Environments (3.1, 3.2)
- Mutable data (3.3.1–3)
- Mutable data (3.3.1–3)
- Vectors (3.3.1–3)
- No lecture available
- No lecture available
- No lecture available
- Client-server programming (3.4)
- Concurrency (3.4)
- Concurrency (3.4)
- Streams (3.5.1–3, 3.5.5, Therac (reader))
- Streams (3.5.1–3, 3.5.5, Therac (reader))
- Therac-25 (3.5.1–3, 3.5.5, Therac (reader))
- Metacircular evaluator (4.1.1–6)
- Metacircular evaluator (4.1.1–6)
- Mapreduce (4.1.1–6)
- Mapreduce (4.1.7, 4.2)
- Analyzing evaluator (4.1.7, 4.2)
- Lazy evaluator (4.1.7, 4.2)
- Logic programming (4.4.1–3)
- Logic programming (4.4.1–3)
- Review (4.4.1–3)
- Course Book - Structure and Interpretation of Computer Programs online or online
- Course syllabus local or online
- Course Reader - Volume 1 local or online
- Course Reader - Volume 2 local or online
- Object-Oriented Programming: Above the Line View local or online
- Object-Oriented Programming: Below the Line View local or online
- Highlights of GNU Emacs (Prof. Paul Hilfinger, UCB EECS) local or online
- Exit Information (Read at end of semester!) local or online
- An Investigation of the Therac-25 Accidents (Nancy G. Leveson, Clark S. Turner. IEEE Computer, July 1993) local or online
- Revised5 Report on Scheme (Richard Kelsey, William Clinger, Jonathan Rees (Editors), et al., 1998) local or online
- Sample Exams
- These exams are made up of actual past exam questions, but reorganized to make each sample more comprehensive and to choose the best possible questions. Some of the exams are a little longer (by one question) than actual exams, but they're in the right ballpark. Since the questions within a sample are taken from different semesters, don't try to compare the number of points between problems. The solutions include scoring information only to give you an idea of how part credit is awarded within each problem.
- Midterm 1
- Midterm 2
- Midterm 3
- Final exam
- Mapreduce: Simplified Data Processing on Large Clusters (Jeffrey Dean, Sanjay Ghemawat, Google, Inc., OSDI 2004) local or online
- Lecture Notes local or online
- SICP Errata (Harold Abelson, Gerald Jay Sussman, Julie Sussman, 1999) local or online
- Berkeley Word/Sentence Functions local or online
- Ergonomic Information (external links)
- Answers to assignments done by another student
- How to Design Programs
- Simply Scheme: Introducing Computer Science
- An Introduction to Programming in Emacs Lisp
- CS 61AS - a self-paced introductory computer science class at the University of California, Berkeley or here
- Teach Yourself Computer Science
- A Self-Learning, Modern Computer Science Curriculum
- Open Source Society University - Path to a free self-taught education in Computer Science!
- edX Computer Science
- Composing Programs
- Papers from the computer science community to read and discuss.
- MIT OpenCourseWare
- openHPI
- tele-TASK
- miniKanren - an embedded Domain Specific Language for logic programming