Syllabus & Course Policies

Overview

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.

  1. 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.
  2. CS 61B deals with the more advanced engineering aspects of software, such as constructing and analyzing large programs.
  3. 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.

Prerequisites

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 practice the arithmetic and algebra that appear regularly in CS 61A.

There is no formal programming-related prerequisite for CS 61A because students without prior experience can succeed in the course, but taking the course without any prior programming experience is typically quite challenging. Students who take the course without prior programming experience typically must spend more time to complete assignments 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 an AP Computer Science exam. See the advice of former students for more information on this topic.

If you find it challenging to complete all of the required coursework in the first two weeks, we strongly recommend that you 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.

Bridge Courses

Here are some UC Berkeley courses that are better suited for students who do not have prior programming experience. We recommend taking these before CS 61A.

CS 10: The Beauty and Joy of Computing is an introductory computer science course which is similar to CS 61A but moves at a more moderate 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). CS 10 also covers big ideas and social implications that go beyond programming, showing you the beauty and joy of computing.

Data 6: Introduction to Computational Thinking with Data is an introduction data science course that combines inferential and computational thinking as applied to the fundamentals of quantitative social inquiry. It can be taken before Data 8, but is not a prerequisite for it.

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, 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.

ENGIN 7: Introduction to Computer Programming and Numerical Methods is the fundamentals of computer programming and numerical methods with emphasis on engineering applications in Python and some MATLAB.

Alternative Courses

Here are some alternative UC Berkeley courses that provide similar content to CS 61A, but are not necessarily equivalent.

Data C88C: Computational Structures in Data Science (also known as CS 88) is an introduction to programming and computing that covers approximately 70% of the content of CS 61A. Many of the same homework, lab, and discussion questions are shared between these two courses.

Data C88C is 3 units (rather than 4), has 2 lectures per week (rather than 3), has 2 hours of section per week (rather than 3), and has fewer total topics and assignments. Both courses are great for learning about programming. CS 61A moves faster. Students who take Data C88C and want to learn the topics from CS 61A that were omitted can do so by taking CS 47A in a future semester (or just studying on their own).

For the Data Science major and minor, the content in Data C88C is sufficient. For the Computer Science major and minor, the additional content in CS 61A is important. If you are certain that you want to major or minor in Computer Science, CS 61A is the right introductory course.

Students who complete Data C88C 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. (Review can be very helpful for some students!) However, you cannot take Data C88C for credit after having taken CS 61A.

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.

Course Format

The course includes many events and opportunities for learning: lecture, lab, discussion, office hours, and more. Try everything out to figure out what combination of these course components help you the most.

Lectures & Videos

There are four 80-minute live lectures per week. In addition, there is a video playlist for each lecture. We recommend watching the corresponding video(s) from the video playlist before attending live lecture or section. Live lecture may not cover all course material, so you should attend lecture, lab, and discussion.

Section

Weekly sections include a programming-based lab assignment and a discussion.

There are 12 lab points and 12 discussion points. Thus, it is required to attend and complete all lab sections/assignments and discussion sections to receive credit. No credit is awarded for Lab and Discussion 0 since students may still be in the process of enrolling in the course, but it is still required to complete Lab 0 (since it is setup for the rest of the assignments in the course).

If you need to request an excused absence, email cs61a@berkeley.edu (not your lab/discussion TA).

Lab

In lab, students work with each other to solve the set of programming problems in each week's lab assignment. To receive credit for lab section, you must complete and submit the lab assignment with all questions answered correctly and you must attend and have your TA take your attendance by answering the checkoff questions.

Discussion

Discussions are in groups of 4-8 students. Your discussion group will work through practice problems together. To receive credit for discussion section, you must attend the entirety of the discussion and have your TA take your attendance.

Office Hours

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.

Assignments

In addition to programming-based lab assignments, there are programming-based homework assignments and projects.

Homework

Weekly homework assignments let you apply the concepts learned in lecture and section to more challenging problems. Homeworks will typically be released on Thursday and be due the following Wednesday or Thursday.

