RIP Joe Armstrong

Thomas Gebert
6 min readApr 20, 2019

--

Wow, some timing. Almost literally immediately after I wrote my blog post about Lisp Flavoured Erlang, I hear news about Joe Armstrong dying.

Joe was someone that I admired greatly, and it’s not just because he created Erlang. He was a fun character, so I imagine there are two million stories about him floating around, but I thought I should share my (limited) experience with him.

Back in 2012, I knew almost nothing about distributed or concurrent programming. I had some vague idea of what a thread was, and I had heard that locks exist for this, but that was effectively all I knew. I knew that the internet had to be distributed, but there was no concept of concurrency theory in my brain, nor did I understand any properties of it.

One day I decided that I am going to start learning this stuff. After a quick search for “distributed programming language”, and traversing through a few forum posts, I stumbled across Erlang.

Erlang’s Prolog-esque syntax was weird (the only languages I knew in any kind of detail were C++ and Java and a bit of Haskell), and at first I dismissed it, largely because I was completely ignorant of why it existed, and any language that didn’t look like C was malformed, and while the seed was planted, I brushed aside Erlang.

But eventually the urge grew large enough to where I had to actually try the language, and upon writing a basic server and getting it to compile, I realized that I had stumbled upon something kind of magical.

Because I figured that whomever created this language must know a lot about this whole concurrency nonsense, I found Joe Armstrong’s email address and sent him a message asking some questions that make me cringe a little now, and much to my surprise, he responded back! I seem to have lost the email that I sent, but here is his response (the > is him quoting me).

> Hello!

> I am learning Erlang and really liking it.

Great

> I am finding myself really liking the immutability in regards to being able to reason about my code, but that leaves me with a probably easy question: why does immutability make concurrency easier?

Tricky I guess it makes parallel execution easier (no locks) — it certainly makes programming easier closures really are closures :-)

> Is it because it’s difficult to have something in a thread reach-across and modify the state of another thread?

That’s not really immutability — actually I hate threads — the difference between a thread and a process is crucial — threads can modify shared state (horrible) -

In distributed systems there is no real shared state (imagine one machine in the USA another in Sweden) where is the shared state? In the middle of the Atlantic? — shared state breaks laws of physics. State changes are propagated at the speed of light — we always know how things were at a remote site not how they are now. What we know is what they last told us. If you make a software abstraction that ignores this fact you’ll be in trouble.

> Does that mean concurrency wouldn’t be so bad if you kept state mutations contained within one thread?

Yes — if you use the word process, not thread. Processes were invented to provide protection from other computations and to share resources in a clean way — threads share resources in a messy way.

> If you don’t have time to answer right now, a link or some guidance into the right resource would be appreciated!

I think what you’re interested in is the distinction between message-passing-concurrency and shared-memory-concurrency.

Java/C++/etc uses shared-memory concurrency (evil) — Erlang uses message passing concurrency.

AS Alan-Kay said — the big thing about OO is message passing not all the other stuff …

> > I love Erlang, and I appreciate you reading my message!

Have fun

/Joe

I thought that this was fantastic. I had expected him to simply send me an Amazon link for a book, or to even simply ignore my email, but instead he went into good detail about these things, and it stuck. Suddenly, a lot of the concurrency problems that I had neglected made sense, and I knew the path forward to learning this: Erlang.

Fast forward about a year. I have focused fairly heavily on functional programming, and I finally get a job building a chat server Erlang, much to my excitement. I enthusiastically sent Joe an email to thank him, and happily he responded back again.

> Hello!

> Just under a year ago I send you a message asking you about multi-process computing and the like. You gave me a long, detailed email that not only answered my questions, but also explained in pretty-decent detail. >

> I was so impressed by that email that I actually purchased your “Programming Erlang” book, and enjoyed that just as much, and today I started my first job doing Erlang full-time (well, mostly; there’s some JS involved).

Great — thanks a lot for buying the book — these kind of stories make it feel all worth while

> I just wanted to thank you for the help. I know a compsci-celebrity probably gets bombarded with emails,

Actually not — I guess it’s a ‘being polite’ thing — I rather like twitter it lowers the entry barrier for communication between people.

I have in the past mailed several of my CS “heros” — and was always rather reluctant to do so. Then to my great surprise I often got long and helpful replies (from Niklaus Wirth, Alan Kay, Jim Gray)

This kind of fits in with my view of life — 95% of people are basically helpful.

I’ve always thought that converts were gained “one at a time” — imagine a drip drip drip of water falling into a pan — one day it overflows.

We always think it’s fantastic to hear the stories of what you guys do with Erlang. (I say we because the Erlang you’re using is the product of many people fantastic work) — I’m just the fall guy who writes the books and happened to start it all :-)

I was sat listening to Brian Acton who founded WhatsApp and made 3.5B$ and thought “I invented this crap” — which is a great feeling — and they gave me a tee-shirt.

So the side effect of what I do is I get to meet loads of interesting people and do what I want.

Anyway thank again, and I hope things go well for you.

> and I think it’s really cool that you took a good amount of time responding to some random guy on the internet asking for help.

Well every body is a random guy until you share stories.

My wife was a random woman before we met.

Anyway life would be very boring if it were not for random events.

I never run for busses or trains — it was after I read about a guy who missed a train and had a random conversation with a guy on the platform who had also missed the train — this gave them an idea that they turned in a multi-million dollar business.

I guess the other reason that you get long replies is that I’m an author and I don’t do short mails.

> As usual, keep up the great work.

I’m trying — though I’ve recently retired — gives me more time for hobby programming — though I have to tend my garden and so on

Cheers

/Joe

While this email wasn’t as technical, it was even more insightful. Clearly Joe cared more about teaching than his ego, and it’s something I’ll never forget.

These emails were incredibly influential to me, and I like to think that my life has substantially improved as a result of them.

Over the years, I seen him as even more of a mentor; his excited and enthusiasm about all-things-tech was infectious, and I hope to achieve at least 1% of the positive influence on someone else that he did for me.

Joe, you will be sorely missed.

📝 Read this story later in Journal.

👩‍💻 Wake up every Sunday morning to the week’s most noteworthy stories in Tech waiting in your inbox. Read the Noteworthy in Tech newsletter.

--

--