Get Yer Free Livebooks!
I started an experiment a couple of years ago to see if Livebook was a viable medium for sharing educational programming content. I ran a web store in that time selling an initial line of products that I had developed.
Those initial Livebooks had some supporters who I am very grateful for. Unfortunately, I never found enough time to keep expanding the offerings. Because of that and my desire to not have these guides lost, I am providing this series in a free download going forward.
What follows are descriptions of the collection and each of the Livebooks contained within. You’ll find the download link at the end.
How to Train Your Scrappy Programmer#
Almost every challenge that a programmer faces is in some way unique. You may have done similar things before, but each application seems to require a new twist. How can we prepare ourselves for constantly facing unknowns?
Effective programmers train to use whatever is at hand and push forward with determination in spite of obstacles. In short, they’ve gotta stay scrappy.
This bundle is a collection of five interactive guides, each exploring a different problem from the popular internet challenge site Advent of Code.
Livebookisms#

All programming begins with exploration. You don’t yet know enough about what you’re building to start a project and begin writing tests. You need a sandbox where you can play with ideas and receive immediate feedback. You need tools that help you analyze and dig deeper. And wouldn’t it be great if all of that was just a couple of clicks away?
This guide introduces Livebook. It is a simple but powerful code exploration toolkit. We will use it to:
- Import supporting packages
- Build a UI for testing different inputs
- Develop strategies for working with multiple code blocks
- Customize the output we are seeing
- Explore a search space with infinite iterators
- Practice our problem solving skills
By the end of this, you will have gained some familiarity with Elixir’s Livebook framework. Livebook provides a powerful way to explore tasks in code. It’s trivial to run multiple scenarios and compare the results, build simple interfaces and visualizations, record what you learn, and share all of this with the rest of your team.
The Wild World of Parsing#

The vast majority of all programming challenges involve dealing with some manner of input. You might be performing database queries, reading data files, or asking a user to please stop typing the word “chickens” and just enter a number. Making sense of what we are given is a task that we never fully escape.
In this guide we will explore various parsing strategies that can decode the gnarliest of inputs. We will cover:
- How three standard functions can go a long way
- Using pattern matching to add safety to your code
- Some basic elements of regular expressions
- Lexical analysis and tokenizing inputs
- Recursive descent parsing
- The big guns: the lexer and parser generators
leex,yecc, andNimbleParsec
By the end of this, you will have solved a moderate parsing challenge using four different techniques. We leave it up to you to decide which one is your fave.
Data and the Code That Loves It#

You understand the request. You know what the final output must be. You’ve piled all the building supplies onto your workbench. Now what? One of the most critical steps in the construction of any solution is figuring out how to model the domain. The stakes are pretty high. A good model can make the work natural and easy and the product safe to use. A bad model will fight you every step of the way and collapse when stressed.
In this guide, we will explore various data types and the impact each has on the resulting code. Stops include:
- The under loved data structure: sets
- Elixir’s flexible ranges
- Identifying entities and value objects
- The advantages of binary math
- Erlang’s mutable data store
By the end of this, you will have more tools in your belt to assemble whatever structure is needed in the moment. You’ll shift your thinking from integers and strings into the elements of the problem domain reified in code.
Charting Our Course#

The limit to what we can accomplish as programmers is very often what we can manage to think about. Ever wonder how your heroes seem to be able to track endless details? How do they know what matters and what can safely be ignored? What superpower do they have and will you need to be bitten by a radioactive spider to get it?
In this guide, we will dive into strategies for programming our brains before our computers. Topics covered are:
- A picture is worth 1,000 LoC (Lines of Code)
- Automated chart drawing
- The power of translating problems to multiple different domains
- A middle school math refresher (with minimal pain)
- Skipping work with binary search
No one can teach you your specific problem. You have to use the tools you have to teach it to yourself. This interactive guide can help take what seems to be an unscalable mountain and show you how to map out the paths to the top.
Borrowing a Cup of Algorithms#
You’ve heard the term algorithm at some point in your programming journey, but how, exactly, are you supposed to turn an arcane series of steps into a solution for a problem that doesn’t even look like the intended purpose? How do we combine algorithms to conquer tasks neither could handle alone?
In this guide, we will explore various algorithms that can help solve hard problems, like:
- Graph data structure algorithms
- Pathfinding with Breadth-first Search
- Topological sorts
- Polygon inclusion
- Flood fills
We will discuss when and how to use them and why they excel at what they do. We will dive into the world of algorithms to create dynamic solutions that not only work well together to solve a difficult problem, but create fun animations in the process.
By the end of this, you will have practiced finding and adapting multiple algorithms to turn seemingly insurmountable problems into fun and solvable puzzles.
Give Me the Link Already!#
Absolutely. Enjoy.