This is a story about four people: Everybody, Somebody, Anybody and Nobody.
There was an important job to be done and Everybody was asked to do it.
Everybody was sure that Somebody would do it.
Anybody could have done it, but Nobody did.
Somebody got angry because it was Everybody’s job.
Everybody knew that Anybody could do it, but Nobody realised that Somebody wouldn’t do it.
And Everybody blamed Somebody when Nobody did what Anybody could have done.
After contemplating the state of the tiny constellation of Erlang resources available, both in-depth instructionals and books, I’ve finally decided that what is most lacking is an intermediate resource. So I’ve started working on one. The goal is to demonstrate a non-trivial system (a MUD, in this case) as it would be written in raw, beginner-style Erlang and show how a project can evolve to a for-real OTP system by providing complete project examples and code commentary throughout the intermediate stages of evolution.
Hopefully this will force me to cover many of the giant, undocumented gaps Erlangers tend to encounter when trying to make the transition from Erlang beginner to OTP master, and I’ll undoubtedly learn a lot in the process myself. That last bit about self education is, of course, my own selfish motive for doing this. I have yet to find an aggregate body of Erlang best practices or collection of “common things people do by hand in Erlang and the idiomatic way to handle them in OTP”, and I really wish there was such a thing. I especially wish there were such a thing based on a single, non-trivial project instead of toy examples so that learners could get a grasp on why OTP matters by reading a real project instead of trying to assemble a mental model of the grander sculpture by examining bits of dust cast off by the chisel.
I chose a MUD as an example for ease of understanding, non-triviality (too many example systems are unrealistically small), freedom from graphical distractions, and the striking number of parallels between many MUD subsystems and real-world business, game, and social software. Hopefully work and real life don’t interfere to the point that I have to stop this mid-way through!
When we want to discourage people from smoking we levy taxes on cigarettes. When we want to discourage people from drinking we levy taxes on alcohol. When we want to discourage the purchase of a product from a particular country we levy taxes on their imports.
What should we interpret as the motivation behind taxes on businesses? Businesses of a particular size? Income? Income of a particular size?
None of this has a happy ending.