Smart Blogs and Talks

Posted: 2024-01-11T17:56:34Z
Updated: 2024-01-20T22:38:03Z
Changelog

Blogs, Papers, and Forum posts

Lower Level

Fibers, Oh My! by graphitemaster

Explores the difference between cooperative and preemptive scheduling, N:1 and N:M threading, and the challenges involved in implementing scheduling in general (read: Why Elixir and Go are awesome).

Memory Allocation Strategies by Ginger Bill

Outlines how memory works on modern (post 1990's) operating systems, in addition to exploring different memory management strategies, allocators, and their tradeoffs.

Concurrency

The big idea is messaging from Alan Kay

Or how the original pervasive OOP langs (Objective-C, C++, Python, and Java) missed the point of Smalltalk-80.

Why concurrency isn't understood from Joe Armstrong

I think a big problem in evangelising Erlang/Elixir is that you have to explain how having large numbers of parallel processes solving you problem helps. Since no other common languages support concurrency in any meaningful way the need for it is not understood.

Erlang's not about lightweight processes and message passing... by Stevan Andjelkovic

A significant value of Elixir and Erlang's process model are the emergent patterns and architectures that arise from it. This article covers them well.

CALL-RETURN-Spaghetti by Paul Tarvydas

Makes a case for concurrent systems being inherently simpler than systems based on sequential Call/Return.

I ❤️ Logs by Jay Kreps

A concise and wonderful book about logs, and how they lend themselves to solving problems in distributed systems and stream processing.

Programming Philosophy

Making reliable distributed systems in the presence of software errors by Joe Armstrong

This paper contains tons of sagely advice for not only building distributed systems but reliable and maintainable software generally, with clear and concise examples. I think they've only grown more relevant as modern systems have trended towards distribution. This should be mandatory reading for novice Elixir and Erlang devs!

Less is exponentially more by Rob Pyke
Title is self explanatory. I particularly love this bit:

But more important, what it says is that types are the way to lift that burden. Types. Not polymorphic functions or language primitives or helpers of other kinds, but types.

Forth: The programming language that writes itself by Dave Gauer

Stacks, Postfix Notation, Interpreters, oh my!

Education

How to get into software by Nate P. Maile

You can't learn to swim without getting wet.

Videos on Demand

Lower Level

What's a Memory Allocator Anyway? by Benjamin Feng

A wonderful introduction to memory allocators, and thinking about memory beyond the hegemony of the heap and stack.

The Soul of Erlang and Elixir by Sasa Juric

Or how BEAM manages to keep rock-solid low latency, and keep long-running requests from hogging resources. Worth noting that Go's runtime is not dissimlar.

Concurrency

Joe Armstrong interviews Alan Kay

Kay recounts the history of OOP and what Simula and Smalltalk-80 were going for. Cogent lessons for those willing to listen, and read between the lines:

You can't go lower than a computer if you want to do arbitrary things. So going to data structures is meaningless; you can't go lower. Going to procedures is meaningless. (10:40)

Programming Philosophy

Stop Writing Dead Programs by Jack Rusher

Covers lots of amazing ground regarding visualizing and introspecting programs.

Object-Oriented Programming is Bad by Brian Will

I watched this earlier in my career and am infinitely happy I did so. He also produced the wonderful followup Object-Oriented Programming is Good*, which proposes a mostly procedural solution with modest amounts of OO (perhaps closest to Go).