CS 61A Course Information and Policies

Course website: http://www-inst.eecs.berkeley.edu/~cs61a/su12/

Course Description

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. This first course concentrates mostly 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. The next course, CS 61B, will deal with the more advanced engineering aspects of software, such as constructing and analyzing large programs. Finally, CS 61C concentrates on machines and how they carry out the programs you write.

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 controlling program complexity, such as functional programming, data abstraction, and object-oriented programming. Mastery of a particular programming language is a very useful side effect of studying these general techniques. However, we hope that once you have learned the essence of programming, you will find that picking up a new programming language is but a few days' work.

Programming Language

This summer, CS 61A will be taught using 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.

In previous semesters, this course was taught using the Scheme language, a dialect of Lisp, which itself dates back to 1958, making it the second-oldest "higher-level" programming language that is still in use, after Fortran. Lisp and Python are similar in many ways. In fact, Lisp popularized many of the features that make Python a great language. Python has excellent library support for a vast range of application areas. Knowing Python will help you pursue your future programming interests, wherever they may lead you.


Math 1A is a corequisite for CS 61A. (That is, it may be taken concurrently.)

There are no formal programming-related prerequisites for admission to CS 61A. However, most CS 61A students have had significant prior programming experience. There is no need for you to be familiar with any particular programming language. If you have taken the CS Advanced Placement AB course in C++ or Java, you are certainly ready for CS 61A.

If you do not feel ready for CS 61A, or you are only looking to get your feet wet in computer science, we recommend that you take CS 10: The Beauty and Joy of Computing instead. The course is an introduction to computer science for non-majors and majors needing more programming experience. The course will teach students how to program using BYOB (based on Scratch), one of the friendliest programming languages ever invented. It's purely graphical, which means programming involves simply dragging blocks around, and building bigger blocks out of smaller blocks. But the course is far more than just learning to program! You'll learn some of the "Big Ideas" of computing, such as abstraction, design, recursion, concurrency, simulations, and the limits of computation. You'll also see some beautiful applications of computing that have changed the world, and talk about the history of computing and where it will go in the future.

If you are not strongly interested in computer programming at all, but instead want to learn how to use computers as a tool, you should consider IDS 110, a course that presents a variety of personal computer software along with a brief introduction to programming.

If you have substantial prior programming background, you may feel that you can skip CS 61A. In most cases we don't recommend that. Although CS 61A is the first course in the CS sequence, it is quite different from most introductory courses. You won't be bored in CS 61A. Perhaps your prior experience will allow you to skip CS 61B or CS 61C, which are more comparable to courses taught elsewhere.

Course Materials

There is no required textbook for this course. Our primary text will be a series of readings based on the classic book, Structure and Interpretation of Computer Programs, which has been the textbook for 61A for many years. Lecture notes will be posted to the course website.

You may want to avail yourself of additional materials on Python, since it often helps to see more than one presentation of a programming language. For example, the book Dive Into Python 3 is freely available online, and also in paperback. Once you get some feel for the language, you may find the on-line reference material to be useful.

One caution: Python 3 is unusual in that it is not backwards-compatible with Python 2.x and earlier. For the purposes of this course, the incompatibilities are relatively few, but you would be wise to check that any book you consult covers the current language.

Laboratory and Discussion Sections

In addition to the lectures Monday through Thursday, the course consists of two discussion sections and two laboratory sections each week.

The discussion sections are run by an amazing group of Teaching Assistants. This course is currently full, so please attend your assigned section. Make sure that you are in a definite section by the end of the first week, because the third and fourth course projects are done in pairs, and your partner must be in your section. There will be chances to find a partner in lab, discussion, and on the Piazza discussion board.

You are expected to attend all class meetings, including lectures, sections, and labs. We do not track attendance at any class meetings, but we do assign points for participation at the end of the term (see grading).

Enrollment: Your TA does not have any power over enrollment whatsoever. Admission to the class is controlled by the EECS department.

Computer Accounts

You must have a computer account on the 61A course facility. To set up an account, you need an account form, which you will receive in the first lab.

