CS 61A

Structure and Interpretation of Computer Programs summer 2014

61A Course Information and Policies

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

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, our hope is 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.

There is also a self-paced version of this course, 61AS, which fulfills the same requirements.

Programming Language

61A uses 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 is the oldest programming language that is still recruiting new users today. Lisp and Python are similar in many ways. In fact, Lisp popularized many of the features that make Python a great language. Our choice to change languages is primarily motivated by the strength of Python's programming community, which you will soon join as you learn the language. Python also 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 61A. (That is, it may be taken concurrently.)

There is no formal programming-related prerequisites for admission to 61A. However, most 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 61A.

If you don't feel ready for 61A, There is CS 10 : The Beauty and Joy of Computing, which 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, as well as talk about the history of computing and where it will go in the future.

However, if you have no previous programming experience, We strongly recomend you try CS 61A out anyways. Many 61A students who started with zero programming experience have gone on to become accomplished programmers/Computer Scientists after taking 61A. Summer 61A especially has many avenues of support designed to help you succeed, all you need to do is ask.

If you have substantial prior programming background, you may feel that you can skip 61A. In most cases we don't recommend that. Although 61A is the first course in the CS sequence, it's quite different from most introductory courses. You won't be bored in 61A. Perhaps your prior experience will allow you to skip 61B or 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 lecture notes 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.

Lab and Discussion Sections

In addition to the lectures Monday, Tuesday, Wednesday, and 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. You can try to switch to a different lecture or section by posting on the appropriate thread on Piazza.

Make sure that you are in a definite section by next week. Projects 3 and 4 will be done in pairs. We strongly encourage you to find a partner in your own section early on with whom you can study and do projects 3 and 4. Your TA will help you.

You are expected to attend all class meetings, including lectures, sections, and labs.

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 reg card number, if you have one. Please follow the instructions carefully. You must get your account and log into during your first lab so that we have an accurate class count.

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 are not pre-enrolled and want to take 61A, you have to add the course using Tele-BEARS. If you are something other than a regular Berkeley undergraduate, then you probably need a signature on a form admitting you to the course: contact the instructors directly.

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 project partner. You are responsible for helping each other learn.

A good non-person resource to consult is our Wiki, which strives to be THE reference for everything 61A.

If your question is quick, or you don't know where to look for help, please check out the #general channel on our IRC server: To connect, you'll need an IRC client. We have a web based client specifically for 61A here.

If you have questions that others might have as well, regarding projects, homeworks, course policies, etc., post your questions to Piazza, the course messaging service. Piazza allows you to answer questions from other students, which is one of the best ways to learn the material.

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 email us.

Computer Resources

The computing laboratories in 271, 273, and 275 Soda 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/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 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.

The first lab 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.

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:

  • Laboratory exercises are short, relatively simple exercises designed to introduce a new topic. You'll do these during the scheduled lab meetings. You will turn these in at the end of your lab section.
  • Homework assignments are slightly more involved versions of lab exercises, meant to illustrate and explore new topics. There are usually two homeworks per week that will be due on Wednesdays and Saturdays at 11:59:59pm. You are encouraged to discuss the homework with other students, but your final solution should be developed alone.
  • Projects are larger assignments intended to teach you how to combine ideas from the course in interesting ways. There are four projects during the semester. The first two projects should be completed individually. You should complete projects 3 and 4 in pairs; your partner should be another student in your section.

The purpose of the lab is for you to learn the course material with the guidance of the teaching staff. The lab represents a baseline level of competence with the material that we expect everyone to achieve with the help of the staff. So, the labs are graded on the correctness of your solutions.

Each lab is worth one point for a correct solution and zero points for a missing or incorrect solution.

The purpose of the homework is for you to learn the course material, not to prove that you already know it. Therefore, the weekly 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! Homeworks will be graded automatically.

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.

The four programming projects are graded on the correctness and clarity of your solutions. For Projects 3 and 4, you and your partner should work together to ensure that both group members understand the complete program you create.

Projects and homeworks will be submitted online. Through a web-based code review system, you will receive detailed feedback on your projects.

Tests and Grading

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

  • Two midterms, each worth 50 points.
  • One final exam, worth 80 points.
  • Four projects, worth a total of 90 points
  • Fourteen homeworks, worth a total of 28 points
  • Sixteen labs, worth a total of 16 points

Exams are held in the evenings to give you more time to complete them than lecture would allow. You are allowed to bring one double-sided 8.5 in. by 11 in. cheat sheet to the first midterm, two sheets to the second midterm, and three sheets to the final. These cheat sheets may be handwritten or typed. We recommend that you reuse your cheat sheets.

Midterms will be held on Thursday 7/10 and 7/31! The times are not yet finalized (we have requested either 5 to 7pm or 7 to 9pm). If you are not available on these days, notify your TA immediately.

Each letter grade for the course corresponds to a range of scores:

A+  304+        A  291-303     A-  284-290
B+  265-283     B  248-264     B-  231-247
C+  224-230     C  217-223     C-  209-216
D+  199-208     D  188-198     D-  178-187

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.

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.

Midterm Recovery Policy On the final exam, you can earn back a fraction of the points you lost on the midterms. If X is the sum of your midterm 1 and midterm 2 scores, you will earn back up to 75% of max(0, 60-X). The fraction you earn back is based on your final score Y and is computed as min(45, Y-20)/60.

For example, if the sum of your midterm scores is 30/100 and your final score is 40/80, then you earn back 20/60=33.3% of 60-30=30 points, giving you an extra 10 points. Assuming a full score on projects and homework (e.g., 120/120 non- exam points), you will earn a C-.

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.

Since you're working collaboratively, keep your project partner 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 project partner 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 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. This applies also to Projects 1 and 2.

To be clear, the following unfun and uncool activities will be considered cheating:

  • Using another student's code on a solo assignment
  • Using code from a student who is not your partner on a partner assignment
  • Using code from previous students or from an online source
  • Sharing your code with other students or posting your code online
  • Failing to report any of the above

This list is not comprehensive: the instructors reserve the right to go beyond this list at any time in the face of actions that violate the spirit of the course.

Projects 3 and 4 are to be completed in pairs, which means you may share code with one partner. 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.

Keep in mind that even looking at another student's code could be considered cheating. It is very easy to look at another student's solution to "get the idea", but then come up with almost exactly the same code, which would be considered cheating.

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.

If you are found to be cheating in this course, we will always ask you to come in and discuss the situation and give you a chance to explain. The first offense results in a negative score for the assignment. If you are found to be cheating a second time, we will not hesitate to fail you, report you to the center for student conduct, and then also call your parents.

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.

Late Policy

If you cannot turn in an assignment on time, contact your TA and partner as early as possible. Late project submission requires approval by your TA. Typically, projects will be accepted up to 24 hours after the deadline, but late projects will only receive 2/3 of the earned score. No credit will be given for late homework, or for projects turned in more than one day late. Exceptions may be made for extraordinary circumstances.

A Parting Thought

This document shouldn't end with a list of late penalties, because penalties and grades aren't the purpose of the course. We actually just want you to learn. We're very excited to have such a large and enthusiastic group of students this semester. We want all of you to be successful here. Welcome to 61A. :)