Is anyone finding it difficult learning Elixir or Phoenix?

If so I (and hopefully others!) might have some tips for you :slight_smile:

But first, please say which area you’re finding most challenging:

  • Understanding the concepts
  • Remembering those concepts

Please also include:

  • Books you’ve read so far
  • Whether you have read the official guides yet? (If not, why not?)
  • Any other resources you have read/watched about the topic

I came from Go (3 years) to Elixir and before that I was doing .NET (C#/F#) for about 14 years. It has been almost 3 years since I use Elixir on and off (mostly R&D and personal projects - only one real world) and I (think) understand most of it and most of Phoenix, well enough.

Now (hopefully) I am going to write Elixir on a daily basis. Still I do not feel comfortable enough using Elixir or Phoenix . I want to achieve more and be more productive yet I feel I lag - sometimes unpleasantly. One feeling that I have is that the language and the framework (both of them) change too much. I really hope they slow down a bit and get more stable.

It is hard to pinpoint the problem. But I know I love Elixir very much and a good community have my back.



Coming from an OOP background like me (C#, PHP and Python), I think the problem to make the transition isn’t Elixir but getting your head around functional programming and thinking differently. Elixir is so simple once you understand the concepts of functional programming.

If I had to start over again, I’d love to work with some functional language. Learning design patterns, understand all things related to classes, objects, interfaces and so on, is the most scary thing.


At the beginning understanding all the FP concepts, right now I’m trying to understand better concurrent systems, still a complex topic for me at least since there’s a lot of things to take in mind and there’s not a lot of resources, you don’t see it too much when developing Phoenix web apps, but when you do another kind of projects you need to reason about those things and there’s quite hard to get the right solution for what you’re looking for

An amazing journey so far, Elixir is an amazing language

1 Like

What I’ve found challenging at the beginning:

  • rebinding variables (are they unmutable and mutable?)
  • pattern matching with pin operator
  • why can’t I match on functions
  • in Phoenix - the similar syntax for module attributes and EEx assigns; that drove me crazy

Elixir is easy to learn. Phoenix is a little hard, framework is always hard.

Is there some simple enough tutorial?


Elixir and Phoenix weren’t that difficult to figure out, even for someone without a lot of prior experience. What really held me back was the lack of knowledge about everything else (e.g how to use relational databases). Even now the most challenging part of building applications with phoenix isn’t phoenix, it’s the front end, especially anything having to do with asynchronous JavaScript (which I still suck at).

It’s kind of why I love Drab and try to plug it in everywhere I can. It just solves so many of the problems that I would have had to use JavaScript for otherwise.


I started my professional development career in elixir. So every thing was new to me . The thing I found most difficult was finding appropriate help for problems. Now here on elixir forum community is good. There are fewer libraries and most of the time we have to implement basic features from scratch. So I think community needs to focus more on this. But over all I think elixir and phoenix both are good. Different from other web dev languages. Only boundary is your imagination :blush:


Just out of curiosity what are some libraries that you think are missing?

1 Like

I found some parts of Phoenix a bit slippery at first, mainly the stuff written in macros, since it tended to make things a bit less explicit to me.

I just accepted this as working within a framework, and tried to focus on learning the common idioms used in it, but kinda lacked a deeper understanding the underlying mechanisms and why things were organized the way they were.

But, after listening to a couple of talks by Chris McCord, things finally made sense!


It’s not very difficult, but I wish there were more detailed tutorials that keep in mind that there are beginners. Sometimes I feel sad that a great language and framework such as elixir and phoenix aren’t attracting much more people than the current pace… But it must be that I am too impatient. ^^

One challenge that I will face very soon is the deployment of my first Elixir/Phoenix project… I gathered a lot of tutorials for the matter that will help but it sounds not very very easy to achieve a deployment… But I remain optimistic.
I would like to use cowboy with haproxy for serving my app since I read somewhere that it is what you’ve done for this forum application. I found a tutorial so if I have any problem deploying, I’ll end back probably for asking help. :slight_smile:

If someone have any elixir/phoenix app deployment suggestions for me, please feel free to make them.

For the libraries I missed, I will say an all in one authentication designed for newbies. ^^
Now I’m using Phauxth for my project. It doesn’t implement things like Facebook authentication, but It is very light and easy for understanding for even a newbie.

I would like also to have a smart migration generator library. What I mean ? For example if I want to add a new column to a table, I just have to edit a model file and the right migration file will be generated by running some command. This way all definitions of the same table fields will always appear in the same place. But this is just a whim I guess. ^^


I’m pretty sure there is a mix task that can do that :stuck_out_tongue:

1 Like

Really ? What I mean is that the library will compare the existing migrations with the model files and add if necessary the right migrations.

1 Like

That depends on if you’re using a single migration for each model. Is there a lib in another language that does the same? I’d like to get my head around how this works.

1 Like

I came from C, C#, AS3 and JavaScript primarily.

The hard parts for me have been macro related.

First, understanding language syntax where macros have created ‘sugar’.

And, now, trying to write basic macros has been a major pain.
I’ve tried following the tutorials and books and it’s definitely been the most painful learning experience I’ve had in my programming career. Just so much frustration.

OTP and the Erlang VM have also been big shifts for me – but not as impenetrable as the macro stuff.


Well I know that python framework, Django does that. The concept is simple, the library keeps a log of all the migrations made in the application and that give it an idea of the actual database structure, then it compares it with what the models are saying ans create new migrations that will be saved for future comparison of course…
But as they says it in the docs it is not perfect:

Your models will be scanned and compared to the versions currently contained in your migration files, and then a new set of migrations will be written out. Make sure to read the output to see what makemigrations thinks you have changed - it’s not perfect, and for complex changes it might not be detecting what you expect.

Here is the link to read more about it: Migrations (Django docs)


In this scenario, it’s not you that sucks :wink:


Area that I am finding most challenging is understanding the concepts in Phoenix, namely contexts.

Being familiar with Rails, the whole MVC structure is familiar to me. However, I just cannot fully wrap my head around the whole idea of contexts and how to go about doing it. I have spent countless weeks reading different blog posts, the Phoenix documentation, different codebases, youtube videos, books, and threads on this forum so I get the various ways that others have discussed, yet when it comes time to do mix for myself, I am always left thinking “Does this look right?” or “Wait, this is ok…right?” every time.


Spend some serious time to understand the ins and outs of setTimeout - especially what happens when multiple closures are scheduled with a delay of 0 How JavaScript Timers Work (the basis for 13.2. Taming timers: time-outs and intervals) may be a good starting point then maybe move on to something like Understanding the Node.js Event Loop.

If you are so inclined also look into the Reactor and Proactor pattern.

That may give you a more intuitive sense of how the JavaScript event loop cooperatively schedules code - which may make dealing with asynchronous code easier.

Once there, you may also appreciate


Contexts in Phoenix are still only about a year and a half old, so the definitive guide on how best to structure them in your app might not be written yet. Phoenix Inside Out, however, is a contender for the best current resource out there, in my opinion; not only because of the in-depth explanation of contexts and all things Phoenix, but because of the realistic walkthrough of building an e-commerce website using Test Driven Development and other Agile (or Extreme) Programming practices that you’ll encounter in real world projects, today.

@Kennethuy, you say that you’ve spent countless weeks consuming various resources, which is great! Have you heard of the book? I’ve spent a couple of years trying to consume everything Elixir and Phoenix, so I’ve had some time to weigh the choices. Even though there aren’t as many resources, compared to other languages/frameworks, there’s enough out there (most of it good) to keep you occupied and eventually prepared, as you keep putting what you learn to practice. Don’t give up! Search the forums for more recommendations and answers.

1 Like