Erlang is a functional, general-purpose, concurrent programming language and runtime system that is used to build massively scalable soft real-time systems with requirements on high availability. Originating from Ericsson, it was created to solve problems related to telecommunication systems, but today it has broadened its application to feature in ecommerce, computer telephony and instant messaging.
Erlang includes language constructs necessary for building distributed and fault-tolerant systems. It provides an uniform way to design real-time systems of the highest availability and reliability. For instance, the OTP (Open Telecom Platform), which comprises of middleware and libraries in Erlang, is designed to help in building scalable applications.
As an Erlang user, you are expected to understand its unique let-it-crash philosophy. The language provides features like lightweight processes with message-passing concurrency, pre-emptive scheduling, dynamic type, hot code swapping and garbage collection. Companies are also often looking for individuals who have ability to write clean, maintainable codes and also debug and optimize existing ones.
For those seeking to learn or master Erlang, prior programming knowledge and experience would be beneficial. More specifically, exposure to other functional programming languages such as Lisp or Haskell, can serve as a solid foundation for one to understand the concepts in Erlang. Basic understanding of concurrent programming and principles of software architecture could also make the learning curve easier.
Moreover, knowing how to work with distributed systems and familiarity with runtime systems would be highly advantageous as Erlang’s use is often associated with these systems. Since Erlang is often used for web development or distributed backend systems, knowledge of web development languages like SQL, knowledge of protocols like HTTP, TCP/IP and understanding of server-side software would be useful as well.
Mastering Erlang can open up a plethora of opportunities in developing scalable, highly-available and concurrent systems, making it a sought-after skill in areas where high-availability systems are being developed and maintained.