Elixir & OTP
Elixir and OTP have some funky lingo.
Supervisors? Sounds kinda bossy.
Agents? No thanks, I'll broker my own deals.
On top of that, transitioning from OO to functional programming takes a different mindset.
In object-oriented programs, your thinking revolves around objects whose state you modify by calling methods. But in Elixir all data is immutable, so you think more in terms of transforming data with functions. You're also thinking about concurrent processes.
So most people just stumble along...
It's tempting to jump right into Elixir and hope for the best. But you eventually smack up against a wall of frustration. You find yourself copy-pasting code, and it doesn't work the way you expect. And while StackOverflow offers lots of tidbits, it doesn't answer the questions YOU have.
But you can build amazing things with Elixir and OTP, right?
Indeed you can! Everything from Phoenix LiveView applications to fleets of IoT devices managed by Nerves. But without a good understanding of Elixir and OTP, you can't pull the rabbit out of the hat.
“In other courses, I just learn how to use Phoenix, GenServer and Supervisor like magic. Here I learned the foundations, how those components were built, and how it works under the hood. This course was awesome!”
Maxsuel Maccari
What if you could move from clumsy mumbo jumbo to fluent familiarity?
Elixir, Phoenix, and LiveView development would be fun, not frustrating. You could write Elixir as effortlessly as any other programming language in your toolkit. You could wield all the power of OTP to build distributed, concurrent applications.
No more mystery. Everything would finally click. And you could confidently build anything you wanted!
Everything you need, assembled in the right order, and in one place! 👍
No need to scour the web and waste your time piecing together resources. We distilled everything you need to know about Elixir and OTP into an approachable and—dare we say—pragmatic video course.
Our course has worked for thousands of developers because it takes an incremental approach. It starts with pure Elixir and gently builds up to the OTP abstractions so you know when and why to use them. We focus on one concept at a time and one clear explanation at a time. In turn, you get one "AHA!" moment time after time.
“I was a little reticent at first to buy the course because I've been doing Elixir for almost 4 years now, but... I was soon picking up things that had passed me by. Before long I was starting to deeply understand things that I'd been kind of taking for granted like processes, tasks and now GenServers. The way that you start off with plain ol' Elixir and build up to the point where we need the things that you are explaining is brilliant!”
Alan Gardner
No theory or hand-waving here!
This course is for experienced, busy developers who want to build something now! And building a small, Phoenix-like web framework from scratch is a fun and engaging way to learn all the facets of Elixir and the OTP libraries. The application involves:
- modeling with structs and other data structures
- pattern matching to transform HTTP requests to responses
- file and socket I/O
- handling requests in concurrent processes
- running asynchronous tasks
- storing state in GenServers
- using Supervisors to recover from failures
We build this application step by step in a clear, logical progression. You see exactly how everything gets put together to build a real Elixir/OTP application. It's as if we're sitting down together building the app from start to finish. And yeah, there are a few bad puns along the way, but we do try to make it fun. 🤪
“This is by far one of the best tutorials I've ever paid for! So many other tuts just cover the basic entry level things such as types and immutability along with building a toy application (no real world basis). Building the HTTP Sever was excellent because as it shaped up I was like, 'We are building a rough draft of Phoenix'.”
Cody Brunner
The live-coding videos (6 hours total) are laser-focused on advancing the app one feature at a time. Each video is:
- easy to digest (36 bite-sized videos in total)
- straight to the point without any rambling or fumbling
- perfectly paced so you're not left behind or nodding off
- streamable with English subtitles and also downloadable
“The level of depth that the course goes into is insane. Anything that seemed like magic before has been entirely explained in such a clear way that I feel like I would know exactly when to use the features and even have ideas of real world implementations in my head now.”
Seeing code is hardly enough. You also need to see the entire system at work. Each of the 22 visual explanations throughout the course give you:
- a solid mental model for how everything fits together
- a visual explanation that takes the mystery and magic out of OTP
- the key to becoming the magician instead of the mystified!
“I loved the graphics that were used to introduced concepts, the practical examples, and how it all demonstrated the features of Elixir in a way that removed the magic surrounding things like supervisors, GenServers and routing that is used in Phoenix.”
Brendon Otto
Of course you get all the source code for the final app, and also versions of the app for each course module. Yup, that includes the tests, too!
Here's the kicker: you need deliberate and directed practice to make all this "stick". That's why you also get 56 exercises reinforcing and cementing what you learned in the videos. It's not just hands-on experience, it's also mind-on experience!
“I've worked with Elixir for a couple years now, but learned more in your course than I did in all the other Elixir books I've read. It is far superior to other guides which tend to cover a broad range of things and make it hard to associate the content with real-world problems. Each new idea, technique, feature and library in your course was introduced at relevant points that really helped me connect the dots.”
Rocky Neurock
Get started today!
No monthly subscription or time limit. You own it for life.
Questions? Email Mike and Nicole.
There's no risk. This course is 100% guaranteed for an entire 30 days. If you find it's not a good fit for you, we'll be happy to refund your money.
Live in a country where our courses aren't affordable? We offer purchasing power parity discounts.
“This was by far the greatest single course I've ever watched start to finish (it was just that good)! This course sets the bar like none other.”
Toran Billups
Meet Us In This Video
Course Outline
Videos just the way you like 'em: easy to digest, straight to the point, and paced for experienced developers.
Welcome! After taking a peek at the type of app we're going to build in this course, we'll help you get your development environment set up so you can start coding Elixir.
Elixir has conventions for organizing projects and great tooling to automate project tasks using mix. We'll get a quick lay of the land, learn various ways to run Elixir, and jump right into code!
Our web server will make three high-level transformations—parsing, routing, and formatting a response—with each step being a function. We'll set up an initial pipeline using modules, named functions, strings, maps, and the pipe operator.
To transform a request into a response, we first need to parse the request string into a more usable data structure. This presents a great opportunity to learn the match operator, pattern matching techniques, atoms, and built-in functions.
Formatting the response string takes us deeper into Elixir maps and introduces us to programming with immutable data, which is a hallmark of functional programming.
In Elixir you don't use conditional expressions as often as you would in imperative languages such as Ruby. Instead, it's more idiomatic to control the flow of a program using function clauses and pattern matching. Routing HTTP requests gives us an ideal context for learning how to design code in this declarative style.
Designing a web server presents interesting scenarios that let us explore many of Elixir's features. How do we handle a request that has parameters? What happens if a route doesn't match? And how should we respond? The solutions require more pattern matching techniques and multi-clause functions.
Once we have requests flowing through a pipeline, we can plug in specialized functions that transform requests and responses in unique ways such as rewriting paths and tracking 404s. By pattern matching maps we can run these functions conditionally—a powerful techniques that's used extensively in Elixir applications.
Even something as familiar and straightforward as reading a file involves pattern matching. Serving static files, and properly handling successes and failures, introduces us to tuples and case expressions.
Sometimes you need to attach metadata to a module, be it for documentation or to squirrel away a compile-time constant. In this section we use reserved and custom module attributes.
Modules let us organize functions with similar concerns in a namespace. We'll co-locate related functions in properly named modules, put them in separate files, and knit it all back together using aliases and imports.
One of the benefits of modeling our request/response conversation as a struct (as compared to a generic map) is we can ensure that the functions in our pipeline always get the expected type. In this section we compare structs vs. maps and refactor our design to use a struct.
Handling a POST request means we have to take into account the list of request headers and the POSTed parameters. To do this, we'll process the request by matching head and tail patterns: a technique used pervasively in Elixir apps.
Recursion makes Elixir go 'round and 'round. You've no doubt seen simple examples of recursion, but what about real-world use cases? Turns out, recursion is exactly what we need to parse the HTTP headers in our POST requests. And while Elixir has convenience functions that often let you sidestep using recursion directly, Elixir pros know how to use recursion to their advantage.
You'll find familiar high-order functions in the Enum module for transforming data. But to use them effectively you need to be comfortable with anonymous functions and how to capture functions. We also put guard clauses to good use as our application begins to take the shape of a familiar web framework.
Now it's time to generate dynamic content by reading and evaluating template files. We make quick work of this using comprehensions to iterate through collections of data and generate HTML.
Since Elixir is the language you use to build Phoenix web apps, a peek at a Phoenix app reveals a lot of familiar syntax and design concepts. Alas, you discover there really is no magic after all!
It's time to automate with ExUnit tests! We look at two different ways to write unit tests, and various ways to run them. By the end we have green dots across the board.
To build a JSON API, we install an external JSON library and use it to render JSON and handle POSTed JSON data in response to API requests.
Now that we have a fully-functioning HTTP request handler, it's time to write a TCP socket server so that any HTTP client can interface with our application. To do that, we use Erlang's gen_tcp library and learn how to transcode Erlang to Elixir. Cue the browser!
At this point our web server can only handle one request at a time. We need a way to handle multiple requests concurrently and also isolate the failure of one request so it doesn't affect other requests. Concurrent, isolated processes are what set Elixir apart from other functional languages! We also look inside the Erlang VM to see how it takes full advantage of multicore computers to achieve remarkable levels of concurrency and parallelism.
So if processes are isolated and run concurrently, how do they communicate? Just like people! They send asynchronous messages to each other. In our app, we spawn a series of API requests that run in independent processes. They send back their results as messages to be received by the request-handling process. We also look at how to avoid unwanted synchronization points in our code.
With several one-off asynchronous tasks now running and getting results at a later time, we're starting to see a definite pattern. In fact, running functions (or tasks) in a short-lived process is so common that Elixir provides a helpful abstraction: the Task module. By the end you'll know how the Task module works under the hood.
Now we turn our attention to long-running server processes that manage internal state and respond to various messages. We build up from a basic receive loop to a client API that sends synchronous and asynchronous requests to a registered server process. Along the way, we see how a server process preserves the integrity of its state while under load from multiple concurrent client processes. By writing a server process from scratch, we begin to demystify the "magic" of a GenServer.
Looking at our stateful server process, we see two flavors of code: code that's common to all server processes and application-specific code. So what happens when we move all the common code into a generic module? Well, we're not the first ones to have that idea! GenServer is a design pattern (an OTP behavior) that helps us write server processes with greater ease. By refactoring our server process, you'll come away with a better understanding of how (and why!) GenServer works.
When you're starting out with Elixir, writing a GenServer can be confusing and it's tempting to just cargo cult from example code. But we want you to feel really confident, so we've been incrementally building up to using a GenServer. Spoiler alert: Now that you understand the underlying design pattern and how it's implemented, actually using a GenServer is a snap! Besides converting our app to use a GenServer (and eliminating a bunch of code!) we also add new application-specific behavior to our GenServer.
As another practical example of when and how you'd use a GenServer in a real application, we write a server process that performs background work on a periodic interval. This lets us explore the power of the handle_info callback in greater depth so you can take full advantage of all that GenServer has to offer.
At this point we have three server processes that should run continuously without missing a beat. Alas, things don't always go according to plan! We need a way to monitor the server processes and recover when trouble strikes. To do that, we start by linking processes, which is fundamental to understanding how the OTP Supervisor behavior works.
Normally, designing an application that's resilient to failures is a tall order. With other languages, the best you can do is to code defensively. Elixir is different: it frees you to "let it crash." That's only possible because OTP Supervisors offer unparalleled support for detecting and recovering from process failures. Indeed, Supervisors are the key to building high-availability, fault-tolerant systems. We design a supervision tree so our application can elegantly recover from unforeseen failures.
Up to this point we've been using the term "application" fairly loosely. But an Elixir application is a first-class OTP entity. We look at how an application works behind the scenes, and then specialize the OTP Application behavior to start our supervision tree.
For Developers New to Elixir
No functional programming experience required.
To keep this course focused and paced just right, we assume you've programmed in another language.
With that background, you definitely don't need a whole video on Elixir numbers and strings. Reference courses like that are booooring. But you also don't want to jump right into asynchronous messaging between two supervised GenServers. Whoa, that's totally frustrating too.
When a course makes the wrong assumption about your experience and the pacing is flawed, you're left hung out to dry.
“Most courses have the wrong pace for experienced devs. Yours is balanced perfectly (enough detail to learn and not get lost, but also a relatively fast pace and focus on idiomatic aspects).”
This course aims for the sweet spot by:
- taking a practical project-based approach, not a sluggish syntax-approach
- deconstructing the underlining principles before introducing abstractions
- assuming you have programming experience, just not with functional programming or Elixir
“I loved this course! It really hit the sweet spot of teaching me Elixir and OTP. Building a web server from the ground up really helped me to understand how Elixir apps fit together.”
Michael Twomey
Created with 💜 by
Mike and Nicole Clark
Howdy! We're the friendly couple behind The Pragmatic Studio.
We've been making courses for developers since 2012. It's a privilege to get to teach together and serve everyone who supports us.
We've been using Elixir since the early days. Initially we struggled because every book and course felt either mind-numbingly slow or mind-blowingly fast. We made this course to give developers an approachable, pragmatic, and enjoyable way to learn both Elixir and the OTP libraries.
Once you're comfortable with Elixir, a world of opportunities opens up to you. We've created all sorts of courses to help you along your journey: Full-Stack Phoenix, LiveView, Multi-Player Game with Phoenix, and Full-Stack GraphQL with Phoenix. We hope you enjoy them all!
Thousands have loved learning Elixir and OTP using this course!
Here's what some of them have to say…
“I have a MUCH better understanding of Elixir and all the intricacies of the language after this course! Both the videos and exercises were easy to follow and helped demystify a lot of things. It was a great course, very enlightening, and enjoyable humor too. I would definitely recommend it to anyone getting involved with Elixir.” Garrett Julaka
“I loved everything about this course, especially how you build out the behavior provided by the OTP library in order to understand what is happening underneath the hood. It was very useful in order to grok GenServers and Supervisors. Over the years you have helped me progress in my career as a programmer. I don't know where I would be without your courses. Thank you so much!” Gabe Lafontant
“Best course of my life! I really learned all the key concepts of the Elixir language as well as how the things works behind scenes.” Allan Egidio
“It's incredible the way you break down a concept and explain it! Love your content so much!” Marlo Major
“This is by far one of the best courses I have ever taken! It is so incredibly thought through! I absolutely loved that we built the HTTP stuff almost as Phoenix names things.” Tony Stenberg
“I love that this course starts out with basic concepts that are core to Elixir and by the end we're setting up OTP supervisor trees and working with processes and understanding how it all works. It was truly mind blowing! Also, as an instructor myself, this was an education in great instructional design.” Benjamin Patton
“I wish I found these courses when switching to RoR. After a few videos it seems like my dive into Elixir will be waaaay easier (even though I hate video courses in general)... Most courses have the wrong pace for experienced devs. Yours is balanced perfectly (enough detail to learn and not get lost, but also a relatively fast pace and focus on idiomatic aspects).” Weronika Łabaj
“This was by far the greatest single course I've ever watched start to finish (it was just that good)! This course sets the bar like none other.” Toran Billups
“ I have ~10 years of experience as a software engineer/developer and this is the best online video course that I ever tried and finished from cover to cover (usually I prefer books and documentation). It was clear, concise, and covered the most important topics to help me to systematize my Elixir knowledge. It also helped me to pass job interviews for Elixir/Erlang related roles. :)” Łukasz Mikołajczak
“I have to say that a big part of why I'm so excited about Elixir was because of the great/amazing online course Elixir + OTP from @pragmaticstudio. The program and the instructors are really top notch. Highly recommended!” Angelo Albiero Neto
“Best course I've ever taken. Even if Elixir is not your weapon of choice, this is a fascinating journey over some incredibly powerful concepts and ideas, that will make you a better developer. Amazing. 🙌 Always hated learning the language before "doing stuff", but this one makes it super interesting and very clear.” Josef Richter
“I love this course! The presentation style is genuine and warm, and left me feeling those definite 'ah ha!' moments when something clicked. I also really appreciate that it's concise and didn't get bogged down with details superfluous to the objective. The notes were also great at calling attention to key points and elaborating where necessary.” Samuel Toms
“I really got a lot out of this course! I've used Elixir/Phoenix for 2 years professionally, but always wondered how the system worked under the hood. The example project, lesson delivery, and great sense of humor make for a very educational, engaging, and enjoyable Elixir course!” Ragheed Al-midani
“I gained so much knowledge from this course in just a few days, way more than I learned from jumping between different documentations in the past few years!” Slobodan Erak
“I'm so impressed with the @pragmaticstudio Elixir course. They show you how to build parts of Phoenix/OTP rather than just how to use them. [The course] is also great for learning best practices for designing and refactoring Elixir APIs. The @pragmaticstudio Elixir course is worth much more than the purchase price. If you want to get deeper into Elixir, you should own it! Really awesome learning experience!” Bill Peregoy
“This is an absolutely amazing course! Each lesson is concise and to the point. The content is presented with relevant conceptual background and the concepts incrementally build lesson by lesson. It's the perfect blend of basics to intermediate topics covered in a very succinct and easy to understand way.” Rajesh Pillai
“The concise introduction to OTP was the biggest benefit I got from this course! I was a little intimidated by OTP and the concurrency methodology coming into the course. Even though I had some experience with Elixir, this course helped me understand, end-to-end, how Elixir fits into modern web architectures.” David Gunter
“Learned a lot from the pragmaticstudio [Elixir course] and couldn't recommend it highly enough.” Ralph Bankston
“This course was so much fun! The course evolved smoothly from "hello world" to the full application. The speed of the course was great, the sizes of the chapters were perfect, and the exercises were helpful. And I love the sense of humor you two have!” Mariano Colabraro
“The way you built an application piece by piece worked really well. This is my favorite way to learn a language, and building an HTTP server was an ideal project for learning Elixir's full range of capabilities. This is one of the best video courses I've ever seen!” Kim Godard
“I've read almost 3 books on Elixir yet this course taught me small tricks that I didn't know before. I attribute that to the realistic project that is being developed throughout the course instead of the typical book-style teaching in which the language features are presented almost like documentation. This course is taught with just the right amount of detail and speed, and the realistic example project really helps to solidify the concepts being taught. The course notes are well thought-out and thought provoking in that they anticipate questions a developer may have which extend naturally from what is being taught, especially questions like 'could I do this a different way?'” John Joseph Sweeney
“The course was great! I'm starting on Elixir (coming from Ruby) and the course helped a lot. Awesome work! It's worth every cent and, most importantly, every second spent watching it!” Franco Catena
“The @pragmaticstudio course on Elixir/OTP is excellent. They walk you through creating a lightweight version of the Phoenix router, controller, view & templates... so you gain a better understanding of how @elixirphoenix is built. Highly recommended.” Nathan Hopkins
“This course gave me a much deeper level understanding of how Elixir as a system operates in a way that probably would have taken me months of reading docs and experimenting. I had always heard Elixir/Erlang/OTP was great for concurrency and fault-tolerance, but now I understand why. It was kind of a mind-blowing experience for me when it started to click how all the process and supervision tree stuff fits together. Another thing I really liked is that we were writing code throughout the entire course. I'm a learn by doing kind of person. Other courses spend too much time explaining theory without delving into application. I really enjoyed how every module we built not only built on previous lessons, but set us up for the next lesson. I definitely got my money's worth.” Justin Walters
“Loved the Elixir course! Amazing flow! I really loved how you took the time to explain things that matter (without glossing over small details) and that we basically built GenServer from scratch. This gaves me a much much better understanding of how Elixir/Phoenix works.” Edison Yap
“@elixirlang is the coolest tech I've using lately. Not 100% sure if I find it more enjoyable than Ruby, but mind blowing idioms + so fast. Best I've found to learn is the course by @pragmaticstudio...project-based always works better for me.” Steve Corona
“What a fantastic job you've done with the Elixir course. I was a little reticent at first to buy the course because I've been doing Elixir for almost 4 years now, including a couple of production apps, but I needn't have worried. I was soon picking up things that had passed me by. Before long I was starting to deeply understand things that I'd been kind of taking for granted like processes, tasks and now GenServers. The way that you start off with plain ol' Elixir and build up to the point where we need the things that you are explaining is brilliant! The way you introduced GenServers in particular is perfect.” Alan Gardner
“Excellent explanation of Elixir and OTP concepts” Jørgen Orehøj Erichsen
“I really loved the explanation of the various parts of OTP / Tasks / etc. I've been trying to wrap my head around GenServer, Task, Agent, and Supervisor. This course finally made these things click for me! I especially liked the way you made your own variant of GenServer first and then moved from there to using Elixir's version. At that point it finally dawned on me that it's all just functions, not magic!” Jacob Atzen
“I really enjoyed this course and will recommend it to any budding or experienced Elixir devs. I liked the project-focused lessons and the pacing of progression through Elixir fundamentals within the context of building an app. The animations were great and really served the course explanations well. And the sections towards the end dealing with Tasks, Agents, GenServers and Supervisors were all excellent!” Paul Fioravanti
“Really enjoying the @pragmaticstudio Elixir course. It doesn't waste any time. The notes add extra interesting tidbits and the exercises allow me to practice. I also like that the main thing built is a web server, which gives some insight into Phoenix. Highly recommend!” David Tang
“I have done all your courses, but I think this is the best one, which is quite staggering as all the other courses were top-notch, too. I liked how you unpacked existing libraries and especially the Phoenix framework. It was a wonderful experience to see how all the things you carefully set up came to together. Also, the notes were not just summaries but contained so much valuable extra information. So well done!” Johannes Rubenz
“Awesome work! Definitely the best resource that I've found on Elixir. Can't wait to start the next course!” Nathan Queija
“Really well done course! The recursion explanation was the best example I've come across for us newbs. I like how it was built step-by-step with output, never rushing the discussion.” Dan McHarness
“Even though I'd used a bit of Elixir / Phoenix before, it was super helpful to build these Elixir features from the ground up in your course. I got a much better understanding of how things work under the hood. Your attention to detail is unparalleled and the course was engaging and fun. Thank you for the great quality course..” Eleni Lixourioti
“I've been working with Elixir for two years now but never had the need to dive into OTP much. This course absolutely exceeded my expectations. Building up a web framework from scratch was quite an eye opener. I only wish I took it sooner!” Chase Pursley
“Thanks for the way that you make learning Elixir a joy! I really like the way you explained the topics and helped me understand how things work under the hood.” Andrés Felipe Gallego S.
“I'd already learned a bit of Elixir but this course solidify my understanding and demystified OTP. I don't normally like video courses for coding, but yours was highly professional and explained the concepts very well. Well worth the money.” George Millo
“I feel like I have a much firmer grasp of things like process creation, spawning, linking, and how those lead to setups like OTP because of this course (after having read a zillion articles and at least one book already on the topic). I'll definitely be signing up my other developers for this course!” Donald L. Merand
“I highly recommend the Elixir/Phoenix courses from @pragmaticstudio. Best dev learning videos I've ever seen and built by great people.” Peter Hood
“I was familiar with Elixir coming in, but this course removed the veil of "magic" that hid the inner workings of an Elixir or LiveView application! The course was great at breaking down complicated topics into easily digestible chunks, and the extra practice in the notes reinforce everything covered.” Ian MacDonald
“I have done a reasonable amount of Elixir & Phoenix programming and I’ve started to use OTP a lot more. The way this course builds up everything without Phoenix and goes through OTP step by step is really good! Lots of "gaps" in my understanding have been filled. I really liked the approach you have taken to build up an app!” Steve Forkin
“Want to learn @elixirlang (and you should), then you owe it to yourself to check out @pragmaticstudio. Awesome!” Napoleon Ahiable
“I also appreciate the way you made the learning curve into a learning line. What I mean is that each new step feels like a consistent and comprehensible increase in complexity. It is not 'Lecture 1: 1 + 1 in Elixir. Lecture 2: Asynchronous messaging between statefull processes'.” Ondrej Pinka
“This is one of the best courses I have taken in my life! It's concise and covers the most important topics about Elixir and OTP and has a lot of exercises. The notes are fantastic and the instructors are so captivating, with a great chemistry between them. What a pleasure it was to take this course!” Francisco Breno Barbosa Soares
“Two things made your Elixir/OTP course stand out compared to the other numerous online courses I have gone through. First, your top-level discussions of Elixir as a language and its design principles were excellent. These concepts are difficult to communicate, and you really excelled here. Secondly, you did not skimp on any of the important details nor did you get bogged down on unnecessary minutiae. This is a hard balance to strike, but you all really nailed it!” Johan Uribe
“The flow of this course was very well thought out, and the material was presented at a pace that was just right. Mike and Nicole did a great job avoiding tangents and minutia while still conveying the necessary information. I’m very pleased and glad I bought this course!” Ed Barstad
“I am a Pragmatic Studio alumn and have always thought the quality of their courses is top notch! Mike and Nicole's style is really friendly, welcoming and easy to follow. The pace is great with short videos that tackle one thing at a time. Very much like functions (wink).” Miguel Barcos
“I generally hate online courses because they pass over the materials too quickly and do not teach me anything useful. But this course is totally different. I LOVE IT!! The pace is just perfect and I really love how you teach first principles before introducing OTP abstractions. I never learned so much with so little effort.” Ramón Pin
“Best zero to hero course I've ever taken!” Jake Wood
“I loved the deep dive into the inner workings of Elixir, specifically around GenServers. I already had some experience with the language, but this course helped me understand the intricacies of GenServers and how they contribute to the robustness and scalability of Elixir applications. The clear, well-structured progression of the course made it easy to follow along. I learned a lot!” Bob Nadler
“The way this course gradually ramps up in complexity is amazing! I had no trouble keeping up with any part of it even as it got more and more complex, despite being a beginner. I learned so much doing this course, on HTTP servers in general as well, not just Elixir specifically.” Sofia Simanke
“I assumed this course would be super basic... and boring, but I was completely wrong. I truly enjoyed every bit of it and I learned a lot, while having a lot of fun on the way!” Szymon Jednac
“I liked that many of the lessons in the Elixir course started with simple code to solve the problem at hand, and then "shazam!" there was a big reveal transforming it into idiomatic Elixir code using the standard OTP libraries. That approach really helped me get a handle on why things are the way they are in Elixir. The whole production was very well put together. It was well constructed, and had an excellent flow to it.” Dan Dorman
“You have done an amazing job! This is by far the best educational material I have ever seen. It's just perfect.” Mahmoud Saeed
“I've worked with Elixir for almost 2 years and was afraid I would be mostly listening to stuff I already knew. But it turns out that with almost every chapter—even at the beginning—I got to understand something a little deeper or learn a new simpler way to solve a problem. It was pretty great!” Jacek Szarski
“I like how focused it was—no wasting time with unnecessary stuff. It's perfect for experienced developers looking to make a switch!” Enrico Tuvera Jr.
“You guys rock! Honestly I wasn't expecting such a great course. As I instructor myself I was amazed by the way you could give so much on point information. The GenServers lessons and the OTP finale, oh, that was gold. And the Servy app was the perfect context to teach every single concept. Only experienced developers could think of that. Amazing job!” Agilso Oliveira
“I tried learning Elixir 4 times and coming from an OO background, it has always been difficult to take on a functional programming mindset. What really helped was that instead of immediately using GenServers in this course, you built up towards GenServers. I so appreciated the incremental approach to functional programming as we implemented something every software engineer is familiar with (HTTP servers).” Arda Tugay
“I've worked with Elixir for a couple years now, but learned more in your course than I did in all the other Elixir books I've read. It is far superior to other guides which tend to cover a broad range of things and make it hard to associate the content with real-world problems Each new idea, technique, feature and library in your course was introduced at relevant points that really helped me connect the dots. Thank you for this really helpful course!” Rocky Neurock
“Finished the Developing with Elixir/OTP course by @pragmaticstudio I have to say the level of depth that the course goes into is insane. Anything that seemed like magic before has been entirely explained in such a clear way that I feel like I would know exactly when to use the features and even have ideas of real world implementations in my head now. I think this course is an absolute must to anyone learning @elixirlang.” Roberto Pando
“@pragmaticstudio's Elixir/OTP course was outstanding. Really helped me get my head wrapped around Elixir finally. I really recommend it!” Dave Sanders
“We rarely take the time to appreciate how much better educational material is when the presentation order is well thought out. @pragmaticstudio's course does this so well, after each chapter you can feel the understanding sink deeper in your brain than with other courses.” Kevin Hoffman
“I really like how you built up the different parts of the language piece by piece, dispelling the magic, whether that was a web server, Phoenix, or a GenServer. You are phenomenal teachers! Thanks for sharing your gifts, your passion, and your knowledge.” Monte Johnston
“I have been taking courses with The Pragmatic Studio since 2006 and I'm always amazed by the careful attention to detail that's displayed throughout all their coursework. I really like the animated diagrams and code examples throughout this course. Mike and Nicole totally knocked it out of the park for me! Thank you for being truly awesome educators throughout my educational journey.” Conrad Taylor
“This is hands down the best online course I've ever taken on anything! You kept me interested at every step and I now understand complex concepts I never thought I would. You opened a whole new way of thinking for me. For the first time in my life, I have a solid understanding of a programming language and know what I'm doing 99% of the time. Amazing!” Josef Richter
“I had heard good things about The Pragmatic Studio before taking the Elixir course, but now I know for myself that you two are top notch educators. Things were spaced out just right to help "exercise" my memory. I just absolutely loved the course. I don't think it could have been better.” Levi Kennedy
“Fun afternoon learning some functional programming with Elixir. Wonderful course from @pragmaticstudio. Highly recommended.” Ed Wallitt
“I loved that this course showed the primitives of Elixir and Erlang in detail before introducing the nice-to-have abstractions. This was fantastic for understanding the "why" behind the abstractions!” Chaz Watkins
“The content was well paced for someone like me with plenty of experience as a developer coming to a completely new paradigm. Your lightness of touch and humor make the material really appealing. I also really appreciated the way you hand-rolled a task or a generic server before going on to demonstrate the implementations in the standard library. That really helped to demystify these most "magical" of aspects of using Erlang/OTP/Elixir.” Dan Bye
“I jumped right into Phoenix but I was glossing over a lot of the details of how things worked, which proved troublesome later on. I now have a strong understanding of Elixir and OTP. Thank you! I can't wait to get started with my own project!” Tom McGurl
“If you want to learn Elixir in a practical way, I strongly suggest the @pragmaticstudio course. Definitely the best online course.” Bruno Dusausoy
“This is the best Elixir material I've used. You build a simple HTTP server using Elixir and learn a lot of the core language and architecture choices when writing Elixir code. It doesn't pester you with 'this is an int, this is a string.' You just start building this HTTP server out and learn about Elixir along the way. Thanks Mike and Nicole for writing such a tremendous course! It really cemented my Elixir knowledge and I feel much more comfortable in my Elixir role.” Sergio Tapia
“I love the pace. It feels more like a series of really good pair programming sessions with a mentor and less like a lecture.” Hunter Stewart
“This course by @pragmaticstudio cleared everything up for me 😀 ” Omar Bahareth
“I really enjoyed the thoroughness of your Elixir and Rails courses. I think you guys have the best programming courses on the web. Your explanations are consistently clear, the pacing is excellent, and I particularly appreciate the way you focus on conceptual understanding and orientation, rather than just rattling off how to do something. Thanks for offering such great training” Haiz Oppenheimer
“I loved everything about this course...the project-based approach, the realistic project in terms of technologies and choices, and how we built out things that also taught us how Phoenix worked. This course demystified a lot of things, and made approachable a lot of different concepts. Simply put, amazing work! I feel comfortable now looking at Elixir as a solution to problems. As a pair, you two do a great job. Hurry up and make more video courses! I'd serious learn a new language just because you two teach it.” Jason Lotito
“great elixir course! #myelixirstatus” Arif Yayalar
“I love the clear explanations as well as all the diagrams— they've helped me tremendously! The section on Sending and Receiving Messages in particular is wonderful.” James Schorr
“Superb job! The course has been very thoughtful in creating problem situations that iteratively lead to an ideal solution, with the benefit of helping the student understand the rationale (the "why and how") along the way. The experience has been fantastic!” Yong Bakos
“This course was awesome! In other courses, I just learn how to use Phoenix, GenServer and Supervisor like magic. Here I learned the foundations, how those components were built and how it works under the hood.” Maxsuel Maccari
“Building from first principles in this course was very helpful. Solid course!” Kenny Parnell
“I liked the depth at which Elixir was covered. So many other tuts just cover the basic entry level things such as types and immutability along with building a toy application (no real world basis). Building the HTTP Sever was excellent because as it shaped up I was like, 'We are building a rough draft of Phoenix.' The real money of this tutorial was from Section 20 on. WOW! I was so impressed with what was covered and the ideas were really churning. This is by far one of the best tutorials I've ever paid for! I’m really impressed with your teaching methods and delivery; keep up the amazing work!” Cody Brunner
“Loving @pragmaticstudio's Developing With Elixir course #myelixirstatus” Kyle Oba
“A really fun course, presented stellarly! Your obvious mastery of both the language and tooling made for a smooth-flowing, informative course. The notes at the end of each section are also helpful and enlightening. Loved the course! I've already bought the Elm and Unpacked Bingo courses too. Excellent job!” Ohad Frenkel Keshet
“I've stuck my toe in Elixir before, but this course really made it click for me. I loved that everything was built from the ground up. So rather than simply saying, "Here's what a GenServer is and how it is used" we built our own version - running into problems, coding solutions, and eventually understanding the entire thing. Then, it was just a matter of moving it over to GenServer. I feel much more confident that I could jump into Phoenix now that I understand Elixir and OTP better.” Josh Cochran
“I've been learning a lot of Elixir for the past few weeks. And thanks to the Elixir/OTP video course by @pragmaticstudio, with their great teaching and real code examples, I've found a programming language that I already love. And that wouldn't have happened only with books” Jorge Ania
“I absolutely love this course! You have one of the most complete and easy to understand tutorials on GenServers out there. Pragmatic Studio is certainly THE BEST site for online developer training! Thank you for all you both do.” Clinton De Young
“The way you designed this course to reveal the 'magic' behind the libraries is fantastic. The pacing was spot on. One of the best programming courses I have ever taken!” Aaron Graham
“Elixir is an itch I've been wanting to scratch for sometime, but having tried to learn it using manuals or website tutorials, I've not found the experience engaging. This course, however, has been so rewarding! The pace, level of detail, assumption of prior knowledge, and depth of explanation are all perfect. The video quality, font sizing, colour scheme and sound reproduction all add to the quality of the whole course. And your approach of developing a web server app in the course and getting to see how all the pieces fit together is so much more absorbing than trying to learn by writing bite size chunks of unrelated code. Well done!” Tony Sutton
“I love the logical, sequential way you build up an increasingly robust application and explain at each step of the process why things work as they do. Your visuals are thoughtfully crafted to illustrate important concepts. I wish the course hadn't come to an end. I not only would recommend this course, but I bought a 10-person license for my team!” James Lavin
“I really enjoyed the structure of the Elixir course which really helped me understand many of the core ideas, such as GenServers. You helped take away the magic that can come when learning a new language and ecosystem. Great job!” Michael Degli-Angeli
“Best course ever! It has a unique way of explaining the whole Elixir ecosystem in detail with real-world examples and use cases, and also one of the best explanation of the OTP internal functionality. Totally worth the money.” Emilio Forrer
“What I liked best about this course was that we built our own implementations first, before using the built-in Erlang/Elixir solutions. Keep on making awesome courses and I'll keep buying them!” Bas Bloembergen
“What an excellent course! Right when a question came to mind, you cleared it up, plus a little bit extra with all the gotchas. I originally hadn't planned to use Elixir any time soon for a real project, now I can't wait to use Phoenix and LiveViews for my next project.” Thomas Keppler
“The material was presented in a really well structured way so that learning was gradual. I particularly loved hand-rolling the GenericServer before revealing that it was pretty much a GenServer, thus increasing understanding and making GenServer less magic. Everything was well-paced too!” Ben Booth
“I liked everything about this course: it was well organized, well paced, interesting, and fun!” Kevin Shank