Becoming a cracked software engineer — a guide for University of California, Los Angeles (UCLA) students

Become good at programming

Your journey begins with a solid understanding of basic programming. While there’s much debate over which language is the best, the key is to start with one language and dive deep into its foundational concepts. Focus on understanding conditionals, functions, objects, recursion, data types, and data structures.

Don’t get caught up in language wars; instead, concentrate on mastering these basics, which will serve as the building blocks for your future learning. Avoid resources like “Learn X in Y minutes“ and start with a video or a blog and try to first go wide, and then go deep into those topics.

Algorithms & Data Structures

Algorithms and data structures are the backbone of software engineering. A solid grasp of these topics is crucial not only because they are frequently covered in technical interviews but also because they equip you with the basic blocks needed to solve complex problems efficiently. Enroll in a comprehensive algorithms and data structures course early in your CS program to build a strong foundation.

Gain a Deep Understanding of Databases

Every software engineer interacts with databases, whether it’s through SQL queries or using APIs to manage data. However, to truly excel, go beyond just using databases—learn how they work internally. Understanding database internals, such as how PostgreSQL operates, will give you an edge in designing efficient systems. I’ve found resources like CMU’s DB courses invaluable for deepening my database knowledge.

Explore Operating Systems

Operating Systems (OS) form the underlying layer that supports much of the software you’ll develop. A good OS course will teach you about the principles that underpin databases, compilers, and low-level programming. I personally learned OS by reading Three Easy Pieces and various research papers on virtualization.

Learn System Design

As you progress in your career, you’ll often be required to design systems that can scale. A basic introduction to system design is crucial for understanding how to build applications that can handle increasing loads without performance degradation. For example, designing a cloud storage product that scales from 10 to 10,000 users involves rethinking your initial design. The Dropbox talk on system design is an excellent starting point.

Sharpen your tools

In addition to learning programming languages and concepts, it’s essential to sharpen the tools you’ll use daily as a software engineer:

  • Learn your IDE inside out, but don’t rely too much on code autocompletion.
  • Use a debugger effectively to find and fix bugs.
  • Learning VIM
  • Get comfortable with the terminal to speed up your workflow.
  • Utilize AI tools like ChatGPT to accelerate trivial coding tasks.

The less time you spend on the mechanics of typing, the more time you can spend solving problems and writing clean code. Over time, these small optimizations can make a big difference in your workflow.

Follow Your Curiosity

While structured learning is important, don’t forget to pursue topics that spark your interest. Whether it’s machine learning, kernel development, IoT, or something else entirely, following your curiosity can lead you to discover new passions and specializations within software engineering. Create your own learning path and stay committed to it.

Some pointers for University of California, Los Angeles (UCLA) CS program

UCLA boasts several distinguished CS professors known for their groundbreaking research and mentorship. Professor Jens Palsberg is renowned for his work in programming languages and software engineering. Professor Miryung Kim is highly regarded for her expertise in software engineering and program analysis. Professor Sriram Sankararaman is acclaimed for his research in computational biology and machine learning. As for courses, UCLA is particularly known for its strong offerings in artificial intelligence, machine learning, and computer graphics. The university's "Introduction to Computer Science" course (CS 31) is highly regarded, as are advanced courses like "Machine Learning" (CS 161) and "Computer Vision" (CS 188). UCLA's blend of esteemed faculty and comprehensive curriculum makes it an excellent choice for CS students seeking quality education and research opportunities.