You and Elixir in 2021

It’s been a while since we’ve had a thread like this, so what better way to kick off the year with :003:

What does being an Elixir user mean to you in 2021?


Here are some possible starting points…

Maybe you’ve just discovered Elixir and Erlang?

  • What brought you to it? (Was there a specific article, talk or person that prompted you?)
  • Which language did you come from?
  • How are you finding it?
  • How do you think you’ll use it?
  • Which bits are you finding easy, which, not so much?
  • Is there anything missing that you’d like to see included?

Or perhaps you’ve been using it for a while…

  • What first drew you to it (how long ago!?) and what keeps you here?
  • How have you found it has changed over the years?
  • How have you changed, perhaps while using it? (Maybe you came from an OOP language and your mental model on how to build things has changed?)
  • What do you think were the biggest strengths of Elixir/Erlang when you got into it and what do you think are its biggest strengths now?
  • Is there anything you’d like to see more of or improved or included?
  • Which bits do you love the most and which bits are you most likely to tell others about?
  • What’s your single most important tip to newbies?
  • Which book or learning resource has been your favourite to date? (How many have you read? Which ones have been your favourite!?)
  • Are there any topics you’d like to see more Elixir or Erlang books or learning resources about?

:048:

9 Likes

Wow, so much I could write. But to summarize:

  • Heard of it through the Ruby community, that being my main language for the past decade or so (preceded by others over prior decades).

  • Been learning it slowly over the past several years, since attending my first Elixir Meetup in, I think, 2016.

  • Have worked my way through the entire Exercism track, but still feel there is a lot missing in my knowledge – I’ve done very little with behaviors, nothing with protocols or writing my own macros, and only tutorials for OTP or Phoenix.

  • Intending to scale down the work for my current client and go into semi-retirement, which might finally give me some time to delve deeper into Elixir, OTP, and Phoenix – especially since I still need to read the three books I won in the 2020 giveaways! :slight_smile:

6 Likes

Well, I’ll try to put in a nutshell:

  • My main language was Typescript, on early 2019 I discovered functional programming and had been fascinated! So I tried to implement some rules and designs on Typescript but - today I can see this - JS is not a great at all and trying to implement monad and etc with Typescript’s types system was a big pain on the neck. So i decided to move to a functional language, searched a lot and well, I found Haskell and really like it, although the learn curve was significantly. Some time past and I found Clojure, I really like LISP but the I hate Java and it’s vm, so I did’nt give a try. So youtube recommended this video for me: https://www.youtube.com/watch?v=LN5S1-pzd6c. And wow, I started to study more about concurrency, erlang, BEAM and the ecosystem and felt in love!
  • After that I participated of “Elixir Brasil”, an Elixir event here on my country and
  • 4 months ahead and Elixir is my main language, I deeply dived into functional programming (today I’m studying Reason, Purescript) and I have no doubt that I prefer the functional style and immutability over mutable objects, t’s my thing, you know?
  • There’re a huge universe about the BEAM and elixir I want to study more, like ETS and OTP
  • Overall I really feel in home with the functional paradigm so wasn’t so hard to learn this Elixir part
  • I’ve plans to contribute forever with community, here in the forum but also with code!
6 Likes

I haven’t recently discovered Elixir, I’ve actually been eyeing it for a while, and I finally decided to learn it about a week ago. Everything seems so easy, yet so hard. It’s a hard feeling to explain :sweat_smile:. My current projects use nodejs with express, but hope I can make something out of Elixir.

Cheers, to elixir! :joy:

7 Likes
  • What first drew you to it (how long ago!?)

A little over four years ago, I went to a talk about Elixir and Phoenix, and was drawn to Elixir’s speed, real-time capabilities, as well as Phoenix’s ease of use vs other contemporary high-performance frameworks (such as Martini, RIP).

At the time I was primarily working on Meteor & NodeJS backends; Meteor was/is an attempt at a high-performance real-time web framework, however (when I was working with it) Meteor’s components were too tightly coupled, and state management was a poorly versioned nightmare (it was similar to working with a flux-style like Redux, however imagine the same package’s NAME as well as functionality changing mildly every few months).

