A Comprehensive Guide to Declaring Computer Science at UC Berkeley
*disclaimer* For students admitted Fall 2023 with the new declaration policies the process is more straightforward; however, this guide might still come in handy, as it mainly focuses on how to succeed in lower division computer science classes
The Computer Science program from Letters and Sciences College at the University of California Berkeley is one of the best degree programs in the world for this field. This institution not only offers a variety of super star-professors teaching well-designed courses but also gives students opportunities to involve in practical experiences like research, internships and even teaching positions. Nevertheless, once you get into Berkeley for this major, you face probably the biggest challenge you are going to face in your undergraduate career — declaring. Even though this might be less of a barrier for some more advanced students with previous substantial experience in either programming or math competitions, for most students this is a big deal. It involves a lot of academic rigor combined with stress and frankly, it sometimes feels like the university is trying to wheat you out (which is kind of true due to higher demand than offer in this major). Even with the recent change of policies and updated GPA, the lower division coursework for Computer Science remains quite rigorous and challenging.
This article is designed as a rough guide on how to approach this challenge and is aimed at recently admitted students who are in their early years at Cal or even prospective students who are considering this major at Berkeley. With the right approach and mindset, you can avoid a lot of stress and be able to ace your classes while successfully securing your spot as a Computer Science student.
As for students admitted before Fall 2023, the current prerequisite to declare a Computer Science major is to complete 3 classes: CS61A (Structure and Interpretation of Computer Programs), CS61B (Data Structures), and CS70 (Discrete Mathematics and Probability) with an average GPA of 3.3 and above which is significantly higher than for most other majors. For students admitted Fall 2023 and on, the GPA requirement has been removed, but you still have to take those 3 courses as a part of your lower division requirement.
Each of these courses is likely to be the hardest you have taken from your lower division coursework in case you do not have prior experience in these areas. A lot of your success will hinge around ability to complete each of these classes on its own such that the average grade from all three is B+ or above. Let us first discuss each individual class before going into general advice, since each of them is different in its own manner and requires a unique approach.
CS 61A — Structure and Interpretation of Computer Programs
Description and structure: This class is usually taken in the first or second semester of your journey to graduation and is often one of your first college-level computing classes. Even though the class is heavily programming-based, coding is used as some kind of lens to learn about different computer science concepts such as abstraction, recursion, trees and etc. All the concepts are based on a programming language called Python which is typically not hard to learn but you can go really in-depth with it. In addition, later in the course, the course teaches a database query language called SQL and a functional language called Scheme, which are both pretty easy to pick up once you know Python.
During the semester you will usually work on primarily practical assignments:
- Labs: Programming assignments that teach a particular concept. They usually take around 2 hours and can be completed during a dedicated section or asynchronously. Usually, there are around 13 of them.
- Homework: Slightly larger than labs but similar in structure, designed to test your understanding of concepts. There are around 10 of them.
- Projects: Large programming assignments, where you are asked to complete certain parts of provided code in order to build a large program. There are 4 of them throughout the semester and projects are increasing in difficulty. In the last project, you usually build an interpreter for a programming language called Scheme.
- 2 Midterms and 1 Final exam
Along with 61B these classes are graded in bins, where each letter grade requires you to achieve a certain number of points. The structure and grading might vary slightly depending on the professor; however, the course website is public and can be found here.
Approach and study tips:
- With 61A being a very programming-focused class, the best thing you can do is to learn Python at least on a basic level before taking the class. It is doable to perform well in the class without any prior coding background; however, this is significantly and unnecessarily challenging. There are courses like DATA C8 and CS 10 that can prepare you in some ways for this class, but in my opinion, the best approach is just to do some kind of Youtube tutorial, online course, or a guide like this before the start of the semester.
- The lectures are helpful to understand the concepts; however, they will not prepare you much for the assignments or the exams. I would recommend focusing on discussion and lab sessions as your primary resource while using lectures as a form of revision for concepts.
- While the assignments are not tricky in any way, they might take some time to complete, so make sure to stay on top of that. The course staff is very lenient and will grant you extensions in case you need them, so make sure to ask.
- There are usually a few extra credit opportunities throughout the course that are not so difficult to take advantage of, so make sure to track those as well. In a bin grading-based class, every point counts and can be decisive for your final grade.
- You have the option to partner with another student to work on projects, which is highly recommended. This way the pressure is halved and you can learn to code with someone. I recommend finding a partner that has a similar experience in coding as you, so there is no imbalance and each of you can have a good time learning.
- Lastly, the exams are arguably the most difficult of everything you will be doing in the course, since even though they cover all the concepts studied, sometimes they might not correlate to other assignments you have completed. Most of the time you will be filling in the code for different functions which requires a really good understanding of programming concepts and general syntax. The single best way to prepare for them is to do as many of the past exams as possible (available on the course website) and then go over solutions. While many strategies work, this one has proved to be the most efficient for most students, as while you do more and more exams, you start identifying certain patterns in how to approach certain problems.
CS 61B — Data Structures
Description and structure: This course is arguably the most useful and practical lower-division course in the Computer Science program and together with 61A forms a solid foundation for a career path in software engineering. By the end of the class, you will be able to develop and test large projects built from scratch and have a good understanding of data structures which can help you ace those internship interviews. The whole course is based on Java and each lecture introduces you to a new data structure such as graphs, HashMaps, sets, etc. It is highly recommended to put in effort in this class, as almost all the upper division courses are based on it. In general, you will be taking this after CS 61A and before CS 70. For an average student with no coding or competitive math experience, this is usually the easier out of the three; however, it has the most workload.
Apart from participation here are some assignments you will be graded on:
- Labs: Very similar to 61A. Usually in the early stages, you will be given most of the skeleton code, but towards the end of the semester, labs will become more open-ended and will involve a lot of coding from scratch. Each lab will ask you to implement a new data structure learned in the lecture. There are around 13 lab assignments in a regular semester.
- Homework: Unlike 61A there are only 3-4 homework and the structure of them varies. They could be in the form of a programming assignment or more like a quiz. These generally are not as time-consuming and only happen when there are no projects happening.
- Projects: This is the core of this class. In contrast to 61A where you only have to fill in the code, projects in 61B are usually done from scratch and are very large. There are typically 4 different projects with increasing difficulty and you can have a partner for the last one. This is the most time-consuming part of the course and it also greatly affects your grade.
- 2 Midterms and a Final: Most find the exams in this course slightly more intuitive than in 61A; however, their difficulty has been increasing lately. The structure of the tests is similar to the previous course. While it used to be almost mostly a project-based class, lately it transitioned into a model where exams and projects are almost equally affecting your grade.
The website for the course can be found here (If this link changed just Google, it should be public). The policies tend to change slightly; however, the outline has not changed much since Professor Hug started teaching the course.
Approach and study tips:
- Just like in the previous course, it is highly recommended to self-study some Java before getting into the course. Unlike 61A where the first few weeks are dedicated to learning Python, in 61B the instructors do not spend almost any time except the first homework to teach you the language. The course assumes your ability to pick up the language along the way, so learning Java in advance can give you a great advantage.
- The projects in this course are large and one thing students have to get used to is how to properly manage the workload. Start as early as you can and make sure to attend office hours.
- For labs especially the ones attached to projects, sometimes the staff will walk you through a solution during the lab section. While attendance is not required, it is a good idea to come to lab sections for that reason.
- For the final project specifically (and maybe some other projects too) you will be allowed to work with a partner. Make sure to select a partner you can rely on and are comfortable working with since this will be a huge chunk of your final grade.
- The class uses Git for submitting assignments and working collaboratively with a partner. Git is a great tool very often used in the industry, so make sure to get familiar with it. Furthermore, learning how to efficiently use Git and a few tricks (like switching between commits) could greatly help you with labs and projects.
- For this class specifically, the lectures are amazing. You not only learn about essential concepts but also gain practical knowledge that is useful for completing course assignments. Additionally, the content covered in lectures highly correlates with the exams, so most of the time keeping up with lectures and doing practice exams can lead to high scores.
CS 70: Discrete Mathematics and Probability
Description and structure: For most students who did not participate in a lot of math competitions prior to college this might be the hardest out of three. While CS 61A is hard due to a certain learning curve, CS 61B is hard because of a high workload, CS 70 is just difficult conceptually. The course is structured in two halves that do not connect together: Discrete Math and Probabilities. Depending on your background you will likely find one part easier than the other, which is usually probabilities. Unlike the other two courses, this class is curved which means that your grade depends on the overall performance of students in the class.
The class offers two versions of homework and no-homework options and each student can select their pathway. If you opt for the first one, 20% of your grade will come from homework scores, while the latter splits this percentage between exams and attendance. Overall, here are some assignments you will be required to complete over the course of the semester:
- Homework (Optional depending on the version selected): 14 weekly worksheets consisting of problem sets for which you are only required to score 73% to get full credit. These problem sets are usually very challenging and time-consuming and can take a few days to complete.
- Vitamins and mini-vitamins: These are mostly multiple-choice assignments on Gradescope that are fast and easy to complete. Vitamins are weekly and mini vitamins need to be completed before every lecture. You only need to complete half of the mini-vitamins to get full credit and your worst 4 vitamin scores(2 from each half of the course) get dropped.
- One midterm and a final exam: Depending on the option selected this can be 70–90% of your final grades. The exams for this class are notoriously difficult and tend to have low average grades. However, due to the curve and clobber policy, the grading comes out to be pretty fair.
The course website is also public and can be found here. Most of the time the class is taught by 2 different professors each handling a different half of the course.
Approach and study tips:
- The class requires “mathematical maturity” to be able to score high, so it is recommended to make sure to understand each concept in depth. The main learning source for this class is notes created by professors and there are around 21 of them. They serve as some kind of textbook for the course and are very well designed. Reading each note and making sure to understand it is the key to succeeding in this course.
- While at first, it seems like the homework option might be “free points” it is actually quite the opposite. The homework is really challenging and can take a while to complete which is not optimal if you are taking other technical classes. In addition, both homework and no-homework options are curved within their own categories, which means that there is no particular advantage to doing the homework option, except keeping yourself accountable to being on top of the content.
- Do well on the midterm. The class has a unique clobber policy that allows you to clobber your final with the midterm (or vice versa). By performing well on the midterm you can alleviate the stress of having to do well on the final, since a high midterm score guarantees to boost your final. In addition, the midterm only covers the discrete math portion of the class, while the final is cumulative, therefore, it is much easier to prepare for the midterm.
- It is very common to take this class in summer, as the curve is often slightly better. However, the summer version of the course is very fast-paced essentially teaching 13 weeks of material in 7 weeks, and often does not offer the no-homework option.
- The course is usually not recommended to combine with 61A or 61B in a single semester due to the high workload and stress of such a combination. CS 70 unlike 61A and 61B if taken with a no-homework option is not time requiring on a weekly basis, but to score high on the exam you have to do a lot of self-studying, read notes, and complete practice exams.
- Form study groups. This is one of those courses where collaboration with other students can be helpful in understanding concepts. By collaboration I do not mean any form of academic misconduct, just simply talking about concepts and doing practice tests together with other students you can deepen your understanding of the subject.
Major alternatives and what to do if you don’t get the GPA:
In case you did not get the desired 3.3, do not panic. There is an appeal form you can fill out which will be sent to the department to consider you. If there are any spots left and you have a good explanation for lower performance you might declare even with a lower grade. Having additional experience in the form of research, internships or personal projects related to computer science might be helpful in this case.
Another good alternative is just to simply go for another tech major. Currently, a very popular and growing concentration is Data Science with courses that are well-designed and with amazing professors. The class requirements are almost identical to Computer Science with the exception of a few courses, so it will not be a significantly different path. Another major that is surprisingly technical in Cognitive Science. The program requires you to complete classes like CS 61A or CS 70 and depending on your choice can be made heavily computer science focused. Overall, it is not so much important for the employer or grad school which major you graduate with it is the courses you take and the practical knowledge you gain during your time at college.
External Resources
- Computer Science Mentors (CSM) offers small group tutoring sections for all lower division CS/EECS requirements. This is an amazing opportunity to engage with other students and enforce academic concepts covered in class. You can even take their section for an extra credit unit.
- Etta Kappa Nu (HKN) has a lot of useful information and guides on its website. You can also find some past exams on there and I particularly recommend checking out their course maps. They also do drop-in tutoring sections in Soda Hall.
- CS Scholars is a support program for students from groups with little exposure to technology which can offer a wide range of services to assist you through the academic year. This is only for freshman students, so make sure to apply early.
- EECS 101 Ed is very useful to directly ask the instructors questions about your curriculum. This is not a resource to ask for conceptual questions though, it is more for logistics and requirements.
- Berkeley sub-Reddit is also a great resource to ask other students questions. It even has a dedicated CS/EECS flair for computer science related questions.
- Berkeleytime is a good website to track average grades for classes, as well as the enrollment dynamics. You can see how the average grade changes with different professors and semesters.
- RateMyProfessor is a website where you can read reviews about professors left by past students.
- Feel free to reach out to me via email if you have any particular questions at eldarh079@berkeley.edu. At the time of this article’s creation, I am a rising Junior and have just declared. There used to be a few guides like this one on web that helped me a lot, so I decided to make one too.
Conclusion and parting thoughts
While this whole process can be quite challenging and stressful, just remember that with the right amount of discipline and proper approach taking all these classes can be an enjoyable and valuable experience. After all, if you got accepted, the university already considers you good enough to be able to complete the degree. Remember that you are not alone and there is a vast array of resources to help you in your journey to become a computer scientist. Do not forget to enjoy college, there are a lot of interesting things Berkeley has to offer both academically and socially, and wasting all this time on stressing about some classes is just simply not rational. I want to wish you good luck on your journey and make the most out of your time at college because you will not be a student forever.