When is Elixir going to be famous?

I agree with @OvermindDL1 to a large extent, though not necessarily to the extent of forcing strong typing on the language (which I don’t see happening). The main pain point is compile-time analysis, which effectively comes down to tooling.

Right now, to the best of my knowledge, Emacs and Vim (and variants) are the most popular IDEs. I come from the Windows world to Elixir/Erlang because of the natural concurrency model of the BEAM being the best of the FP + OOP worlds. I’ve become pretty decent at Vim, but Emacs was just too different. (I don’t want to start a war here over the various qualities of these - If you’re ninja in your stack, then that’s great.)

My point is that there is a huge investment in just being able to edit a file. Elixir/Erlang has the superb architecture and infrastructure. And I have repeatedly said that I think Elixir’s documentation is top-notch and may be my favorite aspect (and the community genuinely rocks!). The next big goal, IMO, should not be language improvements (though I love and welcome them hehe). It should be tooling for us mainstream-ish-ers, with these particulars: solid, and reliable intellisense, jump-to-def and back, and refactoring. Oh how I miss refactoring (but it’s not worth it trying to program asynchronously in any other language).

That’s my two-cents. Lots of luv.

1 Like

I don’t know what’s most popular (old school Erlanglist prefer Emacs, that’s all I know) but Elixir has awesome Atom plugins and linter and just works like a “regular” editor. Sublime is not far behind. It’s no VS Code intellisense for C#, but it does just fine (Atom autocompletes my own and the standard modules).

You’re right that most, if not all pretty much all but a few, Elixir devs use a simple text editor. Not many people use IDEs.

2 Likes

Yes, I am currently using the atom-elixir package and it’s great. But it’s basically one awesome dev in his free time, and not a team of devs. Consequently, it’s a bit on the buggy side and it doesn’t have refactoring. (I can’t seem to get my user-generated code to code-complete even half of the time recently, but I’ve just set up a new environment so we’ll see.)

And I’m well aware that elite devs have no problem coding without intellisense. But it’s a productivity loss. And no refactoring - that is a huge productivity loss for anyone, no matter their skill level. Fortunately, the language is so good it outweighs the missing tooling…plus observer is pretty freaking awesome!

But I still think that this should be a focus in the near future for Elixir.

Intellisense is always useful.

4 Likes

Indeed!

While there are certainly people who have blinders in regard to FP, there is a real benefit to adopting at least a hybrid form of FP. The removal of default mutability removes a significant source of accidental complexity–unintentional changes to data.

I certainly agree that being so chauvinistic about a choice of language paradigm just turns a lot of people off but there are real benefits to adopting FP just as OO offered real benefits over the structured programming that preceded it.

1 Like

for tooling:

  • I would like to have IDE like clojure has (cursive ide). But I hope that intellij-elixir will get there.

  • Integration of Dialyxir/Dialyzer into IDE

  • Refactoring

1 Like

When Elixir grows big enough JetBrains will do official IDE :slight_smile:

4 Likes

Elixir’s biggest competitor in terms of adoption is Go based on my observations over the last year. The Go team thought that it was going to appeal to people who were using C and C++. Instead it’s adoption has come largely from teams that were/are using Ruby/Python/Perl/Javascript that needed a solution for heavy concurrency and faster performance that the limitations of those languages. Go adoption skyrocketed and in the right use cases it shined.

People found out fairly quickly that it is not a “virtually all use cases” solution. Full stack web development is pretty painful with it. The community push towards “if it’s not in the standard library it doesn’t really count” mentality combined with the package management complaints has created a lot of difficulty and tedium around it for a lot of people. To be clear, I’m not bashing Go because it really is a great language when it fits your use case.

What I’m getting at here is that the Ruby/Python/Perl/Javascript developers who needed a solution went to Go because it was the best available option with the lowest barrier to entry at that time. In my opinion, virtually all of those developers were really looking for Elixir. Elixir best bet for continued adoption and growth will come from those communities.

I see a lot of discussion about stricter static typing in this thread and that’s not going to help much with getting those types of developers to adopt. Dynamic vs Static is a much bigger debate that is worth having in this forum but the preference largely boils down to what you’re used to. As fast as Elixir is, you’re not going to win over Java developers with arguments about speed or concurrency because people in Java shops have invested heavily in Java peripheral infrastructure. Ditto .NET shops. If the architectural arguments were going to win over those communities Erlang could have done it.

Where Elixir fits is as the best of breed solution for productivity and concurrency as a dynamic language. It takes Python/Perl/Ruby/PHP/Javascript by a landslide compared to those stacks and those stacks also come with very low infrastructure investments, meaning cost of switching or adding in a new language is very low.

