Hiring guide for Infer Engineers

Infer Developer Hiring Guide

The first high-level programming language was FORTRAN, created in 1957 by John Backus at IBM. FORTRAN was designed for scientific and engineering applications. Other early languages include COBOL (1959), Lisp (1958), and BASIC (1964). Modern programming languages include C (1972), C++ (1983), Java (1995), and Python (1991).

Ask the right questions secure the right Infer talent among an increasingly shrinking pool of talent.

First 20 minutes

General Infer app knowledge and experience

The first 20 minutes of the interview should seek to understand the candidate's general background in Infer application development, including their experience with various programming languages, databases, and their approach to designing scalable and maintainable systems.

What is your experience with Infer?
I have been using Infer for the past three years, primarily for static code analysis in Java, C++, and Objective-C projects. I have used it to detect potential bugs and null pointer exceptions.
How would you install Infer on a Linux system?
First, you need to clone the Infer repository from GitHub. Then, you need to compile Infer using the script './build-infer.sh java'. After the compilation, you can install Infer by adding it to your PATH.
What are the main features of Infer?
Infer is a static analysis tool that can detect null pointer exceptions, resource leaks, annotation reachability, missing lock guards, and concurrency race conditions in your code.
How would you use Infer to analyze a Java project?
First, you need to build your Java project with Gradle or Maven. Then, you can run Infer with the command 'infer run -- gradle build' or 'infer run -- mvn compile', respectively.
Describe the difference between Infer and other static analysis tools.
Infer uses a technique called separation logic, which allows it to analyze parts of your program in isolation. This makes it more scalable and precise than other static analysis tools.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

What you’re looking for early on

Has the candidate demonstrated a deep understanding of Infer's static analysis capabilities?
Did the candidate show problem-solving skills and logical thinking during the technical discussion?
What level of familiarity does the candidate have with programming languages like Java, C, and Objective-C?
How well did the candidate communicate during the interview?

Next 20 minutes

Specific Infer development questions

The next 20 minutes of the interview should focus on the candidate's expertise with specific backend frameworks, their understanding of RESTful APIs, and their experience in handling data storage and retrieval efficiently.

What are the limitations of Infer?
Infer does not support all programming languages. It also has limitations in handling complex code structures and can produce false positives and negatives.
How would you handle false positives reported by Infer?
False positives can be reduced by refining the analysis parameters, ignoring certain types of issues, or by improving the code structure and practices.
What are the types of bugs that Infer can detect in C++ code?
Infer can detect null pointer dereferences, memory leaks, uninitialized variables, and buffer overflows in C++ code.
How would you integrate Infer with a continuous integration system?
You can integrate Infer with a CI system by adding an Infer step in your build process. The Infer command should be run before the build command.
Describe the difference between Infer's bi-abduction analysis and other types of analysis.
Bi-abduction analysis is a technique used by Infer to infer preconditions and postconditions of functions. It is more precise and scalable than other types of analysis.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

The ideal back-end app developer

What you’re looking to see on the Infer engineer at this point.

At this point, a skilled Infer engineer should demonstrate strong problem-solving abilities, proficiency in Infer programming language, and knowledge of software development methodologies. Red flags include lack of hands-on experience, inability to articulate complex concepts, or unfamiliarity with standard coding practices.

Digging deeper

Code questions

These will help you see the candidate's real-world development capabilities with Infer.

What does the following code do?
let x = 10;
let y = '5';
let z = x + y;
This code concatenates the string '5' with the number 10 to produce the string '105'.
What will be the output of the following code?
let arr = [1, 2, 3, 4, 5];
console.log(arr.map(x => x * 2));
The output will be an array [2, 4, 6, 8, 10]. The map function applies the function x => x * 2 to each element of the array.
What does the following code do?
let arr = [1, 2, 3, 4, 5];
let sum = arr.reduce((a, b) => a + b, 0);
This code calculates the sum of all elements in the array. The reduce function applies a function that adds up the elements of the array, starting from an initial value of 0.
What does the following code do?
let promise = new Promise((resolve, reject) => {
  setTimeout(() => resolve('done!'), 1000);
});
This code creates a new Promise that resolves with the value 'done!' after 1 second. Promises are used for asynchronous programming in JavaScript.

Wrap-up questions

Final candidate for Infer Developer role questions

The final few questions should evaluate the candidate's teamwork, communication, and problem-solving skills. Additionally, assess their knowledge of microservices architecture, serverless computing, and how they handle Infer application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

What are the challenges you might face while using Infer?
Challenges might include dealing with false positives, understanding the output of Infer, and integrating Infer with other tools and workflows.
How would you use Infer to detect concurrency issues?
Infer can detect concurrency issues such as race conditions by analyzing the synchronization primitives in your code. You can enable this feature by using the '--racerd' option.
Describe the difference between Infer's symbolic execution and concrete execution.
Symbolic execution is a method used by Infer to analyze all possible execution paths in a program. Concrete execution, on the other hand, only analyzes a single execution path.

Infer application related

Product Perfect's Infer development capabilities

Beyond hiring for your Infer engineering team, you may be in the market for additional help. Product Perfect provides seasoned expertise in Infer projects, and can engage in multiple capacities.