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 score of 3 or above on the AP Computer Science A 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.
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.
Rather than taking 61A, many students take one of these alternate Berkeley courses. It is possible to take 61A after taking one of these courses, but there is so much overlap in content that few students take 61A as well.
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 over Zoom. Slides and videos will be posted before each lecture. A recording of the live Zoom 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.
There are two sections 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. Getting to know your TA is an excellent way to succeed in this course.
In office hours, 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 online; no appointments are needed.
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.
Lab exercises are designed to introduce a new topic. You can complete and submit these during the scheduled lab sections or any time before the deadline. Most students find that attending lab is much more useful than working on lab assignments independently.
Lab exercises are scored on correct completion. To receive credit, you must complete all of the problems that are not marked as optional and pass all tests.
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 costs you 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 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 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 and composition.
There will be three exams:
- Midterm 1 will be held 8pm-10pm on Monday 9/13.
- Midterm 2 will be held 7pm-9pm on Wednesday 10/27.
- The final exam will be held 3pm-6pm on Thursday 12/16.
Exams will be taken on paper on campus in designated exam rooms. In the event that in-person exams are not allowed due to campus closure or room occupancy restriction, exams will be delivered remotely.
Remote study students who have completed a COVID-19 Exception Request Form in eTang (see UHS requirements for more information) may take exams remotely during the scheduled exam periods. To be eligible for a remote exam, students will need to provide documentation confirming that they are studying remotely and will not be on campus.
Unlike some courses, the particular subject matter of CS 61A makes it very difficult to ensure a fair exam in which many students are taking the exam in person and many others are taking it remotely. Since it is not likely that all on-campus students will have a suitable space to take a remote exam simultaneously, an in-person exam is the best available option.
Students who are enrolled in another course with a conflicting final exam time may take the CS 61A final exam in the next exam slot: 7pm-10pm on Thursday 12/16. Proof of enrollment in a conflicting course will be required. This information will be collected after the add/drop deadline.
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-related materials for this course are kept in a repository separate from the rest of the course materials, that is visible only to instructors and selected staff.
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.
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.
- Midterm 1, worth 40 points.
- Midterm 2, worth 50 points.
- The final exam, worth 75 points.
- Four projects, worth 100 points.
- Homework, worth 20 points.
- Lab, worth 10 points.
- Participation, worth 5 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 ≥ 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. Unlike some previous semesters you may have heard about, these thresholds will not be adjusted based on student performance. You could all get A's. You could all get D's.
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.
Your lowest homework score will be dropped.
Each lab that you complete is worth 1 point, and you can receive a maximum of 10 lab points. There are going to be at least 13 lab assignments, so you can skip some and still get full credit.
The participation score is designed to make sure that all students attend at least the first few weeks of discussion sections to try them out. Continuing to attend provides a safety net in case of a low midterm score.
Attending a discussion will earn you one participation credit. There will be about 12 possible credits available.
To earn a perfect participation score in the course, you need to earn at least 5 credits. Your course discussion participation score is the number of participation credits you earn over the semester, up to 5.
Additional participation credits beyond the first 5 contribute to recovery points on midterms. Earning 10 or more participation credits will give you the maximum amount of midterm recovery.
We calculate your midterm recovery using the following logic, where
participation is the number of participation credits you earn:
def exam_recovery(your_exam_score, participation, max_exam_score, cap=10): half_score = max_exam_score / 2 max_recovery = max(0, (half_score - your_exam_score) / 2) recovery_ratio = min(participation, cap) / cap return max_recovery * recovery_ratio
According to this formula, if you receive more than half the available points on each 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 recovery credits you earn, the more exam points will be recovered.
Additionally, what matters for exam recovery is the percentage of the total participation credits you receive, not the absolute number of participation credits.
The purpose of this policy is to ensure that 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.
If you have at least 300 points in the course, it is possible to receive an A+ by submitting an A+ program, which is a short but interesting program (or small part of a larger program) that uses concepts from CS 61A. Students with fewer than 300 points cannot receive an A+. A+ programs will only be scored for students who receive at least 300 points. (Students with 299.5 points will be rounded up to 300.)
You may submit an A+ program by Friday 12/10 @ 11:59pm using the A+ form, which includes scoring criteria. While your program can be part of a group project, the part of the program you submit for scoring must be a part for which you were the primary author. Two group members cannot submit the same part.
An A+ program can receive up to 10 plus-points. Although we expect that all submissions will be quite cool and clever, the median score is expected to be 4 or 5, and only truly impressive submissions will score more than 7. These plus-points are only used to determine whether students scoring at least 300 points in the rest of the course receive an A or an A+; A+ programs do not affect student grades in any other way, and plus-points do not count as points. Students who score a total sum of at least 310 points and plus-points will receive an A+.
Students who write an A+ program are encouraged to present them in the CS 61A Project Showcase on Tuesday 12/7, but presentation there is not required and will not affect your score. Participation in the project showcase is open to everyone in the course.
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 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!