
Why The Cool Kids Don't Use Erlang - lelf
http://www.gar1t.com/presentations/2014-06-10-euc/
======
kyberias
A semi-interesting observation of the graph on one of the first slides: C# is
highest on StackOverflow metric because the site has been historically
concentrating more on Microsoft technologies. This also shows on how the
different languages are separated by the diagonal line: technologies/languages
closer to Microsoft are above the line and more "open" alternatives are under
the line.

~~~
CmonDev
How can an open free Q&A site be concentrated on something? It simply reflects
what people want and need.

~~~
readme
Because early adopters of the website were prominent Microsoft developers.
Such as Jon Skeet. This caused network effects. To suggest just because a door
is opened that every developer has an equal chance of walking through is
absurd. This is not evidence that the general software community wants or
needs c# more than any other thing. For many developers more traditional
channels of q and a are still popular, such as mailing lists.

~~~
CmonDev
Jon Skeet is a Google developer. Well early Git adopters were Linux
developers. Does it mean that GitHub is not really mainstream apart from a
narrow group of people?

~~~
mpyne
> Does it mean that GitHub is not really mainstream apart from a narrow group
> of people?

Does git even work well on Windows yet?

~~~
to3m
Assuming this isn't supposed to be rhetorical - yes, it works pretty well in
fact. Windows's bizarrely ropey FS performance means it's a bit slower, but in
general the experience is basically the same as using it under OS X.
SourceTree/git gui/gitk are work the same.

