This book is for informational purposes only. Except when an external source is cited, everything in the book is the author’s opinion. The author makes no guarantee about the correctness or accuracy of any content in this book. Furthermore, you may disagree with and/or find certain content offensive.
Read at your own risk. Do not continue reading if you do not accept full responsibility for all actions you take as a result of reading this book. The author is not liable for any damages including, but not limited to, academic failures, career path mistakes, financial loss, feeling upset, and physical/mental injury.
Junior year is the time to solidify your experiences. You want to build the best possible resume so that you enter senior year as a strong candidate for full-time jobs. Achieve this by building a solid base of academic electives and interning at a high-reputation company.
If you’ve been following the advice from previous chapters, then by junior year, you should have completed most core requirements for your computer science major. You now have a full school year to dedicate to electives. While you had to prioritize a few electives to take in your sophomore year, you’ll have room for five or more in your junior year. You’re free to choose your courses as you see fit and should prioritize the ones most relevant to the career specialization you desire. After you’ve exhausted those relevant courses, here are my top recommendations in terms of real-world relevance.
These first four electives are so ubiquitous and fundamental that everyone should take them at some point.
Operating Systems. Your operating systems course covers the fundamentals of how computers work. How does your computer transcend from a slab of metal to all the magical things appearing on your screen? Whether or not your degree requires this course, you should take it.
Machine Learning. Machine learning is part of nearly every device you use and every website you visit. Since applications of machine learning are everywhere, you should definitely study it. The course can be math-heavy though, so be prepared for a lot of theory. Some universities also offer a Data Science course, which is a less-intense alternative.
Web Development. Just like machine learning, the internet is also ubiquitous and will never go away. Learning how to create a simple website is a fundamental that software engineers should know.
Mobile Apps. As with the internet, mobile devices have also propagated everywhere. Knowing how to create a simple app is also a fundamental that software engineers should know.
These courses are less common, but if they’re available at your university and taught by a decent professor, then you should take advantage of the offering.
Computer Networking. Computer networking is the sibling of operating systems. How do computers link together and create something as big as the internet? Like operating systems, this course greatly expands your understanding of how computers work.
Distributed Systems / Cloud Computing. This course provides insights into another ubiquitous technology. Nearly everything operates as a distributed system. Your email is hosted in the cloud, the website you visit is served by one of many machines, and even your word documents might be stored across several computers.
Databases. A databases course exposes you to the backbone of every organization and application. Companies and software would be ineffective without data and there’s an entire field dedicated to managing and storing data.
Getting an internship your junior summer is a must. A majority of computer science students have at least one internship in college, so not getting one puts you at a severe disadvantage compared to other candidates. Do whatever you must to get a software engineering internship on your resume.
Leetcode is the best preparation for the internship search. Spend your free time working on Leetcode problems. If you were spending one hour per evening before, try spending two or three hours. At the very least, be able to consistently solve medium problems and get through some hard problems. By junior year, mastering Leetcode should be your top priority.
Nothing in your junior year internship search should come as a surprise. You need to search for internship positions, network for referrals, and do well in the interview process.
Make your company list in late July or early August before your junior year starts. Pick a wide range of companies and industries to diversify your opportunities. Make sure you apply to some high-prestige companies such as Google or Facebook. Even if you feel you may be outmatched by other candidates, you don’t lose anything from filling out an application and submitting your resume.
If you’re like most people and care about compensation, use Glassdoor and Levels.fyi to determine how much different companies pay for entry-level software engineers. Most of the time, higher prestige means higher pay, but there are a few exceptions. You can use full-time compensation data to add, remove, and prioritize companies on your list.
Start your junior year internship search in mid-August. Internships fill on a rolling basis, so start before everyone else. Check job portals everyday and the moment you see an internship position at a target company appear, apply for it.
Make full use of your network and apply the techniques from chapter 17. If you have friends interning at companies where you want to work, ask them if they can enter you into their referral system while they are still interning at the company. If they can’t, see if they can connect you with their recruiter or anyone else in the company. Put on your thick skin and don’t worry too much about being bothersome. You just need to succeed once and you’ll never have to annoy them again.
In addition to getting an internship, be selective about where you intern. Your junior summer company’s prestige affects the quality of your full-time job opportunities. Having a high-prestige name on your resume gives your profile a boost and makes you more likely to land an interview for a full-time job. And if you do well on your interviews and get multiple full-time job offers, having a strong return offer from your junior summer company serves as leverage to boost your other offers.
As a baseline, prefer a top-paying high-prestige tech firm for your junior summer internship. Names like Amazon, Apple, Facebook, and Google are respected everywhere and they also give excellent full-time job offers to new college graduates. If you get one of these companies on your resume, you’ll be a competitive applicant at most other companies.
If you’re certain that you want to join a particular industry or company full-time, then focus on getting an internship there. For example, if you absolutely want to work on cryptocurrency, then apply to as many cryptocurrency firms as you can. For backup, also apply to a few large tech firms in case you don’t get any offers at your top-choice firms.
Finally, if you don’t feel strong about your qualifications, apply to plenty of middle-of-the-road tech companies. The interviews at middle-of-the road are easier to pass. As long as you get noticed and invited to interview, you have a good shot. But just in case you underestimate yourself, apply to all the high-prestige tech firms as well — you never know.
Your junior summer internship follows the same guidelines as all other internships. Review the previous chapter if you need a refresher on how to navigate your internship. Strive to do the best work possible during your internship because getting a return offer greatly eases your senior year job search pressure.
Time doesn’t wait for you and before you know it, junior and senior year will be upon you. If you’re ready for all the networking and technical interviews, then you’ll have a good shot at a top-tier company with high impact and immense growth. If you aren’t ready, that’s also fine. You’ll probably end up at a middle of the road software company and that still pays better than the majority of people who study something other than computer science. No matter how prepared you are, relax and be confident knowing that armed with your computer science degree, you’ll end up fine.