u/AlgorithmicGoslings

▲ 13 r/UCI

Recent graduate here making a sequel to this post. The last post was geared primarily towards juniors and seniors trying to figure out which CS electives to take. This one will be primarily geared toward the incoming first-years and people who are still finishing their lower-division requirements, but students of higher standing might still be able to get some takeaways from this post.

For the most part, the intended audience for this post will be students who enroll in the CS major primarily to learn more about the field, whether your goal is to become a well-rounded graduate in CS or to specialize in a specific discipline. If your primary goal is to maximize money or simply to get a piece of paper, these tips will likely be less applicable.

1. In general, prioritize learning outcomes over your GPA.

Age-old dilemma, I know. For the most part, your exact GPA usually doesn't matter as long as it's above some minimum threshold (3.0, 3.5, 3.7, etc.). For that reason, when you're looking at a course and see a low average GPA, don't let that discourage you too much. If you are genuinely interested in the content, having that knowledge is usually more useful than the marginal bump in GPA you would have had if you took a different course (or even professor). It's understandable to avoid a course or a professor due to rampant disorganization, bad quality of teaching, or an excessive workload, but if "low average GPA" and "the course is hard" are the only two metrics you judge a course or professor by, you might be missing out on a lot.

Furthermore, it is worth noting that many courses, especially electives, are designed in such a way that putting good faith, even if minimal, effort into doing the work will allow you to receive a passing grade. There are some exceptions to this (for example, Klefstad courses and MATH department courses typically have higher expectations), but most students won't fail a course they took out of genuine curiosity.

For example, it's natural to be scared of proofs and theory. I suspect this is why a lot of the CS 16X courses can be empty. However, try not to let this fear dissuade you from taking courses you want to take. If you find the topics interesting, you'll probably put in the effort to understand it and learn it better, and that will naturally correlate with a better grade.

2. Most people "learn by doing." Engage regularly with the content as you learn it.

This is a common trap I know many students fall into. They'll learn something in lecture, then do nothing with it until a couple days before the exam. One of the main ways to remember what you learned is to apply that knowledge (in fact, this is the rationale behind homework assignments). In CS, you'll probably learn quickly that memorizing concepts isn't enough --- you'll need to know how to apply them (usually, the first time this realization hits in its entirety is in ICS 33, which is notoriously known for an extremely low average on the final because rote memorization and regurgitation will no longer cut it). If you regularly engage with content over the class period, your last-minute studying starts feeling like a quick refresher rather than a cram.

Now, when I say that you need to apply that knowledge, I mean it. If you ask an LLM to code something up for you or solve this problem for you, it's not you who applied that knowledge --- it was the LLM. Now, I could go on and on about how LLMs are reshaping the education sector, but that's a discussion for another day. The key takeaway here, though, is that LLMs are tools, not crutches. When you were in elementary school, any math problem you got could have been solved by a calculator. However, you didn't learn addition by putting the expression into the calculator and copying what it spits out. Moreover, if you used a calculator to solve it for you (NOTE: This is distinct from using the calculator to check your answer), the only reason why you knew for a fact that the answer you got was correct was because the calculator was never wrong. Same thing applies here. You're not going to learn how to write code if an LLM writes it all for you. And while you could have an LLM generate the code and read over the code to understand it, are you truly understanding how that code was derived? LLMs can definitely be a huge time-saver when you're doing the work, but in my opinion, if your main objective is to learn, ease off the LLMs until you get a good grasp of the baselines. Using LLMs to speed up work after you have the basics down? Totally fine, as long as you know what you're doing (seriously, they can get things egregiously wrong sometimes; make sure you can identify where they go wrong).

This also means taking time out of class to wrestle with the ideas you've learned. Maybe after finishing ICS 32/H32, make a small project in Python that calls a web API and displays information to you. You'll have the skills to do something like that now; might as well use them. Engaging with personal projects along the way is a good way to reinforce your skills while maybe bolstering your resume in the process.

