Tips for Lower Division Computer Science Courses at UC Berkeley
Studying Computer Science at UC Berkeley is no easy feat, especially when it comes to succeeding in lower division courses. Especially for students admitted to Cal undeclared, the 3.3 GPA requirement to declare the Computer Science major may seem intimidating. However, we hope that this guide containing tips from AWE members for success in the various CS lower division courses will make navigating through these courses less stressful for you!
Disclaimer: Please keep in mind that the opinions expressed in this article reflect the experience of a few AWE members, but the experience varies for everyone! For additional advice, feel free to check out other tips on the AWE Slack, the EECS 101 Piazza, or other online forums.
Q: What are the lower division CS courses offered at Cal?
*factored into the 3.3 GPA required to declare CS
- *CS61A — Structure and Interpretation of Computer Programs
- *CS61B — Data Structures and Algorithms
- *EECS70 — Discrete Mathematics and Probability Theory
- EE16A — Designing Information Devices and Systems I
- EE16B — Designing Information Devices and Systems II
CS61A — Structure and Interpretation of Computer Programs
Description: CS61A is UC Berkeley’s introduction to programming and computer science course focused on abstraction and program complexity. The course teaches some important computer science concepts including recursion, higher-order functions, generators, objects, classes, interpreters, and macros.
Language(s) Used: Mostly Python, some Scheme and SQL
What are your biggest tips for success in 61A?
Although many students take this course first, it is technically the second level of computer science courses here at Cal and assumes that you have some prior knowledge of programming. For first time coders or students with little experience, many AWE members recommend taking “CS10 — The Beauty and Joy of Computing” prior to taking CS61A in order to develop a solid foundation.
“CS10 is a great prep course (highly recommend if you have little to no coding experience) and gives you more time to build these skills before taking 61A which moves very fast, assumes you have experience, and is less overwhelming if you have some idea of how to ask for help, study and work with others.”
One of the biggest tips for success is knowing when and how to ask for help and a big part of that is learning to overcome the imposter syndrome and fear of asking for help that many Cal students experience. From AWE members themselves:
“Ask for help and don’t suffer in silence!”
“Use OH, advising OH, lab, and discussion to the fullest capacity to get the most out of this course.”
In terms of success on exams, a lot of 61A is intuition based, so focus on quality over quantity when studying. Additionally, experiment with different study strategies to see which technique works best for you — whether that be taking notes on lectures, watching review sessions, or just doing practice problems.
If you are looking for inspiration or just a place to start, here is what worked for other AWE members:
“Practice midterms really helped me for this class! I think that some questions (environment diagrams, HOFs) are inherently tricky, so practice helps a lot. I personally also really enjoyed the recursion part of the course (shoutout to the Cats project), so remember to also focus on what you think is cool in the class!”
CS61B — Data Structures and Algorithms
Description: CS 61B is the next level of CS courses at UC Berkeley (after CS10 and CS61A). This course teaches advanced programming techniques including data structures, encapsulation, abstract data types, interfaces, asymptotics, and algorithms for sorting and searching. By designing and implementing large scale projects from scratch (like the infamous Gitlet) you will get a taste of what “software engineering” might look like in the real world.
(It’s a super interesting class and my personal favorite!)
Language(s) Used: Java
What are your biggest tips for success in 61B?
Before taking this class, most students have never taken such a project-heavy course and so there is definitely a lot of new-ness surrounding it all. Here are some general habits to maintain for this course:
In terms of learning the content, since CS61B is a lot more involved, start everything as early as possible! This might involve looking at the first lab or hw from the previous semester a week or two before the semester starts if you don’t have any Java experience (for an optimal experience, it is recommended to take the class with CS61A under your belt as well as the java knowledge covered in AP Computer Science A).
Also, come in with the expectation that projects in 61B will be a lot longer and more intensive than projects in 61A. While CS61A projects require you to fill in some missing methods, the style of coding is very different as it requires more of a design aspect and individual work. Be patient with yourself and give yourself time to work through the problems to avoid major bugs and frustration later on!
Ultimately, really try to understand the data structures and algorithms taught in the course as well as the motivation behind them, because data structures really is a foundational CS topic. Many AWE members noted how the algorithmic aspect of CS61B (like A* and Djkstra’s) was their favorite part of the class.
Some of the data structures introduced in this class are conceptually difficult so if you are struggling to understand how a specific data structure works, try coding it up because it might help you understand them a lot better.
EECS70 — Discrete Mathematics and Probability Theory
Description: CS 70 is the next level of CS courses at UC Berkeley (typically taken right after CS61B) but it’s really more of a math course. For the discrete math component, it covers proofs by induction, modular arithmetic and GCDs, and polynomials. The probability section includes sample spaces, independence, random variables, and the law of large numbers.
What are your biggest tips for success in CS 70?
First, attend a discussion section! It’s really beneficial to find a discussion TA who can teach the content well — you can always ask in #awedvice which TA’s other AWE members have had good experiences with.
From an AWE member, “Talk to the people in discussion around you. If they don’t want to, then they won’t care if you get up and move to work with other people who are talking. It’s worth it to try to actually discuss and solidify the topics because discussion is where you learn to apply concepts from lectures before doing the homework.”
Second, give the course time. The notes for this class are quite dense, and not many students understand the content on the first read. If you give it the time and effort it needs, many AWE members have remarked that the course is actually very enjoyable because the math is “mind-blowing.”
Third, keep up with the lectures, and take notes during them. The class isn’t project-based, rather mostly problem sets and exams. Paired with how fast the class moves, it’s relatively easy to fall behind, so try to stay on track as much as possible!
One thing to note about CS 70 is that the class is curved. In the past few years, the average has consistently been ~50% on exams, but that doesn’t mean everyone is failing; rather, grade bins are determined based on the distribution of that semester’s scores, such that the mean is about a B+. How you do relative to the mean is what affects your grade. A word of advice: don’t worry too much over what score you get, but rather to focus on your own understanding and familiarity with the material.
EE16A: Designing Information Devices and Systems I
Description: EECS16A focuses on the fundamentals of designing modern information devices and systems that interface with the real world. It provides a foundation in signal processing, learning, control, and circuit design through a linear-algebraic lens.
Language(s): Some python (jupyter notebooks)
What are your biggest tips for success in 16A?
Practice! Do the online practice problems from the website, and go to Prof office hours (An AWE member specifically noted how helpful Prof Ranade’s OH were with understanding the class material and beyond)
Don’t fall behind in lecture! Some students come into EE16A with some linear algebra background and so they tend to slack off on attending lectures since the first few weeks are a review. But when you skip a lecture once, it becomes a habit and so you’ll find yourself regularly skipping lectures which will cause you to fall behind and struggle later in the course.
This goes for 16B too, but make sure you want to major in CS before you take this course. A lot of people complain about these courses and put them off as long as possible, and of those who do take them, a lot only take them because they HAVE to or because they feel like they “should.” This isn’t the best approach to learning. I wish I had taken 61B first so I knew that SWE wasn’t really for me and I wouldn’t have needed to spend time, energy, and money on these courses only to learn that the CS major isn’t a good fit. I felt like I “should” take them though, so I did and regret it. I did take them during remote learning though which significantly hindered the cool parts of the course and brought out the under-resourced parts. I wish I had taken Math 54 for linear algebra because I heard it was taught much more clearly, and circuitry made no sense in 16A for me anyway.
Some students may also find the proof component of this class to be good prep for CS 70 (which is highly proof-based and intuitive).
EE16B: Designing Information Devices and Systems II
Description: This course is a successor to EECS 16A, and builds off of the topics learned in 16A. It offers an introduction to machine learning, circuit design, control, and signal processing through a key linear-algebraic lens.
Language(s): Some python (jupyter notebooks)
What are your biggest tips for success in 16B?
First, try to take it right after 16A so that the concepts from 16A are still fresh in your mind and it’s easier to build off your current knowledge.
Second, give the course time!
“EE16B has a reputation for being a hard/high-workload class, but I firmly believe that a lot of understanding the material is a function of how much time you put in.”
Regarding the point above, an AWE member remarks, “As someone who had a pretty weak high school physics background, intuitively understanding circuits took some extra work.”
Another tip: Especially with a fast-paced class like EE16B, it is vital to try to stay on track and keep up with watching lectures — it really helps.
Final tip: Don’t struggle in silence — go to discussion sections and homework parties to get your questions answered!
Follow AWE Berkeley for more!