Phoenix was everything I wished Meteor was. I dabbled in Elixir and Phoenix for a couple of years on little CRUD web apps for minor projects, then started using it for client projects, and eventually full-time for more complex projects.

In the past few months, I’ve gotten much deeper into Elixir and Erlang/OTP beyond Phoenix/Ecto and simple HTTP/websocket servers, and I am having a great time working in the world of GenServer/mnesia/ETS/etc.

  • and what keeps you here?

Elixir offers such a great combination of performance, fault tolerance, and readability. I have actually found it easy to train engineers in it, versus something like JavaScript or PHP where junior engineers can very easily write awful code.

The language itself is incredibly well-designed and maintained in my opinion, as there are no seismic shifts in functionality between versions, and I have never had a language version change break any of my code.

  • How have you found it has changed over the years?

I appreciate Date math and other useful functions being added to the language core, it feels like I need to install fewer libraries now than I had to a few years ago.

Re: Phoenix, since version 1.3 was released, the framework feels less like Ruby on Rails and more like its own thing.

  • How have you changed, perhaps while using it? (Maybe you came from an OOP language and your mental model on how to build things has changed?)

I definitely look at engineering problems from more of a functional perspective now. Even when writing JavaScript, I take a less imperative approach to code composition.

I also moved to the other side of the planet from where I lived a few years ago, and Elixir is just as fast here :wink:

  • What do you think were the biggest strengths of Elixir/Erlang when you got into it

Speed, real-time capabilities, extremely easy syntax

  • and what do you think are its biggest strengths now?

All previously mentioned plus fault tolerance and scalability; it seems like no matter how you write an Elixir application, scaling up is not particularly complex since clustering and so forth are handled very well within the BEAM environment.

  • Is there anything you’d like to see more of or improved or included?

  • Which bits do you love the most and which bits are you most likely to tell others about?

Same as previous answers re: real-time capabilities, fault tolerance, etc.

When evangelizing Elixir, I usually talk these advantages along with the advantages of Erlang/OTP/BEAM relative to Go/Node/RoR (Go is really popular where I am amongst people woh want to try new tech for web servers, but the shops that I know trying to run Go are having productivity shortcomings).

  • What’s your single most important tip to newbies?

After learning pattern matching and map syntax (“key” => value vs key: value), learn how to work with maps/lists using Enum functions (map, filter, etc) and play with them in iex.

A big wtf? (what the functional-programming?) moment with Elixir for most newbies from OOP is when they reach a problem that they would normally solve using for loops; having some exposure to Enum ahead of time really eases the learning curve.

  • Which book or learning resource has been your favourite to date? (How many have you read? Which ones have been your favourite!?)

I’ve read some of Erlang and Elixir for Imperative Programmers, most of Programming Phoenix (~1.3), Part 1 of Programming Elixir (this post reminds me that I should get to reading Part 2…) a while back, and all of Crafting GraphQL APIs in Elixir with Absinthe by Bruce Williams and Ben Wilson.

The Absinthe book is my favorite, as in addition to being a good learning resource for Absinthe, it also does a great job of explaining the ins and outs of the GraphQL API spec, which I was only vaguely familiar with prior to reading the book.

  • Are there any topics you’d like to see more Elixir or Erlang books or learning resources about?

I’m interested in seeing some example/practical applications of Broadway and this NX thing José keeps teasing, as well as actually experiencing the computational limitations of the BEAM that everyone crows about (beyond just minor performance differences between complex Elixir maths and maths in lower-level code)

3 Likes

