A small collection of links to wisdom from Erlang and Elixir communities. We have become a fan of these languages by paying attention to insightful thinking their native speakers have shared in English prose. Notable contributers we've collected include Fred Hébert and Joe Armstrong.
Spawn or Not—separate concerns of code structure from runtime structure: in Elixir, functions for code, processes for runtime
Crash-Restart Patterns—roll back to a known stable state
Tips from Erlang—model places where failure should be acceptable; push failure modes towards clearly defined recoveries; gradually expand recoveries to handle other specific failure modes.
You Reap What You Code—many, many thoughts tying resilience engineering, mental models, observability, operable code, and more.
Pipeline Made of Airbags—erlang hot code loading as a deploy pipeline compared to the containerized norms.
Complexity in One Computer—Joe Armstrong presented The Mess We're In at Strange Loop 2014.
Tiddly Meets Erlang—intertwingled & all-in-oneness
Let it Fail—good advice for anyone writing high-volume, non-stop applications
Actors and Objects—a collection of connections starting with Alan Kay's thoughts relationship between Actor model and OOP
.
These thoughts may move to their own pages of language fandom, but can live here for now.
One of the best programmers I have worked with never draws class diagrams when object modeling at a whiteboard. He always draws object instances.
His mental model, what he chooses to communicate to others with at the white board with Boxes and Arrows is what is happening at runtime.
Sandi Metz draws sequence diagrams. She draws attention to how messages flow between object instances at runtime; using a diagram organized around the passage of time.
See also xkcd 1883 supervillain plan for other thoughts about time.
We are reminded of advice from LISP: use macros only when nothing else will do; reach first for simple functions.
We have heard both LISP and Smalltalk developers brag about modifying code at runtime. Non-LISP and non-Smalltalk devs react in horror at the very idea.
Runtime is when software is delighting or frustrating its customers. It is essential for us to learn how to think about what happens at runtime.
See also Visualizing Concurrency in Go.