José Valim, creator of the Elixir programming language and founder of Dashbit invests in grants for graduate and undergraduate students at DCC/UFMG’s Compilers Laboratory

In 2021, the Compilers Laboratory of the Computer Science Department of the Federal University of Minas Gerais (LaC – DCC/UFMG) received, from Dashbit, funding to support a Master’s student and three undergraduate research assistants. Dashbit works closely with startups and institutions, helping them adopt and run Elixir. In addition, the company is a great promoter of scientific opportunities for college students.

UFMG’s Department of Computer Science has a history of cooperation with private companies. As an example, currently, three other students who do research at LaC are funded by scholarships donated by Cyral Inc., a data-security company. There have been other similar partnerships in the recent past, with companies like Google, Intel, LG Electronics and AMD.

For Fernando Pereira, LaC’s current coordinator, this type of partnership is very important to the Laboratory and to DCC for three reasons. “First, because we live in a period of scarcity of resources for research. Thus, each grant we receive from the private sector helps the Department to fulfill its role as a producer of qualified human resources. Second, this type of grant brings academic research closer to the needs of the free software community. Today, much of the infrastructure used in software development is open. So, by participating of this community, we are contributing to the progress of computer science in general. And finally, partnerships like this bring the university closer to big names in computer science. José Valim, in particular, is an iconic figure in the field, having single-handedly created Elixir, today one of the most popular programming languages ​​in the world,” he said.

José Valim holds a degree in Electrical Engineering from the Polytechnic School of the University of São Paulo (USP) and a master’s degree from the Politécnico di Torino, in Italy. He is also a speaker, author of three technical books and, in addition, he was co-founder and director of Research and Development at Plataformatec, where he created the Elixir programming language. Elixir has grown as an important technology in the web, the embedded software and the data processing markets. The Elixir community also organizes events in Europe, America and Asia. Valim was a member of the Rails Core Team from early 2010 to mid-2014 and received the Ruby Hero Award in recognition of work on open source projects. In 2015, he won the Erlang User of the Year award.

When creating the Elixir programming language, Valim aimed to increase the extensibility and productivity of the Erlang Virtual Machine (BEAM), while maintaining compatibility with Erlang tools and ecosystem. Elixir is a general-purpose, concurrent, functional programming language that runs on the Erlang virtual machine. Furthermore, it compiles on top of Erlang to support distributed, real-time, fault-tolerant applications. In this context, Elixir extends the capabilities of the Erlang virtual machine to support metaprogramming via macros and polymorphism via protocols.

In an interview with Nathalie Rajão, who is currently responsible for DCC’s science outreach, José Valim told how the idea of ​​creating Elixir came about, talked about the success of the programming language, Dashbit’s partnership with LaC and the projects with the university. He also gave tips to students interested in knowing more about open source, and talked a little about how his passion for computer science began.

How did the idea of ​​creating the Elixir programming language come about?

I will try to summarize. Before creating Elixir, I worked with Ruby and was a member of the Ruby on Rails web framework development team. Around 2007/2008, I started to hear a lot about concurrent programming and how in the future we will have machines with dozens of cores. The problem is that the vast majority of mainstream programming languages at the time ​​were not prepared for that future, and even today, many of them have problems to support parallel programming.

When I was around nine years old, I had my first computer at home. At the time it was a Pentium 100; I remember it was very expensive. I was privileged in that sense, my mother studied data processing and that’s why we had the computer. However, I remember that a short time later, a friend told me that he had a Pentium 233. I thought: wow, we paid so much for our computer and now there is a colleague who has one that is twice as fast?

This phenomenon, known as Moore’s Law, has been going on for a long time. Then came the Pentium 400, Pentium 900 and so on. During that time, being a software developer was very convenient: you could write a program, do nothing for two years, and technology would generally advance enough that everything ran twice as fast!

Today that doesn’t happen anymore. We don’t buy computers with 8GHz, 16GHz, etc. Now we buy computers with two, four, eight, sixteen cores, etc. Even a wristwatch can have four cores! And unfortunately, many of today’s programming languages ​​can’t make our software twice as fast when we double the number of cores on our machine.

Back 12 years ago, when I heard that in the future we are going to write software that runs concurrently on all cores of the machine, I decided to delve deeper into this topic of parallel and concurrent programming. I would like to prepare myself and look for tools, programming languages ​​and libraries that use all cores efficiently.

In this search, I found Erlang, which is a programming language and a virtual machine developed by Ericsson. I discovered that the telecommunications area solved, three decades ago, most of the challenges that we have today with the development of web systems. If you work on a web application, for example, you have to manage several users using the system at the same time, with information going back and forth non-stop. These were the problems that Ericsson had to solve in the area of ​​telecommunications. For that, they created a programming language, Erlang and a platform to run programs written in that language.