I’ve been here for a while but since my introduction post, I haven’t really written anything in Elixir.

  • I’ve started with Exercisms as a way of learning Elixir. It was fine, though I admit, I’ve spent like two hours simply learning how to properly iterate of string characters and general string manipulation(it’s also my first functional language). I feel like this is unnecessarily complex in Elixir, but after a while I do, kinda, get it… I think.
  • For last ~year, I have for some reason stopped dabbling with Elixir. I feel like I was too burnt out to code in my own time. Just recently I got back to it after realization that I do not want to be stuck in .NET Enterprise’y world for the rest of my live. I like my current workplace, I don’t like .NET, Microsoft and their approach with it.
  • For that whole time I was still listening to some podcasts(Elixir Wizards, Thinking Elixir) which kept me interested, but I guess not enough to pick it up again.
  • Few days ago I’ve finally started working with Phoenix, currently learning basics of the framework, I plan on finally writing a personal project in it, to also then learn proper deployment techniques, nginx etc. .NET world spoiled me in a way where I, as a pretty experienced developer, actually feel almost disabled, that I don’t know how to properly work with Docker, SSL certs etc. In Microsoft world it’s all usually done out of the box(or rather out of your wallet).
  • In general - I really like the language, Phoenix/Ecto seem nice as well, I do feel like it widened my horizons as a developer(but I guess same could be said when learning any FP language after using OO only).
  • It seems that community in Elixir world is actually way better than in most other stacks(especially since .NET Community is one of the things I hate about it) which is really nice.

My ‘issues’ with Elixir:

  • Would love to see it gain some more traction in Europe, feels like there should be enough remote talent to pick from but I barely see any offers.
  • Techempower benchmarks. I know this has been already talked about multitude of times here, but it seems like everyone just dropped the subject a year ago. I do understand, that Techempower benchmarks in no way reflect real life perfomance and rightfully so, not everything should be optimized for them, but I do feel like they show Elixir in a bad spot. I cannot fathom how something that is this scalable, can be so low in those benchmarks. I know that all of those examples are ridiculously optimized, to the point of hardcoding static dates and headers(which we cannot really do here), sure, but in my opinion, even if most developers ‘know better’, we should still strive to be better in benchmarks, even if implementations are not realistic. Most people see those results and they don’t think about the fact that no sane person in the world would write code the way it is there. In my opinion it’s a good way of promoting technology/frameworks and to me it feels like minor things like that hurt adoption, especially since that particular benchmark seems to be the ‘go to’ in these matter these days. I wish that at some point in my journey here, I’d be able to contribute something that would help with that.
1 Like

C’mon Dave, they’ll be out of date by the time you get to them :lol:

I am just as bad mind, I have loads of Elixir books that I haven’t got around to yet :cry: I have actually also wondered whether this is part of the reason I haven’t started on a Phoenix app yet - because I feel like I need to read all of my books first. Maybe I will finish Programming Phoenix and start a side project that I still want to do - a site where we (aim to) raise a million pounds for dogs! :049: I think I would really enjoy that project and it would be a perfect fit for LiveView - which is making me want to do it even more!

Firstly, welcome Matheus!

I am currently very interested in TypeScript - our portal for it on Devtalk is quite popular and it’s definitely on my to learn list. If you get a moment, perhaps you could share your experiences about it in one of the Devtalk threads? I’d love to hear more!

We are so lucky that we have some amazing books about Elixir and Erlang. One of the biggest benefits of Elixir is that while it is itself new, Erlang has been around for decades - and there is a huge amount of knowledge in the Erlang community (not to mention libraries) and we’re so lucky to be able to benefit from that. José was very smart to base Elixir on Erlang :smiley:

So I highly recommend all Erlang and Elixir books - I think you will learn a lot from them :smiley: #learning-resources:books

Welcome Mr GD! I’m really enjoying your threads and posts here and on Devtalk! I hope you will start a journal to document your learning journey as I am sure it will be interesting to a lot of people :023:

I really enjoyed reading your entire post Nick - thanks for taking the time to write about your experience! :orange_heart:

I think this is a good tip - Enumerators are a bit harder to grok in general anyway, and focusing on this early may well be a great idea. Funny thing is Finner posted about Enums on Devtalk only yesterday and it reminded me how I had to re-read a chapter on it a couple of times when I was learning to program :lol:

I’ve actually been quite impressed with Elixir’s uptake in Europe - we certainly seem to get quite a few European jobs posted in our jobs section - take a look here: #community:elixir-jobs :smiley:

