Erlang 18 Developer Hiring Guide

Hiring Guide for Erlang 18 Engineers

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

Erlang 18 is a concurrent, functional programming language designed for building scalable, fault-tolerant systems. It was originally developed by Ericsson in the late 1980s to handle telecommunication switches but has since been used extensively in various domains such as finance, e-commerce and computer telephony. Its concurrency model makes it particularly well-suited for real-time distributed applications that require high availability. The language's name "Erlang" pays tribute to Agner Krarup Erlang, a Danish engineer and mathematician known for his work on traffic engineering theory. The release of Erlang 18 introduced numerous enhancements including time correction improvements and support for maps (source: erlang.org).

First 20 minutes

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

What is the OTP framework in Erlang?

OTP (Open Telecom Platform) is a set of Erlang libraries, which consists of the Erlang runtime system, a number of ready-to-use components mainly written in Erlang, and a set of design principles for Erlang programs.

How would you handle errors in Erlang?

In Erlang, errors are handled using a 'let it crash' philosophy. This means that when a process encounters an error, it crashes and sends a message to a supervisor process, which then decides how to handle the error.

Describe the difference between procedural and functional programming.

Procedural programming is based on the concept of procedure calls where a program is a series of procedures, while functional programming is based on the concept of mathematical functions and avoids changing state and mutable data.

What are the key features of Erlang?

Erlang has several key features including hot swapping, where code can be changed without stopping the system, concurrency, where it can handle many tasks at once, and fault tolerance, where the system can recover from errors.

How would you define Erlang?

Erlang is a functional, concurrent, general-purpose programming language and runtime environment. It was built for real-time systems and for systems with high availability and hot swapping.

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

Does the candidate have experience with test-driven development?

Test-driven development is a common practice in many modern development workflows. Experience with this indicates a disciplined approach to coding and a focus on quality.

Has the candidate shown an ability to work with distributed systems?

Erlang was designed for building distributed systems. Experience in this area is a strong indicator of a candidate's ability to build robust, scalable applications with Erlang.

Is the candidate familiar with OTP (Open Telecom Platform) principles?

OTP is a set of Erlang libraries and design principles providing middle-ware to develop systems. It is widely used in Erlang programming and a good understanding of it is a strong indicator of a candidate's proficiency.

Can the candidate effectively debug and optimize Erlang code?

Debugging and optimization are important skills for any developer. For Erlang, this includes understanding how to use tools like the Erlang profiler and debugger.

Has the candidate demonstrated experience with concurrent programming?

Erlang is known for its concurrency model. A good Erlang developer should be comfortable with concurrent programming concepts.

Does the candidate have a solid understanding of Erlang 18's syntax and semantics?

This is crucial as it forms the basis of any programming task they will undertake. If they struggle with the basics, they will likely struggle with more complex tasks.

Next 20 minutes

Specific Erlang 18 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?

A supervisor in Erlang is a process which supervises other processes, called child processes. The supervisor is responsible for starting, stopping, and monitoring its child processes.

How would you use pattern matching in Erlang?

Pattern matching in Erlang is used to match complex data structures. It's a way to destructure data by matching its shape and binding variables to values within that shape.

Describe the difference between list and tuple in Erlang.

A list in Erlang is a collection of elements where each element can be of any type, while a tuple is a collection of elements where each element is a specific type and the order matters.

What are ETS tables in Erlang?

ETS (Erlang Term Storage) tables are in-memory storage that provide constant time data access. They support several data structures (set, ordered set, bag, duplicate bag) and can be protected (private, protected, public).

How would you create a process in Erlang?

In Erlang, you can create a process using the spawn function. The spawn function takes a function as an argument and starts a new process running that function.

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

At this stage, a skilled Erlang 18 engineer should demonstrate proficiency in concurrent programming, error handling in Erlang, and distributed systems. Red flags include lack of knowledge in OTP design principles, inability to explain process communication or struggle with debugging techniques.

Digging deeper

Code questions

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

What does this simple Erlang code do?

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

This code prints 'Hello, World!' to the console.

What does this Erlang code do?

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

This code squares each element in the list [1,2,3,4,5] using the map function.

What will be the output of this Erlang code?

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

This code sums all the elements in the list [1,2,3,4,5] using the foldl function. The output will be 15.

What does this Erlang code do?

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

This code creates a new process that sleeps for 1000 milliseconds and then prints 'Hello, World!' to the console.

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 prints 'Hello, World!' to the console. 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 recursive function 'factorial' that calculates the factorial of a number. The output will be the factorial of the input number.

Wrap-up questions

Final candidate for Erlang 18 role questions

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

What are the challenges you might face while scaling an Erlang application and how would you overcome them?

Challenges while scaling an Erlang application might include managing the increasing number of processes, handling the complexity of inter-process communication, and ensuring data consistency. These can be overcome by using tools and techniques like OTP behaviors, supervision trees, and distributed Erlang.

How would you handle a situation where a process is not responding in Erlang?

In Erlang, if a process is not responding, you can use the 'monitor' function to monitor the process. If the process dies or is not responding, a message will be sent to the monitoring process.

Describe the difference between synchronous and asynchronous message passing in Erlang.

In synchronous message passing, the sender waits for the receiver to receive the message. In asynchronous message passing, the sender sends the message and continues with its own processing, it doesn't wait for the receiver.

What are the advantages of using Erlang for distributed systems?

Erlang is designed for distributed systems. It has built-in support for distribution, fault-tolerance and concurrency. It also allows for hot code swapping, which is essential for maintaining a system with high availability.

How would you implement hot code swapping in Erlang?

Hot code swapping in Erlang can be implemented by loading the new version of the module into the system, and then switching the processes to use the new version of the module.

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

Erlang 18 application related

Product Perfect's Erlang 18 development capabilities

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