The DockYard Academy curriculum is an open source curriculum to help students learn Elixir.
The beta_curriculum
is a work in progress effort available for feedback and contribution.
When launched, this curriculum will be used as the primary teaching material in DockYard Academy.
Contact Brooklin ([email protected]) or DM at @BrooklinJMyers on Twitter if you would like more information.
Contributors and beta testers are welcome to go through the course, raise issues, and make PRs. See the Contributor Guide.
See our list of Open Issues. Comment on any issue and mention @brooklinjazz to get support.
The recommended installation methods for this course are from the Elixir language website. If you cannot see mermaid.js graphs, please ensure your Livebook version is correct. In the future when working with multiple Elixir projects, there is a tool called asdf
that can be used to install different versions of Erlang/Elixir as defined by the .tool-versions file in a project.
-
Clone the project
git clone https://github.com/DockYard-Academy/beta_curriculum.git
.
-
Install Elixir
brew install elixir
-
Install Livebook
mix escript.install hex livebook
- You may prefer to install Livebook Desktop instead of running Livebook with an
escript
.
-
Start the Livebook server and open the navigation page where you can find the course reading material and associated exercises
livebook server start.livemd
-
Clone the project
git clone https://github.com/DockYard-Academy/beta_curriculum.git
.
-
Install Elixir
- Download the installer here and run it. You will get a Windows Defender notice (don't worry) and select "More info" and "Run anyways" then follow the instructions with the default settings.
- NOTE: You need to type
iex.bat
instead ofiex
when starting the interactive REPL. - Run
iex.bat --sname test
to trigger a firewall prompt that needs to be accepted to run Livebook. - Run
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
in an administrator terminal in order to usemix
.
-
Install Livebook
mix escript install hex livebook
- After installing you will see a prompt that says you need to add
c:/Users/YOUR_USERNAME/.mix/escripts
to the system PATH. Search forSet the system environments variables
and it will open the Control Panel section. Under the "Advanced" tab select "Environment Variables", then click on the entry for PATH and the "Edit" button. Select "New" and then enter the prompted path so that you can runlivebook
directly from the command line. - You may prefer to install Livebook Desktop instead of running Livebook with an
escript
.
-
Start the Livebook server and open the navigation page where you can find the course reading material and associated exercises
livebook server start.livemd
-
Install the Ubuntu distribution application from the Windows store here. Follow the instructions in the description to ensure WSL in enabled on your system.
-
Follow the installation steps below for Linux (Ubuntu) inside the Ubuntu WSL application you just downloaded.
-
Clone the project
git clone https://github.com/DockYard-Academy/beta_curriculum.git
.
-
Install Elixir
- Add the Erlang Solutions repository
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb && sudo dpkg -i erlang-solutions_2.0_all.deb
- Update the package repository list
sudo apt-get update
- Install Erlang
sudo apt-get install esl-erlang
- Install Elixir
sudo apt-get install elixir
- Add the Erlang Solutions repository
-
Install Livebook
mix escript.install hex livebook
-
Start the Livebook server and open the navigation page where you can find the course reading material and associated exercises
livebook server start.livemd
Raise an issue or contact [email protected] if you are having trouble setting up the curriculum.
When installing Livebook mix escript.install github livebook-dev/livebook
you may see the following error.
** (Mix) Could not compile dependency :aws_signature, "/home/user/.mix/rebar3 bare compile --paths /tmp/mix-local-installer-fetcher-Ao9gNA/deps/new package/_build/prod/lib/*/ebin" command failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile aws_signature", update it with "mix deps.update aws_signature" or clean it with "mix deps.clean aws_signature"
To resolve this issue, update rebar3
by running the following command.
mix local.rebar
Then try installing Livebook again. This time it should succeed.
If using asdf you need to create the shim for livebook.
asdf reshim
After installing livebook mix escript.install github livebook-dev/livebook
you may see the following message:
warning: you must append "/home/user/.mix/escripts" to your PATH if you want to invoke escripts by name
This means we need to append .mix/escripts
to the PATH variable in order to find the location of the .mix/escripts
folder when we run the livebook command.
Try running the following to confirm you can run Livebook. Stop Livebook once you have confirmed it runs successfully.
~/.mix/escripts/livebook server
Different operating systems use different configuration files, typically either .bashrc
on Windows and Linux or .zshrc
on MacOS.
If you want to run livebook
instead of ~/.mix/escripts/livebook
, add the following at the bottom of the appropriate configuration file.
PATH=$PATH:~/.mix/escript
Then close your terminal and reload it, or run the following. Replace .bashrc
with the appropriate configuration file.
source .bashrc
Now you can run Livebook using the livebook
command.
livebook server
This is a known Livebook issue (196, 194, 1042) that happens when some Erlang files don't show a dialog for its firewall approval on the first Livebook execution after being installed.
- Before calling Livebook, execute
iex --sname test
on terminal. - On appearing Windows firewall dialog, approve permission for
epmd.exe
. - Both
erl.exe
andepmd.exe
should appear on firewall-allowed apps.
On a new install of a Linux distribution the package list does not come updated and you need to run (in Ubuntu) sudo apt update
. This is also true when adding a new package such as when we add the Erlang Solutions repository.
This project uses codespell for spell checking.
If contributing to the project, install codespell and run the following command to fix any spelling errors. Ensure all corrections are correct before committing altered files.
codespell --skip="./utils/deps/*,./.git/*,./utils/lib/assets/*" -w
Students will be competent developers prepared to excel in the Elixir industry. They will have a solid grasp of Elixir fundamentals, Elixir project development, Phoenix project development, LiveView, and OTP. They will also have the researching and problem-solving skills necessary to expand their skill set and thrive throughout their career. Students will be capable of delivering high-quality, well-tested features to a production complexity codebase.
The curriculum is still a rough outline subject to change and feedback. see start.livemd for a full weekly and daily breakdown.
- Course Overview, Command Line, Git, Livebook, PATH
- Basics (Simple Types, Operators, Variables, Comments)
- Complex Types (atom, tuples, list, keyword list, map, mapset)
- Modules, Functions, Structs, Control Flow
- Problem Solving & Enumeration (ranges, map, filter, all, any, count, find, random)
- Comprehensions, Enum.reduce
- Built-In Modules (Map, Tuple, List, Date & Time)
- Guards, Pattern Matching
- String Manipulation (Regex, Charlist vs Strings)
- Polymorphism, Protocols & Behaviors
- Performance (Immutability, Streams, Lists Vs Tuples Vs Maps Vs Mapsets, Big O, Benchee, :timer) & Recursion
- File, .iex Scripts, Persistence, Data Validation (Ecto Changesets) (+Binary)
- Processes (Processes, Generic Server, Genserver, Agents, ETS)
- Mix Tooling (Credo, Dialyzer, Config, Deps, Documentation, ExUnit)
- Supervisor Basics and Fault Tolerance (+Task)
- BEAM
- Ecto & Database Basics
- APIs & Parsing JSON
- Networking Basics & Plug
- Macros and
use
- Deploying Mix Project
- Phoenix Framework & Generators (+ Testing Patterns)
- HTML & CSS (+ Flex, Grid)
- Ecto & RDBMS & SQL & Seeding Data
- Tailwind
- UX/UI Design + Accessibility (ColorZilla, Axe, Figma)
- Phoenix Authentication & Permissions
- LiveView (+ Testing Patterns)
- JavaScript & JS Interoperability & AlpineJS
- PubSub & Channels
- GraphQL & Absinthe (+ Testing Patterns)
- TDD Techniques (Red Green Refactor), Code Clarity, Mix Testing Tools (--slowest, --stale, tags, Elixir Test extension)
- Metrics, Telemetry, Live Dashboard
- Factories & Mocks (ExMachina, Mox)
- Property Based Testing (Stream Data) + E2E Testing (Wallaby)
- Code Coverage, Github Actions & Hooks
- Software & Product Management (Agile, StandUps, Kanban)
- Architecture Design & Patterns (Diagrams, UML, CQRS/ES, Contexts, MVC)
- Advanced Livebook (Graphs, Tables, Connecting Projects)
- Collaborative GitHub Patterns (PRs, Forking, Cloning, Issues)
- Emailing & Swoosh
- Oban
- Genserver Bottlenecks, Supervision Trees, Worker Pools, Tasks
- Umbrella Projects
- Nodes, Clustering