Berkeley CS Courses Pt. 2

Lower Division Courses: CS61A/B/C

Posted on August 13, 2018

I’ve had not such a great day. I’m not really sure why, I just woke up and just didn’t feel good the whole day. There’s also some problems with my bike, so I’m now back to walking for transportation. Yeah. My head just doesn’t feel so good and had some sad thoughts and I can’t sleep. But it happens. Maybe writing about CS61x series will take my mind off some stuff. CS61A/B/C are the three lower division programming courses at Berkeley. We also have to take CS70(Discrete Math and Probability) and two classes out of Math 54/EE16A/B (Linear Algebra, lower division EE) to finish out our lower division courses, but I will not write about that today.

CS61A is the intro to CS course we have at Berkeley. Professor John DeNero is a legend at Berkeley known for his amazing teaching skills and adorable personality. He created the version of 61A that is taught today and also did his Ph.D. at Berkeley where he also helped structure CS188. CS61A really does a good job of laying the foundations for computer science and in such an awesome way as well. The projects are fun, the homeworks are not busywork, and you can tell how much thought was put into each problem. There are plenty of resources, from tutors to TAs to CSM. I think one downside of taking CS61A is that you will be spoiled from how many past exams are available to practice, that you will complain in the future about any other class when they only have one practice exam. Which is actually just a testament to how well the class is run and I’m amazed at how it’s been able to scale to over 2000 students. No doubt it’s a hard class, but Berkeley kids are always ready for a challenge.

I’ve had the opportunity to hear Denero speak on multiple occasions outside of class, since he came in for CS370 as a guest speaker and also was a speaker at a UPE meeting. And he’s just an amazing person. He worked at Google after getting his Ph.D. on Google Translate, and when Google gave him an offer, he told them he only wanted to work 80% of the time and teach the other 20%, and they obliged. Can you imagine negotiating with Google? Not for higher salary, or more benefits, but to pursue your passion of teaching? That’s incredible.

Another cool thing I learned about him is that he wants to make a project based class where all of the students work in teams to create a small part of a very big project, and at the end we can piece together everyone’s parts and see if it all works together. I think that’d be pretty cool to be a part of, although the logistics would be a nightmare. And the last thing I will say for now about Denero was when we asked him about what he thinks the next “wave” of computer science will be, he said that he thinks it is noble to work in making computer science tools. Right now, there are many tutorials in getting started in computer science and how to code, and many people are learning coding. And the result of this is that since many people will know basic coding, we need tools that will let them flow into the next step easily and assist them from the next part of the journey. There are enough tutorials from nothing -> basic coding, and helping build tools for basic coding -> making own projects and exploring ideas will be a great next step. An example that he cited was helping build Github, to help developers contribute to each others projects and learn from each other. Which was exciting for me to hear because my research is in making more Github tools!

CS61B is our data structures class and I took it with Josh Hug. There were definitely less projects and homeworks than 61A, but they were a lot more intensive and took more thinking. The projects and homeworks were pretty cool though, including building SQL from scratch, creating a seam carver(image resizing technique), and creating a mini Google Maps of Berkeley. It was a very good balance of learning data structures and the idea behind them while also implementing them as well as using them in different projects. Looking back, it’s actually kinda crazy how much I learned in this class because I think it’s where I really learned how to actually code projects and not just fill in functions, but I also learned a lot of theory.

Josh Hug, like DeNero, is also goals. But he was different. He was just…cool. He had a very casual way of speaking that made you feel like he wasn’t a super scary professor, but more of a friend vibe. The class felt very personalized even though there were also thousands of students in the class. Not to say that DeNero is wasn’t casual, but DeNero always felt very prepared and scripted, even when answering students questions (“Ah good question….”). Hug was more like even though he definitely knew the answer to each question and all the topics, it was like he would walk through the struggles with you like a fellow student. The lectures were less “planned” and he had more of a general idea of what he wanted to get across, which is why it felt more personalized to each lecture. That we could take appropriate tangents if the whole class was struggling. I also heard Hug speak at one of our UPE meetings, and he said that DeNero is probably the best CS professor in the world, which is one of the reasons why Hug came to Berkeley. Of course, he made sure DeNero wasn’t in the room at the time. But that is some high praise. And also just a nugget of advice from Hug: “Do the thing”. Get out there and do stuff. Don’t stay locked up in your room by yourself. You need to experience the world and meet people and give life an opportunity to give you opportunities. And it can’t do that if you’re in your room studying all day.

CS61C is our machine architecture course and I took it with Krste Asanovic and Randy Katz. We covered low level programming, datapaths, optimization techniques, caches, etc. This class was not one of my favorite courses. It moved way too fast and it covered so much material in one semester that I couldn’t absorb it all quickly into my brain. It also felt at times that the class taught these big ideas, but then tested us on these convoluted word problems which had no relevance to our skill in computer architecture. I did not enjoy the class at the time, but looking back, I do appreciate learning about the main ideas in machine architecture as it has helped me a lot. We also had projects due every Monday. Big projects. My CS partner and I pulled an all nighter at least once every week due to the projects.

What was cool about the class was that this was the first semester 61C was taught in RISC-V instead of MIPS. And you know who created RISC-V? Asanovic. We were literally learning the language created by the professor, and it’s use is becoming a lot more widespread. We also learned about RAID. And guess who was one of the inventors of RAID? Randy Katz. Although this class must have been one of the most stressful classes at Berkeley, I really felt proud to be going to Berkeley, where these innovations are being made and used all over the world. It’s just a really cool feeling to be taught by these people who have revolutionized computer science, and gives you the hope that maybe you too, will one day revolutionize computer science.