Erlang R16B03 Developer Hiring Guide

Hiring Guide for Erlang R16B03 Engineers

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

Erlang R16B03 is a robust computer programming language, developed by Ericsson in 1986 for telecommunication systems and distributed applications. This high-level language is renowned for its real-time systems and hot swapping capabilities, where code can be changed without stopping the system. Today, it finds extensive use in e-commerce platforms, telecoms routing devices and instant messaging apps like WhatsApp. The Erlang Open Telecom Platform (OTP), a collection of middleware libraries in the Erlang runtime environment was introduced with this version to facilitate software development further. For more information on its evolution or usage specifics refer to "The Evolution of an Erlang Programmer" by Francesco Cesarini and Simon Thompson.

First 20 minutes

General Erlang R16B03 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 uses a 'let it crash' philosophy for error handling. Instead of trying to catch every possible error, Erlang encourages you to write code that does the right thing in the normal case, and crashes in the abnormal case.

Describe the difference between lists and tuples in Erlang.

In Erlang, lists are used when the number of elements is variable, while tuples are used when the number of elements is fixed. Lists are enclosed in square brackets, while tuples are enclosed in curly brackets.

What are the key features of Erlang?

Erlang has several key features including concurrency, distribution, fault tolerance, hot swapping, and support for real-time systems.

How would you define a function in Erlang?

In Erlang, a function is defined using the keyword 'fun'. The syntax is 'fun(Parameters) -> Body end'. The parameters are pattern matched, and the body contains the logic of the function.

What is the primary use of Erlang?

Erlang is primarily used for building massively scalable soft real-time systems with requirements on high availability. It's used in telecoms, banking, e-commerce, computer telephony and instant messaging.

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 software development that helps catch bugs early and ensures the code meets its design and behaves as intended.

Can the candidate work effectively under pressure?

Software development often involves tight deadlines and high-stakes projects, so the ability to remain calm and focused under pressure is important.

Does the candidate demonstrate good communication skills?

Even though the role is technical, effective communication is key to working well in a team and understanding project requirements.

How familiar is the candidate with the OTP framework?

OTP (Open Telecom Platform) is a set of Erlang libraries and design principles providing middle-ware to develop systems. It's crucial for an Erlang developer.

Is the candidate able to solve complex problems using Erlang R16B03?

The ability to solve problems indicates that the candidate can use their knowledge of the language to find solutions and troubleshoot issues.

Does the candidate have a strong understanding of the Erlang R16B03 language?

This is important because the candidate needs to be proficient in the specific language to be able to effectively develop and manage the code.

Next 20 minutes

Specific Erlang R16B03 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 hot code swapping in Erlang?

Hot code swapping is a feature of Erlang that allows you to change the code of a running system without stopping or restarting the system. This is particularly useful for systems that require high availability.

How would you implement concurrency in Erlang?

Concurrency in Erlang is implemented using processes. Processes are lightweight, isolated entities that communicate with each other using message passing.

Describe the difference between spawn and spawn_link in Erlang.

Both spawn and spawn_link are used to create a new process in Erlang. The difference is that spawn_link links the new process to the current process, so if either process terminates, the other process will also be terminated.

What are the different types of data types available in Erlang?

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

What is the role of the Erlang VM (BEAM)?

The Erlang VM, also known as BEAM, is responsible for executing Erlang code. It provides features such as garbage collection, process scheduling, and I/O handling.

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

A skilled Erlang R16B03 engineer should demonstrate a deep understanding of concurrent programming, error handling, and distributed systems. They should exhibit strong problem-solving skills and familiarity with OTP design principles. Red flags would include inability to explain complex concepts or lack of hands-on experience with real-world projects.

Digging deeper

Code questions

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

What does this simple Erlang code do?

-module(hello).
-export([start/0]).
start() -> io:fwrite('Hello, World!\n').

This code defines a module named 'hello' and exports a function named 'start' with zero arguments. The 'start' function prints 'Hello, World!' to the console.

What will be the output of this Erlang code?

-module(test).
-export([start/0]).
start() -> io:fwrite('~p~n', [lists:reverse([1,2,3,4,5])]).

This code will output the list [5,4,3,2,1]. The 'lists:reverse' function is used to reverse the order of the elements in the list [1,2,3,4,5].

What does this Erlang code do?

-module(test).
-export([start/0]).
start() -> lists:map(fun(X) -> X*X end, [1,2,3,4,5]).

This code applies the anonymous function 'fun(X) -> X*X end' to each element in the list [1,2,3,4,5]. The result is a new list where each element is the square of the corresponding element in the original list.

What does this Erlang code do?

-module(test).
-export([start/1]).
start(N) -> spawn(fun() -> do_something(N) end).
do_something(N) -> io:fwrite('Doing something with ~p~n', [N]).

This code spawns a new process that executes the function 'do_something' with the argument 'N'. The 'do_something' function prints a message to the console indicating that it is doing something with 'N'.

What does this Erlang code do?

-module(test).
-export([start/1]).
-record(state, {value}).
start(Value) -> #state{value=Value}.

This code defines a record named 'state' with a single field named 'value'. The 'start' function creates a new 'state' record with the 'value' field set to the argument 'Value'.

What will be the output of this Erlang code?

-module(test).
-export([start/0]).
start() -> lists:foldl(fun(X, Sum) -> X*X + Sum end, 0, [1,2,3,4,5]).

This code will output 55. The 'lists:foldl' function is used to compute the sum of the squares of the elements in the list [1,2,3,4,5].

Wrap-up questions

Final candidate for Erlang R16B03 role questions

The final few interview questions for a Erlang R16B03 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 consuming too much memory?

You can handle this situation by monitoring the process and sending it a message when it exceeds a certain memory threshold. If the process does not respond to the message, you can terminate it.

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 before continuing. In asynchronous message passing, the sender sends the message and then continues without waiting for the receiver.

What is the role of OTP in Erlang?

OTP (Open Telecom Platform) is a set of libraries and design principles for building robust, scalable, and maintainable Erlang applications. It provides features such as supervision trees, generic servers, and application packaging.

How would you implement a distributed system in Erlang?

Erlang provides built-in support for distributed systems. You can create a distributed system by running multiple Erlang nodes on different machines, and using message passing for communication between nodes.

What are the different ways to handle exceptions in Erlang?

Erlang provides several ways to handle exceptions, including try-catch expressions, error handling functions, and process linking and monitoring.

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

Erlang R16B03 application related

Product Perfect's Erlang R16B03 development capabilities

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