JohnPham@Seattle

Notes on Computer Science at the University of California Riverside

September 08, 2021

13 min read

Hello reader. If you've found yourself reading this, you're probably a prospective or current student at UCR. I'm writing this for you!

My goal is to document my experience as a computer science undergraduate.

All names mentioned are pseudonyms unless marked otherwise. This is to focus on behaviors and systems rather than individual people.

Any negative feedback is given in earnest. I do not doubt the countless hours of hard work the faculty and staff put in to provide the best education and environment possible for the students.

Background

I was an undergraduate at UC Riverside from 2015 to 2019. I was a mechanical engineering major for a quarter. I switched to computer science after getting exposed to programming at Citrus Hack.

During my undergrad, I was involved with student clubs (ACM), taught a CS course, and built websites and apps for the campus.

Overall, I had an awesome experience at UCR. UCR doesn't have the prestige or notoriety compared to other universities however I strongly believe you can be as successful as you want.

Courses

Here are some notes on all the CS courses I took along with some breath/depth courses that I found useful.

Overall, I believe the course plan is great if the goal is to set you up to be an embedded systems engineer. If your goal is to build apps, you will need to supplement what you learn in the classroom with personal projects and internships.

This was a problem when I was a student; test banks exist. Many classes will have variations of their exams/homework (different problem ordering, different constants, etc). Students who had access to the test banks could memorize the variations then ace the exams. I'm not sure if the faculty were aware of this. Student integrity can only go so far 🤷, I think this is a problem that the faculty could solve if they had more time (not blaming the faculty, they already don't have enough time to do all the high-impact work they want to do). My suggestion would be to change the exams that test memorization to testing understanding of the core principles.

CS010: Intro to CS 1 (now CS010A)

  • Learn C++ and programming basics like: variables, loops, conditionals, functions
  • Textbook and coding environment was on zyBooks and Cloud9

CS011: Intro to Discrete Structures

  • Set theory, don't remember any remarkable

CS012: Intro to CS 2 (now CS010B)

  • More C++ with object-oriented programming
  • Still on zyBooks and Cloud9; I would have liked this to be the course where they taught how to program outside of a classroom environment. Many peers were handicapped for internships because they didn't know how to program outside of Cloud9.
  • Note: If you're taking or have taken this class, you should be able to program outside of zyBooks/Cloud9. Trust me, the experience is waaaay nicer.

CS014: Data Structures and Algorithms (now CS010C)

  • Teaches you the intro material for Leetcode
  • Note: You'll usually take this class winter or spring quarter of your freshmen year. This is kind of late if you want to interview for internships. Most interviews take place in the fall and winter. If you want to do an internship the following summer, you should review the course materials during the fall.
  • Note: Pay attention in this class! This class will teach you the tools you need to know to solve problems during interviews.

CS061: Machine Organization and Assembly

  • Teaches you how a very basic computer is made and works
  • Failed it the first time (whoops)
  • This class is memorization-heavy. I'd suggest using Anki to help learn the material.

CS100: Design Patterns

  • Learn some of the Gang of Four Design Patterns by building a terminal shell
  • Note: Pay attention in this class! Design patterns are used everywhere, being able to recognize their use and knowing when to use them will make you a "rockstar" engineer

CS111: Discrete Structures

  • This class was just straight-up hard with a low reward. Usually, hard classes are hard because, by the time you pass them, you'll have leveled up in some aspect. This class failed to do that.
  • Lots of proofs to memorize, the exams were graded on how close to verbatim your answer is to the proof. Forgetting to use the word "the" could be the difference between 100% or 50%.

CS120A: Logic Design

  • You'll learn how to combine basic logic gates (AND, OR, XOR, etc.) to express complex logic (addition, subtraction, multiplication)

CS120B: Embedded Systems

  • Learn how to express systems with finite state machines
  • I liked the lab and capstone project. The capstone project gives you the freedom to build pretty much anything you want. I built a ukulele that teaches you chords.
  • Note: Try to have fun with the project. The faculty and TAs were accommodating and helped brainstorm how to fit what I wanted to build with the project requirements

