With ongoing work as a member of the Elixir Core Team & a new book on the horizon, I reached out to Andrea to discuss writing, blogging, presenting, engineering amongst his many endeavours.
Hayden: Thank you so much for taking the time to speak with me for this interview, I feel your wide range of experience will give a great insight for the community. Just for some context, would you mind giving a short introduction to yourself & your background?
Andrea: Sure! I’m Andrea, born and raised in central Italy, where I currently live. I’ve been in software development for about 10 years. I started out with studying computer science and working on Wordpress websites, and slowly made my way to working on systems architecture, distributed backend systems, applications at scale, and more. I’m also a frequent speaker and trainer at conferences all around. I had a stint co-authoring Testing Elixir, a book about, well, testing in Elixir! Last but not least, I’ve been quite active in the open-source world throughout my whole career, and I’ve been a member of the Elixir core team for the past 7 years.
Hayden: I’d love to learn more about your work on ‘Testing Elixir’, how did you decide to write a book? What kind of process did you follow when starting out?
Andrea: The book was kind of not my decision! Back then, I had just started working at a company where I met my then-to-be co-author, Jeffrey Matthias. You have to know that Jeffrey is extremely passionate about testing (I can’t say the same about myself, even though I do test most of my code). Jeffrey and I quickly became friends, and during a random work sync he mentioned he had this idea for writing a book about testing in Elixir, since it was a topic without many resources available around. He was thinking about writing it with his brother Karl (who had already written the successful Docker: Up and Running). However, Karl was pretty busy at the time, and I just snuck in.
As for me, I always wanted to write a book, so that was one of my main motivations. I’m an avid reader and I tend to learn better through books rather than other types of resources, so I wanted to sort of “give back” to folks like myself.
Hayden: Now the next book has been announced, is there anything you will approach differently this time around?
Andrea: So many things! First and foremost, I’m writing the book by myself this time around, so that changes a lot of the dynamics. However, the biggest change in approach for the new book is that I decided to take a couple of months of sabbatical time between jobs to focus 100% on the book. Writing the previous book while working full time was a hard challenge for me, and I figured it’d be good to try out a different strategy.
Hayden: What is the focus for the new book & how did you decide on it?
Andrea: The book is going to talk about network programming on the BEAM. It’s going to attempt to do two things: teach readers some foundational knowledge about network protocols, and at the same time teach them how to work with those in Erlang and Elixir.
The idea for this book started from my journey into learning Rust, of all things. I did Advent of Code 2022 in Rust to get started with the language, and once that was over, I was looking for next steps. I came across Protohackers, a website with challenges related to networks. I started doing it in Rust, and that made me appreciate how much easier it would be to work through the challenges in Elixir. The BEAM is outstanding at network programming, but there are almost no resources that teach you patterns and libraries to write effective network applications with it. So, there’s where I saw the opportunity for a new book.
Hayden: How are you feeling about taking the task of writing a new book? It must seem like a mountain at the start!
Andrea: Yeah, the beginning is absolutely one of the toughest parts. I’m feeling fantastic, but I admit the first words I wrote were along the lines of “So, I don't know how to start. TCP is a protocol…”. It doesn't really matter where you start I think, and once the ball gets rolling things tend to get easier.
Hayden: Do you see any significant differences in using Elixir rather than Erlang, the more traditional choice for it?
Andrea: No. Elixir made the (smart, IMO) choice to not wrap everything in the Erlang standard library, so you end up actually using the same Erlang modules in both languages. Some examples are gen_tcp, gen_udp, inet, and more. When reaching for libraries, the languages have mostly-equivalent choices. I think this area is really one where the language you pick makes almost no difference.
Hayden: I understand you’re also working on a video series, could you tell us more about that?
Andrea: Yes I am! Or at least I was. I finished the series for the time being, since I think it now has a good bunch of information in it. This video series was actually the bridge between me learning Rust by doing Protohackers challenges and the new book. I always wanted to try the screencast format, and it was a ton of fun to get familiar with recording content, writing scripts, and working on YouTube. I think I’ll do more educational video content in the future, since this series seems to be well received in the community.
Hayden: Are there any particular tech authors that inspired you? Which books would you recommend to budding engineers?
Andrea: I’ve really enjoyed Bruce Tate’s books, especially the well-known Seven Languages in Seven Weeks. I love Bruce’s writing, and I got so much value out of exploring different languages and paradigms by just getting a taste for them. Since then, I’ve also enjoyed books in a similar style, such as Seven More Languages in Seven Weeks or Seven Databases in Seven Weeks. I recommend all of those to really any engineer.
Hayden: It’s obviously a great achievement to be a member of the Elixir Core Team, especially with the popularity of the language continuing to grow. How did that come about?
Andrea: I had time on my hands at the start of my career, that’s how! I started learning Elixir circa 2014, and made a bunch of contributions to the documentation throughout my learning time. The community and José were so friendly that it made it an absolute pleasure. At some point, José asked me directly to work on the first version of Gettext, which he helped me build. I kept contributing to Elixir and the ecosystem, and eventually José asked me to join the core team. I still have the screenshot of that, from May 2016!
Hayden: It’s awesome that you still have the screenshot! What kind of work does it generally involve?
Andrea: With time, Elixir got more and more stable. At this point, most of my time spent on the language itself is dedicated to triaging issues and reviewing PRs. However, I also consider community engagement, speaking at conferences, and creating learning material as part of core team work. On the code side, I mostly work on ecosystem libraries nowadays: I maintain or co-maintain several widely-used libraries, such as Redis, Gettext, stream_data, Broadway, Mint, and more. Those don’t require a big time commitment by themselves, but since there are many of them, the work adds up.
Hayden: In terms of your other professional focus, I know you’ve recently been working as an Elixir Engineer at Apple, I know you might be restricted by discretion but can you tell us a bit more about how you’ve been using Elixir in production there?
Andrea: I was working at Apple for about one year in a team within the Environmental Supply Chain Innovation organization. That means we were using Elixir to build tools aimed at helping Apple reach its apple.com/2030 goal. I can’t really say much more than that, but yep, there is Elixir running at Apple!
Hayden: What’s exciting you most about the future of Elixir?
Andrea: I think I have a predictable answer to this one. I’m mostly excited about all the fields that Elixir is expanding into. Machine learning, embedded devices, and particularly educational work thanks to Livebook. Real-time web has historically been Elixir’s strength, but even that has improved so much with the introduction of Phoenix LiveView and all the work from the Phoenix core team.
Hayden: I know it might feel like betrayal to answer this.. But are there any new languages that have caught your attention? What drew you to them?
Andrea: No betrayal at all! I think being stuck in a single language can become a severe limitation in our industry, especially for staff+ engineers like myself. Elixir is fantastic, but it can’t do everything well. Even if it could, learning new things is a fantastic way to grow and expand your knowledge, even if you always go back to the same language (which is what I tend to do).
As of lately, I’ve mostly been interested in Python and Rust.
Python is not a new language, and I’ve used it many years ago; however, I recently revamped my knowledge of “modern” Python, which I think is a foundational tool to know for engineers. The ecosystem is incredible, it runs everywhere, and the machine learning world mostly runs on it. Rust, on the other hand, has been kind of an obvious choice for me: it’s everything that Elixir is not! Being a blazing fast language with no VM, it’s fantastic for systems programming. It also nicely fits together with Elixir thanks to Rustler and NIFs: you get the best of both worlds.
Hayden: Lastly, the question we like to ask in all of our interviews, what advice would you give to your ‘Elixir beginner’ self’?
Andrea: Write less libraries! In hindsight, I wish I would have contributed more to existing Erlang libraries. Other than that, I’m pretty happy with the path I took and with my journey with Elixir and its community so far.
Hayden: Thank you so much for taking the time to speak with me, it’s been great to see some insights into your work & I’m sure the community will appreciate hearing more from you!
Andrea has provided a selection of links to follow him & his work: