Erlang 22 Developer Hiring Guide

Hiring Guide for Erlang 22 Engineers

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

Erlang 22 is a general-purpose, concurrent, functional programming language and runtime system developed by Ericsson in the late 1980s to build robust telecommunication systems. It was named after Agner Krarup Erlang, a Danish mathematician known for his work in queueing theory. The language was open-sourced in 1998 and has since been used extensively for building massively scalable real-time systems with high availability requirements (source: "The History of Erlang", Armstrong et al., ACM SIGPLAN). Notable features of Erlang include its support for hot swapping, where code can be changed without stopping a system; lightweight processes; and built-in support for concurrency, distribution and fault tolerance. As per the official documentation from erlang.org, version 22 includes enhancements to the garbage collector as well as new features such as improved logging capabilities.

First 20 minutes

General Erlang 22 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.

Describe the difference between lists and tuples in Erlang.

Lists are used when the number of elements is unknown or can change, 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 encourages the creation of supervision trees to manage and recover from errors.

What are the advantages of using Erlang?

Some advantages of using Erlang include its fault-tolerant nature, support for hot swapping, highly efficient garbage collection, and support for distributed computing.

How would you describe the concurrency model of Erlang?

Erlang uses a lightweight process concurrency model. It allows for the creation of thousands of processes that can run concurrently, with built-in support for communication and synchronization.

What is the main use of Erlang?

Erlang is primarily used for building scalable and maintainable applications. It is especially good for building distributed, fault-tolerant, soft real-time concurrent systems.

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

Can the candidate demonstrate problem-solving skills and the ability to think algorithmically?

These skills are crucial for any programming role. They indicate that the candidate can effectively tackle complex problems and implement efficient solutions.

Is the candidate comfortable with functional programming paradigms?

Erlang is a functional programming language. Comfort with functional programming paradigms indicates that the candidate can write clean, efficient, and maintainable Erlang code.

Does the candidate have experience with OTP (Open Telecom Platform) which is a set of Erlang libraries?

OTP is a crucial part of Erlang's ecosystem. Experience with OTP shows that the candidate can build complex, production-ready applications.

Can the candidate articulate how they have used Erlang's fault-tolerance features in previous projects?

Erlang is known for its robust fault-tolerance capabilities. A candidate's ability to leverage these features shows a deep understanding of the language and its strengths.

Has the candidate worked on projects that involved concurrent programming?

Erlang is a language designed for concurrent programming. Experience in this area indicates that the candidate can effectively handle tasks that involve managing multiple processes at once.

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

This is crucial because it shows that the candidate has a strong foundation in Erlang 22 and can effectively write, debug, and optimize code.

Next 20 minutes

Specific Erlang 22 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.

How would you implement a distributed system in Erlang?

Erlang provides built-in primitives for building distributed systems. This can be done by creating multiple Erlang nodes and using message passing for communication between these nodes.

What is the role of OTP in Erlang?

OTP (Open Telecom Platform) is a set of libraries and design principles in Erlang. It provides tools to build reliable and high-availability systems.

What are ETS tables in Erlang?

ETS (Erlang Term Storage) tables are in-memory databases provided by Erlang. They can store large amounts of data and provide constant time access.

How would you implement a server in Erlang?

In Erlang, servers can be implemented using the gen_server behaviour module. This provides a generic server functionality for implementing servers in a concurrent environment.

What is tail recursion in Erlang and why is it important?

Tail recursion is a feature in Erlang where the recursive call is the last operation in the function. It is important because it allows the Erlang runtime system to reclaim memory used by the function call stack, making recursion more efficient.

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 22 engineer at this point.

At this point, a skilled Erlang 22 engineer should demonstrate proficiency in concurrent programming, fault tolerance, and distributed systems. They should also show experience with OTP design principles. Red flags would include difficulty explaining complex concepts or lack of practical experience.

Digging deeper

Code questions

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

What does this simple Erlang code do?

io:format("Hello, World!~n", []).

This code prints 'Hello, World!' to the standard output.

What does this Erlang code do?

lists:map(fun(X) -> X*X end, [1,2,3,4,5]).

This code applies the anonymous function, which squares a number, to each element in the list [1,2,3,4,5]. The result is a new list with each element squared.

What does this Erlang code do?

lists:filter(fun(X) -> X rem 2 == 0 end, [1,2,3,4,5]).

This code filters the list [1,2,3,4,5] and returns a new list with only the elements that are even. The anonymous function checks if the remainder of a number divided by 2 is 0, which is true for even numbers.

What does this Erlang code do?

spawn(fun() -> timer:sleep(1000), io:format("Hello, World!~n", []) end).

This code spawns a new process that waits for 1000 milliseconds, then prints 'Hello, World!' to the standard output. The spawn function is used for creating new concurrent processes in Erlang.

What does this Erlang code do?

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

This code defines a module named 'my_module' with a single function 'start' that takes no arguments. The 'start' function prints 'Hello, World!' to the standard output. The '-export' directive makes the 'start' function callable from other modules.

What will be the output of this Erlang code?

-module(my_module).
-export([factorial/1]).
factorial(0) -> 1;
factorial(N) when N > 0 -> N * factorial(N-1).

This code defines a module named 'my_module' with a function 'factorial' that calculates the factorial of a number. The factorial of 0 is defined as 1, and the factorial of any positive number N is defined as N multiplied by the factorial of N-1. The output will be the factorial of the number passed to the 'factorial' function.

Wrap-up questions

Final candidate for Erlang 22 role questions

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

How would you handle a situation where a process in Erlang is running indefinitely and consuming resources?

Erlang provides a mechanism to set a timeout for a process. If the process does not finish within the specified time, it will be killed. This can be done using the after clause in receive statements.

What are the challenges in debugging Erlang code?

Debugging in Erlang can be challenging due to its concurrent nature. Traditional debugging methods may not work well. Erlang provides a graphical debugger tool and also supports tracing for debugging.

How would you handle hot code swapping in Erlang?

Erlang supports hot code swapping natively. This can be done by loading the new version of the module using the code:load_file/1 function.

What is the mnesia database in Erlang?

Mnesia is a distributed, soft real-time database management system written in Erlang. It provides high availability and partition tolerance features.

Describe the difference between spawn and spawn_link in Erlang.

spawn creates a new process while spawn_link creates a new process and links it to the current process. If a process linked with spawn_link crashes, the current process will also be terminated.

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

Erlang 22 application related

Product Perfect's Erlang 22 development capabilities

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