You must set up your account in the first week because that is how we know who is really in the class. If you are pre-enrolled but do not set up your account this week, you may be dropped from the course! Account forms will be distributed in lab and office hours this week. The first time you log in, you will be asked to type in your name and Cal ID card number, if you have one. Please follow the instructions carefully. You must get your account and log into it no later than 5 PM on June 22, so that we have an accurate class count.

Even if you plan to use your personal computer for the course projects, you must get a class account, even if you intend never to use it. Class accounts are required for submitting assignments.

If you get a class account and then decide to drop the course, please let me know immediately so that we can admit another student.

Computer Resources

The computing laboratories in 271 and 273 Soda each consist of about 35 SunRay terminals connected to a Sun Solaris compute server. These are our primary lab rooms, although the CS 61A accounts can also be used from any EECS Instructional lab in Soda or Cory Hall. The lab is normally available for use at all times, but you need a card key for evening access to the lab.

Current UCB students: If you are enrolled in the course, your Cal student ID serves as your card key and will automatically be activated for access to the Soda second floor labs (including entering the building). You do not have to do anything, unless for some reason it doesn't work, then see below.

Concurrent enrollment/other students: You can fill out an application and obtain a white card key from 387 Soda Hall (the front desk). There is a small fee for access.

During scheduled lab sessions, only students enrolled in that particular section may be in the lab. At other hours, any CS 61A student may use the lab on a drop-in basis. (The labs on the second floor of Soda Hall are unlocked during daytime hours.)

Be respectful of the lab space. Please don't steal the chairs, or bring in food or drinks. Don't unplug anything; unplugged computers make our hard-working instructional computing team very sad. Don't monopolize a workstation for six hours during prime time to play games. If you see someone disrupting the space, ask them to stop.

You have a homework assignment in the first week that requires you to work on the computer; part of the purpose of the assignment is to ensure that you know how to create, edit, and print files. Pick up your computer account this week, whether or not you are pre-enrolled.

Tests and Grading

Your course grade is computed using a point system with a total of 300 points, with the following distribution:

Midterms are held in the evenings from 7 PM to 9 PM to give you more time to complete them than lecture would allow. You will be allowed to bring a fixed number of pages of notes to each exam. Details of this policy will be released as the exam approaches.

Midterms are scheduled already for Monday, July 9 and Wednesday, July 25. Notify the staff now if you have a conflict.

Each letter grade corresponds to a range of scores.

A+  283-300     A  276-282     A-  269-275
B+  253-268     B  237-252     B-  221-236
C+  214-220     C  207-213     C-  200-206
D+  190-199     D  180-189     D-  170-179

Notice that this scale is nonlinear; the steps are wider in the B range.

This grading formula implies that there is no curve; your grade will depend only on how well you do, and not on how well everyone else does.

If you believe that we have misgraded an exam, submit your exam and a written explanation of the mistake to your TA. You may submit regrade requests to your TA within 1 week of graded exams being returned. By University policy, final exams may not be regraded.

Incomplete grades will be granted only for dire medical or personal emergencies that cause you to miss the final, and only if your work up to that point has been satisfactory.

Projects and Homeworks

Each week there will be problems assigned for you to work on, most of which will involve writing and debugging programs. These assignments come in three categories:

The purpose of the homework is for you to learn the course material, not to prove that you already know it. Therefore, the 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! Each homework is worth two points for a reasonable effort, zero points for a missing homework or one that seems to show no effort, or negative ten (-10) points for a solution copied from someone else. All homework assignments will be submitted online except the first one, which must be submitted online and on paper!

The paper submissions must include the following information: Your name, your computer account, and your section number! To turn in a paper assignment, place it in the CS 61A slot in room 283 of Soda Hall. Please do not forget to turn in a paper copy of your first homework. If you do not, we will not be able to maintain your grades for the semester!

The four programming projects are graded on the correctness and clarity of your solutions. If you work with a partner, which you should for projects three and four, work together to ensure that both group members understand the complete program you create.


A programming project that is not ready by the deadline may be turned in by 11:59 PM the following day (up to 1 day late). Late projects will count for 2/3 of the earned score. No credit will be given for late homeworks, or for projects turned in more than one day late.