3. You are not alone. There's a social aspect of college you shouldn't completely neglect.

It might be tempting navigating through everything alone but just know that you don't have to. Realistically, having a really good support network in college can really take you far. You'll have peers that can give you advice, refer you to opportunities, and form lasting bonds with. A lot of the lower division courses can feel cutthroat and competitive (there can be a lot of animosity towards people for "ruining the curve," so to speak). I think having a supportive environment can help you feel much more welcome in the major. Join clubs, interact with people in classes, etc. CS might seem like a socially dead major, but I feel like if people really try to engage in social interaction, they can find their crowd.

4. Plan your schedules.

And no, I don't just mean the upcoming quarter's schedule when that drops, though I strongly recommend you do that too. ICS has a webpage dedicated solely to listing the prospective course offerings for the school year and who's planning on teaching. For example, you can see here that Hayes is scheduled to teach ICS 6B in both Winter 2027 and Spring 2027 (if you know, you know). Use this webpage to your advantage. For example, I can think of several ways this might benefit a person crafting their schedule for the 26-27 school year:

  • CS 117 is also offered in the Spring, which you likely would not have known if you looked at this website. This means that if there's a schedule conflict, or you just don't want to risk taking CS 117 with a new hire, you can safely skip CS 117 this Fall and take it in Spring instead.
  • CS 122C is only offered in the Winter, which means that if you want to take CS 122C this year and have not taken CS 122A yet, you have to take CS 122A this Fall.
  • CS 143A is not offered in the Spring, so those planning to take it this year will have to make plans to take it either in Fall or in Winter.

Seriously, this webpage is a lifesaver. Use it.

5. Understand that student reviews, especially on RMP, can be biased.

RMP reviews tend to skew towards extremes. If you found the class decent and fine, you're probably not going to write a review on RMP saying that the class was "decent and fine." However, if you truly hated this professor's guts, you could see yourself writing a review on RMP warning everyone to avoid this professor. Moreover, the vetting process for reviews isn't exactly the best. There are times when you can clearly tell that there are sockpuppet reviews written by the same student. Now... if I were writing this several months ago, I would have strongly recommended UCI's own EEE+ EaterEvals webpage, which, if you ever filled out a course evaluation, this is where the quantitative results for course evaluations were publicly displayed. Unfortunately, it seems like EEE+ removed this functionality in March 2026, which in my opinion is a huge loss for transparency. The results there were way less biased and you could get other metrics like how much effort students put into the course, whether students felt like they had ample opportunities to learn, and whether the professor was a good teacher.

Unfortunately, with the retirement of EaterEvals, we kind of lack alternatives. At this rate, you're better off asking people you know who took the course to provide their opinion, and if the opinion seems oddly extreme, you might want to get a second opinion from someone else. PeterPortal might also be a good resource, though the number of people who leave reviews on PeterPortal is criminally low.

6. Figure out your future goals, but keep an open mind.

If you're going into the CS major with dreams of becoming a Software Engineer at a prestigious tech company, you might want to expand your horizons. That's not to say that people with this dream are wrong, but make sure you keep in mind that this isn't the only outcome of a CS degree. When I entered CS, I expected to be doing Software Engineering or working in Robotics after I graduated. I didn't necessarily have a goal in mind --- I just knew that's where CS majors tended to end up, so I thought that would be my natural progression. Needless to say, I found different interests.

If you have a goal in mind, work towards that goal. If your end goal is to work in Machine Learning, I strongly suggest getting STATS 67 and MATH 3A out of the way as quickly as possible so that you can take CS 17X courses earlier. Understand what courses would be useful for attaining your goal and what you need to get there. In general, the earlier you get there, the better. For example, if you can secure a couple CS 17X courses under your belt in second year, that puts you in a good position to do personal projects involving ML and have the knowledge necessary to land internships involving ML. As another example, if your goal is to land internships and ace technical interviews, it would be in your best interest to try to take ICS 46 and CS 161 as early as possible to build the foundational knowledge you'll need to pass those interviews. If your goal is grad school, you might want to consider securing research opportunities as quickly as possible. But of course, this means going into college ready with a plan to execute. Not everyone has the luxury of knowing what they want to do after graduation.

