In the latest edition of our ‘starting out with Elixir’ series, I’ve gathered two of Elixir’s biggest advocates together to talk about getting started with Elixir, learning tips, and the current state of the Elixir market.
Introductions
Brooklin Myers - Host - Elixir Newbie Podcast
Check out the podcast here: https://open.spotify.com/show/2VNf2tvHIjSxTXMY15qtdV
I'm an Elixir newbie. I got into programming in 2018 in JavaScript but only got into Elixir in May 2021 and fell in love with it. I document and share what I learn through podcasting, writing, and video content.
Marco Milanesi - Elixir Engineer/Trainer at Taxfix, the app that helps millions of people do their taxes in an easy and fast way.
I’ve been developing in Elixir for about four years, more or less, and I got into programming when I was a teenager.I was bored with Python, and Elixir brought me fresh ideas and a general feeling of things being done right.In my free time, I make some attempts in writing short stories, and sometimes I produce music tracks. Check out the Taxfix Elixir course here: https://github.com/taxfix/elixir-course
Getting Started in Elixir
Hayden: Marco, as someone that cross-trained into Elixir a few years back, how did you find that experience? Do you remember any specific challenges when you switched technologies?
Marco: I was fascinated by Elixir’s cheap process creation capabilities and kick-started my personal studies of the language and the platform. OTP was the key “technology” or framework that was attracting me.
To tell the truth, I wanted to learn Erlang initially. However, an ex-colleague of mine at that time suggested looking into Elixir. (And I was like, what the hell is Elixir?!)
hen I began studying and practicing the language by myself, I felt that it was the right moment to enter the Elixir world in a work setting because the requirements for having an Elixir job were minimal. For instance, no production experience was required to apply for an Elixir role.
Nowadays, the situation has changed. There are many more Elixir job opportunities, at least in the Germany/Berlin market, and the skill level required to jump into the BEAM world is diverse.
I got my first Elixir job by going to the Elixir meet-up in Berlin, where I met a person that introduced me to a company that was doing Elixir.
In my opinion, companies should hire at least one experienced Elixir developer and let the “passionate” (with no production experience) Elixir developers develop themselves inside the company.I would suggest usingonline materials to educate them and help them evolve in Elixir mixed with concrete tasks.It would also be useful to structure a good on-boarding and a learning/progression path.
Regarding my personal challenges, I really struggled to switch from the OOP mindset to the functional or concurrent mindset. I had a job during the day and was trying to study and exercise during the evening. I even stopped learning Elixir for about threemonths because I was not seeing the end of the tunnel (i.e. getting an Elixir job). However, I eventually resumed my studies, went more frequently to the Elixir meetup here in Berlin, and I also felt “ready” to make the jump into the BEAM world. The key aspect was meeting someone already working with Elixir—that event was the real ice-breaker. I would say that the community and meeting people is key to unblocking yourself from the study/practice solo routine
Brooklin: My path was also not much of a straight line! But I think we have some shared experiences and opinions.
I was first introduced to Elixir by a good friend of mine in May 2020. However, I was heavily focused on my job at the time and too focused on the JavaScript ecosystem to spare time for Elixir.
A year later, in May 2021, I felt ready for a career change, but I didn't know what. So I quit my job to spend 2 months in Montreal away from work, relaxing in coffee shops and stuffing my face with bagels. After some thought, I realized I wanted to get into Ed-Tech and work with Elixir. From there, I started writing about Elixir as a way to apply what I was learning and that eventually led to a job.
I think a lot of people get into Elixir because of OTP, and I can totally see why. For me, what makes Elixir special is its testability and readability. I love testing, so I fell in love with the well-thought-out test framework integrated into the language. On top of that, Elixir provides tools like pattern matching, the pipe operator, and multiple function clauses that empower me and others to write highly communicative code.
I completely agree with Marco that companies should hire experienced developers and then support them with other developers who have lots of potential but less experience. Soon enough you'll have a team full of experienced developers.
In addition, right now many juniors feel like Elixir is a "risky" language. So we need to provide them opportunities to work. By attracting more juniors, we help the community grow. A growing community means more companies adopting Elixir and more opportunities for everyone.
I also agree with Marco on the importance of meeting other Elixir developers and joining the community, especially if you are new to Elixir and looking for your first opportunity. You're far more likely to find opportunities by meeting people than by any other means.
I've been incredibly fortunate, and I'm grateful for the folks who've helped support my new direction into Elixir. That said, I definitely had and still have some struggles. Like Marco, I struggle to separate myself from OOP concepts. I still call module functions "methods" with a frustrating regularity - it's been corrected in my articles more than once! I also struggle with anxiety, imposter syndrome, all the usual stuff. So meeting people in the Elixir community, while incredibly rewarding, has definitely pushed me outside my comfort zone.
That said, I'm happy and enjoying the challenge.
Hayden: I agree. It's pretty crucial to join the community & try to get to know people. I think it often acts as a 'foot in the door', so to speak.
One of the reasons I wanted to bring you both together wasto spotlight the great work Marco is doing at Taxfix to help developers from other departments cross-train into their Elixir teams. Marco, could you share some more details on the course you run?
How do you generally go about teaching someone Elixir from scratch?
What would your advice be for companies that are looking to start using this approach?
Marco: I wanted to create an umbrella for making courses in Taxfix, called “Insert Coin”, that would host many courses. (Of course, this wasn’t handled only by myself!)
I was allowed to do that and created with the help of my colleagues this repository https://github.com/taxfix/elixir-course
I started the “Insert Coin” initiative with the Elixir course.
Initially, the course was not interactive.
The course targetspeople who have already developed in another programming language. It is intentionally not too deep with the basics and leaves space for personal pro-active exploration. i.e. checking and finding resources online by yourself.
It’s an async course, and interested people can follow the aforementioned github repository for learning Elixir.
There were very few people doing it and giving feedback, however.
Then I set-up a video call every two weeks with internal Taxfixers.In rotation with other colleagues we would cover the basics of Elixir, taking some steps through OTP too.We also produced internal videos for consultation, and this brought a tiny bit of more interest from people.
Some people even began to contact me privately, however not very frequently.
Then I thought about ad-hoc Q&A sessions andwe started doing them in “1-on-1” mode. We kept the weekly Q&A sessions to half an hour, because the real problem of training people on Elixir internally is not their interest, but the fact that they are busy with their own teams.
Some of the ad-hoc sessions worked, and since we had a company shift of focus to our product platform (built in Elixir) I believe that more engineers were apt to contribute to it.. Some of them began even without mentoring, Q&A or coaching. And that’s an amazing fact, IMHO!
How do I generally go about teaching someone Elixir from scratch?
I point them to our Elixir course. However, some people prefer videos, and some text and so on. There are different learning paths. And of course, I try to follow them (with the help of my Elixir dev colleagues to spread the load) with ad-hoc Q&A sessions.
What would my advice be for companies that are looking to start using this approach?
Good question. There’s no secret sauce, however I would suggest:
Give some space (time) to the people who want to learn Elixir to actually read books, check videos and so on.
Let them be “mentored” or helped by one or more experienced Elixir developers. Of course, the experienced dev should like to help people
If the company focuses on Elixir as core or in some components, let the experienced developers guide the newcomers through the Elixir code of their project— especially the complex parts. This is useful to give a feel on how it is to use Elixir in the “real world”
Some Elixir newcomers will be quick in learning, some others will be slower. Everyone has their own pace. We should follow all of them, case by case. The feeling of being excluded “because you are slow in learning” has to be avoided. (PS: I am also a slow learner)
Be prepared to internally hire the trained Elixir developers and on-board them in their new team. Also be prepared to fill the role that the new Elixir dev left. Internal hiring is hard too
Brooklin: I love this project!
(viewing Taxfix’s Elixir github repository) The Simpsons images add a nice touch.
Marco, I love your initiative, and it's awesome you're helping more Engineers get into Elixir. It's also interesting to hear about your iterative approach to getting people interested.
In general, I enjoy PBL (project based-learning) approaches where you can do a project in order to learn concepts. I like that you highlight the concepts each project will go over so people who want to do it know the learning goals, but if they want to go further with it, there's space to expand the project and learn even more.
In general, you learn more by teaching and doing than by passively absorbing, so this project has the right approach. It seems like a great way to learn and apply Elixir. It sounds like there's also a support system for the insert coin Exercism.io team.
You have some great advice on how companies can get started. I'd also like to mention pair programming. You already speak to the benefit of having experienced Elixir developers mentor others. Pair programming is another way to extend that and share knowledge on the team. Ideally, both developers swap between driving and navigating so that the elixir dev in training can get hands-on experience working directly with the codebase.
I'm curious if you've had the same experience. I find that you learn a ton by teaching others. So I suspect that as great as this project is for the folks new to Elixir, it's also fantastic for the teachers.p
Marco: Yes! There was an Excercism support system. However, with v3 they removed the teams option.
Regarding pairing, I did not do that much due to the lack of time.
The current situation is complex. The folks I am guiding on the Elixir path also have activity in other teams, like me. So, there are time constraints.
Ideally, pairing or mob programming would be the way to go. I have done it a couple of times with one colleague, and it gave its fruits. So +1 on that for sure.
Hayden: It seems we're all of the same opinion that companies need to do more to help at entry level rather than just hiring experienced devs. It's great that you have introduced such an inclusive initiative at Taxfix!
How are you both feeling about the whole Elixir ecosystem right now?
Is anything in particular exciting for you?
Brooklin: Right now, I'm really excited about Surface UI and how it's influencing the Elixir and Phoenix ecosystem towards "components" as the idiomatic way of writing Elixir. I love that Surface UI serves as a bridge to the JS/React community. I'm building the upcoming Elixir Newbie website with Surface UI and Tailwind, and it's been seriously fun. For more information, I highly recommend Dave Lucia's recent talk from Elixir Conf https://www.youtube.com/watch?v=Lh5rA1pgWCk&ab_channel=ElixirConf
I get the sense that Elixir is mid-transition from being perceived as a niche language to a general-purpose language perfectly suited for a wide variety of applications. So I'm excited to see it being adopted by a wider community and enjoy seeing new initiatives popping up to support people adopting the language.
The Elixir Newbies I speak to all seem to love the language and the technical/community side of the ecosystem. Right now, the primary concern I hear from them is with the employment side of the ecosystem. Developers new to Elixir don't necessarily feel their hard work learning the language will lead to employment.
That's part of why Surface UI is so cool. It allows developers to take their existing experience from React or other component-based front-end frameworks and apply those skills to Elixir/Phoenix. This ultimately reduces the amount of work necessary to transition into Elixir/Phoenix.
Marco: I would like to explore property testing in Elixir (via the proper library) however, I haven’t had the chance to use it yet or the time to study it—even if I have the book on proper ..! https://github.com/proper-testing/proper
Also, I would like to see evolving elixir desktop (super young project) https://github.com/elixir-desktop/desktop to see if building desktop and mobile applications with Elixir would be possible.
For the moment, I read that the startup of an elixir desktop application on mobile takes 10s at a cold start. If this project is able to reduce startup times, I think that would be another brick to build up nice experiences even in the mobile world.
Hayden: I think we’ve covered plenty! It’s been awesome to discuss things with you both & I look forward to sharing this with the community!
That's all from us for now, I hope this content is helpful for you! Check back here each month for more tips from important voices within the Elixir community