CS10, CS61A, CS61AS

Which class should I take?

The comprehensive guide

CS 10
CS10 is geared for non-majors and majors who have not programmed before. It teaches many big ideas (e.g., social implications of computing, how the internet works, data, creativity), uses a really friendly graphical language, as well as set students up for success in CS61A by providing them an introduction to Python.
CS 61A
CS 61A teaches programming, not how to use one particular programming language. It considers a series of techniques for controlling program complexity, such as functional programming, data abstraction, and object-oriented programming. By the end of the class, students should find that picking up a new programming language is but a few days’ work
CS61AS is an alternate intro CS course that covers the same concepts as 61A, but in a different class format and programming language. It’s a lab based class (no lecture, spend most of your time one-on-one with the TAs in lab), and there are no midterms (there are instead smaller, retake-able quizzes).


CS 10 CS 61A CS 61AS
Format Lectures, with regular guest lectures by well-known Computer Scientists; discussions and labs Lectures; discussions and labs Lab-centric; discussions
Time Commitment 4 units 4 units, but people often say this is their most time-consuming course Variable, you can take 1-4 units over one or two semesters.
Counts toward major? No. CS 10 does not count toward the CS major Yes. CS 61A also covers some other majors’ pre-reqs, such as BioE and CogSci. Yes. 4 units of 61AS is equivalent to any major req that requires 61A.
What if I've never programmed before? CS 10 is designed for students without previous programming experience. Despite its fast pace, CS 61A has many different avenues for support, including extra review sessions and tutoring. CS 61AS has an optional “unit 0” (1 P/NP unit of CS 98) designed for a gentler introduction to CS and programming.
What programming languages are taught? Mainly Snap!, and a bit of Python during the last 4 weeks Python. A bit of Scheme (build a Scheme interpreter) and SQL. Scheme/Racket. A bit of Python (build a Python interpreter) and Logic.
Brief list of topics discussed
  • Applications of CS (Graphics, HCI, AI, more)
  • 2 Personal Projects
  • Recursion / HOFs
  • Data Science Ideas
  • Internet Architecture
  • Programming and Big Ideas of CS
  • 4 Projects
  • Recursion / HOFs
  • Hierarchical Data
  • OOP
  • Interpreters
  • Databases (SQL)
Very similar to 61A. Instead of databases (SQL), we teach Logic, but the other 95% of concepts are the same.
Rough class sizes (as of Fall 2014) 300 1200+ 100


Why does 61AS use Scheme/Racket when 61A uses Python?

Since CS 61A is taught in Python while CS 61AS is taught in Scheme/Racket, shouldn’t I choose 61A so that I learn Python?


On Taking CS10

Michael Ball

CS10 Summer 2015 Lecturer, CS10 Head TA

CS10 is, in many ways, unique. A large goal of CS10 is to expose students to many topics of computer science, including graphics, Game Theory, Human-Computer Interaction, distributed computing and some others depending on the semester. There is a sizable discussion about the social aspects of computing and how that affects everyone, which is enjoyable for many students because it’s a different thought process than programming, but is also something that some students may prefer to skip.

CS10 focuses on helping you figure out how to structure programs and solve problems, like any other CS class. The use of Snap! is a really good starting point if you’re unsure about CS or programming but does require some transition to a language like Python, which is done during the final third of CS10. CS10 covers about 85% of topics that CS61A does, but at a bit less depth than 61A. For example, in both classes you learn about recursion and memoization (among many topics) but in CS 61A, you will spend more time analyzing complex recursive functions or implementing memoization whereas CS10 will cover these topics but you won’t be assessed at as deep a level.

People who are motivated by personal creativity will almost certainly find CS10’s personal projects more fulfilling, IMO. CS10 projects certainly give you more free reign, and emphasize the creative aspect of computer science, rather than the technical aspect.

On Taking 61A

Andrew Huang

61A Summer 2014 Co-Lecturer, Fall 2014/Spring 2015 EECS Course Manager, 61AS/61A/61B TA

From my experience, there are a nontrivial number of students with no prior programming experience who have a really tough time with 61A. When I say tough, I mean something like “this class takes more time than all the other classes I’m taking combined.”

Programming experience doesn’t really speak to whether or not you’re prepared, it’s more nuanced than that. Once you have programmed for an extended period of time, you develop this resistance to failure (pressing on despite hardship) which is essential to doing well in 61A. That’s what’s really key in being able to handle this class.

“This class is the hardest thing I’ve ever done.” is also a common (but not universal) quip among students with no programming experience. And this is a result not of any single assignment, but the fact that the course is fast paced—there’s a lot to understand and apply, and inherently not enough time to master it all (though taking fewer classes helps).

From this, I would say that whether or not you take this course next semester depends on how you think you would be able to handle a class that may necessarily push your limits and force you confront failure and frustration each week.

General Advice

Rohin Shah

61A Summer 2014 Co-Lecturer, CS 61AS/61B/161/170/188 TA

  1. Go through the flowchart/questionnaire, I've put a lot of thought into it.

  2. If this will be your first semester at Berkeley, try not to do too much. Even if you were valedictorian of your high school with a perfect GPA - there are plenty of students like that in Berkeley. Take an easy first semester to get calibrated to Berkeley, and then you'll have a much better idea of the workload you can manage.