Welcome to Self-Paced CS 61A, Structure and Interpretation of Computer Programs (SICP)!

Because this is an experimental course, most of the details below are subject to change as we discover what doesn't work. Please try to be patient with any problems that come up.

Class Meetings
Textbook(s)
Staff and Other Human Resources
Software
Units and Lessons
Course Credits and Grading
Deadlines
Honors Option
Academic Honesty

Class Meetings

All class meetings are in our computer lab, 277 Soda Hall, except for one hour of discussion section in 320 Soda. The online schedule of classes says that the two-hour Monday meeting is discussion, but actually there are two separate one-hour discussions during that time: one for students starting with Unit 0 and one for those starting with Unit 1. (The main entrances to Soda are on the third and fourth floors, so you want to go down after entering the building. There is also a semi-secret second floor entrance via the Hearst Avenue entrance to Etcheverry Hall, the building downhill from Soda.)

You are expected to attend every class meeting. If there's some special reason (e.g., a physical disability) why you should be an exception, work out a plan with your TA. We made too many exceptions to this rule last year, and many students' progress suffered as a result, so we're going to be strict about this. If you finish early, you can stop attending, by arrangement with your TA.

Textbook(s)

The SICP textbook, by Harold Abelson and Gerald Jay Sussman with Julie Sussman, is available online (free) here. It is the best computer science book ever written! The writing is terse; each sentence repays careful reading.

Those students whose prior experience does not include programming recursive functions, or does not include the Scheme language, or does not include computer programming at all, will start with excerpts from Simply Scheme, by Brian Harvey and Matthew Wright, a book written specifically as a "prequel" to SICP. The entire book is also available online here.

There are also some online documents that are required reading in certain lessons. These can be found by clicking the "Reader" link at the left of this web page. Note: The "Reader" page is taken from the course reader of the old lecture-based 61A, so some of it isn't quite right for this course. In particular, this course doesn't have midterms, but the sample midterms in the reader provide examples of the kind of question we ask in the lesson quizzes (explained below).

Staff and Other Human Resources

The instructor of this course is Brian Harvey, bh@cs.berkeley.edu, 781 Soda Hall, 642-8311. My office hours this semester are Tue 3-5 and Wed 2-4.

Another resource for intellectual questions is our online discussion group (also linked under "Piazza" in the sidebar on the left), where you can get answers from other students and from the course staff. Don't post individual administrative questions ("Why did I get 5 points...") on the discussion group. To enroll in the group, follow this link.

Tutoring services are provided by Eta Kappa Nu (HKN), the EECS honors society (345 Soda, hkn@hkn), and Upsilon Pi Epsilon, the Computer Science honors society (346 Soda, upe@cory).

Software

If you have a home computer, you may want to get a Scheme interpreter for it. The Computer Science Division can provide you with free versions of Scheme for Linux, Windows, or MacOS. The distribution also includes the Scheme library programs that we use in this course. You can dowload copies of this distribution here.

Once you've downloaded the software, be sure that you run the application called "stk-simply" rather than just "stk." (The lab computers are set up so that stk does the right thing, but your home computer isn't.)

Units and Lessons

The course is organized into six "units" numbered 0 through 5. Unit 0 is the introductory material for students whose prior experience does not include programming recursive functions in Scheme. Units 1 through 5 correspond to chapters of the SICP textbook. This is a variable credit course; you earn one UCB credit unit for each of course units 1 through 5 that you complete successfully. This means that if you work at a slower pace, you can earn, e.g., two units of A instead of four units of F, and then finish the course next semester. Units 1 through 3 are the minimum requirement to meet the 61A prerequisite for later CS courses, but students are very strongly urged to complete unit 4 also, to have an experience equivalent to the lecture-based 61A.

(Unit 0 does not earn 61AS credit, but if you do at least two of the three lessons in that unit, we will give you one unit of credit for CS 3S. This means, more or less, that students who have not programmed recursive functions before will get a unit of 3S credit, but students who merely haven't programmed in Scheme before will do only a small part of that unit and won't get credit for it.)

The online material is organized in terms of "lessons"; for the most part, one lesson is roughly equivalent to a week in the lecture-based version of 61A. Lessons are named, e.g., 2.4 for the fourth lesson within unit 2. Each lesson contains in-class lab activities and homework, mostly taken from the textbook, for you to do on your own. After you submit each homework assignment, you can see our solutions to the lesson's problems; you should be sure to read these and compare our solutions to yours to ensure that you understand the concepts of the lesson.

Each lesson ends with a link to the reading for the following lesson. Do the reading before you do the next lab! And then probably read it again before doing the homework. You should not read the book during the lab! You need the lab time for the exercises. In addition to the textbook, you should read Brian's lecture notes, also online.

