-module(hello).
-export([start/0]).
start() -> io:fwrite("Hello, World!\n").
Ask the right questions to secure the right Erlang talent among an increasingly shrinking pool of talent.
Erlang is a concurrent, general-purpose programming language and runtime system developed by Ericsson in the late 1980s to build robust telecommunication systems. Named after the Danish mathematician Agner Krarup Erlang, it was designed to handle distributed, fault-tolerant, soft-real-time, non-stop applications with hot swapping capabilities. Open-sourced in 1998, Erlang's key strengths are its support for concurrency, distribution and fault tolerance. It is widely used in telecommunications, banking, e-commerce, computer telephony and instant messaging systems. Today, it serves as the backbone of several high-profile production systems such as WhatsApp and T-Mobile’s SMS infrastructure.
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.
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 denoted by square brackets, while tuples are denoted by curly brackets.
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.
In Erlang, a process is created using the spawn function. For example, spawn(Module, Function, Args) would create a new process.
Erlang has several key features including concurrency, distribution, fault-tolerance, hot code swapping, and real-time garbage collection.
Erlang is a functional, concurrent, general-purpose programming language and runtime environment developed by Ericsson. It's used for creating distributed, fault-tolerant systems.
Writing efficient, readable, and maintainable code is a key skill for any developer. It ensures the codebase remains manageable and reduces the likelihood of bugs.
Erlang is often used to build distributed systems, so a good understanding of these systems is crucial.
OTP is a set of Erlang libraries and design principles providing middle-ware to develop systems. It's widely used in Erlang development.
Debugging is a critical skill for any developer. The candidate should be able to identify, locate, and fix bugs in Erlang code.
Erlang is a concurrent programming language. A good understanding of concurrent programming principles is necessary to write efficient Erlang code.
This is important because Erlang has a unique syntax and semantics that a developer must be familiar with to write efficient and effective code.
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.
Pattern matching in Erlang is a powerful feature that allows a function to execute different code paths depending on the shape and value of the input parameters. It's used extensively in function clauses, case expressions, and for assignment of variables.
In Erlang, synchronous message passing means the sender waits for the receiver to process the message and send a response. Asynchronous message passing means the sender sends a message and continues its own processing without waiting for a response.
Recursion in Erlang can be implemented by having a function call itself. For example, a factorial function can be implemented as 'factorial(0) -> 1; factorial(N) -> N * factorial(N-1).'
ETS (Erlang Term Storage) tables are in-memory databases with constant time data access. They provide the ability to store large amounts of data in Erlang's terms and allow constant time access.
Erlang follows the 'Let it crash' philosophy for error handling. It's designed to handle errors in a different process than the one where the error occurred. The common approach is to use 'link' and 'monitor' functions to get notifications about errors.
A skilled Erlang engineer should demonstrate proficiency in concurrent programming, understanding of fault tolerance and distributed systems, and expertise in functional programming paradigms. Red flags include inability to explain concepts clearly or lack of practical experience in handling real-world problems with Erlang.
-module(hello).
-export([start/0]).
start() -> io:fwrite("Hello, World!\n").
-module(test).
-export([start/0]).
start() -> io:fwrite("~p~n", [1+2*3]).
-module(test).
-export([sum/1]).
sum(List) -> lists:foldl(fun(X, Sum) -> X + Sum end, 0, List).
-module(test).
-export([start/0]).
start() -> spawn(fun() -> io:fwrite("Hello, World!\n") end).
-module(test).
-record(person, {name, age}).
-export([new/2]).
new(Name, Age) -> #person{name = Name, age = Age}.
-module(test).
-export([start/0]).
start() -> F = fun(N) when N > 0 -> N * F(N-1); (0) -> 1 end, io:fwrite("~p~n", [F(5)]).
The final few interview questions for a Erlang candidate should typically focus on a combination of technical skills, personal goals, growth potential, team dynamics, and company culture.
Designing a distributed system in Erlang involves using Erlang's built-in support for distribution. This includes using the spawn function to create processes on different nodes, using message passing for communication between processes, and using OTP behaviours like gen_server and supervisor for structure and fault-tolerance.
Both spawn and spawn_link 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.
Performance in Erlang can be optimized by using built-in profiling tools to identify bottlenecks, optimizing data structures, avoiding unnecessary list operations, and making use of Erlang's concurrency features.
Some limitations of Erlang include lack of support for imperative programming, difficulty in interfacing with hardware and other low-level operations, and a smaller community and ecosystem compared to other languages.
Hot code swapping in Erlang can be performed using the module system. By loading a new version of a module into a running system, the next call to any of its functions will use the new code.
Back-end App Developer
Front-end Web Developer
Full Stack Developer (Java)
Full Stack Developer (.Net)
Full Stack Developer (MEAN)
Full Stack Developer (MERN)
DevOps Engineer
Database Engineer (AzureSQL)
Database Engineer (Oracle)
Database Engineer (General)
Solution Architect (.NET)
Solution Architect (Java)
Solution Architect (Ruby)
Solution Architect (Python)
AI Engineer (Python)
Sr. AI Engineer (Python)
AI Strategist (Python)
Business Intelligence Engineer
Systems Analyst
Mainframe Developer (COBOL)
Mainframe Developer (General)