Erlang/OTP is mind-blowing to me. However, if there’s no Elixir, I probably never actually take a serious look at them (although it was always on the todo list). I can raise some examples:
I realized the scheduling efficiency is much more important than execution speed:
Given Java is much faster than Erlang – Erlang is much faster than Java is most of the Web and other scenarios. The nature of most user-oriented scenarios is about unordered events and operations.
Erlang vs Java is more like agile vs waterfall. If the requirement never changes probably waterfall is better, just like scientific calculation or batch operations. But more scenarios are dynamic, react to change is far more important than personal efficiency.
I realized programming language is probably is not enough. We need operating systems. Processes. Applications. Isolation.
Typically most of the libraries run on your threads, in typical programming languages. If one of them crashes, everything crashes unless you handle them.
In typical language: two objects, one is saying ‘hi’ to another, and another responds with something the former does not understand. The whole world explodes. That’s crazy! And yet we’re so used to them.
In typical operating system, if there are some application crashes, people is not expecting the whole operating system crashes. They’ll be really pissed if it does.
Your database and your application could be the same thing.
Actor is similar to this philosophy, and riak_core / lasp / o(e)rleans are stepping toward this direction. It’s not popular or easy to handle right now, but we will eventually be there. The database is always ‘the’ problem that makes me really think ‘there should be a much better’ way. After I read these solutions, I believe there’s a bright future for this philosophy.
They are really mind-blowing.
SICP and Lisp blew my mind on how to write software.
Erlang/OTP blew my mind on how to run software. And running software properly is so important nowadays.