Becoming a cracked software engineer — a guide for University of Florida 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 Florida CS program
The University of Florida boasts several outstanding CS professors renowned for their research collaborations. Dr. Juan Gilbert, known for his work in human-centered computing, and Dr. My T. Thai, an expert in network science and optimization, are particularly esteemed. Dr. Arunava Banerjee's expertise in machine learning and Dr. Sanjay Ranka's contributions to data science make them sought-after research mentors. UF is known for its exceptional courses in Artificial Intelligence, Data Science, and Computer Networks. The university's pioneering work in AI through its AI Initiative has led to cutting-edge courses in machine learning and deep learning. Additionally, UF's strong emphasis on cybersecurity is reflected in its highly-regarded courses on information security and cryptography.