Yes you 🙂 You look like you clicked on this article looking to get a better sense of what studying Computer Science at the University of California, Berkeley is like!
Well that’s what I’m going to try my best to do in this delightful little blog post here, so bear (ha ha) with me as I take you through a beginner’s guide of this wild and wacky world of CS @ Cal, everything from classes, to projects, to the L&S declaration process, and finally a little sneak peek at what you could potentially get out of this small, niche, oft under-the-radar major here at Berkeley!
(Just to be clear that last bit was sarcasm)
A little bit about me! My name is Jeff, and I’m currently a Junior studying CS and Economics (pre-emptive plug, but if you enjoy this article do please check out my follow up “Econ@Cal” on 7/5), and I hail from Boise Idaho, but have spent the majority of my life bumbling about between continents and countries all across the world. Unlike many of my illustrious peers here at Berkeley, I had come into Cal with absolutely no intention of taking computer science at all; I had a passion for Economics and thought my future lay in law school or politics, where I had a vague but optimistic goal of leaving this world a little bit of a better place than I found it. Some would say that CS found me (and some would say that that is a very cliched writing trope), but in many ways that’s true! My first brush with any kind of programming came when I took STAT20, a probability class that was a prerequisite for the Economics major – where for some projects and data analysis we used R, a relatively simple programming language that was sort of the middle-ground between a big calculator and a higher-level programming language. I walked out of that class with a passable knowledge of probability but a surprising new-found intrigue in programming.
Quick sidenote (oof that’s a lot of tangents already. Starting to understand why online recipes always start with a sprawling life story): Often one of the biggest hurdles into any STEM field, especially ones that can seem especially intimidating and male-dominated such as CS, is the mistaken belief that you are not as qualified as your peers. The main reason why I chose to write such a guide is to show perhaps a different perspective on CS than ones you might have heard about before, from someone who not only had zero experience in the field but still to this day doesn’t know how to work his google calendar. Compsci is not a particularly special field, programming is not magic, and anyone can 100% learn to code. If you do choose to continue on this path, just know that if the going gets tough, you are absolutely not alone in this! Cal has some fantastic resources, and office hours or piazza threads are where even experienced folk come to for salvation more often than not. It’s absolutely doable!
So what exactly is Computer Science? Well right off the bat, you might have noticed that Berkeley actually offers three (3!) majors that address some aspects of this ever-growing field of CS. Two of them are offered in the College of Letters and Science, which are the more traditional Computer Science (CS) major and the much newer Data Science (DS) major. For students coming into the College of Letters and Science undeclared, both of these are fantastic options to add to your repertoire of skills if such a field interests you. CS and DS share some lower division classes, but are fundamentally different majors that have different goals. While CS focuses more on the functionality of programs/systems, with more emphasis on algorithms and theory, DS leans more heavily on analysis, statistics, and can be more applicable with many other fields. For more information, the respective major websites are a fantastic place to go to find detailed information about what each major entails, as well as the requirements for declaring! The third major that Berkeley offers is Electrical Engineering and Computer Science (EECS), which is taught in the College of Engineering. Students are likely to already be declared in this major upon coming into Berkeley, but transfers within the College of Engineering are not uncommon. EECS and CS have a fair amount of overlap, especially in their lower division requirements, but EECS allows students to branch out more effectively into the hardware and circuits components of computing, including exciting fields such as semiconductors and machine learning. EECS majors also have a Physics requirement that neither CS nor DS have. For this article, we will focus more on the CS track and declaration process, but for more information do check out the EECS department website! Lots of great information there!
Alright let’s get back on track! The first CS class you will probably encounter in Berkeley is
~ CS61A ~
I took it in the Spring of 2021, the semester right after STAT20, and right off the bat I realized that CS classes were quite unlike anything I’ve ever taken before. To summarize, 61A emphasizes an “introduction” to programming, where you learn the basics of python, the building blocks of various programs such as lists, trees, functions and object-oriented programming, as well as some very interesting tidbits like regular expressions and scheme, I say “introduction” in quotes because CS61A does progress at quite a rapid pace (a running theme in CS classes!), and it is not always very easy to grasp concepts the very first time you encounter them. I know personally that recursive thinking and the dreaded leap of faith was something I found particularly difficult to wrap my head around. Still, the best thing about a Berkeley CS education is just the quality of resources available to you. The projects and lab assignments for this 61A were genuinely some of the most fun I’ve ever had doing homework, where each task is not only profoundly educational but also very interesting, and seeing your own progress as a programmer is very rewarding indeed. At the end of a quick semester you’ll find yourself coding up everything from simple games in python to an entire interpreter for another programming language! There is nothing quite like the feeling of seeing something that you worked so tirelessly on come to life, even if it’s only on a computer screen. The sense of accomplishment upon finishing a big project 100% makes up for the frustrations in debugging said projects. Also, course staff are more than happy to answer questions at basically all hours of the day, so feel free to ask everything from conceptual questions to specific bugs within your code. Fair warning, the exams in CS61A were definitely quite a culture shock for me in terms of difficulty, but using past exams as a guide, and thoroughly understanding HW and lab material should be a good starting point. Overall 9/10, a terrific class unique to Berkeley (no other college offers a class quite like CS61A!).
Should you find CS61A to your liking, the next step for most CS students is
~ CS61B ~
CS61B, called “Data structures and algorithms”, might just be the single most important lower division class in your CS journey. For many (me included!), this is the moment you first experience the beauty and limitless possibilities of computer science, and the projects and homework make you feel like quite the computer scientist ™. In many ways, 61B is a continuation of 61A – taught this time in Java – but for me the experience of going through 61A made the culture shock of 61B much less intense, and as such CS61B is just FUN. The projects might seem intimidating (Gitlet comes immediately to mind), but the learning and growth you do as a programmer, working through bugs and developing good coding habits such as writing test cases and organization are tools that will follow you for life. Here’s a tip! – the projects in 61B are hefty! And contribute a significant amount to your final grade, so much so that with good project and midterm scores, you could almost not take the final exam and still get an A. So start early on those projects! Some of them are trickier than they look, and you would not want to face the arduous task of debugging with a deadline. All in all, 10/10: truly a class with a “woah” factor.
Ready for a change of pace? The last class in the 3.3 GPA requirements for L&S CS majors is
~ CS70 ~
CS70 is a huge departure from the previous two classes in this article. You will write absolutely zero code in this class – instead be ready to masquerade as a math major for an exhilarating semester! CS70 can be described as a hodge-podge of every single mathematical concept needed for a CS education, everything from graph theory to mod arithmetic to every kind of probability under the sun. It is decidedly NOT an easy class, made unfortunately worse by the fact that your grade in CS70 is largely made up of 2 exams that could account for up to 90% of your score – not particularly great news for students who are less inclined for test-taking. However, it is also very interesting, and the concepts learned in this class will grow and develop into fundamental facts of life for any and all branches of CS that you might go into in the future. My advice? Practice! Do your best to not fall behind in content, attend discussions diligently and read the notes. CS70 is also graded purely on a curve, which means that your grades are entirely dependent on how you performed compared to other students in the class. For me, math was never my strong suit, and CS70 was more of a challenge compared to the 61 series, but it is also important to note that if you find a class difficult, so might most other students! And given that 70 is entirely curved, do not feel discouraged if the material seems hard to grasp from time to time, because you could still walk out of the class with an excellent grade even with some gaps in knowledge. Here’s a tidbit that could be both encouraging and slightly scary: the mean score on the final for my semester was about 40% 🙂
Those are the 3 primary classes in lower-division computer science, and the three classes who’s GPAs matter in declaring the L&S CS major. For students who are interested in such a path, the requirements are to take the above-mentioned 3 classes prior to the end of your sophomore year, and to maintain a B+ average across them. Is it doable? Absolutely! Berkeley has a spectacular CS department and its classes are some of the most well run in the world. Even for a complete CS newbie like yours truly, just by keeping up with course content and doing the homework, you’d be amazed by how much you can internalize in a short amount of time. This is not to say the classes are not difficult, of course. It is easy to fall behind, especially when students also have other classes to worry about. Still, with a little planning, a study group and a belief in yourself (!) CS is a terrific major that could open many truly fascinating doors in the future!
I hope this has been a helpful, short introduction to some of the key classes and an overview of the CS major through your first two years in Berkeley! Feel free to check out the EECS department website for more information on specific classes, as well as upper-division requirements and declaration policies for the other two majors (Data science and EECS). If you have specific questions for me, do feel free to reach out by emailing firstname.lastname@example.org! I’m more than happy to answer any question under the sun. Good luck everyone!