~~~
philsnow
It may be now (I'll take your word for it), but for the longest time, "windows
support" was one of the only selling points anybody could provide for choosing
mercurial over git (the other being some people prefer mercurial's
branching/tagging to git's).

So, if git didn't work fine on windows for a long time, there would be plenty
of time for network effects to entrench github as a non-windows site, and
indeed that is the case. Github is where you'll find a lot of javascript,
trendy open source projects, and even os x apps, but not so much windows
stuff.

~~~
orclev
Open source on Windows (and thus github usage) in general seems to be
something of a second class citizen. There's Cygwin of course which brings you
a lot of the open source tools, but it's far more common for Windows apps to
be closed source it seems. Linux of course due to its nature tends to favor
open source apps quite heavily, but it would be interesting to compare how
many apps are closed vs. open on OS X as compared to Windows.

------
dizzystar
If I'm interpreting these slides correctly, I see an interesting bit of irony
as a Clojure programmer. I can't tell you how many times I've been asked about
my opinions of Erlang and I've lost count of how many times I've been told to
learn Erlang because company X needs Erlang, or I should learn about scaling
NoSQL databases, or whatever perception.

As far as I can tell, Erlang may not have a visible mind-share, but it has a
much higher impact on mind-share and companies than it appears. Of course,
this may just because many people consider Erlang / Haskell / Clojure
languages that solve similar problems and are thus diametrically opposed to
each other.

One person told me about how he asked a bunch of Haskellers about Erlang.
Their answer: "Why would we learn a language no one uses?"

~~~
michaelneale
I think it is used more than people perhaps realise - and if you are deep into
clojure - you are probably already on the bleeding edge (at least as far as
mainstream programmers are - remember there are a LOT of them) - thus would
tend to come up against places that use erlang or clojure (self selecting?).
(FYI I like both erlang and clojure, and have used both in anger).

I learned erlang before clojure - it I think the former helped me quickly pick
up the latter, strangely.

------
lelf
[http://vimeo.com/98639067](http://vimeo.com/98639067)

~~~
metaobject
What is this video?

~~~
spooneybarger
video of the talk that accompanies the slides linked here.

------
disputin
Does that RedMonk chart not show that it is fairly cool? You have C# and Java
at the top - I wouldn't call them cool, widespread, not cool. It's above, on
both axes Arduino, Dart, TypeScript. It's in the vicinity of Clojure, Go,
CoffeeScript.

~~~
orclev
I think the "cool kids" part of this is somewhat rhetorical. The whole point
of the slides is basically what are the deficiencies of Erlang, and how can we
fix them. The results are fairly interesting although not entirely surprising.

It's also worth considering that these questions were asked of Erlang users,
so it's the communities opinion of itself. I as an outsider would say my
biggest issue with Erlang is that it's a highly event driven system and I
don't like event based systems. Events are basically a more opaque form of
GOTO and thus suffer the same criticisms. Events are sometimes the simplest
way to model something, but as a general paradigm to solve all problems they
really suck and do terrible things to your program architecture.

~~~
jeffdavis
Why do you say Erlang is event-driven? It's a bunch of communicating
processes.

------
candoprog22
1\. It is good the cool kids are not drawn to Erlang because then we would end
up in the state Ruby and Node are now. 2\. The biggest fail in IT - "I can't
find experienced developers in Erlang/<some other tech>": Most employers are
muppets. Rather than hire a decent developer and allow them to learn a new
tech on the role, they scour the market for candidates that are probably just
lying on the resume/CV. I have already seen resumes/CVs claiming 5 years+ of
Swift on iOS. Quite a few retarded HR departments will fall for this.

~~~
alttab
Interestingly enough, in both the start up and corporate world I've seen
hiring when the developer has NO skill in the language. This was true about
Java, this was true about Ruby. This was true about python...

I think what would be a more interesting analysis is what cohort pre-selects
themselves to functional languages, or projects where that technology is used?
Out of all the software today, where is the most prominent functional code use
and why?

~~~
walshemj
That's what happened at my first job hired as a research assistant at a world
leading research place.

My instructions where Keith will give you an hours instruction on how to use
the PDP there is a book on fortan in the company library go and learn it.

Oh BTW that was leaving high school with 5 O Levels

~~~
perturbation
What is an O Level?

~~~
hga
If you're familiar with the Harry Potterverse, NEWTS are modeled on O Levels.
Perhaps a bit like US Advanced Placement courses and tests, but much more
institutionalized, and I gather they're part of how the U.K. university system
can get away with 3 year bachelor's degrees.

I once worked with a Jamaican who'd earned several O Levels (Caribbean
counties had their own versions of them modeled on the British system), he was
very smart and productive (and like many other good EEs had his own MOSIS chip
to flash).

Hearing someone got 5 O Levels immediately causes my talent antennae to twitch
^_^, and I'm not surprised he picked up FORTRAN easily (then again, I found it
very easy to learn starting a couple of years earlier than walshemj, and I'll
bet with quite a bit less mathematical maturity, just Algebra I and Geometry,
with concurrent Algebra II, but all taught by very good to excellent
teachers).

~~~
ZeroGravitas
I think you are confusing O-levels and A-levels. O = Ordinary, A = Advanced,
generally people going on to University would do A-levels, so leaving to get a
job with only O-levels might be roughly equivalent to having a High School
Diploma I think.

~~~
walshemj
Think professional apprentice / associate professional entry point.

Now a lot of jobs that where available to school leavers are graduate entry -
talk about grade inflation :-)

------
Joeboy
I would think that the "Hard to find developers" takeaway was a pretty good
incentive for developers to start learning erlang.

~~~
rwmj
I don't get this thing about having to find developers in a particular
language. I work on a lot of OCaml programs, and have used and hired
developers to work on the same programs. None of them had OCaml experience
before, but they just learned it as they went along (because they are
intelligent programmers). I actively _don 't_ want someone who only knows one
language.

Also we're using RabbitMQ (written in Erlang). At the moment there are a
couple of us mostly just reading the code and fixing the odd bug -- I guess
we'll want to extend it in future. You just plug away at it, read the code,
read the Erlang docs. It's not that difficult.

~~~
Almaviva
There's something worth talking about, which is that a sophisticated and
ingenious mess is orders of magnitude more costly than a simple minded mess.
My experience with brilliant functional programmers is that it's hard to know
whether you're getting someone who can use it as the best tool for a job in a
simple, elegant, and maintainable way, or a cargo-cultist who delights in
sophistication and cleverness and purity for their own sake, to great excess,
and leaves a codebase that needs to be scrapped and re-written when they get
bored and leave the company 6 months later, when everyone realizes that the
twisty baroque monstrosity could just be handled by an imperative loop one
quarter of the size that any high schooler could understand.

~~~
rwmj
As it's all open source, I guess you can look at the code and judge whether
it's a mess or not.

