sum(0) -> 0;
sum(N) when N > 0 -> N + sum(N-1).
Ask the right questions to secure the right Erlang 19 talent among an increasingly shrinking pool of talent.
Erlang 19 is an open-source, concurrent programming language and runtime system initially developed by Ericsson in 1986 for telecommunication systems. It was designed to handle large-scale, real-time, distributed applications with high availability and fault tolerance. The language's key features include hot swapping – the ability to change code without stopping a system – and support for concurrency, distribution, and fault tolerance. Its robustness has led it to be used in banking, e-commerce sectors as well as online gaming platforms. Sources of information are derived from the official Erlang website (www.erlang.org) and its documentation.
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.
Erlang was designed for building distributed, fault-tolerant systems. It provides lightweight processes, message passing concurrency, hot code swapping, and built-in support for distribution.
Erlang follows a 'let it crash' philosophy for error handling. Instead of trying to catch every possible error, Erlang encourages developers to focus on correct programming and let processes that encounter errors crash and restart from a known good state.
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 one. If either of the linked processes terminates, the other one will also be terminated.
Erlang has several key features including concurrency, distribution, fault-tolerance, hot swapping, and soft real-time.
In Erlang, once a variable is bound to a value, it cannot be changed. This concept is known as immutability. It helps to avoid side effects and makes code easier to follow and debug.
Regardless of language, good coding practices are important for long-term project success and collaborative work.
Error handling is a critical aspect of developing robust Erlang applications, so familiarity with it is important.
Erlang is often used for real-time systems, so experience in this area is a good sign.
OTP is a set of Erlang libraries and design principles providing middle-ware to develop these systems. It's crucial for an Erlang developer to have experience with it.
Erlang is known for its strength in building concurrent and distributed systems, so this knowledge is important.
Since Erlang is a functional programming language, a good understanding of functional programming concepts is crucial.
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.
State in Erlang processes is usually handled by passing the state as an argument to the recursive function that represents the process loop. The function then passes the updated state to itself in the recursive call.
In synchronous message passing, the sender waits for the receiver to process the message and send a response. In asynchronous message passing, the sender does not wait and can continue with other tasks.
ETS (Erlang Term Storage) tables are in-memory storage that can be used to store large amounts of data. They can be accessed by multiple processes and support constant time insertions, deletions, and lookups.
In Erlang, recursion is often used instead of loops. A recursive function calls itself with a modified argument until a base case is reached.
In Erlang, lists are used when the number of elements is unknown or can change, while tuples are used when the number of elements is known and fixed. Lists are stored as linked lists and tuples as contiguous blocks of memory.
A skilled Erlang 19 engineer should demonstrate strong proficiency in concurrent programming, fault tolerance and real-time systems. They should also be familiar with OTP design principles. Red flags include lack of experience with distributed systems and inability to solve complex problems using Erlang.
sum(0) -> 0;
sum(N) when N > 0 -> N + sum(N-1).
-module(hello).
-export([world/0]).
world() -> io:fwrite("Hello, world\n").
lists:map(fun(X) -> X*X end, [1,2,3,4,5]).
spawn(fun() -> timer:sleep(1000), io:fwrite('Hello from another process\n') end).
-record(person, {name, age}).
John = #person{name="John", age=23}.
-module(factorial).
-export([factorial/1]).
factorial(0) -> 1;
factorial(N) when N > 0 -> N * factorial(N-1).
factorial:factorial(5).
The final few interview questions for a Erlang 19 candidate should typically focus on a combination of technical skills, personal goals, growth potential, team dynamics, and company culture.
Performance in Erlang can be optimized by using appropriate data structures, avoiding unnecessary copying of data, using native implemented functions (NIFs) for computation-intensive tasks, and tuning the Erlang runtime system.
Erlang is not well-suited for computation-intensive tasks, it lacks support for popular data formats like JSON and XML, and its syntax is quite different from most other programming languages, which can make it harder to learn.
Erlang provides built-in support for distributed systems. You can spawn processes on remote nodes, send messages to processes on remote nodes, and use distributed data structures like ETS tables and Mnesia databases.
gen_server is a generic server behavior used for implementing server processes, while gen_fsm is a generic finite state machine behavior used for implementing processes that can be in one of a finite number of states.
Hot code swapping allows you to upgrade a running system without stopping it. This is crucial for systems that require high availability and can't afford downtime.
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)