The purpose of the homework and lab exercises is for you to learn the course, not to prove that you already know it. Therefore, the unit homeworks are not graded on the correctness of your solutions, but on effort. You will get full credit for an entirely wrong answer that shows reasonable effort! (But you should test your work. If your solution is incorrect, the grader will want to see some evidence that you know it's incorrect.)

Each lesson in units 1–4 also includes both video and notes from a previous semester of the lecture-based 61A. Don't watch the videos in the lab! You need not watch them at all, but they're available to you to watch at home. It's probably wise at least to read the lecture notes.

Most of the homeworks include problems labelled as "Extra for Experts." These problems are entirely optional; do them only if you have finished the regular assignment and want to do something more challenging. There is no extra credit for these problems; people who need more credit shouldn't even be trying them, and people who are doing well in the course should be motivated by the desire to learn.

Course Credits and Grading

After completing each lesson, and reading the online solutions, you should ask your TA in lab to give you a quiz on the lesson. (You must submit the homework before you can take the quiz.) The quiz will be randomly generated from a bank of questions. A typical quiz will have one analytic question, in which you are given a program and asked to describe something about its behavior; one synthetic question, in which you are asked to write a short computer program; and one expert question, pushing the limits of what we expect the best students to accomplish. You must pass the quiz before continuing to the next lesson. but you should not require more than two attempts. If you don't pass a quiz the second time, your TA will work intensively with you to get you back on schedule. You must take a quiz at least once per week. You will get different questions when you retake a quiz. (You may not retake the quiz on the same day; study the lesson first!) Answering the first two questions counts roughly as a B; answering all three correctly is an A. The quizzes are closed book, but don't study for them by trying to memorize details; any program examples you need for a quiz question will be provided in the question itself.

Grading is done using a point system. Each unit has approximately 75 points. (It's approximate because different units have different numbers of lessons, and different project weights.) Points are assigned for homework (two points for any serious effort, right or wrong; negative points for copied solutions), quizzes (usually 10 points each), projects (15 or 25 points), and a section of the final exam (about 10 points per unit; we have to have a final, but it doesn't have to count much).

At the left side of the web page is a link called "Complaint form" that can be used to register complaints about missing or disputed grades.

By the end of week five, you must determine how many consecutive units to grade you on (but you must reach at least unit 2). Then we add up the points scored on those units divided by the maximum possible for those units. The letter grade is based on that fraction:

A+ 94–100%    A 92–93%    A− 90–91%
B+ 84–89% B 79–83% B− 74–78%
C+ 71–73% C 69–70% C− 67–68%
D+ 63–66% D 60–62% D− 57–59%

The range of scores within the B range is deliberately larger than the range for other grades; the expectation is that the average grade will be somewhere in the B range.

Deadlines

In order to make sure that people don't leave things to the last minute, we've established deadlines for completing each unit:

Deadlines for people signed up for Units 0-4 or 1-4

Deadlines for people signed up for Units 0-3 or 1-3

Deadlines for people signed up for Units 0-2 (not recommended)

These deadlines are for labs, homeworks, and quizzes. (You must submit the homework for a lesson before you take the quiz.)

The penalty for missing a deadline is 50% credit for things completed within one week of the deadline, 0% after that.

Honors Option

Alas, the "CS 61AH" course designation hasn't yet been approved. Sorry! Credit for Unit 5 will be assigned through a CS 98 course.

Academic Honesty

I believe that most students come to Berkeley because they want to learn, and therefore understand that ultimately it is you who suffer if you turn in someone else's work as your own.

Nevertheless, there is the possibility of misunderstanding, because in this class (as in most others) you are encouraged to learn from each other as well as from the course staff. That's why it's worth spelling out the rules.

Each lesson in this course has exercises labelled "Lab Activity" and other exercises labelled "Homework." The lab exercises are not turned in for credit. You should try each exercise on your own first, but you are welcome to ask anyone for help if you need it. (But bear in mind that in a self-paced course the student next to you may be working on something different from you.) Lab exercises are an introduction to the lesson's ideas, and the goal is for you to understand what they're asking by the end of the lab activity. So working together is fine, but don't just blindly type in someone else's solution without understanding it.

For the homeworks, remember that you are graded on effort, not on correctness. If two students turn in identical solutions to a homework, that just tells us that at least one of them didn't make the effort to learn. You are welcome to discuss the homework with anyone, but the solution you turn in must be entirely your own.

For programming projects, quizzes, and the final exam, of course, it is a serious violation of academic honesty (which can get you suspended or expelled from the university) to give or accept answers to or from another student. (Exception: Some programming projects can be done in pairs. Your TA will explain this when you get to them.)