You are not allowed to use any artificial intelligence tools except for the 61A-bot integrated into ok, a program provided with each assignment. Students will receive score penalties for doing so. You are also not allowed to use solutions on the internet (of course).

The way in which people write programs is changing rapidly due to the expanding prevalence and accuracy of large language models. So far, AI has not replaced the role of people in software development. People who understand programming languages and how to use them to solve problems are much more capable of creating useful programs than those who do not, and the most skilled people are benefitting most from the technology. Therefore, learning to solve programming problems still appears to be a good use of students' time.

Partial Credit. Homework is scored out of 2 points, and every incorrect question reduces your score by 1 point.

Projects

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. You may also work alone on all projects, although partners are recommended.

You are not allowed to use any artificial intelligence tools to help you complete projects. You are not even allowed to use AI tools that are available for other parts of the course. It's important to learn how to build these projects on your own. You are also not allowed to use solutions on the internet (of course).

Projects are graded on correctness, with points earned for each problem successfully completed.

AI Tools and The Internet

This section is adapted from DATA C88C SP26's syllabus by Prof. Michael Ball

While you may search for conceptual questions, e.g. "How do I add an item to a list in Python", you may not search under any circumstances for specific questions assigned in class.

This policy applies whether you're using AI tools, search engines, or talking with your peers–which are all useful resources!

On your assignments you will be asked to cite what sources you consulted, similar to a research paper. (Though not so formally.) Code is like writing and ideas, it gets built up from many previous examples and ideas, and we should cite those.

In general, you should minimize your use of AI tools for assignments, and only use them for general conceptual help. Avoid copying-and-pasting code snippets from the internet or AI tools. While the act of typing itself is not learning, the process of debugging and understanding code is, and importantly slowing down to think about what the code is doing is a critical skill to develop.

Some Examples of Acceptable Use of AI Tools

Some things you can do, or ask AI tools for help with:

  • Asking for explanations of concepts
  • Asking for examples of syntax
  • Asking to explain what error messages mean so that you can debug the code yourself

Some Examples of Unacceptable Use of AI Tools

Some things you cannot do, or ask AI tools for help with:

  • Autocomplete code suggestions on assignments
  • Asking for help on specific assignment questions
  • Asking for code snippets (or the entire solution) for assignments
  • Asking it to perform the entire process of debugging your code for you (for example, the tests are failing so you copy and paste your code into ChatGPT and ask it to find the issue)

Recommendations

Try some of these prompts:

  • "I am learning about [topic]. Can you show me an example of [concept] in Python?"
  • "What are the trade-offs between [concept A] and [concept B]?"
  • "Can you explain what this error message means: [error message]? Where can I learn more about it?"
  • "Please provide links to documentation about [topic]."

Exams

There will be two (major) exams:

  • The midterm will be held 7pm-9pm Monday 7/13.
  • The final exam will be held 7pm-10pm Tuesday 8/11.

Exams will be taken in-person, on paper on campus in various rooms across campus.

Students who have a valid time conflict (e.g. being enrolled in another course with a conflicting exam time) for either exam may take the alternate exam:

  • The alternate midterm will be held 8am-10am Tuesday 7/14.
  • The alternate final exam will be held 8am-11am Wednesday 8/12.

We will post an announcement on Ed ahead of each exam with information for students who cannot take the exam.

Exam Study Guides:

Quizzes

There will be 5 weekly quizzes (on weeks other than Week 1, Week 4 (midterm), and Week 8 (final exam)). Quizzes will be hosted in the Computer Based Testing Facility and will be 50 minutes long. 1 week before each quiz, you will be able to reserve a session in the CBTF on the following Monday or Tuesday, whatever works best with your schedule.

Excused Exams & Incompletes

If you are unable to take a quiz or the midterm, please email cs61a@berkeley.edu before the exam to describe your situation. Students who are unable to take a quiz or the midterm for an approved reason may be excused from the exam. Reasons that may be approved include: illness, medical complications, and course conflicts. Note that a student can only be excused for up to one quiz.

