My Review of Upper Division CS Classes at Berkeley

CW
6 min read1 day ago

--

Talking Heads — Same as It Ever Was
And I ask myself, how did I get here?

Hello! I just graduated, and love providing unsolicited advice so I’m going to review all the upper-division CS classes I took at UC Berkeley and give my two cents on each of them.

Note: I’m going to list the classes in the order I took them, and since there is some overlap in the curriculum, classes taken at a later point in time may be easier than those taken before. For more context, I was a transfer student, and did not take the same lower-division classes as students at UC Berkeley. With that out of the way, here is my non-comprehensive review of my classes.

Fall 2023

Hard Drive
Photo by benjamin lehman on Unsplash

CS 168 — Introduction to Database Systems (with Albert Cheung)

I got my feet wet in upper-divisions at Berkeley with this class, and as the first upper-division class I took, I thought it was interesting. This class is not a guide on how to integrate a database with some application or dealing with database administration methodologies, rather it is a deep-dive on how database systems work from the underlying database data structures, to how databases work from a lower-level standpoint, to learning query optimization, and a bit of SQL. There was also a bit on distributed systems (which I feel Berkeley should have more courses in at the undergraduate level nowadays) which I found unique to this course from all of the upper-division courses I took. Project-wise, it’s all in Java and just following a given spec, a bit bland, but it was good practice in programming some unique data structures. ✅WOULD TAKE.

Spring 2024

Lock and chain on metal fence
Photo by Jose Fontano on Unsplash

CS 161 — Computer Security (with Raluca Ada Popa and Peyrin Kao)

This one was a fun one as you get to be a veritable Hackerman. This class is a blend of low-level programming (dealing with memory and the exploitative nature of programming in C), cryptography, and web vulnerabilities all wrapped in a one-semester course. The class itself is like a 101 class for understanding computer vulnerabilities. The best part of the class, however, were the projects. One project is dealing with memory exploits (essentially programming in Assembly), another is akin to doing a CTF (along the lines of HackTheBox or PicoCTF), and the most interesting one was designing a secure file sharing system in Go, forcing you to pick up a language and make design considerations that would prevent attackers from being able to access data they should not.

No other class had the level of open-endedness that was that secure file system project, which makes this class one you should take, for both the content, and learning to design a system that is both secure, and fulfills expectations for an end-user. ✅WOULD TAKE.

Robot Sideeye
Most unflattering photo I could find. Robot Emeca from Article.

CS188 — Introduction to Artificial Intelligence (with Cameron Allen and Michael Cohen)

With the AI hype train underway when I chose to take this class, I thought it would provide me with unique insight into what AI really meant. And, it did…kinda. This class is more of a conceptual, high-level viewpoint on traditional AI with a sprinkling of Machine Learning. Not an incredibly practical class, but interesting nonetheless. I would take this class if I were interested in what AI looked like traditionally, and to gain some unique perspective on the evolution of AI to what we consider AI to be nowadays (like those of neural nets), but it really isn’t something completely necessary in your upper-division curriculum, especially for those interested in AI research. All the cutting edge AI concepts would be best learned through CS 189 which is much more integral to understanding and building ML models. Projects are all done in Python, and unmemorable since you just follow a spec. ❌WOULD NOT TAKE.

Sidenote: I do think that this class has the best mascots and integration of them into the class itself.

Fall 2024

Photo by Stephen Phillips - Hostreviews.co.uk on Unsplash

CS 168 — Introduction to the Internet: Architecture and Protocols (with Sylvia Ratnasamy and Rob Shakir)

This class is like if a CompTIA class and a theory-based CS class had a child. I think that this class is fundamental to understanding how the internet works, and the ideas taught in this class are great if you have never taken a networking class or have played around with your home router at any point. If you have, there is a lot more insight to be gained in taking this class anyway, from the underlying algorithms that allow the internet to be what it is today. You learn all the typical networking stuff like IP, MAC Addresses, DHCP, TCP/UDP, the OSI model, etc., but in addition, you learn how the packets get forwarded, how WANs are able to connect to one another, how routers work, and how a datacenter handles networking — basically how the internet functions from a low-level to a high-level standpoint.

The subject matter alone makes this class worth it — well actually, I think the subject matter is the only thing that this class has going for it. Projects are in Python and are essentially following a spec (once again). Nevertheless, the concepts are still good to know, especially if you’re more interested in the networking side of tech. ✅WOULD TAKE.

Humourous XKCD panel explaining elegant and inelegant applications of software development.
XKCD, my beloved.

CS 169A — Introduction to Software Engineering (with Michael Ball)

Okay, this class was a mixed bag for me. This class’ structure was the most unique out of all the upper-division courses I took. In terms of structure, its 5 Quizzes, a final exam, interspersed individual projects, and a final group project pretty much all done in Ruby on Rails (except for one in Javascript). It is a very conceptual class, with most of the projects done by following a spec, but there is one very clear problem that makes this class nearly unbearable at points: the Codio platform. Firstly, it costs money to use, which is a major downside as all the other CS curriculum is openly available. The platform itself is basically a textbook and an in-browser IDE, but its the worst web-based IDE I have ever used. Additionally, a whole bunch of the project specs are either unclear or have incorrect parts that forces you to come up with your own solution (which in itself has some potential merit in making this class valuable for building your own projects).

This class does have merit in learning about Agile, Test-Driven and Behaviour-Driven development, programming in the Model-View-Controller architecture, a bit of CI/CD, Ruby on Rails, and most fun of all, teamwork. The final project is a group project, and it encapsulates most of everything learned throughout the semester, alongside the more mundane parts of Software Engineering like standups and story points. The final project is also relatively open-ended and requires a lot of tests to be written (somewhat similarly to CS 161). There is also another course named CS 169L which is a semester long project based on the concepts taught in CS 169A, which I will unfortunately did not take. In all, the concepts are mildly interesting, but the value comes in being able to program in another language, writing test cases, and collaborating on a single codebase. ❓SHOULD MAYBE TAKE.

The End?

That wraps up all the upper-division courses I took. Hopefully it was mildly helpful, or at the very least, grammatically correct. The real takeaway I got from my time at Berkeley is that there is always more to learn; go out and break something or fix something, build and contribute to the developer community, and not only does the classwork get easier, you simply just become better than you were before, and at the end of day, that’s what truly matters. In the words of Shia Lebouf,

GIF of Shia Lebouf saying Just Do it!

--

--

CW
CW

Written by CW

0 Followers

software enthusiast, Morrowind enjoyer

No responses yet