Learn Elixir - Self Guided Curriculum
Level up your elixir skills with our self-guided curriculum
-
1
-
Course Overview
-
What you need to do well in this course
-
Why elixir is poised for the future
-
What is functional programming and how does it apply to Elixir
-
2
-
Overview and Installation
-
Syntax Basics
-
Pattern Matching
-
Advanced Syntax
-
Keeping Flow Clean
-
Functional Descriptive Flow
-
3
-
Overview and Phoenix Installation
-
Introduction to Phoenix and it's Architecture
-
Creating a REST API
-
GraphQL vs REST
-
Creating a GraphQL API
-
Creating Web Pages with Phoenix
-
Phoenix Channels and GraphQL Subscriptions
-
4
-
Overview
-
Creating Schemas and Migrations
-
Data Integrity Through Changesets
-
Writing and Composing Queries
-
Managing Schema Relationships
-
Integrating Ecto with Phoenix
-
5
-
Overview
-
1 - What is OTP
-
1.1 - OTP Supervisors and Workers
-
1.2 - OTP Process Communication
-
1.3 - OTP Agent, GenServers & Tasks
-
1.4 - OTP Application
-
1.5 - OTP "Let it Crash"
-
1.6 - OTP Process Limitations
-
2 - ExUnit
-
2.1 - Writing Testable Code
-
2.2 - Testing OTP
-
2.3 - Testing Ecto
-
2.4 - Testing REST
-
2.5 - Testing GraphQL
-
2.6 - Testing GraphQL Subscriptions
-
3 - Writing Maintainable Tests
-
3.1 - Cleaning up Tests with Support
-
3.2 - Stubbing & Mocking
-
3.3 - Testing Side Effects
-
3.4 - Crushing Bugs with IEx, Logger and IO.inspect
-
6
-
Overview
-
1.0 - Thinking About Errors
-
1.1 - Erroring Gracefully
-
1.2 - Writing to Handle Unknown Errors
-
2.0 - Adding Logging to Aid Debugging
-
2.1 - Creating Error Systems for Debugging
-
2.2 - Using IEx to Debug Code
-
2.3 - Debugging with Observer
-
3.0 - Absinthe's Middleware
-
3.1 - Absinthe's Resolution Object
-
3.3 - Absinthe Fields and Objects
-
3.4 - Writing Documentation With Absinthe
-
7
-
Overview
-
1.0 - Elixir Limitations
-
1.1 - Statistics to Measure Scale
-
1.2 - Side Effects of Scaling
-
2.0 - Bottlenecks from Elixir
-
2.1 - Pooling for Increasing Bottleneck Width
-
2.2 - ETS to Eliminate State Access Bottlenecks
-
2.3 - How to Architect with Bottlenecks in Mind
-
3.0 - Connecting Elixir Nodes
-
3.1 - Sending Messages Across Nodes
-
3.2 - Clustering Nodes with LibCluster
-
3.3 - Distributing Work with Tasks
-
3.4 - Distributing Phoenix & Absinthe
-
4.0 - Using GenStage to Process Lots of Data
-
4.1 - GenStage Dispatchers
-
4.2 - GenStage Consumer Producers
-
8
-
Overview
-
1.0 - What are Metrics
-
1.1 - Beam Telemetry
-
2.0 - Setting up Prometheus and Grafana
-
2.1 - Gathering Metrics with Prometheus
-
2.2- Prometheus Counters, Guages & Histograms
-
2.3 - Grafana Deep Dive
-
2.4 - Building Good Grafana Dashboards
-
3.0 - Using Global for Distributed Communication
-
3.1 - CAP Theorem Basics
-
3.2 - Creating Distributed Supervisors with Horde
-
4.0 - Replicating State Across Clustered Nodes
-
4.1 - Using DeltaCRDT to Create a Caching System
-
4.2 - Distributed Hash Rings
-
4.3 - Using Redis as a Cache
-
4.4 - Distributed Caching Types & Trade-offs