My first contact with Erlang was “love at first sight”. From that moment on, I decided that I wanted to write software on top of Erlang’s virtual machine. Over time, the idea of ​​creating a new programming language for this virtual machine came up, and Elixir was born.

In the 2021 Stackoverflow survey, Elixir appears as the third highest-paying programming language among the 38 languages ​​considered. Where does this success come from?

I would say that the success of the language is exactly the Erlang virtual machine, for the reasons mentioned above. So when someone expresses an interest in Elixir and they learn more about the Erlang virtual machine, they see that Elixir has pedigree. I believe that many developers go through a journey similar to mine. They look at the virtual machine and say, “if I had used this platform, it would have solved a lot of problems I’ve had in the past.”

Another thing that helped a lot with the growth of the language was the community being welcoming. We want everyone to feel welcome and that is very important. Elixir follows the paradigm of a functional language and is used to write concurrent and fault-tolerant software. These ideas are different from the way most of the software industry works today. In this sense, Elixir is also different from the programming languages ​that ​people learn at universities. Given that functional programming is not the most widespread programming paradigm, we want to make this learning process a pleasant experience. We want to make people feel productive and have access to the community. We want them to ask questions, so that everyone can learn together. So focusing on the experience of learning the language until getting the first Elixir system into production is quite important.

Dashbit has been funding research projects at DCC/UFMG’s Compilers Laboratory. Could you talk a little about the projects that are carried out at UFMG?

Dashbit is actually a small company of eight to five people with a focus on investing in the Elixir ecosystem. Such investment happens in several ways: we help companies to adopt and put the system into production, we contribute to open software and, recently, we started research projects through MSc and undergrad scholarships together with LaC/DCC. We have a dual objective: to continue investing and exploring new ideas in Elixir and to bring more academic interest to the platform. One of the projects, eBPF – which compiles Elixir code to run in eBPF, within the Linux kernel – is interesting because it exploits the language’s ability to be flexible and extensible. Today we have an Elixir subset that compiles for GPU, maybe we can have one that compiles directly into bytecodes that run in the Linux kernel. So, the focus of these efforts is to bring improvements directly to Elixir and to Erlang’s virtual machine.

What could you say to our students who are willing to contribute to the free software community? And to Elixir in particular?

It’s a bit difficult to give suggestions today, as my first experience with open software was quite a while ago and much has changed since that time. But what I did was try, try and try! Since the code is open source, anyone can go out there and look. So I always analyzed the code of the projects, libraries and frameworks I used. There were occasions when I could find something to improve. In the beginning it was mostly minutia: documentation, comments, style, etc. And yet, that’s already quite useful and a great start. Then you gain confidence to fix a bug, contribute a feature and so on!

If I’m going to summarize, I’d say: be curious to look at the code that is available and, if you have any ideas, see what the community is like and try to contribute. Even if the contribution is not accepted, the process of installing stuff, tinkering with the code, making the tests run, etc, will be a good learning experience. With Elixir it’s no different, it’s playing, exploring, and seeing what happens.

Today you live in Poland, but you have always contributed to the growth of the programming community in Brazil, whether through lectures, research grants or interviews. How is your relationship with this community of programmers in Brazil?

Although I still have many ties in Brazil, my way of managing the community is decentralized. Everyone has space to start a meetup, organize an event, and so on. Therefore, all the success of Elixir in Brazil is thanks to the Brazilian community. They organize meetups, seek speakers, promote language within companies, etc. I’m not leading this effort, neither in Brazil nor abroad. Anyone who is passionate about technology and the community has the opportunity to contribute in any way they see fit.

Tell us a little about your story?

I was born in Porto Alegre and grew up in Goiás, in a town called Inhumas. I moved to São Paulo to pursue a BSc at USP, in the Escola Politécnica, where I studied Electrical Engineering with an emphasis on Automation and Control. In the fourth year, I took the Polytechnic School’s double degree program and moved to Italy, where I finished my undergraduate and master’s degree. That’s when I met my wife, who is Polish, and I moved to Poland. Even though I live here, I was co-founder and director of Plataformatec, a consultancy company based in São Paulo, where I created Elixir. After Plataformatec was acquired by Nubank, I created Dashbit. I still maintain strong ties with Brazil and now I have this new academic bond, which I am very happy to be able to participate in, given the importance that Brazilian education and the public university had for my life.

About programming, I started it up after I entered university. During the first year, I had an introduction to programming with the C language and I really enjoyed it. I also played in a band in my first year at university and I learned to program by making a website to promote it. At the time I used ActionScript and Flash, but today they are basically dead technologies. Then I learned PHP, SQL and a bunch of other technologies; I was learning quite a lot back then. It’s part of the process… read, learn, code and rewind. And eventually I discovered Erlang, and ended up creating Elixir.

Acesso rápido