Becoming a cracked software engineer — a guide for University of Texas at Austin 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 Texas at Austin CS program

The University of Texas at Austin boasts several exceptional CS professors renowned for their research collaborations. Professors like Peter Stone, known for his work in artificial intelligence and robotics, and Vijay Chidambaram, recognized for his contributions to storage systems, are highly sought after for research partnerships. The department also offers outstanding courses such as CS 439 (Principles of Computer Systems), CS 378 (Natural Language Processing), and CS 429 (Computer Organization and Architecture), which are known for their rigorous content and practical applications. UT Austin's strengths in areas like machine learning, computer vision, and distributed systems are reflected in both its faculty expertise and course offerings, making it a top choice for students and researchers alike in computer science.