Erlang 20 Developer Hiring Guide

Hiring Guide for Erlang 20 Engineers

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

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.

First 20 minutes

General Erlang 20 knowledge and experience

The next 20 minutes of the interview should attempt to focus more specifically on the development questions used, and the level of depth and skill the engineer possesses.

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.

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.

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.

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 are the main features of Erlang?

Erlang has several key features including concurrency, distribution, fault-tolerance, hot code swapping, and a functional programming style.

The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

What youre looking for early-on

Has the candidate shown the ability to work in a team and communicate effectively?

Regardless of technical skills, a good candidate should be able to collaborate and communicate effectively with others.

Does the candidate understand and can implement fault-tolerance in Erlang 20?

Erlang 20 is known for its fault-tolerance capabilities, which are crucial in building reliable systems.

Has the candidate exhibited knowledge of OTP (Open Telecom Platform) principles?

OTP is a set of Erlang libraries that provides useful features for building applications, so understanding it is crucial.

Can the candidate solve complex problems using Erlang 20?

This will show if the candidate can apply their knowledge in real-world scenarios.

Has the candidate shown experience with concurrent programming?

Erlang 20 is known for its concurrent programming capabilities; therefore, the candidate should be familiar with this concept.

Does the candidate demonstrate a deep understanding of Erlang 20's syntax and semantics?

This is essential as it is the basic foundation for any programming work in Erlang 20.

Next 20 minutes

Specific Erlang 20 development questions

The next 20 minutes of the interview should attempt to focus more specifically on the development questions used, and the level of depth and skill the engineer possesses.

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.

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 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 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 are the different types of data types available in Erlang?

Erlang supports several data types including integers, floats, atoms, tuples, lists, maps, and binaries.

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.

A skilled Erlang 20 engineer should demonstrate a deep understanding of concurrent programming, error handling in distributed systems, and real-time system design. Red flags would include lack of knowledge in message-passing concurrency or inability to solve problems using Erlang's functional programming paradigm.

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.

What does the following Erlang code do?

-module(my_module).
-export([my_function/0]).
my_function() -> io:format("Hello, World!~n", []).

This code defines a module named 'my_module' with a single function 'my_function'. The function 'my_function' prints 'Hello, World!' to the standard output. The '-export' directive makes the function available to other modules.

What will be the output of the following Erlang code?

lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1, 2, 3, 4, 5]).

This code uses the 'foldl' function to reduce the list by adding up its elements. The output will be the sum of the elements in the list: 15.

Wrap-up questions

Final candidate for Erlang 20 role questions

The final few interview questions for a Erlang 20 candidate should typically focus on a combination of technical skills, personal goals, growth potential, team dynamics, and company culture.

How would you implement hot code swapping in Erlang?

Hot code swapping in Erlang can be implemented using the code module. You can load a new version of a module using code:load_file(Module) and switch to it using code:purge(Module) and code:load(Module).

What is the difference between ETS and DETS in Erlang?

ETS (Erlang Term Storage) and DETS (Disk Erlang Term Storage) are both storage systems in Erlang. The main difference is that ETS is in-memory and therefore faster, while DETS is disk-based and can store larger amounts of data.

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.

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 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.

The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

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.