What I Learned from Studying Computer Science at UCLA

Jeffrey Yu
4 min readJun 25, 2022

A hot debate I see often is whether software engineers need a computer science degree or not. I tend to stand on the side of getting a degree.

Although build & learn matters the most for SWEs, a strong foundation in computer science provides the necessary knowledge to actually build software. It’s like learning biology before becoming a doctor.

An understanding of this subject reveals the layers of abstraction behind “interfaces” we see everywhere. Putting it into words, knowing how the wheels work help us to build better cars.

UCLA Engineering-V building

Becoming a junior after this summer, I’d love to share what I learned from my study of computer science in my first two years at UCLA, which includes most of the required and fundamental courses. I divided them into three scopes: data structure & algorithms, computer & OS architecture, and software construction.

Data structure & Algorithms

In my freshman year, I learned the basic data structures from CS32, including linked list, stack, queue, hash table, heaps, trees, graphs, etc. It also covers sorting and recursion.

Data structure tree

Our school uses C++ to teach the fundamental courses. Unlike other schools that use Python, I think C++ is a good choice since a statically typed language has more detailed implementations (though it’s painful). We have to be more careful and look into memory allocation, pointers, pass by reference, etc.

Our projects put data structures into use, such as a zombie shooting game and a document editor like Word. This course really helps with Leetcode for my future interview preparation.

My Professor who teaches this course, Carey Nachenberg, is the best professor I had so far. He was a lead engineer at Google & Lyft, and also wrote a Sci-fi novel. He also invited former students, who became engineers at various tech companies, to give us speeches about school advice and career preparation.

Professor Carey Nachenberg

Then I had CS180 in my sophomore year, which talked more deeply into algorithms. It includes Big-O, divide & conquer, graph algorithms, greedy algorithms, dynamic programming, P/NP problems, etc.

This course heavily involves mathematical proves, but the homework and exams are to solve algorithmic problems like Leetcode, roughly medium to hard level.

Computer & OS Architecture

In my freshman year, I took CS33 to learn about computer architecture. It covers how the CPU executes machine code, including floating point, registers, assembly language instructions, procedures, memory layout, etc.

This is a pretty standard course for most CS schools. The pain of this course is to write assembly code and understand how it converts to machine code. Our (stressful) projects include injecting code to cause stack overflow and defusing “bombs” by examining registers and assembly code.

assembly language vs other languages
Assembly language vs Others

Then I took M151B in my sophomore year, learning about computer architecture in a boarder way. It covers CPU datapath, instruction set design, memory hierarchy, I/O systems, pipelined processors, etc. This course taught me how the CPU actually is designed and perform works.

Last quarter I took CS111 talking about OS. It is more relatable to me than the others above since OS is closer to the software aspect.

CS111 talks about process scheduling, memory management (and virtual), locks, devices & I/O, file systems, virtual machines, etc. This course covers a lot and even mentioned cybersecurity and distributed systems in the end.

I have to say, courses in this part are the hardest for me, but they are essential to understand how computer hardware & software work and interact with each other. It’s the core of computer science by simply understanding the computer itself behind the abstracted interfaces.

Software construction

The only course related to practical software engineering is CS35L. It covers many tools and languages we use in nowadays jobs, including Emacs, Bash, Git, Python, JavaScript, etc.

Our final project is an App that collects students’ reviews on foods in dining halls. We use MERN stack (React Native), which is similar to my previous projects and interns.

Our app pitch deck

This course is a direct guide to software engineering, and I found it as a solid practice for my usual job use.

To sum up, the past two years have taught me a lot about computer science and prepared me to become a software engineer. For the next two years, I’m looking forwards to taking elective courses in particular fields, such as machine learning and computer graphics.

--

--

Jeffrey Yu

Incoming SWE @ Meta | CS @ UCLA | Ex-intern @ Amazon, Paramount | Contributor of Rocket.Chat