What I wish I knew before my first semester
1) Use MacOS or Linux
You will thank me later. If you can afford a MacBook, get one. If you can’t, dual-boot Linux. Linux sounds scary at first, especially when you’re unfamiliar with it. But incorporating a Unix terminal, package manager (i.e. how you download software), and general software tooling into your everyday workflow has untold value.
I’m sure Windows works for some programmers. But with MacOS and Linux, everything coding-related is a first-class citizen. MacOS just works. Linux requires a bit of setup, but works great for coding. That said, with Linux you’ll want to dual-boot with Windows (using Linux as your primary OS) since there might be a few programs that only work on Windows.
2) Teach Yourself a New Language
If you’re new to coding, focus on the language taught in your introductory courses. Many intro courses use Java or C++ which are great for learning how computers work under the hood. But after your first or second semester, try learning a programming language on your own. Not worrying about what “public static void main (String args)” means, what a segfault is, or how to manage memory is freeing 😉. Some suggestions:
- Python: It’s beginner-friendly with libraries for just about everything. Building a neural net, web scraper, or basic terminal application is often as simple as importing a library and writing a few lines of code.
- Kotlin / Swift: If you’re hankering to build a mobile app, Kotlin is great for Android apps and Swift for iOS apps.
3) Do Coding Projects
College can’t teach it all. In a similar vein to learning a new language, learning how to actually build something is valuable. Being a well rounded software engineer requires experimenting with technologies. Try to reserve a few hours weekly for a personal coding project.
Doing this fills the gaps in your curriculum. It also lowers the barrier to entry for learning a topic from taking a course down to 10–20 hours of freetime. The project you work on might even guide you to take an elective course you wouldn’t otherwise have taken. On top of all that, it demonstrates your initiative, proactivity, and ability to learn.
4) Use Your Summers
You only have 3 summers before graduation. Make use of them! What’s the key to getting software internships? Being good at coding interviews. I failed more coding interviews than I can count. It’s cheesy, but I bought a copy of Cracking the Coding Interview and paid for an annual Leetcode membership to force myself to improve. That $150 paired with weeks of practice paid for itself many times over.
That said, it’s not the end of the world if you don’t get an internship your first or even second summer. Work experience is an investment; it compounds over time. Even if you can’t land a software internship, try finding a position that points you in the right direction. Look for opportunities that could (at least part-time) expose you to working on a website, scripting, or automation. Dipping your toes in the water will teach you a lot and make you more marketable. My summers looked like this:
- Summer 1: Studied abroad (irrelevant for job hunting).
- Summer 2: Every software internship rejected me. So, I took a local part-time programming job at $15/hr. I got to program scientific simulations in Python.
- Summer 3: Every software internship rejected me (again). So, I took an IT internship at $22/hr. Since it was in the IT department, one of the three projects I worked on was a mobile app.
- College Grad: My part-time programming job, IT internship, and degree landed me a full-fledged software engineering role.
You’ll encounter a lot of challenges while getting a degree in Computer Science, but immersing yourself (even outside of school) will make it more engaging. There’s a lot to learn, so finding what you enjoy / excel at through experimentation is the best path forward.
- For first-time dual-booters, I recommend Ubuntu. It’s vanilla Linux, user friendly, and not Windows.
- I’m following the Software Engineering career path. If you’re leaning toward graduate school, research, or founding startups, your path might look different than mine.
- Okay, I cheated a little bit… I was a Computer Engineering major. It’s close enough to Computer Science, I swear!