If a student is excused from a quiz or the midterm exam, their exam score will be estimated via regression at the end of the course. We will use your other quiz scores to calculate your regressed quiz score and the final exam to calculate your regressed midterm score. This will be done in a way that does not help or hurt your final grade on average and takes into account variability in exam difficulty.

Students cannot be excused from the final exam. However, students who cannot take the final exam for an approved reason and who have completed the assignments for the course may request an incomplete by emailing cs61a@berkeley.edu. Students who receive an incomplete grade can complete the course by taking the final exam of a future offering of CS 61A.

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.

If you're not enrolled in DSP, or are in the process of being onboarded by DSP, you may still be eligible for accommodations (such as extended time on exams or extended deadlines). 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 email cs61a@berkeley.edu.

Important: If you have an accommodation that involves exams, please ensure that a letter is submitted to Berkeley's system as soon as possible so that we can plan for your accommodation. We cannot always meet accommodation requests on short notice.

Assignment Extensions

If you need to request an extension, regardless of your DSP status, fill out this form before the original deadline. Submissions to this form will be visible to all course staff members, but if you have extenuating circumstances that you would like to keep private, please email cs61a@berkeley.edu (see Privacy).

All extensions will be considered on a case-by-case basis. There will never be a penalty for requesting an extension.

Joining CS 61A Late

Work submitted late will not receive credit, even if it is from a student who joined the course late. However, it is possible to submit assignments if you are not enrolled. Therefore, if you would like to take the course but are having enrollment issues, please submit all assignments by their due date.

To request to be added to course platforms so that you can submit, email cs61a@berkeley.edu.

Privacy

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 staff course managers.

For any DSP and accommodations-related communications, please reach out to cs61a@berkeley.edu, which will put you in touch with our student support team. This inbox is only visible to staff members marked with "@" on the staff page. 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.

Resources

Technology

You will need a computer and internet to write code in this class. Professor Lisa Yan wrote a helpful guide about purchasing a laptop for use as a student at UC Berkeley. As mentioned in that guide, the Student Technology Equity Program provides free laptop loans for students.

Textbook

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.

Past exams appear on the Resources page.

Grading

Your course grade is computed using a point system with a total of 300 points, broken down as follows:

Category Num Graded Points per Unit Total Points % of Grade
Quizzes 5 12 60 20.00%
Midterm 1 60 60 20.00%
Final 1 80 80 26.67%
Projects 4
  • Hog: 10
  • Cats: 10
  • Ants: 20
  • Scheme: 20
60 20.00%
Homework 7 2 14 4.67%
Lab (Assignment and Attendance) 12 1 12 4.00%
Discussion Attendance 12 1 12 4.00%
Surveys 2 1 2 0.67%
Total Points 300 100.00%

See Section about Lab and Discussion 0.

There are also 4 extra credit points available to everyone for early submission of projects.

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

             A  ≥ 285    A-  ≥ 270
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.

A+ grades will be assigned at the discretion of the instructor.

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. Thresholds are not usually adjusted based on student performance and never increased.

In a typical semester, 50-60% of students taking the course for a letter grade will receive a B+ or higher.

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.

Exam Recovery

It is possible to recover lost points on the midterm by showing improvement on the final. Your score for each exam (as a percentage of the total points) will be at least 90% of your score on the final exam. For example, a student who scored 10/60 on the midterm, but scored 60/80 (75%) on the final exam would receive an adjusted the midterm score of 75% * 90% = 40.5/60 points, and so would recover 30.5 Midterm points in addition to the 10 midterm points already scored.

Exam recovery only applies to students who take the final exam during finals week. Students who receive an incomplete are not eligible for exam recovery.

Late Policy

If you cannot turn in an assignment on time, you can request an extension. For late work beyond the extended deadline:

  • Labs receive no credit.
  • Homework receives no credit.
  • 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 no credit.

Citizenship

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.

Learning Cooperatively

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 by thinking through examples. Problem solving practice is critical 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.

Academic Misconduct

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

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 use AI tools such as GitHub Copilot, ChatGPT, Claude Code, Codex, Cursor, etc. to fill in or correct your code.
  • 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.

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!