Hiring guide for Erlang 20 Engineers

Erlang 20 Developer Hiring Guide

Erlang 20 is a robust computer programming language, developed by Ericsson in the 1980s for telecommunication systems. It is renowned for its concurrency, fault tolerance, and distribution, making it ideal for real-time systems. The language's name was derived from Agner Krarup Erlang, a Danish mathematician and engineer known for his work in the field of telecommunications. Erlang 20, specifically, introduced new features such as a new way of handling literals and improved performance for large maps. This information is sourced from the official Erlang documentation and historical records from Ericsson.

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

First 20 minutes

General Erlang 20 app knowledge and experience

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

What are the main features of Erlang?
Erlang has several key features including concurrency, distribution, fault-tolerance, hot code swapping, and a functional programming style.
How would you create a process in Erlang?
You can create a process in Erlang using the spawn function. For example: Pid = spawn(Module, Function, Args).
What is the role of OTP in Erlang?
OTP (Open Telecom Platform) is a collection of middleware, libraries and tools in Erlang. It provides a framework for developing robust, fault-tolerant, distributed applications.
Describe the difference between lists and tuples in Erlang.
Lists are used when the number of elements is not known in advance or can change over time, while tuples are used when the number of elements is known and fixed.
How would you handle errors in Erlang?
Erlang follows the 'let it crash' philosophy for error handling. It uses a system of process supervision where processes monitor each other and handle errors when they occur.
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

Does the candidate demonstrate a deep understanding of Erlang 20's syntax and semantics?
Has the candidate shown experience with concurrent programming?
Can the candidate solve complex problems using Erlang 20?
Has the candidate exhibited knowledge of OTP (Open Telecom Platform) principles?

Next 20 minutes

Specific Erlang 20 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 different types of data types available in Erlang?
Erlang supports several data types including integers, floats, atoms, tuples, lists, maps, and binaries.
How would you implement recursion in Erlang?
Recursion in Erlang can be implemented by having a function call itself. For example, a factorial function can be implemented as: factorial(0) -> 1; factorial(N) -> N * factorial(N-1).
What is pattern matching in Erlang?
Pattern matching in Erlang is a powerful feature where variables are bound to values and complex data structures are deconstructed. It is used extensively in function definitions, case expressions, and assignments.
How would you send and receive messages in Erlang?
Messages in Erlang are sent using the ! operator and received using the receive construct. For example: Pid ! Message to send a message and receive Message -> ... end to receive a message.
What is the role of a supervisor in Erlang/OTP?
A supervisor in Erlang/OTP is a process which monitors other processes, known as its children. It can restart them if they terminate abnormally, providing fault-tolerance.
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 Erlang 20 engineer at this point.

At this point, a skilled Erlang 20 engineer should demonstrate strong problem-solving abilities, proficiency in Erlang 20 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 Erlang 20.

What does the following Erlang code do?
io:format("Hello, World!~n", []).
This code prints the string 'Hello, World!' to the standard output.
What will be the output of the following Erlang code?
lists:reverse([1, 2, 3, 4, 5]).
This code reverses the list of integers. The output will be [5, 4, 3, 2, 1].
What does the following Erlang code do?
lists:map(fun(X) -> X*X end, [1, 2, 3, 4, 5]).
This code applies the anonymous function (which squares each element) to each element in the list. The output will be a list of the squares of the original list: [1, 4, 9, 16, 25].
What does the following Erlang code do?
spawn(fun() -> io:format("Hello, World!~n", []) end).
This code spawns a new process that prints 'Hello, World!' to the standard output. The spawn function is used for creating new processes in Erlang.

Wrap-up questions

Final candidate for Erlang 20 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 Erlang 20 application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

How would you implement a gen_server in Erlang?
A gen_server in Erlang can be implemented by defining a module that exports the required callback functions such as init/1, handle_call/3, handle_cast/2, and handle_info/2.
What are the different types of schedulers in Erlang?
Erlang has two types of schedulers: CPU schedulers and IO schedulers. CPU schedulers run Erlang processes while IO schedulers handle IO tasks.
How would you handle distributed computing in Erlang?
Erlang has built-in support for distributed computing. You can spawn processes on remote nodes using spawn(Node, Module, Function, Args) and send messages to them just like local processes.

Erlang 20 application related

Product Perfect's Erlang 20 development capabilities

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