Just be aware that interests can change. Your college years are formative. Don't "do nothing" and realize after graduating that you didn't take advantage of the opportunities, but also don't burn yourself out.

7. Office Hours aren't just for seeking help.

That's definitely how most people see them. However, you can also see it as an opportunity to get to know the professor and know their life story. Why would you want to do that? Maybe your professor was in a similar boat to you. Maybe your professor knows opportunities that would suit you well. Maybe your professor could give advice about succeeding in CS, much like I'm doing right now. In many ways, most of my mentors at UCI were professors.

But most of all, it shows the professor that you're a person with your own hopes, dreams, and goals. This allows them to tailor to your needs as much as they can. If you want letters of recommendation, it's much easier for a professor to talk about a student they know personally. If you're looking for research opportunities, it's much easier for a professor to be willing to take you in if you showcase genuine curiosity about the subject and can formulate your thinking process. In many cases, forming that link with your professor can be beneficial.

8. Don't discount math and theory.

It's pretty easy to think to yourself, "When will I ever use calculus during my job?" Most people won't, yet our CS major still requires calculus. The way I like to think of this is that the primary goal of the degree is not to get you a job right after graduating. It's to turn you into a well-rounded, educated individual. And usually, that correlates with better critical thinking and problem-solving skills, which are useful regardless of whether or not your job makes you take the derivative of sin(ln(x)) on a regular basis. Whether you agree or disagree with this notion is merely just a matter of personal opinion. However, I will say that theory provides a good foundation for why the things you implement work.

As an example, you might be wondering why you need to care about C-style arrays when classes like Java's ArrayList or C++'s std::vector remove all the overhead work for you. At the end of the day, while you likely won't be using memory unsafe constructs like C-style arrays in your job, the point is not to teach you something you'll use practically, but to build a foundation that every one of these more modern abstractions uses. It's the same reason why you learn about sorting algorithms even though almost every single sorting algorithm you'll learn is beaten by std::sort. Once you understand the underlying structure, you'll be more equipped to understand why certain design decisions are made and how to improve on existing algorithms.

For example, fast sorting algorithms like TimSort were designed with the knowledge that real-world data tends to have long runs of already sorted subsections and that merges can be done in O(n) time given two sorted subarrays as input. That's how theoretical concepts can be exploited to improve on real-world performance. Learning a bunch of algorithms doesn't seem all too useful... until you encounter a problem in the real world that is oddly suited for some exact algorithm you learned before. UCI does a pretty good job of explaining the theoretical intuition behind some of the most well-known algorithms and data structures. Being aware of that might help you in the future.

9. Lower division courses tend to be more intensive.

They're there to teach you the basics and sometimes to weed people out. Upper division courses, in comparison, are much more chill, even if the content is way more difficult and advanced. Just look at the grade distributions for CS 179, CS 166, CS 165, CS 116, CS 117, etc. if you want proof. If you're really struggling in the lower division courses, just know that things will likely get better once you're done with ICS 46, CS 161, and ICS 53. However, I obviously still suggest giving it your all in the lower division courses, as the foundational knowledge they give you will probably be relevant for some of your upper division courses.

10. There's free food in DBH if you know when and where to look for it.

Look out for research seminars, events, and faculty meetings. Those tend to have free food. The star of the show, however, is on the first Wednesday of every month in the afternoons. This is when the CS faculty meeting is, and you can take the leftover food (there's always leftover food). Got some good free meals from these, wish I knew about them earlier.

That's all from me. Hope this helps. Just know that this is my opinion, so YMMV.

reddit.com
u/AlgorithmicGoslings — 8 days ago