Thu Aug 25 11:23:37 EDT 2016

Declarative distributed programming

Building (heterogenous) distributed applications is hard.  Why?

It seems inevitable to escape a design that relies on distributed
state, and communicating stateful objects have very complex
interaction patterns.

I've enjoyed using Erlang to mainly make the problem known:

- You will not understand the problem you're solving until you've seen
  your proposed solution fail - due to distributed interacting state.

- The only hope you have to get anywhere near implementing your
  requirements is to iterate development.  Updates are essential in
  this process.

- It makes sense to focus on the happy path, and design for robustness
  through restarts: if something unexpected happens, give up and go
  back to a known state.  Move design effort into designing

- There is probably no coincidence that the supervisor approach
  resembles the idea of the "germ line" in biological evolution:
  everything except the germ line is disposable, as long as it runs
  long enough to propagate the germ line.

All this leaves the functional programming mumbo-jumbo out of the
picture, or at least delegates it to the meta level.