I agree that benchmarks can have an impact on adoption. I know that one of the things that attracted me to Elixir was how it was coming out on top of benchmarks against other languages. I also noticed a very big increase in interest in Rust when it started to come out on top of the Techempower benchmarks - so it is imo without a doubt an important factor for many.

I also agree with everyone about how those benchmarks are not great in representing real-world usage, and this is something we have thought about fixing. I’ve spoken to PragProg about it and they have indicated they may well be interested in getting involved with it! Since the benchmarks would be centred around real world usage, I think Elixir and Erlang would do very well in them :003: Only thing is finding the time to do it - if there are enough people interested though I might try and move it up our priority list :grin:

5 Likes

Yeah, well, that’s one of the reasons I gravitate to forums like this, and conference talks, rather than books through a major publisher. But the general concepts should still be pretty much applicable, especially in Elixir, as it’s been described as pretty much feature-complete…

1 Like

What does being an Elixir user mean to you in 2021?

I’m here because I admire the Elixir technical leaders - their judgement, organization, skills and productivity. In 2021 I want to increase my Elixir proficiency and speed, be supportive to the community and give contributions where I can.

6 Likes
  • What first drew you to it (how long ago!?) and what keeps you here?

I came here from Julia in 2016-ish, I loved that it was FP, and it had a real deployment story. Julia still doesn’t have a deployment story, (and it never will, for web services - that’s okay), so I’m glad i did. I previously worked at a place where I built from ground up a VM orchestration engine (think mini-EC2) in Elixir; I’m now working at a place where I do a more or less standard Elixir backend. I will probably stay in Elixir until I phase out of tech and switch back to biotech, which I’m aiming for the 5-8 year time horizon. In that time, I will probably try to do my own startup (with Elixir).

  • How have you found it has changed over the years?

It hasn’t, which is the most amazing thing. There are a few niceties. Elixir is gradually becoming more statically typed, which I think is interesting.

  • How have you changed, perhaps while using it? (Maybe you came from an OOP language and your mental model on how to build things has changed?)

I’m getting better at organizing code and writing documentation, both things which elixir encourages in spades.

  • What do you think were the biggest strengths of Elixir/Erlang when you got into it and what do you think are its biggest strengths now?

I didn’t know what they were, and I still think that the biggest strength is 30 years of experience with distributed systems. I also think it’s incredibly important that both Elixir and Erlang are the result of making highly pragmatic choices. (that’s common to all of the languages that I love, Julia, Elixir, Zig).

  • Is there anything you’d like to see more of or improved or included?

There’s a few things around “informal APIs” that aren’t declared in behaviours that I would like to see. For example Elixir’s “compare/2 behaviour”. I’d like a better typesystem that reflects

  • What’s your single most important tip to newbies?

Don’t write GenServers. Use them.

  • Which book or learning resource has been your favourite to date? (How many have you read? Which ones have been your favourite!?)

Geoffrey lessel’s Phoenix in Action has been the most useful to me. It just clicked with the way I learn, and was the right thing given where I was at the time (lots of elixir experience, very little Phoenix Experience)

For 2021 my plans with Elixir are as follows:

  • Try to complete Mavis/Selectrix which is a compile-time static typechecking engine for Elixir
  • Occasionally make videos about some “deep” explorations of the BEAM (Isaac Yonemoto - YouTube)
  • Maintain Zigler (my inline Zig library)
  • Keep working my day job at an elixir shop.
  • Play around with using Zig to interpret .beam files in wasm
  • Start my personal project, which is a personal file server with p2p file transfers, built on top of Phoenix.
5 Likes

I was slow to adopt Elixir. We’d dabbled at my old work in 2016, but it never made it to production. I was always skeptical of functional as it seemed like something neckbeards talked about to make non-neckbeards feel less worthy. I am a lover of apps before I am a lover of tech. I came late to Rails even—around 2011ish—and that was the second time I ever felt giddy about tech since discovering GeoCities and xoom.com in the 90s.

