Spacemacs (emacs + vim) is getting a lot of love lately. http://spacemacs.org/
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.
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!
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
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!).
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-playground (I’m not sure if I’ve ever touched this one yet though)
- autocomplete-elixir (love it)
- linter-elixir-credo (love it)
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.
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.
Basically sufficient effort has been expended to convince the language-mavens - typically a lot more effort is needed to attract the tool-mavens.
And I will pay for a license the next day.