
Elixir Users' Survey 2014 - nithinbekal
http://blog.elixirsips.com/2014/09/12/elixir-users-survey-2014/
======
kcorbitt
I'm really intrigued by Elixir/Erlang and would love to learn more about it.
The problem (and this isn't a criticism of the language at all) is that I just
can't figure out what I would use it for. Currently I'm mostly working on
webapps, and although I have control over the technology I use I'm not sure I
can justify using Elixir in my projects.

I'm working mostly with rapidly-changing MVPs, and the ability Rails gives me
to iterate quickly is valuable to me. If I understand the Erlang value
proposition, it's really meant for sending and dealing with millions or
billions of messages in a distributed, fault-tolerant way. But since I'm
nowhere near that scale (if my MVP can handle 5 concurrent users that's
typically good enough to start with), I feel like switching to a language with
less of an ecosystem would be almost all downside, even if the resulting code
would be more scaleable. I'd love it if someone tells me that I'm wrong.

~~~
pron
> But since I'm nowhere near that scale...

This is a problem I've been thinking about a lot. In the 90s, I don't recall
developers saying, "I don't need the power that comes with the new Intel CPU"
(or maybe I just ignored those voices). Whatever extra power you had -- you
found some use for in terms of more interesting logic. Now, I'm not saying
Erlang or Elixir achieve this, but the goal of many modern -- let's call them
performance driven -- platforms (and I'm well aware that wasn't Erlang's
original selling point, and probably not its current selling point either, but
I'm addressing the parent's particular concern) is to basically give you more
available computing power to use as you see fit. The fact that there are many
voices like yours means one of two things: either those platforms are not
transparent or general enough to bring back the old "free lunch" of clock-
speed increases, or that contemporary application developers have grown used
to a decade of less-than-dramatic increase in computing performance, and as a
result, their imagination has suffered. I'm pretty sure it's mostly the former
(in particular, we don't see enough software -- like PC games in the 90s --
that clearly demonstrate the advantages of harnessing more computing
resources) but I fear the latter also holds some truth.

~~~
angersock
Third option:

Most problems faced by the working programmer simply don't benefit from a more
powerful language, and the additional cost of switching isn't borne out.

I suspect that's the case--single-threaded node apps or Rails apps are more
than sufficient for a lot of client work (hell, even WordPress can get you
quite a ways).

~~~
pron
But are they really sufficient or is it lack of imagination? I mean, why
wasn't the XT sufficient? Or the 386? Is it a universal constant that a
single, ~3GHz stream of x86 instructions (forget about ILP and friends for the
moment) is sufficient for human needs (but, say, 1GHz isn't)?

------
mkohlmyr
I've been looking at Elixir more and more over the last few weeks since it
seems to incorporate many of the things I find lacking in Python. So far the
only real hurdle was that I found the introduction text a little obtuse when
it came to Mix and OTP (I'm often slow to get through introductory guides,
since I'm a learn-by-doing person).

Would love to hear from other people who have come from a JavaScript / Python
heavy background what their experience has been with the language. Or from
people who do web development in general if they feel its a good fit.

~~~
untothebreach
I come from a javascript/python background, you might want to take a look at
the Phoenix web framework[1], as it will give you a good introduction into the
language, but also introduce some new concepts (OTP-wise) that will help you
think more "elixir-y" (or "erlang-y").

One thing I constantly keep in mind when programming in Elixir is that, using
it in the same way you would use Python is a waste. For example, when I use
Python, I'm not typically thinking of concurrency (outside of, "how many
gunicorn workers will I need?"), because of the situation with concurrency in
Python. Using Elixir (or Erlang), you really aren't taking full advantage of
the language/runtime/VM if you don't take concurrency into account. If all you
want to do is a little string munging, you can do it in Elixir, but it is
probably not the best tool for the job.

The Mix & OTP guides available on elixir-lang.org are great, but if you want
more information on OTP, the OTP chapters in "Learn you some Erlang"[2] are
wonderful. You will have to do some translation from Erlang syntax to Elixir,
but it is a great way to learn how to think concurrency.

1:
[https://github.com/phoenixframework/phoenix](https://github.com/phoenixframework/phoenix)

2:
[http://learnyousomeerlang.com/content](http://learnyousomeerlang.com/content)

~~~
mkohlmyr
Point well taken as far as concurrency, really reading up on GIL along with
working a lot with SOA is part of what is informing my desire to find a more
appropriate language. I want to become more proficient in developing web
services that scale, as well as expanding my mind somewhat by working with a
different model / from a different perspective.

I will have a look at the links, for sure. Thanks!

------
tiffanyh
I'm really excited about Exilir because it makes creating DSL like the Phoenix
Web Framework, trivial.

However, I am concerned though that developing in Erlang is a paradigm shift
for most developers (eg letting apps crash when unexpected behavior occurs,
concurrency model, etc) and Exilir makes it too easy to think you're
developing in a procedural language when you're not.

I wonder if I'm alone with this concern. One thing simply the Erlang syntax
does well is re-enforce the idea of how to fundamentally change how to develop
applications to fit its model yet Exilir hides all of that

Edit: typo

~~~
tomp
Are you by any chance familiar with Flask/Sinatra? Is Phoenix in any
qualitative way better (more flexible/costumizable/simpler) than those two?

~~~
chrismccord
Phoenix sits somewhere in b/w Sinatra and Rails custom/simplicity wise, while
offering features that neither address, i.e. (realtime communication with
browsers, native iOS, & soon android clients). "Qualitatively better" is a
loaded question, but by virtue of Erlang VM, Phoenix apps can be distributed
across a cluster without extra fanfare. You could run 20 Phoenix routers,
load-balanced on a cluster, and everything like Webscokets/pubsub would "just
work". i.e., no extra layer in b/w like redis or rabbit, no code changes, and
no issues with things like sticky sessions.

