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 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.
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 examine the Scheme programming language, as well as some declarative programming languages in the latter half of the course.
Mastery of a particular programming language is a very useful side effect of CS 61A. However, our goal is not to choose what language you use in your future studies and career. Instead, 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 are no formal prerequisites for admission to CS 61A, but that doesn't mean that it's the right first CS course for all students. Many CS 61A students have had significant prior programming experience, including prior coursework. Some students take the course without any prior programming experience, but they typically must work substantially harder to master the material, perhaps simply because they have less practice working with programs. If you have no prior experience, and you find it challenging to complete all of the required coursework in the first two weeks, you should seriously consider taking another course first. You'll likely have a better experience taking 61A later.
If you want to build programming experience before taking CS 61A, we recommend that you take one of these courses first. You can always take CS 61A in a future semester. Both are offered this summer.
CS 10: The Beauty and Joy of Computing provides a bird's-eye view of the field of computer science. The course teaches students how to program using Snap (based on Scratch), one of the friendliest programming languages ever invented, as well as Python, the same language used in 61A. But the course is far more than just learning to program! You'll also learn about some "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.
Data 8: The Foundations of Data Science is an introduction to data science designed to be accessible and useful for all Berkeley students, and built for students without prior programming experience. The course 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. The overlap between Data 8 and CS 61A is small (perhaps 25%), but the programming skill you will acquire in Data 8 will prepare you for the faster pace of CS 61A.
The course includes many events and opportunities for learning: lecture, lab, discussion, office hours, and group mentoring. We understand that everyone learns differently, so not all of these events are required. However, it is recommended that you at least try everything out to figure out what combination of these events works best for you.
There are four 80-minute lectures per week. Videos and slides will generally be posted before live lecture each day. Videos are primarily available for the purpose of review, or if you have to miss a lecture or two. This course moves very fast, so you should always watch lecture before your section that day. The TAs will assume that all of their students have watched that day's lecture.
There are two labs and two discussion sections each 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. Participation in lab and discussion determines your participation score for the course.
Section works best when you attend lab and discussion taught by the same TA. Due to a limitation of the campus scheduling system, we were unable to link labs and discussions, but please to attend the discussion taught by the same TA as your lab if at all possible.
To find the discussion section that corresponds to your lab, take your lab section number (ranging from 11 to 23) and add 90 to it (to get a number ranging from 101 to 113). Please make sure that the discussion corresponding to your lab works with your schedule, since we’ll give seating priority in discussion to those enrolled in the corresponding lab, not those enrolled in the discussion section itself. If the discussion section corresponding to your lab does not work with your schedule, please fill out this form.
Attending office hours is another excellent way to succeed in this course. You can ask questions about the material, receive guidance on assignments, work with peers and course staff in a small group setting, find project partners, and learn about computer science at Berkeley. We will post the office hour schedule here.
Group Mentoring Sections
Optional group mentoring sections are held each week. Each section features worksheets that review topics covered in discussion section. These sections of at most 4 or 5 students meet twice a week and are here to create a stronger feeling of community in the class and reinforce conceptual understanding of course material. There will be recurring sections which will have the same group of students, and sign-ups for these sections will open on Thursday of the first week of classes. There will also be drop-in sections, and sign-ups for these will open every Sunday.
Attending guerrilla sections is a great way to review the entire week's worth of material. You will work in small groups to complete a worksheet, while being able to get feedback from staff. The questions in the worksheet will progress in difficulty, so this is a fantastic opportunity to build foundational understanding and work on challenging problems. These sections will be held on Friday from 12:00 - 2:00 PM in 521 Cory Hall.
Each week, there will be problems assigned for you to work on, most of which will involve writing, debugging, and discussing 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 on your own time before the scheduled due date. Most students find that attending lab is much more useful than working on lab assignments independently.
Lab exercises are graded on completion and understanding. To receive credit you must pass all tests for the required problems and submit your work. Each lab indicates which problems are required for credit. These are worth participation credits, see Lab and Discussion Participation for more information.
Weekly Check-ins can be completed in either lab that week. These consist of a brief conversation with an academic intern or TA in lab where they will talk with you about how you're doing in the course and check your understanding on the previous week's material. These are worth participation credits, see Lab and Discussion Participation for more information.
Homeworks are weekly assignments meant to help you apply the concepts learned in lecture and section on more challenging problems. They will usually be released on Thursday and be due the following Tuesday night.
You are encouraged to discuss the homework 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 and your grade will ultimately be based on showing effort on every problem, even if you don't pass all the tests. Note that there is no partial credit for homework assignments; you must show significant effort on each problem to receive any credit.
We recommend that you start homeworks early to stay on schedule. To help facilitate this, the staff will be hosting homework parties every Friday. These events will be held in big rooms where you can collaborate with other students on the homework and receive help from staff. Feel free to come to homework parties even if you haven't started on the assignment yet!
If you are stuck on a problem, come get help at homework parties or office hours instead of copying the answer from someone else or the Internet; you'll still get credit and won't be flagged for cheating.
Projects are larger assignments intended to combine ideas from the course in interesting ways. Some projects can be completed in pairs. When working in pairs, you should work together to ensure that both group members understand the complete results. We recommend finding a project partner in your section. Your TA will help. You may also work alone on all projects, although partners are recommended for the paired projects. Projects are graded on both correctness and composition.
The midterm exam will be held on Tuesday, July 10th from 6:30 - 9:30 PM. You are permitted to bring one double-sided, letter-sized, handwritten sheets of notes.
The first two hours of the midterm will be individual, followed by a section completed in groups. More details on this will be announced later.
We will not allow alternate midterms for any reason. For students with a valid excuse for missing a midterm, notify us before the exam in question and we will weight your final to account for the missing exam. Note that missing the midterm will mean that the final will account for 50% of your grade.
The final exam will be held on Thursday, August 9th from 6 - 9 PM. You are permitted to bring two double-sided, letter-sized, handwritten sheets of notes.
If you have a direct conflict with another final exam, we will allow you to take an alternate final. We will not provide final alternates for any other reason. If you do have a final conflict, please notify us by the end of the first week of the course.
The online textbook for the course is Composing Programs, which was created specifically for this course. Readings for each lecture appear in the course schedule. We recommend that you complete the readings before attending lecture.
We may occasionally differ from the material found in Composing Programs. As a result, we recommend the lecture slides, labs, and discussion handouts as your primary source of information.
If you are enrolled in the class, you may request a CS 61A instructional account. This will allow you to use any EECS instructional lab computer in Soda or Cory Hall. You may use any lab you wish, as long as there is no class using the space. More instructions on how to request an account will be in the first Lab.
Be respectful of the lab space. Please don't steal the chairs, and definitely do not eat or drink in the lab. Don't unplug anything; unplugged computers make our hard-working instructional computing team very sad. If you see someone disrupting the space, ask them to stop.
Labs are normally available for use at all times, but you need a card key for evening access. If you are a Berkeley student, your student ID will automatically grant you access to the Soda second floor labs. Otherwise, you can fill out an application from 387 Soda (the front desk).
If you are enrolled in DSP and would like an accommodation, please email email@example.com. We will post detailed information on Piazza as the semester progresses for critical matters such as scheduling alternate exam times.
The grading policy of the course has these goals: it should encourage you to do the coursework and reward reasonable effort with reasonable grades, and it should minimize competitiveness and grade pressure so that you can focus instead on the intellectual content of the course. To meet these goals, your course grade is computed using a point system with a total of 300 points.
- The midterm, worth 75 points (60 individual, 15 group)
- The final exam, worth 75 points.
- Homework, worth 30 points.
- Four projects, worth 105 points.
- Section participation, worth 15 points. See the Lab and Discussion grading policy below for more information.
Each letter grade for the course corresponds to a range of scores:
A+ ≥ 294 A ≥ 283 A- ≥ 275
B+ ≥ 260 B ≥ 240 B- ≥ 230
C+ ≥ 220 C ≥ 210 C- ≥ 200
D+ ≥ 190 D ≥ 180 D- ≥ 170
Notice that this scale is nonlinear; the steps are wider in the B range. Your final score will be rounded to the nearest integer before being converted to a letter grade.
There is no curve; your grade will depend only on how well you do, and not on how well everyone else does. It is based on how students performed in previous semesters. It is possible that the instructors will adjust the thresholds in your favor, for example if exam scores are abnormally low, but that scenario is unlikely. More likely, these are the exact thresholds that will be used at the end of the course to assign grades (contrary to popular rumor).
Each letter grade for the course corresponds to a range of scores that will be announced before the course begins.
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. You must complete all coursework before the drop deadline to be considered for an incomplete grade.
Lab and Discussion Participation
Lab exercises, check-ins, and discussion attendance are collectively worth 15 points.
You earn a participation credit for each of the following:
- Submitting a lab assignment on Ok that passes all required tests (14 total)
- Completing a check-in in lab (8 total)
- Attending discussion (14 total)
The first 15 participation credits you earn count directly for points.
Additional participation credits count for exam recovery.
Exam Recovery Policy
After the required 15 points, the next 15 participation credits count for exam recovery.
Note that there are 36 possible credits, but a maximum of 30 credits count (15 for points, 15 for recovery), so you can miss 6 participation credits and still receive the maximum exam recovery.
For the midterm, recovery is only possible for the 60 point individual section.
We calculate your exam recovery using the following logic, where
is the number of participation credits you earn (out of 36):
def exam_recovery(your_exam_score, participation, max_exam_score, recovery_cap=15):
if participation <= 15:
half_score = max_exam_score / 2
max_recovery = max(0, (half_score - your_exam_score) / 2)
recovery_count = participation - 15
recovery_ratio = min(recovery_count, recovery_cap) / recovery_cap
return max_recovery * recovery_ratio
According to this formula, if you receive more than half the available points on each exam, 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.
If you cannot turn in an assignment on time, contact your TA and partner as early as possible. Depending on the circumstance, we may grant extensions.
- Labs: We will not accept any late lab submissions. There is no partial credit.
- Homework: We will not accept any late homework submissions. There is no partial credit.
- 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. Each question is worth some points, so it is possible to earn partial credit on a project.
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.
Working cooperatively in groups is a change from the traditional approach in schools, in which students work either in isolation or in competition. But cooperative learning has become increasingly popular as educational research has demonstrated its effectiveness. One advantage, in particular, is that it helps you to understand new ideas when you discuss them with other people.
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, so that nobody is depending on you to do something you can't finish.
If you have any questions, please post them to Piazza, the course discussion forum. Piazza allows you to learn from questions your fellow students have asked. We encourage you to answer each others' questions!
Piazza is the best and most reliable way to contact the course staff. You are also welcome to email the instructors or your TA directly.
Cooperation has a limit, and in CS 61A that limit is sharing code. You are free to discuss the problems with others beforehand, but you must write your own solutions. The only student with whom you can share code is your project partner when you are working on that project.
Since this may be your first computer science class, exactly what constitutes as cheating might be unclear. If you are unsure if what you are doing is cheating, please clarify with the instructors or TAs. 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, except if its your partner for the project.
- Do not allow any student other than your partner to copy code from you.
- Do not copy solutions from online or post your solutions publicly. This includes websites such as Stack Overflow, Pastebin, and public repositories on GitHub. (You are welcome to use private repositories.)
If you find a solution online, please submit a link to that solution. 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 your own projects. The assignments and evaluations are structured to help you learn, which is why you are here. 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.
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 and report you to the center for student conduct. Detecting copied assignments is very easy for our computers, so don't try!
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!