Software engineering interview preparation
|Tigran Sloyan in Developer Jobs Monday, May 21, 2018|
How to prepare for a software engineering job interview so employers can see your developer skill set more clearly, and you don't look like a junior developer.
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
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.
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.
Learn the best ways to organize your app development projects, and keep code straight, clients happy, and breathe a easier through launches.
Write and run code every step of the way, using Android Studio to create apps that integrate with other apps, download and display pictures from the web, play sounds, and more. Each chapter and app has been designed and tested to provide the knowledge and experience you need to get started in Android development.
How to create a profitable, sustainable business developing and marketing mobile apps.
This content is made possible by a guest author, or sponsor; it is not written by and does not necessarily reflect the views of App Developer Magazine's editorial staff.