Syntax, semantics, and aesthetics
I'm not usually inclined to start a blog post with a tl;dr, but if I were, this one's would be a link to Xkcd.
Ever since venturing into the land of Elixir and through it into the greater realm of Erlang I've been made acutely aware of the seemingly turmoil and fright the little upstart language has caused among the old guard. Ignoring it obviously hasn't made it go away and by now we're about halfway through the Kübler-Ross model effectively claiming that Elixir doesn't really bring anything new to the table so one should simply learn Erlang instead. The rallying cry is syntax doesn't matter.
This. This is where I have to take a deep breath and start counting to ten. Of course syntax matters! If it didn't, we wouldn't even have a number of more or less notable Erlangers desperately making the claim that it doesn't. It's all about the semantics, they say, so you can completely ignore the syntax. By this logic, it's clear you need not spend time to learn Elixir first and Erlang second, because obviously your ultimate goal is to become an Erlang programmer, right?
Wrong.
First of all, acknowledging the importance of syntax in no way belittles the importance of semantics. Secondly, assuming that Elixir is merely a stepping stone on the way to Erlang is to profoundly misjudge the kind of people that are attracted to Elixir from outside of the Erlang community.
But why does syntax matter? And who are attracted to Elixir and for what reasons? Well, I'm glad you rhetorically asked.
Beauty is syntax, syntax is beauty
Paraphrasing Keats and then turning it into an excursion into the shallow nature of human beings probably grants me a reservation in some circle of Dante's inferno, but here we go.
With deeper understanding of the semantics of a language, the more I appreciate it or at least understand some of the compromises that have been made. However, the deeper understanding doesn't magically pop into existence of itself; nay, it requires passing through a layer of attraction first. Something needs to make an entity, be it a programming language or a person, intriguing enough to warrant spending time with it in the first place. As much as we like to believe that beauty lies in the eyes of the beholder and we can all see past warts and blemishes, humans tend to be quite shallow. For a programming language, I believe that at least initially, syntax plays a large role to a great many prospective users. The aesthetics of a language will shift and change to an individual as syntax is learnt, semantics are understood, and actual work is done.
First impression might last or it might be completely overturned, but unless it captures your interest in the entity in the first place, chances are you won't go beyond the first, shallow impression.
Personally, I can barely stand Javascript. In my mind, it's the new PHP (which I can stand even less). But by learning and somewhat understanding prototype-based languages through toying with Io, I have a greater understanding JavaScript. I still don't want to touch it more than I have to and frequently opt to use CoffeScript instead. Are the semantics profoundly different? No, but I'm much more pleased by the look and feel of CoffeeScript than by JavaScript. The same goes for Elixir and Erlang.
PHP irks me in so many ways that it's inconceivable to me to even spend five minutes with it. That's just how flawed as a human I am.
Elixir - Ruby 3.0
A show of hands revealed that about more than 80% of the attendees at ElixirConfEU had a Ruby background. While more diverse than that, certainly a majority of the active Stockholm Elixir group also has a Ruby background. The prominent web framework, Phoenix, is greatly inspired by Ruby on Rails. Key players and core members within the Elixir community comes from the Ruby community. We bring a set of perspectives and expectations that might be rather different.
Coming from a language where the practical solution to concurrency is to start an entire new process or jump through hoops to get all our dependencies to play nicely with the use of threads, going to a language where the actor model is not bolted on, but rather a first class construct is nothing short of bliss.
Coming from a language where meta-programming in general has gone from being greatly overused and abused to being occasionally and sparingly used to great effect, means that a new language lacking these capabilities is found wanting. Luckily, Elixir has reasonable meta-programming capabilities for the Rubyist in me.
Coming from a language with a living, vivid, welcoming community we expect to find the same thing here. If we don't, we have to create one.
Most of us aren't out to build the next Whatsapp, serving millions of users from a single server. We would just like to have our JSON API:s be faster and require fewer Heroku dynos to not fall over than if we were using Rails. This might sound banal to you, but it's also what's powering most of the web as we know it. Moderately used API:s that is, not Rails.
An Elixir alchemist walks into a massively concurrent bar
I recall attending a local Erlang meetup this year and being singled-out as "the Elixir guy" in the room. While I'm sure the remarks where meant as jokes, the experience convinced me of necessity of the separate Elixir meetup group we started last fall. The best of intentions be damned; if someone feels intimidated, even if it's just in their own head, that person will not return.
In all fairness, to me it seems as if the reluctant, dismissive attitude towards Elixir is diminishing and prominent figures are starting to actively back the young language. Especially Erlang Solutions are making great strides to encourage the greater Erlang community to embrace Elixir and what it has to offer. Quite frankly, given my experiences at the above mentioned Erlang meetup, I'm surprised how some of the jokers come across as avid Elixir proponents these days. Perhaps they already back then were supporters, but in that setting it didn't come across loud and clear. I can easily picture someone with thinner skin leaving and never looking back.
First impression is everything if you only get one chance.
The importance of Elixir meetups
In a world where sharing knowledge and know-how is paramount, doing so effectively requires a vast amount of humility. Paradoxically, there's a thing such as knowing too much. Imagine a few Elixir greenhorns showing up to a meetup full of seasoned Erlang developers. Unless they're met with open arms and a great deal of understanding and encouragement, chances are they'll never really get into the language and the overall platform. We learnt this lesson in the Ruby community and there are several efforts being undertaken to create safe environments for learning no matter the individual skill level. Just a few examples that spring to mind are Railsbridge, Railsgirls, and the local recurring Rails introductory course organised by Sthlmrb.
I greatly applaude the Junior Beamster effort and think it could be a marvellous starting point for doing the same for the Elixir community.
In time, I hope to see the local and global Elixir communities to extend into the same direction. For now, I believe there are very few seasoned Elixir developers. Most of it is new to all of us and the distinct Elixir meetups should play the role as safe havens for experimentation and learning, far from snide remarks - be they real or imagined.
At the same time, we must not ignore or forget about our Erlang brethren and sisters. Once the wider Erlang community has reached the fifth stage, acceptance, I greatly look forward to seeing a unified community that coexists, safe in the knowledge that Elixir and Erlang aren't in conflict with each other and either one is preferable to seeing someone become yet another Java or .Net programmer.
Well that, and making joint humanitarian interventions to liberate the unfortunate from the salt mines of PHP.