Skip to content

Latest commit

 

History

History
407 lines (317 loc) · 18.6 KB

README.md

File metadata and controls

407 lines (317 loc) · 18.6 KB

Simple diagrams and resources to help learning Elixir, Phoenix, Ecto and other useful stuff for Web Developers.

🗨️ Intro

❔ What to expect

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.

Contributions

Anyone can contribute, add resources, links and update mermaid diagrams :) Feel free to open a PR with your updates!

📖 Global Resources

🔬 What is Elixir ?

What is functional programming?

Global learning and tech watch resources

Why go for Elixir ?

10 tips for new elixir developpers

Elixir cheat sheet

Elixir learning path

Level 1 (Elixir)

→ 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]
Loading

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)

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
Loading

Mix

Errors and Exceptions

Testing your code

Configuration and releases

Erlang with Elixir

OTP Basics

Phoenix

| => Phoenix's official repository

Ecto

| => Ecto's official repository

Level 3 (OTP, MetaProgramming)

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
Loading

Processes (Spawn, Links, Tasks, etc.)

Supervisors

AST

Advanced testing

Security

Elixir Secure Coding Training (ESCT)

📚 Other resources

For deeper learning about related topics, consider these reads:

🏘️ Communities