I am interested in Elixir from the angles of concurrency and functional programming. I also want to stay away from the JVM (for employment-related, historical reasons which I won’t enumerate here) so I discovered Elixir and it has attracted me for the following reasons:
- functional approach - I am very interested in learning how to apply functional techniques to solve problems and alternatives to OOP
- not statically-typed - I am not keen on all the type boilerplate these languages require and don’t actually think they catch as many bugs as they are made out to catch. Also, I feel like developer productivity is MUCH higher with dynamically-typed languages. I would be ok with strong, optional typing a la TypeScript, though.
- young project/community - I would like to participate in a community where there are not 1000s of “experts” and we are basically all learning together.
- room to contribute - similar to #3. I like the idea of being able to materially contribute to the community, rather than writing the 300th OAuth client library.
- The built in concurrency and rock-solid Erlang VM base… I really think Elixir can be the microservices platform that Golang is angling towards and this is the greatest opportunity for Elixir.
So the original question is simply “Does the association with Ruby (where Elixir is frequently described as ‘Ruby-like’) good for Elixir or is it something that may turn people off if they have no interest in/possibly avoid Ruby?”
Personally I think it is a good thing, because while obviously different to Ruby, Elixir has actually been influenced by it - perhaps if only philosophically, in the sense that it is designed to be aesthetically pleasing and optimised for programmer happiness. These are actually some of Ruby’s strengths that drew many of us to Ruby to begin with.
People often joke that Elixir is the child of Erlang and Ruby and that it wasn’t a mistake, hehe.
I think some of the confusion arises when people think Elixir is Ruby with functional programming masked behind what they already know (OOP). It’s not, it’s an entirely new language that (to me as a newbie) seems to be more like Erlang - but brought up to date with some of the best aspects of many languages. It just happens that the main ones happen to be from Ruby.
This is just my opinion as a relative newbie tho. Again, interested in hearing what more experienced Elixir devs think
I too do not have a Ruby/Rails background. Seems much of the information on Elixir/Phoenix is oriented to those with Ruby/Rails expertise. Another perspective that seems common is explaining Elixir to those coming from an object oriented programming background.
My background stems from the procedural paradigm of programming, with C being my forté, and a good understanding of concurrency and reliability from a telecommunications engineering perspective. I do have a bit of OOP experience as well.
I expect most people coming to Elixir/Phoenix will be new to functional programming and concepts such as concurrency, yet coming from some other experience in programming. This makes it difficult to present or teach Elixir/Phoenix, as teaching from a ‘new to programming’ perspective will seem too remedial, yet teaching from a Ruby/OOP/etc. perspective makes it more difficult for those not sharing a similar background.
So to answer your original question:
“Does the association with Ruby (where Elixir is frequently described as ‘Ruby-like’) good for Elixir or is it something that may turn people off if they have no interest in/possibly avoid Ruby?”
I sincerely hope not. I am also hoping that there are enough of us with diverse backgrounds that we can assist each other in the learning process; Filling in the missing links as it were.
in listening to José Valim on a number of podcasts, the most recent being The Changelog #194, the influence of Ruby seems quite modest and I think a lot of the comparison seems to stem from José’s past as a Rails core committer/Ruby guy than the constructs of the language itself. There is a decent amount of Python and Clojure in there too.
I don’t think it’s necessary, but that it’s not harmful.
The core aesthetic is similar. As you mentioned, focused on programmer happiness.
But it’s also very stripped down and practical. Personally I feel like its a ruby 3.0 where there are many breaking changes and a radical change in underpinning, enough to warrant a new language name, but having a similar aesthetic.
The main difference is that it seems more minimal and explicit, which I’d like even if it weren’t done to achieve the compatibility with the strict erlang runtime.
The main reason that I don’t think it’s harmful is this. I think that the greatest store of knowledge of both how to do stuff and how not to do stuff has been accumulated by the ruby community in the past decade. The c# community has copied ideas from the ruby community, the java community has copied ideas from the ruby community.
The flexibility and readability of the Ruby language has created a lot of experimentation and resulted in a lot of wisdom.
The vector of progress is a combination of two steps forward, one step back. The most common mistake in progress is not forcing yourself to do the one step back.
I see Elixir as the step back in the evolution of Ruby.
Interesting way to look at it think for a lot of people it’s certainly turning out to be a next step (even if just for certain types of apps).
Well and I realize that in some sense it’s a bit of a ridiculous statement.
While I think the ruby association is helpful for a bit, it does become useless at some point as well.
John Cinnamond has a nice course on pluralsight called ruby beyond the basics and in it he shows how you can do functional programming with ruby, but then mentions that if he were to see ruby code like that he’d worry a bit about the direction of the code because it doesn’t seem very rubyish and that if you want to do stuff like that you might want to look at a pure functional language.
Another way to ask the question that might be more useful is “if you want to spelunk older code for ideas on how to do things well or poorly in elixir, what code would you spelunk?” Basically your other topic what other languages are like elixir. I think that’s probably a better way to phraise the same question. Ruby is useful because of the metaprogramming, perl or scheeme or ML for the functional stuff, Erlang for processes, C#'s linq for ecto - each language has something that can provide an interesting association that we can learn from. It just never goes too far.