Elixir is not magic - despite being easy to write in and learn, you need a strong foundation. In this short article, I will give you my personal list of things that are necessary (or at least very much a “should-have”) for Junior Elixir developers.

Table of contents

    [The power of Elixir is considerable]|(https://curiosum.com/blog/story-of-elixir-programming-language) - it is a functional language compiled to Erlang, so you get amazing concurrency and uptime. A narrow core or powerful tools and utilities open a whole world of possibilities and manage complexity as very few languages can. What you write will be able to run for a long time, will tolerate faults, and be easily scalable.

    The syntax you will be working with is one of the easiest to learn and conceptualize, especially to those with a flavor of Ruby in their experience. Even to complete newcomers, good building tools and growing vaults of libraries allow a smoother learning curve. Elixir community simply rocks - although, admittedly, it is not huge.

    That’s the good part - but let’s get a bit more specific.

    1. A sense of concurrency and scale
    2. HTTPS and server stuff
    3. Databases
    4. Pipeline-style data processing
    5. General Adaptability (tinkering)

    A sense of concurrency and scale

    What is concurrency? Imagine computing as a race, which is won only when every competitor finishes the track. In most cases, the runners (processes) are tied together with a rope - when one fails, the rest cannot move much further. What if you untie the racers, and let them finish in whatever order they like, without affecting the final result?

    Concurrency is usually not the first or third thing beginner developers start from, but at worst, Elixir developers should prepare themselves early. Elixir has many applications, but where the magic truly happens is if you need to do a lot at the same time. Unlike the more intertwined ways other technologies work, Elixir can skim through several processes flopping at the same time - as probably, dozens more will run independently and fault-free in the background.

    Without this coupling, an Elixir system can have some self-repairing qualities, its processes are very light, and therefore can be run on all CPUs at the same time. In this respect, Elixir is like its father, Erlang, which is described as “write once, run forever”. They both share a concurrency model, which is markedly different than the usual threading. The key distinction here is this:

    You share data by passing messages

    instead of

    Passing messages to share data

    If this is not clear (it is much clearer in practice), head here to read a little bit more about how Elixir manages concurrency. For a more descriptive account, listen to this podcast episode from Dev’n Life.

    You will need a strong grasp of concurrency and the underlying actor model to start doing more complex things in Elixir, and therefore, to jump up in seniority. Start early!

    HTTPS and server stuff

    A lot of your future work in Elixir will be related to web apps. Therefore, more generally, it will be governed at some level by the HTTP protocol and server infrastructure.

    Elixir is armed with some sneakily good web frameworks - I’m talking Phoenix and Absinthe, to name the most popular. But you can’t do much in them without at least basic knowledge of how the web works.

    There are several things I would start with. First, learn the basic request-response communication cycle, which is nicely explained here. You should not only know the HTTP status codes but what to do when they occur. A useful distinction is that between POST and PUT methods, and there is a good explainer thread over at Stack Overflow. This one-hour video will bring you up to speed with using cookies in HTTP. Next, polish your knowledge of HTTP headers, courtesy of Mozilla. A nice finishing touch for this starting inventory would be some Web Socket knowledge. It is a broad topic, but read this blog post to get the basics.

    If you have most of the above covered and want to build up the case for future promotions, learn some DevOps practices and philosophy. Beginner level tutorials are available on youtube, with dozens of free or cheap courses available in Udemy or Coursera. This will come in handy both for Elixir work, and server.

    Databases

    If you struggled with databases in your previous technology - worry not, Elixir will make your life a bit better. And if you have no relevant experience, Elixir will not throw many logs under your legs during the learning process.

    Do not get too happy yet - Elixir, as I will explain in the last point of this list, is not for those, who want everything out of the box. With databases, a typical Ruby deployment will do a lot of stuff for you, like the creation of the initial database and seeding it. In Elixir, however, some of it is on you.

    After the initial hurdle, Elixir fares extremely well. Its database wrapper (Ecto) handles both SQL and NoSQL. It is even more than that, as it is also a language integrated query.

    Since you will spend considerable time developing apps with PostgreSQL or some similar SQL databases for data storage in your project, knowing how Elixir works with them is a useful thing to flash during the recruitment process.

    Pipeline-style data processing

    As Elixir is a functional language, it heavily promotes data processing that can be described as pipelines modeled as compositions of functions that transform immutable data structures. If you find this style of data processing comfortable, you will feel at home. Once you get more advanced, libraries such as GenStage or Flow will make you feel at home applying it in a distributed environment, which is one of Elixir’s main strengths.

    There are interesting case studies and workshops to listen to and watch on this topic. For an authoritative source, try recordings from ElixirConf, or watch this short explainer.

    Become a Master Tinkerer

    Who is a tinkerer? In short, it is a person who, when seeing an unknown button or dial, is going to press it - just for the, ekhm, sake of it. A person that wants to go deep into things, and is persistent enough to look for their own solutions, where there may be none present yet.

    The whole idea behind Elixir is, that you have a powerful core, that must be supplemented by libraries that contain the “extra” functionalities. This was done to reduce bloat and keep processes inherently light and quick. This philosophy also permeates to the library creators themselves.

    So when you try to find a very specific library for a niche task, this is not Java or Ruby - where a short trip through GitHub will give you 20 proposed solutions. In some cases, be prepared to write stuff on your own. Elixir is exceptionally extendable. Its core and the underlying power of BEAM VM are meant to be applicable to a very broad set of use cases.

    The main tools to broaden what Elixir can do are macros and sygils, and I advise to get familiar with at least those two.

    Good luck on your path to Elixir excellence! Michał

    FAQ

    What are the key skills for junior Elixir developers in 2021?

    Junior Elixir developers should focus on understanding concurrency and scalability, HTTP protocols and server management, databases, pipeline-style data processing, and general adaptability or tinkering.

    How does Elixir handle concurrency and what should juniors know about it?

    Elixir handles concurrency by allowing multiple processes to run independently and communicate through message passing. Juniors should understand the actor model and the concept of sharing data by passing messages.

    Why is understanding HTTP and server management important for Elixir developers?

    Understanding HTTP and server management is crucial for Elixir developers because much of their work will involve web applications governed by HTTP protocols.

    What should junior Elixir developers know about databases?

    Junior developers should familiarize themselves with Elixir's database wrapper, Ecto, and understand how Elixir interacts with SQL and NoSQL databases.

    What is pipeline-style data processing in Elixir?

    In Elixir, pipeline-style data processing involves using compositions of functions to transform immutable data structures, following the functional programming paradigm.

    What does being a 'Master Tinkerer' mean for an Elixir developer?

    Being a 'Master Tinkerer' means having the curiosity and persistence to dive deep into Elixir's core, experiment with libraries, and develop custom solutions when necessary.

    Why is adaptability important for junior Elixir developers?

    Adaptability is important for junior Elixir developers because they need to be able to learn and adjust to the evolving ecosystem and tackle various challenges in development.

    Michał Buszkiewicz, Elixir Developer
    Michał Buszkiewicz Curiosum Founder & CTO

    Read more
    on #curiosum blog

    Bringing SOLID to Elixir

    Bringing SOLID to Elixir

    The SOLID principles, originally designed for object-oriented programming, can also be adapted effectively to functional programming languages like Elixir. Read how to apply it to create more maintainable, scalable, and adaptable software systems.