[https://github.com/libguestfs/libguestfs](https://github.com/libguestfs/libguestfs)

[https://github.com/rabbitmq/rabbitmq-
server](https://github.com/rabbitmq/rabbitmq-server)

------
cscurmudgeon
An interesting thing is Common Lisp's place in the graph. It roughly
translates to saying Common Lispers have less woes relatively. The CL nerds
were right all along :)

~~~
Almaviva
That or they just would rather suffer than talk to or work with another human
being.

~~~
mrottenkolber
Why did you even bother writing that, is it supposed to be funny? Because
there is certainly no truth or utility to this ridiculous speculation.

~~~
qbrass
Just like the comment it was replying to.

------
hershel
Since there are actor libraries like akka targeting the JVM and claiming to
offer similar benefits, why should someone prefer erlang?

~~~
waffle_ss
Because Akka can't magically patch over the JVM's shared memory model:
[http://doc.akka.io/docs/akka/snapshot/general/jmm.html#jmm-s...](http://doc.akka.io/docs/akka/snapshot/general/jmm.html#jmm-
shared-state)

And because the JVM does global stop-the-world garbage collection, which makes
soft real-time implausible because of the unpredictability of GC affecting
your actors. Erlang has per-process heaps.

Basically the Erlang VM was created for this use case while the JVM was not,
and its not something you can just add with a library.

edit: Also the lightweightness of Erlang processes compared to Java threads[1]
and hot code upgrades.

[1]: [http://i.imgur.com/hKMJ3HD.png](http://i.imgur.com/hKMJ3HD.png)

~~~
yummyfajitas
Java/Scala do allow you to do bad things. So add the following to Hershel's
question:

"Assume developers are non-malicious and will only pass immutable objects
across actor/future boundaries."

Also, I'm not that familiar with Erlang's memory model, so I might be wrong on
this. But as far as I'm aware the memory for a message in Erlang is shared
between threads - it's only local variables that use private memory. This
means Erlang will also need some sort of concurrent garbage collector - does
Erlang's version not stop the world, or at least the messaging subsystem?

~~~
rdtsc
> But as far as I'm aware the memory for a message in Erlang is shared between
> threads

Yes and no. Some large binaries (a specific Erlang data type, that can say
represent a packet or block of data from disk), will be shared and reference
counted when passed between processes instead of copied. They are immutable
just like most datatypes in Erlang. These binaries have a specific GC
algorithm that it just might take longer sometime for them to be reclaimed.
But it seems all that could presumably be done via atomic updates to counters
and references.

In general most messages are copied on send. So implementation wise GC is very
simple then. On another level because data in Erlang is immutable, the fact
that messages get copied is also an implementation detail! One could conceive
another implementation of a VM that only passes references and immutable data
on message send (well minus when it sends it to another machine, of course).
But that would make GC a bit more tricky just like in case of those binaries.

~~~
toast0
The large binary GC is actually pretty simple too: Shared binaries are
refcounted; the references are in the process heap. When the references are
GCed from the process, the shared binary can be freed. The reason that
sometimes it takes a long time to free, is that some types of processes will
get references to a large number of binaries, but not trigger a process
garbage collection, leaving lots of binaries allocated in the shared space.
Garbage collection for a process is only automatically triggered when the
process heap would grow, so there are some common cases which result in bad
behavior: processes that don't generate much garbage on their heap, but do
touch a lot of binaries (often this is request routing); processes that grow
their heap to some large size doing one kind of work, but then switch to
another type that doesn't use much heap space, leaving a long time between GC;
processes that touch a lot of binaries but then don't do any processing for a
long time (maybe a periodic cleanup task).

Another common issues is taking references to a small part of a large shared
binary.

------
decentrality
What I would like addressed by someone from Erlang is the reality of Celluloid
in Ruby, and do honest comparisons.

[http://celluloid.io](http://celluloid.io)

Otherwise, the speaker seems like a good representative, but the presentation
is so verbose it makes me want to concurrently handle his thesis
asynchronously in parallel threads and remove the human... in jRuby, using
Celluloid.

~~~
lelf
It's different game. _Nothing_ is shared (think: one gc per thread), can run
10M+ threads on one cpu and effectively schedule all of them (it has one-of-a-
kind scheduler counting reductions, you cannot cpu lock even if you want),
really transparent distributive programming, state of the art introspection:
"login" to remote process on different node, see how many messages in the
mailbox of some process, hot (= replace running code) code reloading etc.

 _Edit:_ Essentially: some actor library for language X is not even remotely
(if any) erlang. Maybe cloud haskell some day will be there, but its all
introspection parts is basically nonexistent right now.

------
quarterwave
Are Erlang-based start-ups more likely to be acquired because Erlang has
gained a Jedi Knight reputation for "sorcerer's ways"?

~~~
coldtea
No, business doesn't work that way. And nobody much cares what you startup
runs on if he's to part with his money basically.

------
walshemj
Interesting that the old warhorse FORTRAN is still in relatively high demand
on their graph slide 4

------
ritchiea
Meta but I really wish we could ban the phrase "cool kids" from the
programming community. It has a terrible connotation (high school cliques).
And it feels out of place, especially when we're talking about something like
practical choices about what programming language and tooling we choose. Even
when talking about "trendy" languages and frameworks it's a poor choice of
words because no one really make these choices to be "cool" and it would
actually be interesting to take time to better understand what drives adoption
(which, to be fair, is what the speaker of this talk is actually doing with
his real work, he just choices a grating title). To be cool people wear trendy
clothes, listen to particular music, etc. with the intent of signaling to
other "cool" people. People make choices about programming languages & tooling
because they've heard something good about the language, it seems to solve a
problem you have or it's new and presumably someone else thinks it solves an
existing problem in the programming ecosystem.

~~~
unoti
If you watch the video of the talk on vimeo below, the author addresses this
issue head on at the start of his talk. The thesis is that there are many
developers that use technologies for capricious reasons such as because other
people do it, rather than for solid reasons of engineering.

In my experience, huge swaths of the real world of software development are
not wholly reasonable, objective, nor immune to groupthink. There's plenty of
posturing and social signaling going on among developers.

~~~
ritchiea
I'm definitely going to take time to watch his talk because the slides are
excellent. And I agree with you wholeheartedly that the real world of software
development is not wholly filled with reasonable people that strive for
objectivity. Though in a serious conversation about technology adoption I'm
not sure the best strategy is to target the unreasonable people. After all,
are those even the people you want as advocates of your favorite technology?
What you probably want is to win over the reasonable people and let the
followers follow.

Also, "other people do it" is not a capricious reason for adopting technology.
It's not an engineering reason, but there are reasons to follow the crowd. If
there is a crowd there will probably be lots of libraries, if there is a crowd
there are more people that may do the thankless work of documenting and
patching libraries, if there is a crowd there are more people to answer
questions on stack overflow. The crowd may not be an engineering reason but it
can definitely be a productivity reason.

------
josteink
This thing is completely unreadable on a phone. Does it have a more phone-
friendly version somewhere?

~~~
cpncrunch
It's not really much better on a browser. It took me about 10 minutes of
clicking and swiping to figure out that you're meant to use the cursor keys to
navigate. What a shitty user experience...

~~~
cpncrunch
Explain downvote please.

~~~
micampe
Negativity. I didn’t downvote but even agreeng with you and being frustrated
with the website I was put off by the tone of your comment.

~~~
cpncrunch
I feel I have a right to a bit of negativity after trying in vain for 10 or 15
minutes to use a website which is completely unusable on an ipad, and not very
usable on other devices either (I just have to figure out that you're meant to
use cursor keys). I'm just honest - if something is shitty I'll say so. I
don't think that was a reason for getting downvoted. I've seen quite a lot of
articles posted here with (usually gratuitous) swearwords in the title.

The site also crashes the ipad most of the time, although I think that is just
iOS being shitty rather than any fault of the website.

~~~
micampe
Sure, and other people have the right to not like reading the negativity.

------
bwf93
A 130 slide presentation. No thanks

~~~
DiabloD3
It took 5 minutes for me to read, its actually really short.

~~~
WorldWideWayne
Its not a matter of time taken. Having to swipe/scroll/space/key to read 1 new
sentence, 130 times, really sucks.

~~~
rwmj
It actually works a lot better if you turn Javascript off. Then it's all one
big page and you just scroll down.

