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 managing program complexity, such as functional programming 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.
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. In fact, you will be asked to learn at least two other languages, Scheme and SQL, during the course.
A complete list of lecture topics, readings, and assignments appears in the lecture 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. Knowledge of calculus concepts will never be required to complete any assignments. However, taking calculus is a great way to brush up on the arithmetic and algebra that appear regularly in CS 61A.
There is no formal programming-related prerequisite for CS 61A, but taking the course without any prior programming experience is typically very challenging. Students who take the course without prior programming experience typically must work substantially harder to master the material and tend to receive lower final grades in the course. Most CS 61A students have had significant prior programming experience. A typical background includes at least one course equivalent to CS 10 or a score of 3 or above on the AP Computer Science A exam.
If you find it challenging to complete all of the required coursework in the first three weeks, you are strongly recommended to take another course first. You'll likely have a better experience taking 61A later. Taking CS 61A one semester later is unlikely to affect your degree progress or otherwise put you behind, but continuing to struggle in CS 61A despite this recommendation can lead to difficult academic circumstances that can affect your future opportunities. It's better to finish CS 61A with strong mastery of the course material, even if that means delaying by a semester, than to rush through it.
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.
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. Taking Data 8 before 61A is a good way to gain prior programming experience, but taking CS 10 is a better way.
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.
Info 206A: Introduction to Programming and Computation is a 2-unit introduction to programming that overlaps with many topics in the first eight weeks of CS 61A. Professor Hany Farid has placed all of the videos and exercises for this course online, and these are an excellent resource to supplement CS 61A.
The course includes many events and opportunities for learning: lecture, lab, discussion, office hours, and more. Everyone learns differently, so not all of these events are required. However, it is recommended that you try everything out to figure out what combination of these events works best for you.
There are three 50-minute lectures per week in Wheeler Auditorium. Slides and videos will be posted before each lecture. A screencast of live lecture will be posted soon after each lecture occurs. This course moves fast, and lecture is tightly coordinated with section. Please attend or watch each lecture the day it is given and before you attend section.
Section formats have changed! Read this instead of asking former students how section works.
Weekly sections include a programming-based lab assignment and a discussion worksheet.
Lab assignments are graded on correctness and are due Wednesdays at 11:59pm. Automatic tests show whether problems are solved correctly, so completing the lab assignment guarantees a perfect score.
This semester, we are offering two section formats: a 35-student option called regular section and an unlimited-size mega section. Both are designed to help students learn the course material equally well. You can choose which format you want. It is possible to change sections until 11:59pm on 9/14.
There are two 80-minute section meetings each week: one lab and one discussion. These sections are run by an amazing group of teaching assistants who have been carefully selected for their ability, enthusiasm, and dedication to learning.
To receive credit for lab section, you must attend and get checked off (1 point), and you must submit the lab assignment (1 point). You will be checked off at the end of the lab period as long as you have made substantial progress on the lab assignment. You can also be checked off and leave early if you finish the lab assignment.
To receive credit for the discussion section, you must attend.
You can earn a maximum of 20 lab points across 12 scored labs (2 points each), which means that you can miss two required labs and still have a perfect score. During exam review weeks, lab attendance is optional.
You can earn a maximum of 10 discussion points across 12 required discussions, which means you can miss two and still have a perfect score.
Regular sections will not be webcast and are not recorded.
Note: This description was updated 8/28 based on student feedback.
There are two 80-minute section meeting each week: one mega lab and one mega discussion. Attendance is optional. In addition to the live section, there will be discussion videos produced each week that cover the same material.
Students in the mega section must complete and submit the weekly lab assignment (2 points) but do not need to be checked off. You may attend the large-format lab section in Wozniak lounge Mondays 3:30-5 to work on the lab assignment with your peers, but you may also complete it on your own. You are also welcome to ask questions about lab assignments during course office hours.
Scoring for the mega section is identical to the regular section: a maximum score of 20 lab points allows you to miss two labs and still have a perfect score.
You may attend the large-format discussion section or watch the videos (or both or neither). Students enrolled in the mega section automatically receive credit for discussion each week. Originally we had planned a weekly discussion quiz, but that has been eliminated. However, it is strongly recommended that you work through each week's discussion worksheet either by attending mega discussion or reviewing the worksheet on your own. Discussion worksheets are highly relevant to exams.
Mega sections will be webcast and recorded.
Choosing a Section Format
First-year students and students with limited prior programming experience are strongly encouraged to choose a regular section. Working on programming-based lab assignments with helpful course staff in the room and solving discussion questions in small groups are great ways to learn.
Both options are meant to be great. The mega section is new, and so we’re putting a lot of energy into making it effective. It is led by some of the most experienced GSIs in the course. It is designed to appeal to students who learn well from large-format lectures, working independently, and coming to drop-in office hours when they need help. But the regular section format has clear advantages for students who wish to work with others and get to know the course staff: a guarantee of at least 1 out of 2 lab points just by showing up, a dedicated lab GSI, and the peer learning that comes with regularly attending a small weekly section.
Office hours are drop-in tutoring sessions in which you can ask questions about the material, receive guidance on assignments, and work with peers and course staff in a small group setting. See the office hour schedule and come by in person or book an appointment online on the OH Queue.
Our head TAs will also offer advising office hours, which are designed to help you navigate CS at Berkeley, Berkeley overall, and really anything that we're able to advise you on. You can book those appointments using any of these TAs' links from the blurb on the OH page.
In addition to programming-based lab assignments, there are programming-based homework assignments and projects.
Weekly homework assignments let you apply the concepts learned in lecture and section to more challenging problems. Homeworks will typically be released on Fridays and due the following Thursday.
Homework is scored out of 2 points, and every incorrect question reduces your score by 1 point.
Homework Recovery Policy
You can recover one question per homework by attending a homework recovery session. Logistics will be released after the first homework assignment is due.
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 credit.
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 section, but course staff will also help with partner matching at various points in the semester. It is your responsibility to contact and collaborate with your partner. You may also work alone on all projects, although partners are recommended.
Projects are graded on correctness, with points earned for each problem successfully completed.
There will be three exams:
- Midterm 1 will be held 7pm-9pm on Monday 9/12.
- Midterm 2 will be held 8pm-10pm on Thursday 10/27.
- The final exam will be held 7pm-10pm on Wednesday 12/14.
Exams will be taken on paper on campus in designated exam rooms. Remote exams proctored over Zoom are available in exceptional circumstances.
Students who are enrolled in another course with a conflicting final exam time may take the CS 61A final exam in the next final exam slot: 8am-11am on Thursday 12/15.
Accommodations (DSP and Otherwise)
We will provide appropriate accommodations to all students enrolled in Berkeley's Disabled Students Program (DSP). To ensure that you receive the appropriate accommodations, have your DSP specialist submit a letter confirming your status and accommodations. We also aim to provide fair and appropriate accommodations to any students who, because of extenuating circumstances, may need them. For information on how to request accommodations, please see the "Accommodations Appointments" section below.
Remote section accommodations
In light of the ongoing Coronavirus pandemic, we understand that attending sections and exams in-person may be challenging for some students. To this end, we will be providing remote accommodations for some sections:
- Lectures will be recorded and posted to the course website, so that students may watch asynchronously
- Synchronous attendance at regular lab and discussion sections will be required (with a number of excused absences allowed), but mega section will have a remote aspect.
- You will be allowed to request a remote exam or other exam accommodations under specific circumstances. Details on how to request these for each exam will be released around one week prior to each exam.
Our hope is that these accommodations will make the course as accessible as possible for as many students as possible, but the default mode of instruction for the course is in-person. All students will be assumed to be taking the exam in-person unless remote accommodations are explicitly requested, and we cannot at this time guarantee remote support for resources such as office hours and small-group tutoring. We also will not be providing explicit accommodations for students not based in the Pacific timezone.
If you need to request an extension, regardless of your DSP status, fill out this form. Submissions to this form will be visible only to the course instructors, and certain Student Support staff members.
Any extension request up to 24 hours will be guaranteed to be approved, so long as it is made in good faith. Any extension request up to 3 days made by a student with a DSP accommodation for assignment extensions will be approved automatically. All other extensions will be handled on a case-by-case basis.
There will never be a penalty for requesting an extension—we understand that life happens, and we want to ensure that all students are provided with the support and flexibility they need to succeed, regardless of personal circumstances.
If you're not enrolled in DSP, or are in the process of being onboarded by DSP, you may still be eligible for accommodations. You may also be eligible for accommodations if serious extenuating circumstances should come up during the semester.
If you believe you may require accommodations, please visit this calendar to book a short (20-minute) appointment with one of our student support TAs. You can also reach us at any time to discuss accommodations by emailing firstname.lastname@example.org.
All DSP and accommodations-related materials for this course are kept in a repository separate from the rest of the course materials that is visible only to the instructors, selected staff, and course managers. Course managers are members of department staff, unlike course staff, that help manage situations such as DSP accommodations.
For any DSP and accommodations-related communications, please reach out to email@example.com, which will put you in touch with our student support team. This inbox is only visible to staff members marked with "cs61a@" on the TA and tutor pages. This inbox will be visible to future members of course staff, so if you ever have a communication that you wish to remain private, let us know and we can delete the email exchange once the conversation is resolved.
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 us, and we can inform your section TA on your behalf. You are also welcome to reach out to your section TA directly.
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.
Lots of additional study materials including past exams appear on the Resources page.
Your course grade is computed using a point system with a total of 300 points, broken down as follows:
- Midterm 1, worth 30 points
- Midterm 2, worth 45 points
- The final exam, worth 75 points
- Four projects, worth 100 points
- Homework, worth 20 points
- Lab, worth 20 points
- Discussion, worth 10 points
There are a handful extra credit points throughout the semester, perhaps around 10, that are available to everyone.
Each letter grade for the course corresponds to a range of scores:
A ≥ 290 A- ≥ 275 B+ ≥ 255 B ≥ 230 B- ≥ 210 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.
To receive an A+, students must receive at least 300 points and solve at least two A+ questions on exams. The A+ questions on exams are not worth any points and only serve to qualify students for an A+.
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. Unlike some previous semesters you may have heard about, these thresholds will not be adjusted based on student performance.
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. If you wish to discuss an incomplete in the course, please contact firstname.lastname@example.org.
There are 11 homework assignments (2 points each) but a maximum of 20 homework points, so you can miss one homework and still have a perfect homework score. Update (11/18): Your two lowest homework scores will be dropped. There are still 20 homework points.
There are 12 scored lab assignmenets (2 points each) but a maximum of 20 lab points, so you can miss two labs and still have a perfect score.
There are 12 required discussions (1 point each) but a maximum of 10 discussion points, so you can miss two discussions and still have a perfect score.
Many students end the course with perfect homework, project, lab, and discussion scores. These parts of the course are not meant to be evaluations, but instead learning tools.
Update (11/30): It is possible to recover lost points on Midterm 1 and Midterm 2. Your score (as a fraction of total available points) for a question type (What Would Python Display, Environment Diagrams, and Implementing Python) on a midterm will be at least 90% of your score for that same question type on any later exam.
If you cannot turn in an assignment on time, you can request an extension—we guarantee we will grant 24-hour extensions for any non-extra credit assignment, no questions asked, and we will consider all other extension requests on a case-by-case basis. In absence of an extension, our policy is:
- Labs: We rarely accept late lab submissions.
- Homework: We rarely accept late homework submissions.
- Projects: Submissions within 48 hours after the deadline will receive 75% of the earned score. Submissions that are 48 hours or more after the deadline will receive 0 points.
It is our expectation that all interactions with course staff and other students will demonstrate appropriate respect, consideration, and compassion for others. Please remember to be friendly and thoughtful; our community draws from a wide spectrum of valuable experiences. For further reading, please reference the Berkeley Principles of Community and Berkeley Campus Code of Student Conduct.
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 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.
Any students caught collaborating on exams will receive an F in the course. Please don't be one of these students.
Reading others' homework or project solution to a problem before you solve that problem on your own will incur large point penalties. You are free to discuss the problems with others beforehand, but you must write your own solutions. The exception to this rule is that you may share code with your project partner.
If you are unsure if what you are doing constitutes academic misconduct, 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 read others' solutions to an assignment before you have completed the assignment
- 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!