Hiring guide for Erlang 18 Engineers

Erlang 18 Developer Hiring Guide

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

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

First 20 minutes

General Erlang 18 app knowledge and experience

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

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.
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.
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.
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.
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.
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 have a solid understanding of Erlang 18's syntax and semantics?
Has the candidate demonstrated experience with concurrent programming?
Can the candidate effectively debug and optimize Erlang code?
Is the candidate familiar with OTP (Open Telecom Platform) principles?

Next 20 minutes

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

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

Wrap-up questions

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

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

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.