Then the came the frontend framework revolution. I can’t even begin to describe how wrong that felt to me. All those hyper smart, hard-working and obsessed folk focusing their attention on doing everything on the frontend, and everything in JavaScript. It never sat right with me. But as a passive consumer of open source tech to make my little apps, I had no business complaining. I still did, of course, but it’s just how I felt. Like, why would I want to build an API that I’m going to be the only consumer of? It seemed insane back then and it’s still insane today. Also, focusing on JS just seemed like misplaced energy to me.

And hey, along comes LiveView, built on 30+ year old rock-solid and exciting tech kind of makes me feel vindicated in my feelings. It also makes me a little sad about the priorities of our industry. I’m being a little dramatic, yes, but can you imagine if the likes of Ryan Dahl had focused on Erlang those 12+ years ago instead of making that, uh, that little thing he’s known for making. I feel like we’d be in a better place.

(Yes, yes… I’m being sassy and reductive for effect… n*de is a technological feat that LiveView depends on)

ANYWAY

What brought you to it? (Was there a specific article, talk or person that prompted you?)
LiveView

Which language did you come from?
Ruby, previously PHP. I’m a web developer. I love working on frontend and backend. I used to think I had to prove myself as more than a web dev but naw, I’m a web dev. I do write some vim plugins, though! One is even sort of almost kinda a little bit popular (not really)

How are you finding it?
The speed at which I can move is incredible is like nothing I’ve ever experienced. As a former OO champion who actively avoided functional, I’m now getting annoyed by OO in my daily use of it. My team spends all this time agonizing over the proper way to abstract something and recently I’m’ thinking, “Just make a function and put it in some module… if it turns out it was the wrong decision, you can just move it later… it has all of its dependencies right there!”. Anyway, I’d love to pontificate more about this point but ya… total functional convert over here. It’s to the point that I now believe it is just a fundamentally better paradigm. “But… but… the right tool for the job!” …naw. Gimme functional. At least in the world I live in.

How do you think you’ll use it?
I’m currently building an “agile tool”. It’s a reproduction of my team’s standup board which is on google’s JamBoard. We are feeling no huge pain there and I’m not even sure they’ll be into letting me trial it with them, but it’s a good sized project I’m excited about that can help me gain proficiency (and hopefully some fluency) in Elixir and Phoenix.

Which bits are you finding easy, which, not so much?
Coming from Rails and loving how opinionated it is, it’s been an adjustment figuring out where Phoenix is opinionated and where it isn’t. I’ve read some people saying it is not opinionated at all yet it certainly has some opinions! For example, one thing I always appreciated about Rails tutorials was the file path was ALWAYS included in examples. Since Phoenix doesn’t mandate where files have to go, this isn’t usually a thing, but it would be nice in examples to get a hint. I’ve often found some context can be missing whereas in Rails guides you always got everything spelled out for you like you were a beginner. I really liked that and am missing that in Elixir/Phoenix docs (I can say I have contributed here and plan on doing more soon!)

*Is there anything missing that you’d like to see included?
A better way to break out of a syntax error in iex than #iex:break (I know this is all on the Erlang side of things… I’ve read the github issues around it!)
Better vim support (I can help here, I’m just… taking my time… gah)

2 Likes

Don’t write GenServers. Use them.

As in, like… never write your own GenServer? Are you talking from scratch? Or literally never type use GenServer and find a lib that does what you’re looking to do?

Sorry to pick apart your succinct point, but as a n00b I’m really curious here.

1 Like

I wish I could write as succinctly as this :smiley: Instead of my ramble I wish I had just written this because this is exactly how I feel too.

2 Likes

I wouldn’t say never, but they are really hard to get right, so I’d recommend waiting a bit until you write GenServers, like 1 year or so. You should be using GenServers that other people have written with a clear api and usage examples (like liveview or broadway). There are a few cases (like a game with state) that are exceptions

1 Like

I had only this weekend documented the Elixir related books that I have read (or intend to read):

