A UCLA student’s survival guide to CS 131, Programming Languages, with Professor Eggert. Here are the top 4 tips for acing the course.
CS 131 (Programming Languages), taught by Professor Eggert, is notoriously one of the hardest—if not the hardest—undergraduate computer science courses at UCLA. The Bruinwalk reviews paint a fairly accurate picture of what to expect: challenging assignments, open-ended conceptual exam questions, and time-consuming homework.
With that said, it’s one of the most interesting courses I’ve ever taken. Professor Eggert’s lectures are full of all kinds of interesting information. He is an accomplished computer scientist and a brilliant person. Plus, he deeply cares about his students’ learning.
Here are four tips to help you survive the course and achieve the grade you want:
1. Make attendance a priority.
While attendance isn’t mandatory, it’s more important in CS 131 than in almost any other class you will take. This is because Professor Eggert covers a lot of information in each lecture-- often more conceptual than technical. I highly recommend taking detailed notes during lectures, as exams are open notes and open book, and anything covered in class could potentially show up. It’ll be especially worthwhile to have detailed notes when you’re reviewing them for the final exam.
Attend discussions as well. TAs will go over whatever programming languages and concepts were relevant that week and give hints on how to get started on the assignments. I strongly recommend attending your section and participating.
2. Take advantage of office hours.
Certain concepts may take a while to understand, so do not be afraid to attend office hours and ask questions. Overall, you will learn a LOT of information, so take advantage of your available resources to ensure you fully comprehend everything.
3. Make the most of labs.
Labs are a lot of work but a fantastic technical experience. Throughout the semester, you will complete about 6-7 of them in various programming languages. Since lectures only cover concepts and syntax, you will have to learn many of the intricacies of the languages yourself, mostly by trial and error.
To do well on labs, attend your discussion sections. Your TA will give you an outline for how to get started on your work. From there, you’ll complete a lot of reading documentation and make incremental progress. If you get stuck, make sure to use the resources available to you. The class uses an online Q&A platform, Piazza, so you can ask about any issues you run into and your TAs should respond promptly.
This may go without saying, but do not cheat on these assignments. While you may be able to find some previous assignments online, copy-and-pasting answers will not help you learn the languages. Exams often include code sections that will be much easier if you worked through the corresponding lab yourself. There’s also a generous late policy for labs, but keep in mind that if you use an extension, your next lab will still get assigned in the interim, so it’s important not to lean too hard on the late policy and risk falling behind.
4. Prepare for your exams, and answer each question.
Exams are challenging and will truly test your understanding of the material. Each exam consists of many open-ended conceptual questions. For these types of questions, there is often no clear right or wrong answer. You may not get 100% credit for each answer, but you can get partial credit, so always write something down for every problem.
To do well, you will have to change your mindset from other tests you’ve taken. Rather than thinking of each wrong answer as points off, go in expecting to do your best on each question and work your score up from 0. When I took the class, mean scores for each exam hovered around 50%, with a massive curve at the end. Your grade won’t be super transparent, but everyone else is in the same boat as you.
Do the practice exams, take detailed notes, and review them, so you don’t have to waste time during the exam locating specific sections.
The bottom line…
Between the technical difficulty of the labs and the conceptual difficulty of the exams, this course may sometimes feel like two courses. However, it’s extremely informative and will teach you to understand the differences between types of programming languages, with plenty of examples. Exposure to these languages will come in handy throughout your future CS career at UCLA and beyond.
Need a boost in your CS courses? Edlyft is here to help. Sign up here to stay up to date on all things Edlyft.