Hiring guide for Erlang R17 Engineers

Erlang R17 Developer Hiring Guide

Erlang R17 is a concurrent, functional programming language designed for building scalable, real-time systems with high availability. Originally developed in the late 1980s by Ericsson for telecommunication systems, it has since been open-sourced and widely adopted in various industries. Its key features include hot swapping, where code can be changed without stopping the system, and support for distributed computing. The language's robustness and fault-tolerance make it ideal for critical applications where system failures are unacceptable. Erlang R17 specifically introduced maps, a new data type that improved the language's expressiveness and efficiency (source: "Erlang Programming Language" - erlang.org).

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

First 20 minutes

General Erlang R17 app knowledge and experience

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

How would you explain the basic data types in Erlang?
Erlang supports several data types including integers, floats, atoms, tuples, lists, and maps. Integers and floats are numeric data types. Atoms are literals, a constant with name. Tuples are used to store several items as a single unit, and lists are collections of items. Maps are key-value stores.
What are the control structures in Erlang?
Erlang supports control structures like 'if', 'case', and 'receive'. 'If' is used for conditional execution, 'case' is used for pattern matching, and 'receive' is used for message passing.
Describe the difference between lists and tuples in Erlang.
Lists are dynamic and can change in size, while tuples have a fixed size. Elements in a list are processed sequentially, while elements in a tuple can be accessed directly.
How would you create a process in Erlang?
In Erlang, a process is created using the spawn function. The spawn function takes three arguments: the module name, the function name, and a list of parameters to the function.
What are the benefits of using message passing in Erlang?
Message passing in Erlang allows for communication between processes. This is beneficial for concurrency and distribution, as it allows processes to run independently and communicate asynchronously.
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 R17's syntax and semantics?
Can the candidate effectively work with OTP (Open Telecom Platform)?
Has the applicant demonstrated the ability to solve complex problems using Erlang R17?
Can the candidate understand and work with concurrent and distributed systems?

Next 20 minutes

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

Describe the difference between a function and a macro in Erlang.
A function in Erlang is a named sequence of expressions, while a macro is a way to define reusable chunks of code. Functions are evaluated at runtime, while macros are expanded at compile time.
How would you handle errors in Erlang?
Erlang uses a 'let it crash' philosophy for error handling. This means that errors are not caught and handled in the traditional sense. Instead, processes are allowed to crash and supervisors are used to manage these crashes and decide what action to take.
What are the key features of Erlang's concurrency model?
Erlang's concurrency model features lightweight processes, message passing, and process isolation. Lightweight processes allow for high levels of concurrency. Message passing enables communication between processes. Process isolation ensures that a failure in one process does not affect other processes.
Describe the difference between synchronous and asynchronous message passing in Erlang.
Synchronous message passing in Erlang involves two processes where the sender waits for the receiver to receive the message. In asynchronous message passing, the sender does not wait for the receiver to receive the message.
How would you implement a recursive function in Erlang?
A recursive function in Erlang is implemented by having the function call itself within its own definition. The function needs to have a base case to prevent infinite recursion.
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 R17 engineer at this point.

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

What does the following Erlang code do?
io:format("Hello, World!~n", []).
This code prints 'Hello, World!' to the console.
What will be the output of the following Erlang code?
io:format("~p~n", [2#1010]).
This code prints '10' to the console. The '2#1010' is a binary representation of the decimal number 10.
What does the following 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 the following Erlang code do?
spawn(fun() -> timer:sleep(1000), io:format("Hello, World!~n", []) end).
This code creates a new process that sleeps for 1 second, then prints 'Hello, World!' to the console.

Wrap-up questions

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

What are the principles of OTP (Open Telecom Platform) in Erlang?
The principles of OTP in Erlang include behaviors, supervisors, and applications. Behaviors are generic modules that abstract common patterns. Supervisors are processes that monitor other processes and handle their errors. Applications are components that can be started and stopped as a unit.
Describe the difference between hot and cold code loading in Erlang.
Hot code loading in Erlang allows for code to be changed in a running system without stopping the system. Cold code loading requires the system to be stopped before new code can be loaded.
How would you implement a gen_server in Erlang?
A gen_server in Erlang is implemented by defining a module that exports a set of callback functions. These functions include init, handle_call, handle_cast, and handle_info, among others. The gen_server behavior abstracts the generic code needed for these operations.

Erlang R17 application related

Product Perfect's Erlang R17 development capabilities

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