-module(hello).
-export([start/0]).
start() -> io:fwrite('Hello, World!\n').
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.
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 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.
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.
Erlang has several key features including concurrency, distribution, fault tolerance, hot swapping, and support for real-time systems.
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.
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.
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.
Software development often involves tight deadlines and high-stakes projects, so the ability to remain calm and focused under pressure is important.
Even though the role is technical, effective communication is key to working well in a team and understanding project requirements.
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.
The ability to solve problems indicates that the candidate can use their knowledge of the language to find solutions and troubleshoot issues.
This is important because the candidate needs to be proficient in the specific language to be able to effectively develop and manage the 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.
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.
Concurrency in Erlang is implemented using processes. Processes are lightweight, isolated entities that communicate with each other using message passing.
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.
Erlang supports several data types including numbers, atoms, tuples, lists, maps, and binaries.
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.
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.
-module(hello).
-export([start/0]).
start() -> io:fwrite('Hello, World!\n').
-module(test).
-export([start/0]).
start() -> io:fwrite('~p~n', [lists:reverse([1,2,3,4,5])]).
-module(test).
-export([start/0]).
start() -> lists:map(fun(X) -> X*X end, [1,2,3,4,5]).
-module(test).
-export([start/1]).
start(N) -> spawn(fun() -> do_something(N) end).
do_something(N) -> io:fwrite('Doing something with ~p~n', [N]).
-module(test).
-export([start/1]).
-record(state, {value}).
start(Value) -> #state{value=Value}.
-module(test).
-export([start/0]).
start() -> lists:foldl(fun(X, Sum) -> X*X + Sum end, 0, [1,2,3,4,5]).
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.
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.
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.
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.
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.
Erlang provides several ways to handle exceptions, including try-catch expressions, error handling functions, and process linking and monitoring.
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)