Erlang 23 Developer Hiring Guide

Hiring Guide for Erlang 23 Engineers

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

Erlang 23 is the latest version of the open-source programming language, Erlang. Developed by Ericsson in 1986 for telecommunication systems, it has evolved to support distributed, fault-tolerant, soft-real-time systems with requirements on high availability. The new release brings several enhancements including improved performance and scalability features. It also introduces a new concept called "dirty schedulers" that helps in handling long-running native code without blocking system operations. This version continues to uphold Erlang's reputation as a robust choice for concurrent programming.

First 20 minutes

General Erlang 23 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 role of OTP in Erlang?

Open Telecom Platform (OTP) is a set of libraries that ships with Erlang. It provides reusable modules to structure applications, handle error recovery, manage distribution, concurrency and others.

How would you handle errors in Erlang?

Erlang uses a 'let it crash' philosophy for error handling. This means that when a process encounters an error, it crashes and sends a message to a supervising process, which then decides how to handle the error.

Describe the difference between list and tuple in Erlang.

Lists are dynamic and can change their size, but access time is linear. Tuples are fixed in size and offer constant time access, but changing them involves copying the whole tuple.

What are the main benefits of using Erlang for software development?

Erlang shines in real-time systems and serves well for hot swapping, where code can be changed without stopping a system. It's also known for its built-in support for concurrency, distribution and fault tolerance.

How would you describe the core philosophy of Erlang programming?

Erlang's core philosophy is built around the concepts of concurrency, distribution, and fault-tolerance. Its design emphasizes the creation of numerous lightweight processes that communicate via message passing.

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 demonstrated a good understanding of functional programming principles?

Erlang is a functional programming language, and a strong understanding of functional programming principles is key to writing effective Erlang code.

Does the candidate have experience with distributed systems and fault-tolerance in Erlang?

Erlang is often used for building distributed and fault-tolerant systems, so experience in these areas is a strong indicator of a qualified candidate.

Has the candidate shown problem-solving skills and the ability to debug Erlang code?

Debugging is a critical skill for any developer, and being able to effectively troubleshoot and resolve issues in Erlang code is a must.

Can the candidate demonstrate experience with concurrent programming in Erlang?

Erlang is known for its designs around concurrent programming. Understanding this is crucial for building robust, scalable applications.

Is the candidate familiar with OTP (Open Telecom Platform) principles and able to apply them effectively?

OTP is a set of Erlang libraries and design principles providing middle-ware to develop these systems. It includes its own distributed database, applications to interface towards other languages, debugging and release handling tools.

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

This is important because a developer must have a deep understanding of the language's syntax and semantics to write efficient and error-free code.

Next 20 minutes

Specific Erlang 23 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 are some common use cases for Erlang?

Erlang is often used in real-time systems where high availability is required. It's commonly used in telecom routing or chat servers, distributed databases, and massively multiplayer online games.

What is hot code swapping in Erlang?

Hot code swapping is the ability to change code in a running system without stopping or restarting it. Erlang supports hot code swapping natively, which is a significant advantage in systems requiring high availability.

How would you implement a loop in Erlang?

Erlang does not support traditional looping constructs like 'for' or 'while'. Instead, it uses recursion where a function would call itself to achieve looping.

Describe the difference between spawn and spawn_link in Erlang.

Both spawn and spawn_link create a new process. The difference is that spawn_link also creates a link to the new process. If either process terminates, the other process will also be terminated.

What are the types of variables in Erlang?

In Erlang, there are bound and unbound variables. Bound variables have been assigned a value, while unbound variables have not. Once a variable is bound to a value, it cannot be changed.

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

At this point, a skilled Erlang 23 engineer should demonstrate excellent problem-solving abilities, deep understanding of concurrency and fault-tolerance mechanisms in Erlang, and exceptional coding skills. Red flags include lack of knowledge about OTP design principles or inability to troubleshoot common Erlang errors.

Digging deeper

Code questions

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

What does this simple Erlang code do?

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

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

What will be the output of this Erlang code?

io:format("~p~n", [1+2*3]).

The output will be '7'. The code evaluates the expression 1+2*3 and prints the result.

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] and returns a new list with the results.

What does this Erlang code do?

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

This code spawns a new process that 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 function 'start' that prints 'Hello, World!' to the console. The function 'start' is exported so it can be called from other modules.

What will be the output of this Erlang code?

-module(my_module).
-export([start/0]).
start() -> io:format("~p~n", [catch throw(my_error)]).

The output will be '{'EXIT',{my_error}}'. The code throws an exception 'my_error' and catches it, then prints the result.

Wrap-up questions

Final candidate for Erlang 23 role questions

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

What is the role of a supervisor in Erlang's OTP framework?

A supervisor in Erlang's OTP framework is a process which supervises other processes, known as its children. Supervisors are used to build a hierarchical process structure called a supervision tree, which is used to monitor and restart child processes in case of failures.

How would you implement concurrency in Erlang?

Erlang facilitates concurrency through the use of lightweight processes. These processes do not share any state with each other and communicate via message passing.

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

In synchronous message passing, the sender waits for the receiver to process the message. In asynchronous message passing, the sender just sends the message and continues its process.

What are ETS tables in Erlang?

ETS, or Erlang Term Storage, is a robust in-memory database available in Erlang. It allows you to store large amounts of data in Erlang's memory space and access it very quickly.

How would you handle a scenario where a process needs to maintain state in Erlang?

In Erlang, processes maintain state by keeping state data in their stack and passing it to themselves in recursive calls.

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

Erlang 23 application related

Product Perfect's Erlang 23 development capabilities

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