CS61B is the Data Structures lower division Computer Science course at UC Berkeley. This course is an important and foundational course for students as it covers object-oriented programming, data structures, algorithms, and runtime analysis.
“ This course covers object-oriented programming, data structures, algorithms, and runtime analysis”
— EECS Major
Although the course is taught in Java, the concepts are applicable beyond just the Java language. Many of these concepts are used and applied in upper division technical courses, making this course part of the gateway to other Computer Science courses at UC Berkeley. This graphic from UC Berkeley HKN beautifully illustrates the intersection and relationships between all the Computer Science courses that are offered. For instance, students get a glimpse of CS 188: Artificial Intelligence during the Game Trees portion of the course. Students also get a glimpse of CS 170: Algorithms when they learn about graphs and graph algorithms.
For students interested in finding Software Engineering internships, many of the concepts covered in this course will be applicable and relevant for technical interviews. Students may also find themselves applying the knowledge taught in CS61B during their internship.
The Rewarding Parts
“These projects taught me how to test code, debug and logically think through problems.”
— EECS Major
Different students may favor different parts of the course, but most students do find some parts of the course rewarding despite all the associated challenges. Personally, I found the software engineering projects in this class the most rewarding. I was definitely surprised by my ability to design and create a working program when only given written specifications to work with. These projects taught me how to test code, debug, and logically think through problems.
Another aspect of this course I enjoyed was the emphasis on how to problem solve. I appreciated how this course showed me that one problem could have multiple solutions, each with different advantages and disadvantages. I enjoyed how the course walked me through how I could gradually optimize my solutions. I was taught to start simple, but build and expand as I discovered potential ways to improve my solution.
The Tough Parts
Although I look back and really appreciate this course, CS61B is, without a doubt, a challenging course. I personally believe that the most challenging parts are the projects and exams. Like many other technical courses, the projects are time-consuming and a lot more complicated than typical homework or lab assignments. They require a good amount of time and effort to complete. Similarly, midterms and finals are not easy, but taking practice exams definitely make a difference.
How to Prepare
There are many ways you could prepare for this course. I personally believe that it is important to come into the course with a solid foundation of the basic programming principles taught in prerequisite courses. If you’ve taken the prerequisite courses, take some time to review the material you learned there. For instance, it will be useful to review recursion and object-oriented programming.
“Course staff do not expect you to already know Java or data structures from day one.”
If you want to get a head start, you can start previewing course material. For instance, you could take some time to learn Java syntax. The course website and past course websites are great places to start this learning process. They provide helpful links, resources, and textbooks that you can refer to as you preview course materials. If you don’t have the time to preview course material, don’t worry! Course staff do not expect you to already know Java or data structures from day one.
Advice from Former 61B Students
Remember that there will always be people around to help you if you ever have questions! With that, I’ll leave you with some tips and advice from former CS61B students.
“This course has a lot of assignments and it is incredibly helpful to have another resource to help you, especially when there aren’t many opportunities to get help during class time.”
— CS Student
“Write unit tests and test your code in piece by piece. It will help you debug!”
— EECS Student
“The best way to prep for exams is to work through previous exam problems! Solidify your understanding of concepts through discussion worksheets first and then try tackling the more challenging exam problems.”
— CS Major
“The course is pretty fast paced and the projects truly require a good amount of time”
— CS61B student
“Even though the Edlyft pre-work modules happen two weeks before the class starts, you should attend them. They really helped me the most for the class. It’s the one thing you shouldn’t miss!”
— CS Student
“Learn to use the debugger. It will really help you and save you time when trying to find out why your code doesn’t work.”
— EECS Major
Edlyft not only provides you with helpful class sessions, but it also creates a supportive environment for collaboration among those taking the same class!