I found Elixir a few years ago (oddly while browsing a bookshop). It seemed to be a more accessible version of Erlang.

Now it’s my goto language for small utilities.

I spend some time each day mentoring on exercism.io to keep my hand in.

4 Likes

I have been toying with Elixir time to time for some years now, but I think this year will be finally the year that I will go full ahead and put some of my ideas in practice and release them for the world to see, and all this in Elixir :slight_smile:

All the knowledge I am acquiring in this process will be collected under Phoenix360 project:

  • Automated Debian server setup with Docker and Traefik through Cloud Config or bash script.
  • Debian server Hardening.
  • Docker hardening.
  • Phoenix and Elixir Hardening.
  • Development with Docker.
  • Localhost production for staging.
  • Building Docker Releases, that can also be extracted as a normal release.
  • Deployments with bash, and without the need to use Gitlab runners, Github actions or something similar:
    • Security is top priority, and using CI.CD pipeline increases the attack surface, including on the sever itself.
    • Just bash bin/deploy.sh from your PC to build the Docker release, deploy it to the target, and start it on the target. All this without using any tooling like Ansible, Puppet or Chef.
  • The Phoenix360 web apps concept to run several apps under the same domain or as separated domains, but always using the same Cowboy server.
4 Likes
  • I got the Programming Elixir 1.6 book using my .edu email. It became my new Bible.
  • I’ve been solving coding challenges with Elixir. Time and again, using a functional approach makes things easier to digest.
  • I’m planning to build my final year project using Phoenix and LiveView. Maybe the whole PETAL stack… :sweat_smile:
4 Likes

Answers in order of questions:

New to Elixir and Erlang as of this past year. I saw a talk that I feel terrible for not remembering the name of, but the speaker was talking about how discovering Elixir and Phoenix changed his whole perspective on programming, web dev in particular. Quarantine hit and I decided that I would spend the whole thing just absorbing the world of Elixir, learning about Erlang and what was/is so special about it. Never looked back.

I originally landed on that talk while looking for alternatives to plain JS/React. I certainly found what I was looking for in Elixir and Phoenix.

I had no experience with functional programming or anything non-OO, so I have found it both immensely challenging and hugely rewarding. Every time I break through another hazard on the road to learning Elixir, I’m generally rewarded with something that feels like a super power.

I’ll be using it primarily to develop a sales and information platform for a company in an industry full of people who are VERY tech-phobic.

I don’t think I find any of it easy, but it’s ALL rewarding. The hardest thing for me is seeing the plumbing of a piece of software. I guess I’m really looking for a purpose-built IDE that has shockingly good debug tools. I’ve heard IntelliJ is a favorite, but the plugin was a little wonky last time I used it.

I think a better IDE story is missing as stated above, but this is almost certainly because I haven’t learned to fully utilize debugging tools beyond IO.inspecting everything to within an inch of its life, lol.

Hope this is useful!

3 Likes

I was brought by boredom in Ruby.

Stockholm syndrome is keeping me there :wink:

I started to see more that closures == objects (in Java/Ruby sense).

FP and FP. Additionally the idea that the VM is the OS you are running your applications is quite nice (BEAM is an OS).

Integration between Erlang and Elixir. The Mix (Elixir) and Rebar3 (all other BEAM languages) is quite irritating.

Binary pattern matching and new socket module.

receive is blocking and (almost) “free” in regards to CPU time.

3 Likes

Well I for one have really enjoyed reading everyone’s input, especially the longer posts! :003:

And it’s awesome seeing so much excitement from some of our newbies (props to you all!!) and in fact it has made me want to hurry up and get a couple of Phoenix pet projects done that I’ve been meaning to do for a while …you may not realise it but even as a newbie all your enthusiasm and excitement is actually helping keep the passion alive for some of us older dogs, too. So thank you! :purple_heart:

That’s awesome to hear! We have a great bunch here and it’s brilliant seeing more and more cool people like you join everyday :sunglasses:

Absolutely!

Thank you everyone who has taken the time to respond to this thread - these types of threads are some of my favourite :orange_heart:

6 Likes