Software engineering can be an incredibly rewarding career. But without the right preparation, it can be difficult to get the software engineering job you have in mind. I learned this, as I was taking computer science courses in college to land a software engineering (SWE) role.
I have interviewed for a dozen software roles at most of the tech companies you can name: Google, Apple, Microsoft, and startups (at the time) like Snapchat and Uber. Here I summarize my learnings, from my job preparation and interview experiences, to help prepare you on your journey in the world of software engineering: from brainstorming which companies to apply to, sending a cold message to a recruiter on LinkedIn, perfecting your resume, how the interviews typically look like, and which computer science topics to study.
This is the only guide you need to land an entry-level software engineering job.
Applying to Companies
Many big companies hire entry-level engineers. Usually, these are generic new grad roles (you're not interviewing to specifically be an iOS developer). Don't discount non-tech companies either. Every industry is looking for tech talent, and tech is shaking up every field in exciting ways.
You can find these roles either at your college's career fair by speaking to a recruiter, or by Google-ing these keywords: company name + university careers.
If you're not a student, but rather transitioned into tech either via a coding boot camp or by teaching yourself to code, this is also a good place to start. There are often entry-level jobs posted alongside these student jobs. However, if you're making a mid-career transition, you may need to do a bit more networking (through friends, events, or cold messaging recruiters).
Here are some ideas for where to start looking:
- Big tech (Facebook, Apple, Amazon, Google, IBM, Cisco)
- Tech startups (Snowflake, DoorDash)
- Finance (Goldman Sachs, Visa, Robinhood)
- Entertainment (Disney, Viacom)
- Retail (Macy's, Target, Walmart)
- Defense/Aerospace (Boeing, Northrop Grumman)
The Perfect LinkedIn Cold Message
Inevitably, there will be companies who don't get back to you even after you've directly applied. To try to get the ball rolling, try to network your way to an interview. This could come either in the form of reaching out to those in your network (alumni or friends) or reaching out to the recruiters themselves.
These are my 5 rules to a LinkedIn cold message:
- See if a mutual connection can introduce you - People are less likely to ignore those who they already know.
- Keep it succinct - People are busy. Don't give them an excuse to partially read your message before discarding it.
- Find common ground - If you both went to the same school or worked at the same company, bring up that fact to elicit familiarity.
- Be direct - Don't beat around the bush by trying to make small talk. This is not the place for that.
- Show credibility - If you have relevant experience, say so. If you have particular insights, give them a taste.
Here is a LinkedIn cold message template to get you started:
Hey, very interested in joining [company/team] and seeing if there is a mutual fit! I'm a former [role] @ [company]. [Why they should chat with you]. Would love to chat.
Hey, very interested in joining Roblox and seeing if there is a mutual fit! I'm a former PM @ Rockstar Games. Love the concept of unstructured social play. Would love to chat.
Writing a good resume is an art form, which comes down to two things: format and content.
The biggest mistake people make with the format is adding too much information, with the resume ending up being two or even three pages. That is unnecessary. Keep it simple. Your resume should be one page only. Use italics and bold formatting strategically; they should really only be used to help the recruiter or hiring manager to understand who you are and what you bring to the table (eg. using it to bold sections and company names only).
When it comes to content, make sure that you say more by saying less. Cut the fluff and use quantitative figures instead. Numbers will provide hard evidence of your contributions. Try to focus on your hard skills. There is no need to unnecessarily tell the recruiter that you are a great team player, a visionary, or a hard worker. Anyone can say this. Instead, show through action how you have helped your team.
For more information, check out this checklist to make sure your software engineering resume is polished and ready.
A Typical Interview
From my experiences, the process for software engineering interviews is more or less the same at every company, whether it's Google or a small startup that just raised its series B. This is what you can reasonably expect in the interview process.
The behavioral round typically is done over the phone with a recruiter or the hiring manager for the role. In this conversation, the company wants to figure out if you would be a good fit for the role, both based on your experiences as well as your ability to communicate (and for them to gauge if you might be a problematic person to work with). Be well versed in your resume, as it's likely the recruiter or hiring manager will ask you about the experiences listed on your resume in this conversation.
- More behavioral questions: https://www.tryexponent.com/courses/software-engineering/common-behavioral-questions
After the behavioral interview, you may get a coding challenge to complete on your own time. This could mean getting a list of requirements and a skeleton code. You would then be asked to complete the code and submit it after completing the code in your own environment.
More commonly, companies have been using Hackerrank (or tools like that). This is an online, browser-based coding environment. I suggest signing up for an account and practice using it as you prepare for interviews, to get familiar with the environment.
In some instances, companies may want you to complete the coding challenge first before they even call you for the behavioral round. This is because they may have a lot of candidates at the top of the funnel, and they have some automated way to filter out candidates whose code does not pass enough test cases.
- Try this "difference of arrays" problem: https://www.tryexponent.com/courses/software-engineering/difference-of-arrays
You may encounter anywhere from 1 to 3 phone interviews. These are typically about data structures and/or algorithms.
Typically, you'd get a sharable document link (such as Google doc or CodePen). With these, both you as well as your interviewer would be able to see what you're typing in real-time. You'd be presented with a coding problem and as you write your code, the interviewer will be able to see your progress.
Be prepared to implement common data structures and algorithms. Study easy/medium Leetcode questions.
You should always give the naive solution first. As software developers, we always want to write the most optimal code. But in an interview, it's possible time may run out before you finish your optimal solution. You'll at least earn some points in the interview if time runs out as you're writing your optimal solution, but you already presented the brute force/naive code.
Sometimes, you will face system design questions in these phone interviews as well.
- Practice designing Reddit's architecture: https://www.tryexponent.com/courses/software-engineering/design-reddit
The questions in your on-site are similar to your phone interview questions. If you've made it this far, give yourself a pat on the back. You're almost there! In this final round, you will likely be coding on a whiteboard -- so practice doing that before coming into the interview (a few companies like Snapchat may let you/ask you to bring your own laptop to code on-site).
There is also typically a lunch round where you get to have lunch with the team.
What to Study
Be very comfortable coding both in a development environment as well as on a white board. Here I will detail the coding topics you should study.
These questions will come up in your initial phone call, but as you go through the interview process, it's inevitable these questions will come up again (eg. during lunch in your on-site). Try to be succinct, speak confidently (ending your sentences with a downward inflection in your tone) and eliminate filler words (uh, um, like) from your vocabulary.
- Tell me about yourself.
- Why software engineering?
- Tell me about a time you made a mistake.
- Tell me about your project, x, and what you contributed.
From my experience, companies allow you to code in whichever language you feel most comfortable with. In my college computer science courses (at UCLA), we were all taught C++. However, I did all my interviews in Java or Python. I found it very easy to pick up other languages once I got familiar with its syntax.
I would suggest asking the recruiter or hiring manager if the interviews require any specific language. Otherwise, go with the language that you're less likely to make errors with.
Be familiar with coding questions around these data structures. Also be familiar with tradeoffs, as well as time and space complexity for each.
Be familiar with coding questions involving these algorithms. Also be familiar with tradeoffs, as well as time and space complexity for each.
Depending on the role and company, you may also be asked bit manipulation problems.
Thankfully, there exists a plethora of online resources to help you on your journey. These are the ones I recommend.
A majority of your coding questions can be found on Leetcode. If you become very good at these whiteboard questions, you should be ready. Be prepared for easy/medium questions, but try the more difficult questions as well -- especially as you advance to on-site rounds.
Exponent's Software Engineering Interview course is the only course you need. It has guided articles and videos to help you refresh your knowledge/relearn the data structures and algorithms you need for your interview -- all in one place. Plus, Exponent's added a comprehensive system design interview course for some of the tougher system design questions.
GeeksforGeeks has the best solutions for coding questions. For most of the interview questions, you may face, GeeksforGeeks not only shows you the naive implementation but also an optimized solution as well as time and space complexity.
This Reddit page (subreddit), r/CSCareerQuestions, is a community of aspiring and experienced software engineers. You may use this to read up on others' experiences interviewing at specific companies or to ask questions yourself. A word of caution: members of this subreddit are very obsessed with company prestige and compensation. It's good to aim for the top big tech FAANG companies, but always remember to be grounded -- there's a world outside of tech!
Many people choose software engineering as a career for one or more of many reasons. You may want to become a software engineer because you like building things. Or maybe you're inspired by how technology is changing the world. Or perhaps you just want a solid career path with good earning potential (nothing wrong with that!).
Have a consistent study schedule (eg. do 1 Leetcode question every other day) and stick to it.
As you work on your interview prep, Exponent is always here to help as needed. If you need a refresher, the one resource I'd recommend is the Software Engineering Interview Course, which was put together by software engineers who worked at some of the top tech companies in the industry.