Software engineering interview preparation

Posted on Monday, May 21, 2018 by TIGRAN SLOYAN

Preparing for a software engineer interview can be a daunting task. Not only do you have to prepare answers on standard questions about strengths, weaknesses, and why you want a particular job, but you also have to demonstrate proficiency in specific skills - you have to prove your coding chops.

This isn’t easy when you don’t know what types of problems you will be asked to solve. “Study everything” isn’t a realistic interview prep strategy. Optimizing time requires narrowing “everything” down to a manageable list. No two job interviews are the same, so there’s no recipe to work from. That said, there are patterns that indicate what type of interview you need to prepare for. That insight can help you figure out what to study.  

Generalist V. Specialist


During the process of building CodeFights, I’ve worked with hundreds of companies on coding challenges. I’ve seen that software engineering job requirements almost always fall into one of two categories: generalist and specialist. Generalist job titles tend to be somewhat generic, like “Junior Software Engineer” or “Software Developer” and the job descriptions tend to emphasize a strong computer science background. In contrast, specialist job titles are much more precise, like “Rails Developer” or “Javascript Software Engineer” and the job descriptions emphasize specific languages and frameworks.

The size of the company can also serve as a clue here. Large companies have enough employees and infrastructure to hire generalists and train them to be specialists or only assign them projects suitable for that skill set. Small companies, meaning those with fewer than 100 engineers, are usually looking for developers who are specialists. These employers tend to hire engineers when they have an urgent, specific need and don’t have enough time or resources to train a generalist to be proficient in their stack.

Knowing which type of role you want to pursue should inform which companies and roles you apply for and how you prepare.

The Generalist Interview


Interviews for generalist positions tend to be fairly standardized. They are usually based on Google's approach of giving a set of algorithmic-type challenges in order to evaluate your grasp of computer science fundamentals. You can expect a lot of questions that test your knowledge of basic algorithms and data structures, and that evaluate your problem-solving skills.

Candidates can prepare for generalist interviews by refining their skills in coding challenges and practicing based on samples of real interview questions. Be prepared for the fact that many generalist interviews still involve white-boarding. It’s a good idea to practice solving questions this way as well, as it’s an entirely different skill than coding in an IDE.

In addition, generalist interviews often involve more abstract system design questions, where you’re asked a high-level question about how you would implement a system or a product. For example, “Design the Twitter feed” or “Design a simple photo sharing app.” The best resource I’ve found for to prepare for these questions is Donne Martin’s System Design Primer. Practice solving some of the question examples from that resource with a more senior engineer, so you can get first-hand feedback on your thinking and explanation process.

The Specialist Interview


When you’re interviewing for specialist roles, the questions are much more domain-specific. They are likely to be tightly focused on a specific need the company has. This kind of interview is hard to prepare for in a short period of time, so it’s best if you already have a strong background in the subject. Most people without an Android development background can’t achieve the necessary skill level to interview for a specialized Android developer role in 1-2 months.

If, on the other hand, you already have basic knowledge and a few practical projects under your belt, you could quickly get yourself up to speed for a Junior Android Developer interview. Play to your current strengths when selecting interesting roles to interview for.

Specialist interviews are much more practical than theoretical. You will likely be asked project-based questions that are specific to the kinds of work the company does. For example, if you are interviewing at an e-commerce startup, they might ask you to: “Implement a chatbot that responds to requests for product names with likely prices and similar product suggestions.” You’d need to call different APIs, process data, and produce an end product, probably in a specified language the company uses in their stack.

The senior engineer interviewing you wants to see clean, scalable, maintainable code. In other words, they want to know that you know what good code looks like and can write good code yourself. This skill is an important one to get right, so concentrate on it when preparing, especially if you’re self-taught or have worked in environments where best practices weren’t emphasized. A sure-fire way to fail in a specialist interview is to write sloppy code.

If writing clean code isn’t your strong suit, start familiarizing yourself with the latest industry best practices, since relying on your own experience might not be enough on its own. A good strategy is to look at code reviews, comments, and structure in well-known, mature open-source projects in your field. Going through the GitHub repos is a great way to learn best practices and see how your own work shapes up.

Resources


Many companies have a coding style guide available on GitHub with their guidelines, so if the company you're interviewing with has one, it obviously makes sense to study it. If they don’t have one, study a big company’s style guide that will be relevant to the specialty you’re interviewing for. The Airbnb JavaScript guide is a great one.

For specialty-specific open source projects,  check out Meteor if you’re going for a NodeJS role. If you want to prepare for an iOS development position, take a look at the Firefox for iOS repo. If you’re a front-end developer, use the Picked Pens on CodePen to get a sense of how experienced designers write and organize their code.

Mock interviews are also a valuable tool to work on explaining technically difficult concepts to strangers, coding while people are watching you, and coding and talking at the same time. There are meetup and study groups devoted specifically to doing mock interviews, or you can ask a more experienced engineer to help you.

Preparing for a technical interview is almost like a full-time job, so allocating your time to have the maximum impact is key. Putting in the time to prepare can pay off in a big way if you do it right.

More App Developer News

Sidewinder telescope accessory mounting rings from Rouz Astro



Draco 62 quintuplet imaging refractor telescope from Founder Optics



PS Align Pro and Xasteria Weather app updates



Social engineering takeover attacks are on the rise



Epic Games defeats Google in court



Copyright © 2024 by Moonbeam Development

Address:
3003 East Chestnut Expy
STE# 575
Springfield, Mo 65802

Phone: 1-844-277-3386

Fax:417-429-2935

E-Mail: contact@appdevelopermagazine.com