CS141: Intermediate Data Structures and Algorithms

  • Follow up course to CS014 covering more data structures and algorithms
  • The exams are pretty much the same as whiteboarding interviews (minus the conversational part). You'll be given a prompt and be asked to write an optimal algorithm to solve it. You'll also need to write down what the space and runtime complexities are.
  • Note: Pay attention in this class! This class will teach you the tools you need to know to solve problems during interviews.

CS150: Automata and Formal Languages

  • All I remember is lots of circles and arrows

CS152: Compiler Design

  • I found this class interesting. Up until this point, the programs you write just magically work (sometimes). This class shows you how the C++ you write gets compiled to run on the machine.
  • I use a lot of concepts taught in this course regularly for example: using abstract syntax trees to do a massive code change automatically
  • Note: Do not procrastinate on the project, especially part 2 and part 3. The outline might look small but you'll be banging your head for a while to get all the edge cases.

CS153: Operating Systems

  • Learn how an operating system works by building one
  • This class was great! The concepts you learn don't just apply to operating systems but to any system you build.

CS161: Computer Architecture

  • This class is meh. You learn how to be a compiler by taking C++ code and handwriting the x86 assembly instructions.
  • I think the concepts should be taught, but the huge effort in getting students how to write assembly, do loop unrolling, and other optimizations by hand is a waste of time.

CS164: Computer Networks

  • Yes! One of the first classes I wanted to take. Most of my experience up until this point had been in web development so I had high motivation for this class.
  • The labs stay pretty basic. You do some multi-machine networking but it's all through VMs on a single machine. This class doesn't teach you how to set up a distributed system's network topology on a cloud provider.

CS170: Intro to Artificial Intelligence

  • This class will teach you search, one of the fundamentals of AI
  • It mentions but doesn't teach you the hot AI trends you hear about today (neural networks, deep learning, etc.)
  • Note: Even though this class doesn't teach you the hottest trends, it does teach you a method that has been solving problems since the 1950s and is still relevant today. Many problems you encounter can be modeled as a search problem, even problems that may not seem like a fit (e.g. picking an image format for a client to optimize quality and performance).

CS171: Intro to Machine Learning and Data Mining

  • You learn a few machine learning models conceptually and by implementing them by hand
  • Be prepared to write a lot of infinite loops

CS172: Intro to Information Retrieval

  • Learn how to get useful information from a large dataset (same lines as Google getting you useful search results from every website)
  • The project is really useful and fun; build a full-stack web app to search a large corpus and build an indexer

CS179G: Senior Design: Database Systems

  • Teaches you different databases as they related to relational (graph, document, wide-column, etc.)
  • Your capstone project is to use a database.

CS181: Programming Languages

  • If you have the opportunity to take this class, take it!
  • Teaches you different programming paradigms like Prolog and Haskell
  • Note: I suggest taking this class to learn when to use different languages. UCR teaches primarily C++. You can technically use C++ to solve any problem you run into, but it may not be the best language to use. Being exposed to different languages and paradigms will help inform your decision-making when you face problems.

CS183: System Administration

  • Teaches you how to be an IT admin managing servers and networks

EDUC102: Pedagogy

  • Teaches you how to teach
  • I find this useful every day: mentoring others, hosting workshops, writing content

ENGR101I: Junior-level Seminars

  • This is a once a weekly seminar where a guest speaker (usually an engineer) gives a talk then does a question and answer
  • I found this useful, but not as a junior. I would have preferred this be given to freshmen.

Extracurricular

Undergraduate Research

Many faculty members (in and outside of computer science) are actively looking for undergraduate researchers. If you want to gain some hands-on, practical experience, then undergraduate research is a great way to get some.

I'd start by looking at what each faculty member is researching. Once you find a few, try looking up some recent publications. This will give you a sense of what they've been working on. When you've found a faculty member doing research you're blown away by, reach out to them! A well-written cold email will go a long way. You should make up for your lack of experience with enthusiasm.

