I initially learnt Erlang to write websocket backends for browser-based games. Then found Elixir and moved on to it. I still work with the same stuff that OTP offers, along with a lot of sugary features that Elixir and it's community provides.<p>The Erlang syntax might be weird at first. But you'll get used to it.<p>Pattern matching for function arguments is a life-saver. Erlang also runs checks on your module when it gets compiled. It tells you if vars are being used or not, etc. Very handy IMHO.<p>The best side-effect of the concurrency model, is that your production environment, apart from config vars, will be almost same as your development environment. Unlike most languages today, you won't need a separate server program (Unicorn, Thin, Passenger, etc). You don't have to put your app behind nginx or apache. Use Cowboy (or alternatives), which is a server library for Erlang. I'll take care of stuff for you.<p>I write some Elixir libraries in my spare time <a href="http://github.com/HashNuke" rel="nofollow">http://github.com/HashNuke</a>
For the language I love its concurrency model; creating thousands of "processes" at your PC/laptop is no problem. Message passing over shared memory also makes your distributed program easy to reason about. When talking about Erlang, you can't avoid OTP. It makes creating fault tolerant system at ease. Putting these two pieces together you have a very scalable fault tolerant distributed system.<p>I don't like the syntax of erlang though. And the missing of macro makes me switch to Elixir.
Not so fond of it. The syntax is ok (after a while), but the way records work is annoying. You have to use a lot of syntax to reach into records containing other records, especially if you want to change a field in a record in a record. They are also compile-time only and "disappears" after compilation (they become tagged lists).<p>No builtin syntax for dicts.<p>Hot code-swapping is its killer feature though. A system mostly written in Erlang can run multiple versions of itself and gradually upgrade data to the new version or downgrade to the old one. E.g your webserver can go from 1.0 to 1.1 without having to suffer even a second of downtime. No other language that I know of has that feature.
I love Erlang, though I mostly use Elixir. It's changed how I think about programming in a very refreshing way. The Erlang community is also incredibly practical. I enjoy programming languages that are born out of research, such as Rust and others, but I really enjoy Erlang because it was born out of solving a problem. We're very fortunate that the problem Erlang creators were trying to solve back in the 80s and 90s is a pretty common problem today.<p>It's easy to get hung up at the aesthetics of Erlang. But the parts that really change you as a programmer are the ideals that Erlang embodies. I urge you to continue on, or learn Erlang by way of Elixir.
I loved erlang. I still do. To me it is the most well designed language/library set for distributed programming. I love their approach about error handling.<p>But I find golang much more accessible. Erlang does not scale down, for simpler tasks, erlang feels like an overkill.<p>Also while I love erlang syntax, and the functional style, my colleagues find golang lot more palatable than erlang.
I enjoyed learning and using it. The syntax is annoying though.<p>These days I've been happy with Python + gevent for the kinds of things I was using Erlang for (writing load test scripts w/ lots of concurrent connections). I never had much need for what OTP offers.
I love the way Erlang simplifies distributed and concurrent programming.<p>The syntax is a bit weird though and the library support is lacking a bit but a very fine language indeed.