Phoenix & Elixir Learning Plan

Updated: July 17, 2020 - Added another resource

I recently wrote about my experience (here) playing around with Phoenix and Elixir for the first time. Looking back on that experience, I copied a lot of code without fully understanding how things worked. Not knowing how things work is less than ideal. Because of this, I want to go back and take a more structured approach with learning Phoenix and Elixir. Which led me to make this learning plan! Below is what I think will be a good flow to help guide self-learning. I want to have achieved three things by the end of this plan:

I'm also working through this plan, which means I'll be continually updating it. I'll make sure to add resources I find or make edits if there's a better flow to learning a concept. Attached is a mindmap of the phases, and here's a link to the mindmap.

Phoenix Elixir Learning Plan

Phase 0: Get setup with Phoenix & Elixir #

The Phoenix installation page has a great guide on getting Phoenix and Elixir setup. You will also need to setup Postgres. I set up Postgres via docker.

Phase 1: Build a simple CRUD app #

Addendum

Some examples of CRUD apps are: a todo list, a blog, twitter clone. Ideally anything data you want to save, edit, or delete from a database. For this phase, aim to build a very small part of the app. For example, get something saving and be able to display it on the page.

Phoenix things to learn:

Elixir things to learn:

Resources for this phase:

Phase 1b: Deploy app to Heroku #

There are probably other (better) options for deploying a Phoenix app. But you can't beat Heroku on simplicity and speed to deploy. There's two reasons for getting our app deployed early:

  1. We get the satisfaction of shipping something!
  2. We have a tight feedback loop of write code - test - deploy.

Here's a link to the docs on deploying to Heroku.

Phase 2: Phoenix Deep Dive #

By now we probably want to start adding more functionality to the CRUD app. Before that we will want to learn how to test and moving forward apply TDD to adding new features. Also, now that we've used mix a few times, it would be nice to understand what it is and how it works.

Phoenix things to learn:

Elixir things to learn:

Resources for this phase:

Phase 3: Phoenix Authentication & Monitoring #

I'm super excited to explore Telemetry and Live Dashboard in Phoenix. I think this is a super powerful out of the box feature of Phoenix and I want to take advantage of it. I'm also going to roll up authentication into this phase for two reasons:

Phoenix things to learn:

(Optional) Phase 4: Live View #

The only thing I know about Live View is that it lets me write server-side code and makes it look like I'm using a Javascript front-end.

Phoenix things to learn:

Resource List #


There's always so much to learn when you pick up a new language. And we're adding onto it by trying to learn a new framework as well! I'm hoping that having a more structured approach will make it a little less daunting! If you have any thoughts on the flow or resources to share please let me know in the comments below!