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.
- CS 61A concentrates 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.
- CS 61B deals with the more advanced engineering aspects of software, such as constructing and analyzing large programs.
- CS 61C focuses on machines and how they execute programs.
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.
CS 61A primarily 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. We will also use other languages in the latter half of the course, including the Scheme programming language and Structured Query Language (SQL).
Mastery of a particular programming language is a very useful side effect of CS 61A. However, our goal is not to dictate what language you use in your future endeavors. Instead, our hope is that once you have learned the concepts involved in programming, you will find that picking up a new programming language is but a few days' work.
A complete list of lecture topics, readings, and assignments appears in the daily schedule.
Math 1A is listed as a corequisite for CS 61A. (That is, it may be taken concurrently.) Math 10A or Math 16A are also fine. It is possible to take CS 61A without knowing or learning calculus; all of the old calculus-based examples have been removed over the years. However, taking calculus is a great way to brush up on the arithmetic and algebra that appear regularly in CS 61A.
Though there are no enforced programming-related prerequisites for CS 61A, we strongly recommend prior Computer Science coursework or other exposure to programming equivalent to CS 10 or a 3 on the AP Computer Science exam. Some students take the course without any prior programming experience, but they typically must work substantially harder to master the material. If you have limited prior experience and you find it challenging to complete all of the required coursework in the first week, strongly consider taking another course first. You'll likely have a better experience taking 61A later, and you won't fall behind in any meaningful way by taking a preparatory class first. When surveyed, most students mentioned that they found CS 10 very useful in preparing them for 61A.
To build programming experience before taking CS 61A, we recommend that you first take a class that introduces you to programming. The most appropriate class within the Berkeley CS department is CS 10, described below, but you may also find similar classes at Berkeley extension or in online courses. Feel free to contact course staff if you are not sure what's best.
CS 10: The Beauty and Joy of Computing is an introductory computer science course which is similar to CS 61A but moves at a friendlier pace. CS 10 covers variables, functions, recursion, algorithmic complexity, object-oriented programming, and many other relevant CS 61A topics, with the overall content overlap being about 50%. CS 10 starts the semester in Snap!, a block-based programming language which allows students to focus on conceptual understanding without worrying about unfamiliar syntax. After the midterm, the course transitions into Python (the primary language 61A uses), applying the same concepts you already learned to the new language, as well as introducing new concepts more relevant to Python. CS 10 also covers big ideas and social implications that go beyond programming, showing you the beauty and joy of computing.
Offered this summer!
Data 8 and CS 88
If you are majoring in data science, the pathway of Data 8 plus CS 88 is the recommended way for you to learn programming, since it is designed for data science students and will introduce you to many of the core concepts.
Data 8: The Foundations of Data Science is an introduction to data science designed to be accessible and useful for all Berkeley students. This course was built for students without prior programming experience. It teaches students to program in Python 3, but covers a much smaller subset of the language than CS 61A. Most of the course focuses on data processing and statistical techniques that are central to using computers to answer questions about the world.
Offered this summer!
CS 88: Computational Structures in Data Science is an introduction to programming and computing that has more than 50% concept overlap with CS 61A. It is designed for students interested in data science who want to expand their knowledge of programming and program structures beyond what is covered in Data 8. Students who complete CS 88 can either proceed directly to CS 61B or subsequently take CS 61A, a path that offers a substantial amount of review because of the high topic overlap between the courses.
Not offered this summer, but will be offered in the fall.
We've distilled the course into four major components for learning: lecture, discussion, lab parties, and office hours. Everyone learns differently, so not all of these events are required. However, we've found that students are most successful when they consistently attend these four events. There will also be several opportunities to get extra practice with the material, such as tutoring sections. You can consider these extra activities modular, and attend only the ones you find useful.
Lectures will be held live Monday through Thursday over Zoom from 12:30PM-2PM PT (Pacific Time), starting on Monday, 6/21. For students who cannot attend live, pre-recorded lectures will be posted to the website the night before, and a recording of the live lecture will be posted afterwards.
You may choose to watch 1) the live lectures or live lecture recordings or 2) the pre-recorded lectures. Both sets of lectures will cover the same material.
This course moves fast, and lecture is tightly coordinated with section. Please attend or watch each lecture before attending discussion or lab party.
While lecture attendance is not required, we do expect you to stay up to date with the material. To help you stay on track, we will post 2 "vitamins" a week covering the previous days' lecture material. Vitamins are described in-depth in the Assignments section below.
The goal of each week's lab is to provide you with some programming practice. Lab assignments are similar to homework assignments, but the problems are more straightforward, and you're welcome to work through lab assignments with other students, including sharing code you've written.
To help you get staff support and find other students to collaborate with on labs, we are organizing lab parties. Each lab party will last 2 hours or less and include a main room where a TA will introduce the concepts on the lab. However, you will primarily spend your time in breakout rooms with a group of other students working on the same problem and a TA assigned to help you when you get stuck.
Unlike homework and project parties, we've designed lab party to be a core component of the course. Historically, collaboration and support from staff has been critical for students to understand and solve lab problems. While attendance is not required, you should only skip lab party if you feel confident that you can complete lab assignments on your own.
Discussion sections provide problem-solving guidance and practice. The 80-minute orientation sessions will occur twice a week. These sections are run by an amazing group of teaching assistants who have been carefully selected for their ability, enthusiasm, and dedication to learning. Getting to know your TA is an excellent way to succeed in this course.
You will be required to attend a discussion or email your TA to ask for an alternate assignment. You will be allowed to miss a couple discussions and still get full attendance credit.
Our virtual office hours are one-on-one meetings with a course tutor in which you can ask questions and get help. You can join the office hours queue at oh.cs61a.org. Each week's schedule of office hours (when we are helping students on the queue) appears in the weekly office hours schedule.
We will try hard to make sure that enough staff are available to meet office hours demand, but there will likely be some time this semester when demand exceeds supply. Please be patient as we try to support all the students in the course. Try an Ed private post if you can't find timely help with a staff member.
In addition to the office hours queue, you can collaborate with other students working on the same assignment using the Study Group tool. If the whole group you form wants help from a staff member, you can request help any time that the office hours queue is available.
Homework and Project Parties
For students who prefer a more collaborative environment in which they can discuss problems with other students, we will offer Zoom-based homework and project parties each week. Students and staff will work together to solve problems. Try one out and see if you like it.
Group Mentoring Sections
Optional group mentoring sections are held each week. Each section features worksheets that review topics from the course. These recurring sections of at most 5 or 6 students meet weekly and exist to create a stronger feeling of community in the class and reinforce conceptual understanding of course material. Signups will open up near the beginning of the semester.
We welcome non-enrolled students to watch along for the lecture content and complete the assignments like everyone else. We won’t be able to add you to our grading system(okpy), but the local autograder for all assignments will tell you which questions you get right - so you’ll get instant feedback on your side. The main things you won’t be able to do are attend office hours, sections, or take exams. We can also add you to Ed so you can see what’s happening in the class. However, we ask that our auditing students not ask Ed questions, as this stretches our resources thin for enrolled students. If you're interested in joining the Ed to follow along with course announcements, please email email@example.com.
Each week, there will be problems assigned for you to work on, most of which will involve writing and analyzing programs. These assignments come in three categories: lab exercises, homework assignments, and projects.
To help you better reflect on lecture content, we will have vitamins that are short quizzes. There will be one vitamin for each discussion, and the topics covered on the vitamin will reflect the topics covered in discussion. We will have a total of 13 vitamins, and you will need to complete 11 of them for full credit.
Lab exercises are designed to introduce a new topic. Each week will contain two labs, one released on Sunday and due Tuesday, and one released on Tuesday and due Thursday.
Lab exercises are scored on correctness. To receive credit, you must complete all of the problems that are not marked as optional and pass all tests. There is no partial credit on labs.
Weekly homework assignments let you apply the concepts learned in lecture and section to more challenging problems. Homeworks will typically be released on Thursdays and due the following Wednesday.
For lab, we allow unlimited collaboration with your peers. We hope you work with a partner or small group to share ideas and even solutions when attempting the lab problems, as long as everyone is learning.
You are encouraged to discuss homework questions with other students, as long as you write your own code and submit your own work. Finding a study group is a great idea. The purpose of homework is for you to learn the course material, not to prove that you already know it. Therefore, you can expect to receive substantial assistance from the course staff. You're welcome to help others once you solve a problem.
You are not allowed to copy solutions or share your solution to a question with other students who haven't completed the question already. You are not allowed to use solutions that you find on the internet. If you are stuck on a problem, come get help instead of copying the answer from someone else or the Internet; you'll still get credit and won't be flagged for cheating.
Homework is scored out of 3 points, and every incorrect question costs you 1 point.
Homework Recovery Policy
You can recover one question per homework by going through the homework recovery process:
- Fill out a form declaring which question you want to recover by Thursday 11:59PM, the day after the homework is due.
- Join the recovery session for that question. The time and location will be included with the form. These sessions are not recorded; you must attend live to receive recovery credit.
Recovery sessions describe how to approach and solve a past homework problem. You are welcome to attend these even if you don't need the recovery point.
Projects are larger assignments intended to combine ideas from the course in interesting ways.
You are allowed and encouraged to pair program with a partner. Make sure to alternate roles so that both of you understand the complete results. We recommend finding a partner in your tutorial group, but course staff will also provide a partner matching form at various points in the semester. It is your responsibility to contact and collaborate with your partner; we cannot guarantee that your partnership works out. You may also work alone on all projects, although partners are recommended.
Projects are graded on correctness.
Each exam has a scheduled time, but students in time zones for which the exam would start between 8pm and 6am (inclusive) or with conflicting exams may request an alternate exam time. Details for this request will be shared before the exam date.
The diagnostic quiz will be held on Friday, 7/2 from 5PM-6PM PT (Pacific Time). This quiz is meant to be both a basic knowledge check to let you know where you're at with the material as well as a technology check to ensure that you're familiar with the proctoring policy that we will use for the midterm and final. There will be three questions on the quiz, each worth 1 point. 2 points will be awarded for attempting the quiz, for a total of 5 points possible.
The midterm will be held on Thursday, 7/15 from 5PM-7PM PT.
The final exam will be held on Thurday, 8/12 from 5PM-8PM PT. We will not be providing alternates for those with conflicting final exams, unless it is due to a DSP accommodation.
Exams will be web-based multiple-choice, fill-in-the-blank, and free response questions, in a similar format to the Fall 2020/Spring 2021 exams.
All exams will be proctored through Zoom.
- Before the exam: Download Zoom on your smartphone and determine how you will set up your phone to proctor your work. Please reach out privately on Ed if you are having setup difficulties. Example setups are here: https://cs161.org/sample-setups.
- On the night before the exam, make sure you’ve received an email with a Zoom meeting link.
- On the day of the exam, join the Zoom meeting from your smartphone and position your smartphone so that we can clearly see all screens you are using and both of your hands. Make sure to mute yourself.
- Technical issues: don’t worry if your video feed disconnects briefly during the exam. If you encounter significant technical problems, don’t worry about video proctoring and focus on finishing the exam.
If you need to use the bathroom, just leave the video feed on while you’re away.
We will provide appropriate accommodations to all students enrolled in Berkeley's Disabled Students Program (DSP). To ensure that you recieve the appropriate accommodations, have your DSP specialist send us a letter confirming your status and accommodations. All DSP-specific logistics in this class are handled by Cooper Bedin (firstname.lastname@example.org). Please reach out to them if you have any questions or concerns regarding your accommodations.
All DSP-related materials for this course are kept in a repository separate from the rest of the course materials, that is visible only to the DSP TA and the instructors.
For any DSP related communications, we recommend that you reach out to the DSP TA directly and NOT to email@example.com, as that inbox is viewable by other members of course staff. Instructors may be informed of DSP-related communications as needed.
If you believe your accommodations may affect the TA who is teaching your section, and would like to inform that TA, you may wish to email the DSP TA. They can inform your section TA on your behalf.
If you need to request an extension, for DSP reasons or otherwise, fill out this form. Submissions to this form will be visible only to the DSP TA and the instructors, and will be processed as quickly as possible. If you are a DSP student with an accommodation for assignment extensions, extension requests made to this form will be approved automatically, so long as they are made in good faith. Longer extensions will be approved on a case-by-case basis.
The online textbook for the course is Composing Programs, which was created specifically for this course, based on the classic textbook Structure and Interpretation of Computer Programs. Readings for each lecture appear in the course schedule. We recommend that you complete the readings before attending lecture.
Your course grade is computed using a point system with a total of 300 points.
- The diagnostic quiz, worth 5 points.
- The midterm exam, worth 55 points.
- The final exam, worth 80 points.
- Four projects, worth 99 points.
- Homework, worth 21 points.
- Lab Assignments, worth 18 points.
- Discussion participation, worth 11 points.
- Vitamins, worth 11 points.
There will be a handful extra credit points throughout the summer, perhaps around 8, that will be available to everyone.
Each letter grade for the course corresponds to a range of scores:
A+ ≥ 300 A ≥ 285 A- ≥ 270 B+ ≥ 250 B ≥ 225 B- ≥ 205 C+ ≥ 190 C ≥ 180 C- ≥ 175 D+ ≥ 170 D ≥ 165 D- ≥ 160
Your final score will be rounded to the nearest integer before being converted to a letter grade. 0.5 rounds up to 1, but 0.49 rounds down to 0.
There is no curve; your grade will depend only on how well you do, and not on how well everyone else does. Score thresholds are based on how students performed in previous semesters. We will never move bins up, or make it harder to reach any letter grade. In the unlikely case the course distribution is much lower than previous semesters, we will lower the grade bins, or make it easier to achieve certain letter grades.
These are the exact thresholds that will be used at the end of the course to assign grades. In a typical semester, about 60% of students taking the course for a letter grade will receive a B+ or higher.
Incomplete grades will be granted only for medical or personal emergencies that cause you to miss the final or last part of the course, only for students who have completed the majority of the coursework, and only if work up to the point of the emergency has been satisfactory.
Each homework is worth 3 points, and each lab is worth 2 points.
There will be no homework drops, but your lowest 2 lab scores will be dropped from your final grade calculation. Additionally, Lab 00, Lab 06, and Lab 13 will be ungraded.
There will be 13 total discussion and 13 total vitamins this semester. You must attend 11 discussions and complete 11 vitamins.
Each discussion section you attend will also give you 1 recovery point for the midterm. There are 13 discussion sections, which can yield a maximum of 13 recovery points.
We calculate your midterm recovery using the following logic, where
is the number of recovery points you have.
def exam_recovery(your_exam_score, attendance, max_exam_score, cap=13): half_score = max_exam_score / 2 max_recovery = max(0, (half_score - your_exam_score) / 2) recovery_ratio = min(attendance, cap) / cap return max_recovery * recovery_ratio
According to this formula, if you receive more than half the available points on the midterm, then you don't recover any points. If you score just below half the points, you will recover a few points. If you score far below half the points, you will recover many points. The more weeks you attend discussion, the more exam points will be recovered.
The purpose of this policy is to ensure that all students who continue to invest time in the course throughout the semester are able to pass.
There are no recovery points available on the final exam.
If you cannot turn in an assignment on time, contact course staff and your partner as early as possible. Depending on the circumstance, we may grant extensions.
- Labs: We rarely accept late lab submissions.
- Homework: We rarely accept late homework submissions.
- Projects: Submissions within 24 hours after the deadline will receive 75% of the earned score. Submissions that are 24 hours or more after the deadline will receive 0 points.
For exceptionally rude or disrespectful behavior toward the course staff or other students, your final grade will be lowered by up to a full letter grade (e.g., from an A- to a B-) at the discretion of the course instructors. You don't need to be concerned about this policy if you treat other human beings with even a bare minimum of respect and consideration and do not engage in behavior that is actively harmful to others.
With the obvious exception of exams, we encourage you to discuss 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.
Learning cooperatively is different from sharing answers. You shouldn't be showing your code to other students or looking at others' code, except:
- During lab, you can share all you want as long as you're all learning.
- For a project that allows partners, you can share anything with your partner.
- If you've finished a problem already, you can look at others' code to help them finish.
If you are helping another student, don't just tell them the answer; they will learn very little and run into trouble on exams. Instead, try to guide them toward discovering the solution on their own. Problem solving practice is the key to progress in computer science.
Since you're working collaboratively, keep your project partner 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, so that nobody is depending on you to do something you can't finish.
If you have any questions, please post them to Ed, the course discussion forum. Ed allows you to learn from questions your fellow students have asked. We encourage you to answer each others' questions!
If you don't have access to the Ed, please email us at firstname.lastname@example.org.
Ed is the best and most reliable way to contact the course staff. There is an option to make a private post, if you would prefer. If you need to share sensitive information that you would only like the Head TAs and instructors to see, you should email us.
The minimum penalty for any students caught collaborating on exams will be negative points on that exam. Please don't be one of these students.
Assignment cooperation has a limit, and in CS 61A that limit is reading others' homework or project solution to a problem before you solve that problem on your own. You are free to discuss the problems with others beforehand, but you must write your own solutions. You may share code with your project partner.
If you are unsure if what you are doing is cheating, please clarify with the instructor or contact course staff. The following is a list of things you should NOT do. This list is not exhaustive, but covers most of the big offenses:
- Do not copy code from any student who is not your partner.
- Do not allow any student other than your partner to copy code from you.
- Do not copy solutions from online sources such as Stack Overflow, Pastebin, and public repositories on GitHub.
- Do not post your solutions publicly during or after the semester.
If you find a solution online, please submit a link to that solution anonymously. When we find an online solution, we ask the author to remove it. We also record the solution and use it to check for copying. By reporting online solutions, you help keep the course fair for everyone.
In summary, we expect you to hand in your own work, take your own tests, and complete projects with code written only by you and your partner. The assignments and evaluations are structured to help you learn, which is why you are here.
Rather than copying someone else's work, ask for help. You are not alone in this course! The entire staff is 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
Grades and penalties aren't the purpose of this course. We really just want you to learn. The entire staff is very excited to be teaching CS 61A this semester and we're looking forward to meeting such a large and enthusiastic group of students. We want all of you to be successful here. Welcome to CS 61A!