- Data Types
- Scalars
- Composite
- Types
- Understand differences between these types
- Ordered vs Unordered
- Cost of Updates
- Prepend (for ordered types)
- Append (for ordered types)
- Arbitrary Insertion
- Updating a Particular Element
- Cost of Reads
- Random Access
- Sequential Access
- Pattern Matching
- Match Operator (
=
- Not Assignment!) - Function Head
- In Named Functions
- In Anonymous Functions
- Case
- Cond
- With
- Guards
- Destructuring Data
- Tuples
- Lists
- Maps
- Structs
- Especially Nested Structures
- Match Operator (
- Processes
- Code Organization Techniques
alias
import
require
use
- Type & Function Specs
- Using Observer
- STDLIB & Data Structures
- Behaviours
- Timers
- Note the helper functions for converting to milliseconds
- ExDoc
- Generate documentation for your own projects
- gen_tcp
- Facilities for interacting with raw TCP sockets (both server and client side)
- gen_udp
- Like gen_tcp, but for UDP
- OTP Design Principles
- GenServer
- Client-side code vs "GenServer"-side code
- Memorize all the Callbacks
- Structuring Your Module
- Registering the GenServer
- Locally
- In an Elixir Registry
- Globally across a cluster
- Supervisor
- Supervision Strategies
- :one_for_one
- :one_for_all
- :rest_for_one
- :simple_one_for_one
- DynamicSupervisor
- Shutdown Values
- :brutal_kill
- :infinity
- timeout
- Restart Values
- :permanent
- :temporary
- :transient
- Child Specs
- Supervision Strategies
- Application
- Task
- Agent
- Generic State Machines
- GenServer
- Logger
- Ecosystem
- Dialyzer
- Dialyxir - A wrapper for including Dialyzer in mix projects
- ETS - In-memory data store for arbitrary erlang/elixir data structures
- DETS - Disk-based data store for arbitrary erlang/elixir data structures
- Efficiency Guide User's Guide
- Built-In OS Monitoring Utilities
- Process Pooling
- RPC
- GenStage
- Flow
- Erlang in Anger
- Great ebook on dealing with misbehaving Erlang/Elixir stuff
- Clustering
- Mnesia
- A database built on ETS and DETS with transactions and other good features.
- Definitely not an RDBMS. Learn the tradeoffs it makes before using (as with any database)
- Macros & Metaprogramming