Job Searching for New Grads and Interns

Here are my thoughts on getting software engineering jobs/internships as a college student. Most of this advice is tailored towards FAANG-type companies, but much of it will apply to other places as well.

Let's first go over the general hiring process for Big Tech companies. First they look at your resume; most (maybe ~90%) resumes are rejected at this point due to lack of experience or being a bad match. This is the most luck-dependent step of the process! Then there's the phone interview step, where they give you a few relatively easy interview questions and/or something like HackerRank. This weeds out a surprisingly large number of people, either due to the inability to code or inability to communicate. Finally, there's the onsite stage (which may be online post-COVID): you get a full day of interviews, technical and behavioral. Another small proportion finally gets the offer. So how do you get past each of these steps?

Getting through the application pile

Make sure your resume is good. You want quality over quantity: tailor your resume to the specific jobs you want, rather than just a generic one (try tracking it with Git!). Find a job at a company that you actually want to go to and look at the position that they want to hire. Make sure that your resume has keywords that match what the job posting is looking for!

Oftentimes, the person reviewing your resume does not have software engineering experience, and will be spending less than 1 minute reading your resume. With the large quantity of resumes for each job posting, this means your resume needs to make an impression quickly: keep it to one page, highlight the key facts, and have memorable subheadings with specific details below.

If you don't have much experience, there's not much you can do, unfortunately. I would recommend looking for ways to fill out your resume. A low-competition job could work: it'll pay less, but the pool of applicants is much smaller. Alternatively, you can try working on a project that you have personal interest in. Make sure that your project is sufficiently difficult, and that you're learning something from it!

Preparing for the interviews

Let's say that you just got scheduled for your first phone screen for a new grad position from a FAANG company (or any other company following standard FAANG interview style). How do you prepare?

The first advice I'd give is to ignore the rest of this and just read a real book for preparing. Elements of Programming Interviews (EPI) is my recommended book, as it provides a comprehensive guide, with questions and answers available on github. Use Leetcode as your other primary resource for all practicing purposes.

From my experience, the most useful way to approach studying for the coding interviews is to be familiar with the common patterns that you may be asked. Some examples of these patterns includes algorithms for dynamic programming, tree traversal, and greedy algorithms. Hopefully you've taken an algorithms class beforehand so that you're familiar with these concepts. If not, EPI should be a good brief guide.

When you're going through the problems on Leetcode and EPI, keep this in mind: The goal is not to memorize solutions, but to recognize the patterns behind each problem and to know how to apply a solution. For example, you should be able to look at a problem, recognize that it's solvable by dynamic programming, then try to figure out what the sub-problem is and what information needs to be saved.

I would focus less on getting the syntax correct (is it foo.length() or len(foo)?). In real life, you can search the internet for that. What matters more is your chain of logic and ability to communicate your reasoning. Be able to walk through your code, model it running in your brain, and think of the edge cases! Also: It's better to have a complete but less-efficient solution than a half-complete optimal solution. Once you feel almost ready, practice your interviewing skills by having a friend give you a mock interview.

Interviewers want to be able to evaluate your coding ability. They don't want you to be completely stuck. Listen to their hints if you're getting stuck, or ask for a hint. If you're really stuck, it may be OK to just start from scratch and think about the fundamentals of the problem. And one final thing: interviews are never consistent! Sometimes you'll get unlucky with a cruel interviewer, an unusually difficult problem, or maybe you just had a bad day. The only thing you can do is to do more interviews, and practice as much as you can. Don't feel too bad about failing on any particular day.

The other type of interview you'll likely encounter is the behavioral interview. In my opinion, these are the most straightforward to prepare for. You'll typically be asked a variation of questions like "When did you have a conflict with your teammates, and how did you resolve it?". Prepare a scenario for these questions! You can write down an answer beforehand and/or just memorize it. There's no exact correct answer, but your answer should demonstrate that you're pleasant to work with and that you're proactive in your work. If you read the common questions and prepare, you should be able to adjust your answers for anything they throw at you.

Congratulations on your job offer. Now that the hard part is over, you're in an excellent position where you can easily earn $10k+ in exchange for just a few emails or phone calls. If you want a comprehensive discussion on negotiating salary, see patio11's writing and/or this post. Don't immediately sign an offer before thinking thoroughly about it!

Look at levels.fyi to know what the average compensation looks like for your location and experience level. Ideally, you should try to get multiple offers so that you can negotiate better with the recruiter. Schedule your final interviews close to each other to maximize this chance! Even without multiple offers at hand, you should easily be able to request an extra $10-20k bonus at the large FAANG companies, or a larger grant of RSUs: "Hi $RECRUITER, I'm in the process of interviewing with $OTHER_COMPANY but I'm happy to commit to $COMPANY if you can give me X...". There is no downside in asking! If you do have multiple offers, you should absolutely try to negotiate harder.

Choose your job not only based on the total compensation - consider how much you'll actually want to work at the company. You should always talk to your future manager before accepting a role! Keep an eye out for red flags, such as poor work life balance, or lack of interesting projects. If you ever have an interview with someone on the team, ask them these questions. An interview isn't just a one-sided request. Remember: you should enjoy working with them.

Of course, this is coming from a position of privilege if you have this sort of choice. If you don't get a FAANG offer, there is nothing wrong with taking what's available. Try working for a year or two and be ready to job hop. The first job you get is always a great boost to your resume, and finding a second one is always easier than getting the first.

Good luck!

Thoughts? Leave a comment