- 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.
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
- 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.
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)