An Interview with Elixir Creator José Valim

    Nihal Sahu
    Nihal Sahu


    A few weeks back, I was just getting into Elixir. I was so interested that I hopped on IRC and started asking questions, much to everyone’s annoyance. I asked the creator, José Valim, a couple of questions. José is well-loved in the Ruby Community, so I dropped him a line and he was kind enough to respond. After answering some of my questions I thought, I have to interview him. Here is the resulting conversation.

    For the people that don’t know you. Could you tell us a bit about yourself?
    I am José Valim, creator of the Elixir programming language and co-founder of Plataformatec. I am a Brazilian living in Poland who spends the days working on Open Source.
    José, You’re very well know as an active member of the Ruby Community. You also built a programming language on top of Erlang called Elixir. Could you tell us how you got to creating a programming language? Were you familiar with the idea of building one?
    I don’t have a formal Computer Science background. Therefore, when I decided to create Elixir, I knew I had to catch up on the background required for lexers, parsers, and so on.

    I have read a couple books on the matter, read the source code of how different languages are implemented, and also played with different tools to have a better grasp of what is possible and what isn’t. Of what is simple and what is complex. Working in the parser was still challenging, especially when you run into corner cases and finding a solution can be a lengthy process. I used the Bison manual as well as the Dragon Book. I can remember checking the parsers for Erlang, Ruby, and a bunch of different compile to JavaScript languages.

    Could you tell us more about it? How did this happen?
    It is a long story, but I will try to make it short and sweet. Back in 2010, I was working on improving Rails performance when working with multi-core systems, as our machines and production systems are shipping with more and more cores. However, the whole experience was quite frustrating as Ruby does not provide the proper tool for solving concurrency problems. That’s when I started to look at other technologies and I eventually fell in love with the Erlang Virtual Machine.

    I started using Erlang more and more and, with experience, I noticed that I was missing some constructs available in many other languages, including functional ones. That’s when I decided to create Elixir, as an attempt to bring different constructs and excellent tooling on top of the Erlang VM.

    What are the main features (is that what I should call them?) that Elixir adds to Erlang? And why did you choose it?
    Elixir was designed with excellent and accessible tooling, documentation, and resources in mind. On the more technical side, Elixir provides a macro system and polymorphism via protocols, both aiming to make the language more extensible.
    Why do you think we have this sudden diversion of interest to functional? What do you think it offers the average OO programmer?
    This is a tricky question because functional and object-oriented programming do not have precise definitions. Especially when we are talking about OO languages that can be drastically different from each other. In fact, Alan Kay, who coined the term object-oriented, has a definition of OO much closer to Elixir processes/actors than to the objects found in languages like Java and C++.

    That said, I have a very personal definition of functional programming: functional programming is about making the complex parts of your system explicit. For example, mutable state is data that changes through time. Time is a source of complexity because it adds a bunch of moving parts to our system. We end up having different pieces of data changing at different rates. Therefore, you don’t want “mutable state” to be a primitive, but an abstraction you resort to only when you need it, and you’ll do it explicitly.

    And that’s the most interesting part of it all. Functional programming is associated with concurrency but it was not by design. It just happens that, by making the complex parts of our system explicit, solving more complicated issues like concurrency becomes much simpler.

    Could you just tell us about the Elixir community a bit?
    The Elixir community is growing steadily. For example, last October we had ElixirConf 2015 in Austin with 250 attendees and more than half of the attendees were already using Elixir professionally. We already have books released by the major publishing companies and more coming out fast.

    What’s most exciting, however, is that it is a healthy growth. When you start with Elixir, it is not only about learning a new language, but the whole ecosystem and tools provided by the Erlang VM. And it was really exciting to see a great interest during ElixirConf in mastering this ecosystem, starting with the VM byte code up to the abstractions for building scalable distributed systems.

    Thank you José, we wish you and Elixir very good luck. Thank you for the work you’re doing for the community.
    Thank you.

    If some of the things that José talked about today interests you, check out Elixir at and tell us what you think in the comments.