That’s the growth market for Elixir because it’s the market where Elixir presents the biggest solution to a problem. The other is the case when Erlang/BEAM was the ideal solution and the team was more comfortable with Elixir. I don’t know that Elixir will cannibalize the Erlang world as much as expand it though.

6 Likes

Spacemacs (emacs + vim) is getting a lot of love lately. http://spacemacs.org/

3 Likes

Just my (not so) quick experience on this:

I live in a place where technology moves really slow. People here are just starting to get on the RoR bandwagon, which leaves me bewildered. Luckily, I’ve had a chance to travel to SF and spend some time with some very talented engineers in events, airbnb, … etc. One of them told me about FP, made me research it, and now Elixir is my main backend language. When I went back to my country, people haven’t even heard of Elixir! I did a talk, developed an Elixir backend for one of the startups, and gave away some stickers, lol.

Shortly after, I visited the startup scene in Tokyo. I tried to meet the most reputable and skilled engineers there, and found the biggest RoR shop (at CookPad) and also a gaming startup with a backend built with Clojure. Engineers from both companies have heard of Elixir, but I was the first developer they met in Tokyo who is actually building something with it.

So, it’s probably the natural course of any language, to kind of spread steadily as more people talk about, organize events and such… Another takeaway was the market segment. Elixir is my personal choice, but I’ve met engineers moving to Go, thanks to Google’s marketing, Clojure, for it being around longer than Elixir, and now Swift 4 is promising us first-class concurrency, using actors and such …

Finally, I would like to add that Elixir’s best chance at hitting mainstream is targeting developers who are new to backend development. Personally, I’ve never done serious backend development before Elixir. I’ve used Flask, Google App Engine, a bit of Rails, and even C++ but I really hated it. Elixir clicked with me a lot better than the others. Since I didn’t have any “emotional” attachments to other languages, adopting Elixir was a no-brainer.

6 Likes

Thank you @brightball. I have indeed looked into spacemacs - it was certainly popular in that favorite IDE thread. I include that under the “and variants” in my post, and I still stand by my comments! :open_mouth:

2 Likes

I highly agree with your comments about Go and its adoption, etc. I went with Elixir because of my previous comments elsewhere: I see Erlang’s implementation of the actor model as a naturally distributed and concurrent architecture, whereas I see Go’s implementation as a highly focused collection of concurrency patterns (but I’m not a Go expert). The barrier to entry with Erlang is what I’m talking about with the need for better tooling. IMO Elixir is already doing just about everything else with regards to dropping barriers and being attractive.

I also wanted to mention on the static vs dynamic aspect: I have recently come to appreciate guards as essentially more powerful “static” type contracts. If I expect a certain type in a function signature, I create a guard for it. On top of that, for free, I get even more robust contract declaration through the same guard mechanism. So whereas in .Net I would have to implement Code Contracts using a separate extension that combines static analysis and interweaved runtime injection (if using runtime contracts). So what I’m saying is, guards provide both “typing” and the more advanced (pre-condition) “contracts” as a natural, tried-and-true aspect of the language. I think also that with a bit of syntactic sugar, guards could even be implemented with a “type” syntax similar to:

def foo(bar) when is_atom(bar) do

becoming…

def foo(<atom> bar) do

or however you want to indicate a type. But, and I hate to sound like a broken record, there needs to be kick-butt tooling to give us solid intellisense, jump-to-def, and refactoring (at a minimum!).

3 Likes

You all really should look at atom’s plugins. I have dialyzer linting, intellisense, etc… I’m even thinking of converting from vim to atom at home… >.>

Not for speed reasons, but because typing catches a holy-hell-ton-of-bugs at compile-time instead of randomly ‘later’. Even if it is just a typing only for the specific language, even if it is optional, even if it compiles down to a dynamically types language, having types still means catching a holy-hell-ton-of-bugs at compile-time.

What plugins do you use? I use Atom exclusively for Elixir and I only have two installed: the official one and the one guy one guy called “atom-elixir” I think.

I have installed:

  • atom-elixir
  • atom-elixir-playground (I’m not sure if I’ve ever touched this one yet though)
  • autocomplete-elixir (love it)
  • build-elixir
  • elixir-cmd
  • language-elixir
  • linter-elixir-credo (love it)
  • phoenix-elixir-snippets

I’m not entirely sure all which commands and functionality I use from which, but I like my work-flow.

EDIT: I also use Elm, and the atom-plugins for elm well out-do that for other IDE’s.

4 Likes

I want to reply to this (and obviously I am), but I don’t want to hijack this thread. I’ve started a new thread on elixir atom configuration if you wouldn’t mind continuing there.

Oliver Steele: The IDE Divide (2004-11-21)

Basically sufficient effort has been expended to convince the language-mavens - typically a lot more effort is needed to attract the tool-mavens.

1 Like

And I will pay for a license the next day.

Same here