Please do not plead for exceptions. If some personal crisis disrupts your schedule one week, don't waste your time and ours by trying to change the course policy; just be sure you do the next week's work on time. If a serious crisis arises, let us know as soon as possible.

Ask Questions!

Your first and most important resource for help in learning the material in this course is your fellow students. Work closely with your group. You are responsible for helping each other learn.

If you have questions that others might also have, regarding projects, homeworks, course policies, etc., post your questions to Piazza, the course messaging service. Piazza allows you to answer questions from other students. Your contributions (questions and answers) to this online forum will also contribute to your participation score in the course.

The class will have a staff of undergraduate Lab Assistants (LAs). Each LA will have scheduled hours to be in the lab. Whenever an LA is in the lab you may request that s/he answer questions about the homework or programs (but not do them for you).

The instructors and the Teaching Assistants who teach the discussion sections are also available to answer questions. You may drop in during office hours, make appointments for other times, or e-mail us.

Learning Cooperatively

With the obvious exception of exams, we encourage you to discuss all of the course activities with your friends and classmates as you are working on them. You will definitely learn more in this class if you work with others than if you do not. Ask questions, answer questions, and share ideas liberally.

To encourage participation, you will receive a small number of points for Effort, Participation and Altruism (EPA). This grade will not be given until the semester is over, and is a confidential value determined by the course staff. Effort is a measure of how hard you "try". For example, do you come to lab? Do you come to office hours? Do you keep up with the lab activities (whether or not you get them right)? Participation measures whether you speak up in lab and lecture and help make the class dynamic and interactive. Do you contribute to the community of the class? Altruism measures how much you help your fellow students learn. One of the best ways to learn is to teach someone else.

We will have several opportunities for you to work in groups. In your discussion section, your TA will provide exercises that you will work through in groups, and as mentioned above, the last two course projects will be done in pairs. Also, there will be a group component to the midterms and the final: for twenty minutes out of the alloted two hours for a midterm, you will work on a problem together with your group members, and all of you will receive the same score on the problem. You will work with the same group for all exams.

To encourage you to help each other with the material, we have two avenues for extra credit on exams: First, if all the members in the group end up getting an A on an exam, all members will get a point of extra credit. Second, if the group member that scored the lowest on one exam gets a score that is at least 10% better on the next exam, the whole group gets a point of extra credit. In other words, the whole group could earn up to two extra points when working together.

Since you're working collaboratively, keep your group members and TA informed. If some medical or personal emergency takes you away from the course for an extended period, or if you decide to drop the course for any reason, please don't just disappear silently! You should inform your group members and your TA, so that nobody is depending on you to do something you can't finish.

Academic Honesty

Cooperation has a limit, however, and in CS 61A that limit is code. Homework problems should be completed and turned in individually. Feel free to discuss the problems with others beforehand; just submit your own work in the end. The third and fourth projects are to be completed in pairs, but you may discuss them more broadly than with your partner. However, you should not be sharing lines of code with others or reading code from other people's projects. Write your own programs and keep them to yourself.

We expect you to hand in your own work, take your own tests, and complete your own projects. The assignments and evaluations are structured to help you learn, which is why you're in college. The course staff works hard to put together this course, and we ask in return that you respect the integrity of the course by not misrepresenting your work.

The EECS Department Policy on Academic Dishonesty says, "Copying all or part of another person's work, or using reference materials not specifically allowed, are forms of cheating and will not be tolerated." The policy statement goes on to explain the penalties for cheating, which range from a zero grade for the test up to dismissal from the University, for a second offense.

Rather than copying someone else's work, ask for help. You are not alone in this course! The TAs, lab assistants, and instructor are all here to help you succeed. If you invest the time to learn the material and complete the projects, you won't need to copy any answers.

A Parting Thought

This document shouldn't end with a discussion of cheating, because grades aren't the purpose of the course. We just want you to learn. We're very excited to have such a large and enthusiastic group of students this summer. We want all of you to be successful here. Welcome to CS 61Awesome.