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 |
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.
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).
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).
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 " 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.
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:
Textbook(s)
Staff and Other Human Resources
Software
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
Course Credits and Grading
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.
In order to make sure that people don't leave things to the last minute,
we've established deadlines for completing each unit:
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.
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.)
Deadlines
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)
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