Getting started with Elixir: A comprehensive learning path
If you’re here, it means you’re probably curious about Elixir, that dynamic, functional language that’s great for building scalable and maintainable applications.
Whether you’re just getting started or looking to dive deeper, this learning path we’ve created at Welcome to the Jungle will hopefully help you along the way, especially if you’re interested in exploring awesome frameworks like Phoenix and Ecto.
Think of this as a roadmap to Elixir, not a strict course. It’s packed with tips and resources for key concepts that we think are important. Feel free to go at your own pace and explore what interests you most!
What you’ll learn
We start by getting you comfortable with Elixir’s syntax and the basics of functional programming. From there, we jump into Phoenix, which is perfect for building web applications, and Ecto, your go-to tool for managing databases. By the end, you’ll have the confidence to start building and deploying your own Elixir projects.
What to expect
This learning path is like a friendly tour through Elixir’s core ideas, with lots of resources and tips along the way. We’ve organized information into three levels, starting with the easiest and progressing to the hardest. We cover the key areas you should focus on, but remember, this is just one path — feel free to adapt it and follow the learning journey that resonates best with you.
Diagrams and resources
You’ll find some diagrams along the way to help you visualize the concepts at each stage. The resources we suggest are pretty flexible and can apply to multiple parts of your learning journey, so don’t worry if they don’t always line up exactly with the diagrams.
Concept levels
We’ve grouped concepts into different levels based on how tricky they are, but don’t let that stop you from exploring them earlier if you’re up for it. For example, abstract syntax trees (ASTs) are a big part of Elixir, but we’ve put them in level 3 because they’re a bit more complex. Just dive in whenever you’re ready!
How to contribute
We’d love your help to make this learning path even better! If you think we’ve missed something, have awesome resources to share, ideas to suggest, or updates to the diagrams, please go ahead and open a pull request on our repository. We’re all on this learning journey together!
What is Elixir?
Before we set out on our learning path, let’s take a look at the Elixir ecosystem as a whole.
The Elixir ecosystem
Elixir is a functional and concurrent programming language that runs on the Erlang virtual machine. It’s known for being super-reliable, which makes it perfect for building scalable applications. If you’re curious about what Elixir is all about, here are some great resources to get you started:
- Behind the Code: The one who created Elixir: An insightful video interview with José Valim, the brains behind Elixir.
- Elixir’s official website: Your go-to for everything Elixir.
- Introduction to Elixir by Gints Dreimanis: A great intro to Elixir that quickly covers the basics.
- Elixir in 100 seconds: A super-quick introduction to what Elixir is all about.
- Elixir: The Documentary by Honeypot: A behind-the-scenes look at how Elixir was created and how it evolved.
Functional programming
Elixir is a functional programming language that focuses on immutability and first-class functions. Getting a handle on these concepts is key — the below links will help:
- Functional Programming 101 by Cassidy Williams: A great starting point for understanding functional programming.
- What is functional programming | Easy way by Hitesh Choudhary: Check out this video for an easy-to-understand introduction to functional programming.
- Grokking Simplicity by Eric Normand: A book that breaks down functional programming into easy-to-grasp ideas, showing you how to simplify your code and make it more manageable in real-world projects.
Why choose Elixir?
So, why pick Elixir? Well, it has a lively community, a strong ecosystem, and loads of advantages. For a deeper look, check out The Soul of Erlang and Elixir by Saša Jurić.
Global learning and tech watch resources
- Official Elixir documentation: Your go-to resource for everything you need to know about Elixir’s features and functions.
- Programming Elixir 1.6 by Dave Thomas: A practical book that takes you through Elixir programming with clear examples and exercises.
- Elixir in Action by Saša Jurić: A hands-on guide that takes you through building real-world applications with Elixir.
- Elixir School: A fantastic free resource to help you learn Elixir.
- Exercism’s Elixir track: A site with puzzles and exercises to help you practice every Elixir concept. Its syllabus is great!
- Alchemist Camp: A structured, hands-on approach to learning Elixir, with engaging video tutorials and real-world projects.
- Joy of Elixir: A beginner-friendly online book that makes learning Elixir fun and approachable, using simple language, humor, and interactive examples.
- Elixir Newbie: Learn Elixir with a friendly and approachable tone. There is also a podcast available.
- 10 tips for new Elixir developers by Chris Gregori: Some valuable advice if you’re just starting out with Elixir.
- CodeCast’s Intro to Elixir: A hands-on, video-driven introduction to Elixir, focusing on practical coding exercises and real-time feedback.
- An Animated Introduction to Elixir by Mark Mahoney: A visually engaging and easy-to-follow introduction to Elixir.
- Thinking Elixir podcast: A podcast that dives deep into Elixir’s ecosystem, featuring expert interviews, real-world examples, and practical advice.
- Awesome Elixir: A curated list of useful Elixir resources and tools, including libraries, frameworks, tutorials, and best practices.
- ElixirConf’s YouTube channel: Videos from ElixirConf, featuring talks from the community.
- Welcome to the Jungle Tech Medium page: A range of in-depth articles that cover practical Elixir tutorials, case studies, and handy tips.
- AppSignal’s blog: Posts and tips on Elixir performance and best practices.
- ElixirWeekly: A curated newsletter that delivers the latest news, articles, and updates from the Elixir programming community.
- ElixirStatus: Post your new project, blog post, or version update there.
Elixir cheat sheet
Keep this Elixir cheat sheet handy for quick reference when you need it.
Our Elixir learning path
Level 1: Elixir core concepts
Objective: Get a strong grip on Elixir’s syntax and functional programming basics.
Installing Elixir and running the IEx console
The asdf version manager
- asdf: A versatile CLI tool that lets you manage multiple Elixir versions (along with other language runtimes) on a per-project basis.
- Installing Elixir and Erlang with ASDF: A simple guide to setting up Elixir and Erlang using asdf.
IEx and compilation
- Elixir interactive mode: The interactive mode allows you to execute code snippets, test functions, and experiment with expressions in real time.
- IEx Helpers by Elixir School: Handy tips and tricks for using IEx.- How does Elixir compile/execute code? by Xavier Noria: An explanation of how Elixir compiles and runs your code.
Elixir style guides
- Naming Conventions: The official guide to naming things in Elixir.
- The Elixir Style Guide: A great GitHub resource with tips on writing clean and idiomatic Elixir code.
Basics
Basic types and operators
- Basic types: An overview of the fundamental data types in Elixir.
- Basic operators: A rundown of the essential operators you’ll use in Elixir.
- Basic Data Types by Elixir School: A friendly guide to understanding Elixir’s core data types and how to use them.
Immutability
- Understanding Elixir’s Immutability and Data Structures by lago: An article about immutability and data structures, explaining how they work and why they’re essential for writing reliable and efficient code Elixir.
Strings and binaries
- Binaries, strings, and charlists: A quick dive into how Elixir handles different types of text and binary data.
Collections
Lists, tuples, maps, keywords
- Collections by Elixir School: An easy-to-follow guide to Elixir’s different collection types and how to use them effectively.
List comprehension
- Comprehensions: A friendly intro to using list comprehensions in Elixir for cleaner and more efficient data handling.
Enum modules
- Enum by Elixir School: A helpful guide to using the Enum module in Elixir for working with collections.
- Enumerables and Streams: A simple overview of Elixir’s tools for handling data with enumerables and streams.
Pattern matching
- Pattern matching: A guide to mastering pattern matching in Elixir.
- Pattern Matching by Elixir School: A great resource to get you up to speed with pattern matching basics and best practices.
Modules and functions
- Modules and functions: Explore how Elixir uses modules and functions to keep your code organized and reusable.
- Composition by Elixir School: A great guide to composing functions in Elixir, taking you through how to build up complex behavior from simpler pieces.
Functions (and anonymous functions)
- Functions by Elixir School: A friendly rundown on how to create and use functions in Elixir, including those handy anonymous functions.
> Default function argument
- Default arguments — Find out how to use default arguments in your functions to keep things tidy and flexible.
- Default Arguments by Elixir School: Helpful information about how default arguments work in Elixir.
> Functions and pattern matching
- Functions and Pattern Matching by Elixir School: How to blend functions with pattern matching for even more powerful Elixir code.
Structs
- Structs: Learn how to use structs to manage and organize complex data in Elixir.
Guard conditions
- Guards: Get the scoop on guard clauses and how they add extra conditions to your pattern matching.
Control structures
- Case, cond, and if: A guide to Elixir’s control structures for making decisions in your code.
- Control Structures by Elixir School: A simple overview of Elixir’s control structures.
IO and files
- IO and the file system: Learn how to handle input and output, including when working with files in Elixir.
Debugging
- Three Ways to Debug Code in Elixir by Pulkit Goyal: Check out these practical tips for debugging your Elixir code like a pro.
Level 2: Phoenix, Ecto, and OTP basics
Objective: Mix your Elixir skills with web development and database management for a complete setup.
The Mix build tool
- Mix by Elixir School: A guide to using Mix for managing projects and tasks.
- Introduction to Mix: A quick intro to Mix and how it helps you with Elixir projects.
Errors and exceptions
- try, catch, and rescue: Learn how to handle errors and exceptions in Elixir with these handy techniques.
- Error Handling by Elixir School: A guide to managing errors and exceptions to keep your Elixir code running smoothly.
Testing your code
- ExUnit: Get to know ExUnit, Elixir’s testing framework, for writing and running tests.
- Introduction to Testing Elixir Applications with ExUnit by Cody Boggs: A great introduction to testing your Elixir applications with ExUnit.
- Testing by Elixir School: A helpful guide to writing tests in Elixir to ensure your code is reliable.
- Testing Elixir by Andrea Leopardi and Jeffrey Matthias: A comprehensive look at testing techniques to ensure your Elixir code is reliable and bug-free.
- Property-Based Testing with PropEr, Erlang, and Elixir by Fred Hebert: An excellent book that helps you master property-based testing in Erlang and Elixir.
Configuration and releases
- Configuration and releases: Learn how to configure your Elixir applications and handle releases for deployment.
Erlang with Elixir
- Erlang Interoperability by Elixir School: Discover how Elixir and Erlang work together and how to use Erlang libraries in your Elixir projects.
OTP basics
- Intro to OTP with Elixir by Jesse J. Anderson: A video to understand OTP and its role in Elixir.
- A Brief Guide to OTP in Elixir by Gints Dreimanis: A quick overview of OTP and how it enhances your Elixir applications.
- Designing Elixir Systems with OTP by James Edward Gray, II and Bruce A. Tate: Explore advanced concepts and best practices for designing robust Elixir systems with OTP.
The Phoenix web framework
- Phoenix’s official repository: The go-to for all things Phoenix, including source code, issues, and updates.
- Phoenix documentation: Everything you need to know about Phoenix, straight from the official docs.
- Exploring Elixir and Phoenix: A Comprehensive Overview for Beginners by FullStack Labs: A friendly guide to understanding how a Phoenix app is structured and how everything fits together.
- Contexts: Learn about Phoenix contexts and how they help organize your application’s business logic.
- Creating a Chat App by ElixirBridge: A hands-on tutorial on building a chat application using Phoenix.
- Phoenix a Web Framework for the New Web by José Valim: A video overview of why Phoenix is a great choice for modern web development and what makes it special.
- Phoenix in Action by Geoffrey Lessel: Dive into Phoenix and learn how to build powerful web applications with this practical guide.
- Real-Time Phoenix: Build Highly Scalable Systems With Channels by Stephen Bussey: An introduction to building scalable, real-time web applications with the Phoenix framework, showing you how to leverage channels and other features for dynamic, interactive systems
- Programming Phoenix 1.4 by Chris McCord, Bruce Tate, and José Valim: A detailed resource for mastering Phoenix and creating high-performance web applications.
- Programming Phoenix LiveView by Bruce A. Tate and Sophie DeBenedetto: A practical book that shows you how to build interactive, real-time web applications with Phoenix LiveView, allowing you to create dynamic user interfaces with minimal JavaScript.
The Ecto database library
- Ecto’s official repository: The central hub for Ecto’s source code, issues, and updates.
- Ecto documentation: Everything you need to know about using Ecto for database interactions.
- Ecto: An Introduction to Elixir’s Database Toolkit by Gints Dreimanis: A guide to getting started with Ecto.
- Lessons: Ecto by Elixir School: A helpful set of lessons on how to use Ecto for database operations and queries.
- A brief guide to Ecto.Multi by Elixir School: A quick overview of how to use Ecto.Multi for running multiple database operations in a single transaction.
- Ecto.Multi: The official documentation for Ecto.Multi, showing how to manage complex database transactions.
- Dynamic queries: Learn how to build and manage dynamic queries with Ecto to make your data operations more flexible.
- Programming Ecto by Darin Wilson and Eric Meadows-Jönsson: A guide that dives into using Ecto for managing your database in Elixir.
Level 3: Advanced topics (OTP, Metaprogramming, security)
Objective: Get the hang of advanced features and tools to build super-fast and efficient applications.
Processes (spawning, links, tasks, etc.)
- Processes: A deep dive into how Elixir’s processes work, offering insights and practical tips for using them effectively.
- Understanding Processes for Elixir Developers by Carlo Gilmar: A guide to grasping how Elixir handles processes, making your concurrency tasks easier.
- Elixir, A Little Beyond the Basics — Part 6: processes by Karl Seguin: Explore Elixir processes with this article that goes a bit deeper into how they work and why they’re important.
- Elixir processes, or Biology-inspired software development by Pedro Assunção: Watch how Elixir’s approach to processes is inspired by biological systems and what that means for your code.
Supervisors
- Supervision trees and applications: An overview of how supervisors and applications work together to manage processes in Elixir.
- OTP Supervisors by Elixir School: A friendly guide to using OTP supervisors for building resilient and fault-tolerant Elixir applications.
- Using Supervisors to Organize Your Elixir Application by Ilya Averyanov: Discover how to use supervisors to keep your Elixir app organized and running smoothly.
- Elixir, A Little Beyond the Basics — Part 7: supervisors by Karl Seguin: Dive deeper into Elixir supervisors with this detailed guide.
The abstract syntax tree (AST)
- A deep dive into the Elixir AST by Lucas San Román: A thorough look at the AST and how it works under the hood.
- The Elixir AST explained using the AST Ninja by Arjan Scherpenisse: A fun and detailed explanation of Elixir’s AST to help you understand how code is structured and processed.
Advanced testing
- Mocks and explicit contracts by José Valim: Learn about advanced testing techniques in Elixir, including how to use mocks and how to define explicit contracts for your functions.
Security
- Elixir Secure Coding Training (ESCT): Handy tools and tips to keep your Elixir code secure and protected from vulnerabilities.
Other resources
For deeper learning about related topics, consider these reads:
- Metaprogramming Elixir by Chris McCord: Unlock the power of metaprogramming in Elixir and learn how to write more flexible and dynamic code.
- Craft GraphQL APIs in Elixir with Absinthe by Bruce Williams and Ben Wilson: An easy-to-follow book that shows you how to build awesome GraphQL APIs in Elixir using Absinthe, packed with hands-on examples and tips.
- Concurrent Data Processing in Elixir: Fast, Resilient Applications with Otp, Genstage, Flow, and Broadway by Svilen Gospodinov: Master concurrent data processing in Elixir with this book, which shows you how to efficiently handle and process data in a scalable way using practical examples.
Communities
Join Elixir forums and communities to stay connected and learn from others:
Engage with the community to grow your Elixir skills!
Apply without fear!
At Welcome to the Jungle, we’re hiring backend developers who are passionate and curious, regardless of their current tech stack or degree. If you are hired, we will train you on Elixir! We want to ensure that our employees are well-equipped with the skills and knowledge necessary to succeed. That’s why we offer a comprehensive training program to all new backend engineers hires, so they can hit the ground running.
Ready to jump in? Apply now!
Written by Anne-Laure Civeyrac, Tech editor, based on the learning path developed by backend developers.
Illustration by WTTJ