Simple diagrams and resources to help learning Elixir, Phoenix, Ecto and other useful stuff for Web Developers.
- 🗨️ Intro
- 📖 Global Resources
- Elixir learning path
- Level 1 (Elixir)
- Installing Elixir and Running IEx
- Elixir guide styles (non exhaustive)
- Basics (Getting started with Elixir)
- String and binaries
- Collections (List, tuples, map, etc.)
- Pattern matching
- Modules and functions
- Structs
- Guard conditions
- Controls Structures (cond, with, case, if)
- IO and files
- Debugging with Elixir
- Level 2 (Phoenix, Ecto and OTP basics)
- Level 3 (OTP, MetaProgramming, security)
- Level 1 (Elixir)
- 📚 Other resources
- 🏘️ Communities
This document can help guide you through Elixir and give you some ideas about what to learn next. This learning path shows one of the many ways to learn Elixir, and should not be considered as a course. The goal here is to give you some tips and resources for each concepts we believe are important.
Each level represents knowledge that are usefull for Elixir Developers, espacially for Web Developers. Some concepts might be missing, so feel free to contribute with your own resources, path, etc. The diagrams provided in this document are meant to illustrate concepts of each leavel, and resources you can find here will match multiple steps of a diagram. That's why resources don't always match the diagrams. Some of the concepts are arbitrarly put in a higher level because of their complexity, however, they might not really belong to that level. For example, AST is the core to Elixir and might be important to be mentioned earlier, but due to its complexity, I put it in level 3.
Anyone can contribute, add resources, links and update mermaid diagrams :) Feel free to open a PR with your updates!
- BEHIND THE CODE: The one who created Elixir (Jose Valim, creator of Elixir)
- Elixir official website
- Introduction to Elixir by Gints Dreimanis
- Elixir in 100 seconds
- Elixir: The Documentary
- Official Elixir documentation
- ElixirSchool
- Exercism's Elixir track
- ThinkingElixir podcast
- Awesome Elixir
- ElixirConf youtube channel
- Welcome to The Jungle Tech medium page
- AppSignal's blog
- Programming Elixir 1.6 by Dave Thomas
- Elixir in Action by Saša Jurić
- Alchemist Camp
- Joy of Elixir
- Elixir Newbie
- CodeCast’s Intro to Elixir
- An Animated Introduction to Elixir
- ElixirWeekly
- ElixirStatus
→ At this level, you can practice coding with Elixir using the Exercism’s Elixir track, a website where you can find puzzles and exercises for every Elixir concepts. Plus, their Sylabus is great!
→ You can also refer to ElixirSchool and the official Elixir documentation.
→ An Animated Introduction to Elixir is also a good entry point to practice Elixir's concepts.
graph TD
Install[Installing with ASDF] --> Running[Running IEx]
Running --> Basics[Basic syntax and concepts - immutability, variables, etc.]
Basics --> Modules[Modules]
Basics --> Strings[String and binaries]
Basics --> AnonymousFunctions[Anonymous functions]
Basics --> PatternMatching[Pattern matching]
Basics --> ListTuplesMaps[Lists, Tuples, Maps]
Basics --> SimpleDebugging[Simple sebugging - IO.inpsect etc.]
Modules --> Functions[Functions]
Functions --> DefaultArg[Default function arguments]
DefaultArg --> Guards[Guard conditions]
Guards --> MultipleClauseFn[Multiple clause functions]
PatternMatching --> MultipleClauseFn
PatternMatching --> CaseWithCond[Case, With, Cond]
Guards --> CaseWithCond
ListTuplesMaps --> Structs
Modules --> Structs
ListTuplesMaps --> Keywords[Keywords]
ListTuplesMaps --> EnumModule[Enum module]
AnonymousFunctions --> EnumModule
EnumModule --> Stream[Stream]
Stream --> Files[Files]
Doc[Documentation and typespecs]
- asdf (version manager):
- IEx (elixir console) and compilation:
- Naming Conventions
- The Elixir Style Guide (github)
- Basic types and operators:
- Imutability:
- List, tuples, map, keywords:
- List comprehension:
- Enum modules:
-
functions (and anonymous functions):
-
Default function argument:
-
Functions and pattern matching:
graph TD
Mix[Mix]
Errors[Errors and exceptions]
Erlang[Erlang and Elixir]
OTP[OTP basic comprehension]
BasicCommands[Basic commands - new, deps, etc.]
ExUnit[ExUnit and testing]
Compilation[Compilation and releases]
Phoenix[Phoenix basics - Application architecture]
Plug[Plug and Conn]
Router[Router]
Controllers[Controllers]
Views[Views]
Contexts[Contexts]
Ecto[Ecto basics - Schema, Fields type etc.]
RepoConfig[Ecto configuration]
Migrations[Migrations]
Schemas[Schemas - relations, embedded, types]
EctoQuery[Ecto.Query]
EctoTransaction[Ecto transactions]
Multi[Multi]
Fragments[Fragments]
Dynamic[Dynamic]
Mix --> BasicCommands
Errors --> OTP
Erlang --> OTP
BasicCommands --> ExUnit
BasicCommands --> Compilation
BasicCommands --> Phoenix
OTP --> Phoenix
Compilation --> Phoenix
Phoenix --> Ecto
Phoenix --> Plug
Phoenix --> Router
Router --> Controllers
Plug --> Controllers
Controllers --> Views
Contexts --> Controllers
Ecto --> RepoConfig
Ecto --> Migrations
Migrations --> Schemas
Schemas --> Contexts
Schemas --> EctoQuery
EctoQuery --> Multi
EctoQuery --> Fragments
EctoQuery --> Dynamic
EctoQuery --> EctoTransaction
- ExUnit
- Introduction to Testing Elixir Applications with ExUnit by Cody Boggs
- "Testing" by Elixir School
- Testing Elixir by Andrea Leopardi and Jeffrey Matthias
- Property-Based Testing with PropEr, Erlang, and Elixir by Fred Hebert
- Intro to OTP with Elixir (Video)
- A brief guide to OTP in Elixir
- Designing Elixir Systems with OTP by James Edward Gray, II and Bruce A. Tate
| => Phoenix's official repository
- Phoenix documentation
- Phoenix Contexts
- Creating a chat App - ElixirBridge (Tutorial)
- Phoenix a Web Framework for the New Web (Video)
- Exploring Elixir and Phoenix: A Comprehensive Overview for Beginners by FullStack Labs
- Phoenix in Action by Geoffrey Lessel
- Real-Time Phoenix: Build Highly Scalable Systems With Channels by Stephen Bussey
- Programming Phoenix 1.4 by Chris McCord, Bruce Tate, and José Valim
- Programming Phoenix LiveView by Bruce A. Tate and Sophie DeBenedetto
| => Ecto's official repository
- Ecto documentation
- Ecto: An Introduction to Database Toolkit
- "Lessons: Ecto" from Elixir School
- A brief guide to Ecto.Multi
- Ecto.Multi hexdoc
- Dynamic queries
- Programming Ecto by Darin Wilson and Eric Meadows-Jönsson
graph TD
Processes[Processes - spawn, send, receive]
Supervisors[Supervisors]
Genserver[GenServer]
Agent[Agent]
Erlang[Erlang integrations]
Telemetry[Telemetry]
ETS[ETS]
Mnesia[Mnesia]
Macro[Macro and use]
Protocols[Protocols]
Behaviours[Behaviours]
Mox[Mox and Hammox - testing]
MetaProgramming[Meta programming]
AST[Abstract Syntax Tree - AST]
Processes --> Supervisors
Supervisors --> Genserver
Supervisors --> Agent
Erlang --> ETS
Erlang --> Mnesia
Erlang --> Telemetry
Processes --> ETS
Processes --> Mnesia
AST --> Macro
Macro --> MetaProgramming
Protocols --> MetaProgramming
Behaviours --> MetaProgramming
Behaviours --> Mox
- Elixir Processes
- Understanding Processes for Elixir Developers
- Elixir, A Little Beyond The Basics - Part 6: processes
- Elixir processes, or Biology-inspired software development (Video)
- Supervisor and Application
- "OTP Supervisors" from Elixir School
- Using Supervisors to Organize Your Elixir Application
- Elixir, A Little Beyond The Basics - Part 7: supervisors
Elixir Secure Coding Training (ESCT)
For deeper learning about related topics, consider these reads:
- Metaprogramming Elixir by Chris McCord
- Craft GraphQL APIs in Elixir with Absinthe by Bruce Williams and Ben Wilson
- Concurrent Data Processing in Elixir: Fast, Resilient Applications with Otp, Genstage, Flow, and Broadway by Svilen Gospodinov