Association for Computing Machinery (ACM)

Many of my closest friends were made through ACM. I can say being part of ACM made my experience at UCR great.

Hackathons

Hackathons were one of my favorite things to do. As a college student, what's better than free food and swag? Some hackathons even reimbursed your travel expenses (free trips around the world!).

As you go to more and more hackathons, you'll start seeing familiar faces. These are people you should become friends with! You never know what opportunities will be open to you from the friends you make at hackathons. My current job is a direct result of becoming friends with someone at a hackathon (hi Jay!).

UCR is super fortunate to host a bunch of local hackathons. Most colleges are 0 or 1 hackathons a year, UCR has over 3!

  • Citrus Hack
  • Cutie Hack
  • Rose Hack

If you end up going to a hackathon after reading this, send me a message telling me what you built, I'd love to hear about it!

Faculty and Staff

  • You have access and are encouraged to take advantage of it (open door and invitation)
  • Many will become your mentors and cheerleaders to help you succeed. There is no gatekeeping. If you want help, have shown that you've exhausted all other options, then you will get world-class support.

Shout Outs

If you ever get the opportunity to enroll in a course or work with the following, take it!

  • Victor Hill
  • Paea LePendu
  • Christian Shelton
  • Nael Abu-Ghazaleh
  • Eamonn Keogh
  • Evangelos Papalexakis
  • Kadangode K. Ramakrishnan

Career/Internships

  • The campus' career center is terrible for computer science majors
  • Campus career fairs have mostly "low-tier" companies recruiting with the occasional "top-tier" like Google, Microsoft, Facebook, etc.
  • Student clubs like ACM, will host their own recruiting events with companies
  • Many faculty members are open to having undergraduate researchers. You will need to prove to them that you are committed to doing it though, many have experience undergrads who sign up to only leave in a couple of weeks.

Frequently Asked Questions

Is it difficult to register for courses?

I never had problems getting classes at the times I wanted.

How did I get my internships?

  1. Start applying in July for the upcoming summer (apply to a lot of internships, I applied to 200+ per season)
    • I found roles on LinkedIn, company websites, hackathons, and Twitter.
  2. If you find a role you're really interested in, try reaching out to the hiring manager on Twitter/LinkedIn. Your message should show clearly why you're super excited about the role.
  3. While applying, prepare for the technical interviews. I used Cracking the Coding Interview, Programming Interviews Exposed, and Leetcode to prepare
  4. While applying, prepare for the behavioral interviews. I drafted stories on experiences where I demonstrated: ownership, curiousness, bias for action, trust, and delivering results.

How many internship positions did I apply to each term?

Around 200+ per season.

What was my Leetcode strategy?

Start with Leetcode easy, then medium, then hard. Don't jump straight to mediums or hards. You will be demotivated if you don't have experience solving these problems.

If you don't know the fundamental data structures, algorithms, and how to use your programming language then work on those first. Those 3 things are the tools you will use to solve problems. You won't be able to solve the problems if you don't know what tools you have access to.

These 14 patterns also show up in pretty much every Leetcode problem. Once you learn the patterns, solving the Leetcode questions is a matter of pattern matching.

Did I do research with faculty?

I had a few short stints in material science and computer science (sorry for leaving so early professors!). I wasn't mature enough or have the focus to work on a problem where the feedback loop is measured in months instead of days.

Was I happy at UCR?

Yeah! Many of my best friends were made there. Tons of great experiences.

Is the 4+1 CS masters program worth it?

I didn't do it. My reasoning is I didn't need a master's to get to the goal is wanted. You should ask people who are doing it to get their perspective.

Is the honors program worth it for CS majors?

I didn't do honors. Out of all of my peers (n=about 200), only 1 did. I didn't see any value in doing it.

What do you think were the biggest factors to your success?

Hackathons, student clubs, friends to do the first 2 with.