--- title: Why The Cool Kids Don't Use Erlang transition: fade buildout: true --- {% from "deckjs.html" import section with context %} {% call section('-------------------------------------------------') %} ## Why The Cool Kids Don't Use Erlang ### Erlang User Conference - June 10, 2014 ### Garrett Smith @gar1t {% endcall %} {% call section('--------------------------------------------------') %} # Watch this presentation:
Why The Cool Kids Don't Use Erlang
{% endcall %} {% call section('--------------------------------------------------') %} # Cool Kids? {% endcall %} {% call section('--------------------------------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %}
LangPop.com: Even weights of Github, Google Files, Ohloh, Craigslist, Google Search
{% endcall %} {% call section('--------------------------------------------------') %}
LangPop.com: Even weights of Github, Google Files, Ohloh, Craigslist, Google Search
{% endcall %} {% call section('--------------------------------------------------') %} # The "Bikeshed" Thread {% endcall %} {% call section('--------------------------------------------------') %} # Measure! {% endcall %} {% call section('--------------------------------------------------') %} ## Survey Methodology - "Free form" - Five minutes or less - "Demographics" for control - Nothing goes to waste {% endcall %} {% call section('--------------------------------------------------') %} ## Free Form Questions - *What is your general impression of Erlang?* - *For what situations would you consider using Erlang?* - *What challenges do you see in adopting Erlang for a project?* - *What languages or frameworks would you consider as alternatives to Erlang?* - *What about Erlang or its ecosystem (libraries, community, governance, etc) would you change?* {% endcall %} {% call section('--------------------------------------------------') %} ## Demographics Questions - *How many years have you been working with software?* - Less than five years - Between 5 and 15 years - More than 15 years {% endcall %} {% call section('--------------------------------------------------') %} ## Demographics Questions - *How many programmers do you work with on a regular basis?* - I primarily work by myself - Between 1 and 5 - More than 5 {% endcall %} {% call section('--------------------------------------------------') %} ## Demographics Questions - *What is your role in choosing a language for a project?* - Alas, I don't have much input - I provide input but someone else ultimately decides - I consider input from others but usually have the final word {% endcall %} {% call section('--------------------------------------------------') %} ## Demographics Questions - *Which of these roles do you play in your organization?* - Programmer - Architect/Designer - Business Manager/Executive {% endcall %} {% call section('--------------------------------------------------') %} # 181 Respondents
4 Skipped (incomplete) {% endcall %} {% call section('--------------------------------------------------') %} # *How many years have
you been working
with software?* {% endcall %} {% call section('-- Experience ------------------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %} # *How many programmers
do you work with
on a regular basis?* {% endcall %} {% call section('-- Colleagues ------------------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %} # *What is your role
in choosing a language
for a project?* {% endcall %} {% call section('-- Influence -------------------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %} # *Which of these roles
do you play in your
organization?* {% endcall %} {% call section('-- Roles -----------------------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %} ## Survey Respondents - Very experienced - Work in teams - Highly influential - Highly technical - Articulate (qualitative) {% endcall %} {% call section('--------------------------------------------------') %} ## Free Form Question Methodology - Avoid biasing with predefined options - Manually summarize text fields into lists of tags (Erlang terms) - Count tags per question - Graphically represents results using a tag cloud - View with and without outliers {% endcall %} {% call section('--------------------------------------------------') %} ## Sample Answer And Tag List ### What about Erlang or its ecosystem (libraries,
community, governance, etc) would you change? Relying on Github as the defacto go-to location for Erlang libraries is a bit of a weakness. Having a non-commercial/foundation supported master location (which can be mirrored) for packages would be a major plus. An additional concern is the way EEPs are managed/published. No real status/progress indicators etc. Documentation could be more friendly for users. The 'official' documentation structure is difficult to navigate and makes absolutely no sense when approaching Erlang as a new user. I believe erldocs.com is easier to navigate. I believe the Erlang community could take a page out of Python's book for the above. Not necessarily the implementation, but the ideas surrounding PyPi (https://pypi.python.org/pypi) and PEPs (http://legacy.python.org/dev/peps/) are sound and would greatly benefit the community having similar facilities. :::erlang {to_change, [package_manager, package_repository, eep_process, documentation]} {% endcall %} {% call section('--------------------------------------------------') %} ## Sample Summary :::erlang {37, [{collector, erlang}, {impression, [love, bad_string_support]}, {application, []}, {challenges, [finding_developers]}, {alternatives, [akka, python]}, {to_change, [package_manager, package_repository, eep_process, documentation]}]} {% endcall %} {% call section('--------------------------------------------------') %} # The Results {% endcall %} {% call section('--------------------------------------------------') %} # *What is your general
impression of Erlang?* {% endcall %} {% call section('-- General impressions ---------------------------') %} {% endcall %} {% call section('-- General impressions 2 -------------------------') %} {% endcall %} {% call section('-- General impressions 3 -------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %} # *For what situations
would you consider
using Erlang?* {% endcall %} {% call section('-- Application -----------------------------------') %} {% endcall %} {% call section('-- Application 2 ---------------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %} # *What challenges do you
see in adopting Erlang
for a project?* {% endcall %} {% call section('-- Challenges ------------------------------------') %} {% endcall %} {% call section('-- Challenges 2 ----------------------------------') %} {% endcall %} {% call section('-- Challenges 3 ----------------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %} # *What languages or
frameworks would you
consider as alternatives
to Erlang?* {% endcall %} {% call section('-- Alternatives ----------------------------------') %} {% endcall %} {% call section('-- To Change -------------------------------------') %} # What about Erlang or its
ecosystem (libraries,
community, governance,
etc) would you change? {% endcall %} {% call section('-- To Change 2 -----------------------------------') %} {% endcall %} {% call section('-- To Change 3 -----------------------------------') %} {% endcall %} {% call section('--------------------------------------------------') %} # Interpretation {% endcall %} {% call section('--------------------------------------------------') %} ## General impression of Erlang - Generally understand what Erlang is about - Extremely positive - General belief that Erlang is hard to learn, not learner friendly - Syntax complaints persist {% endcall %} {% call section('--------------------------------------------------') %} ## What Erlang is considered for - Servers (network services, back end systems, daemons, long running processes) - Things to believed to be "concurrent" - Things believed to require "scalability", "reliability", "fault tolerance" - "Distributed systems" - Web apps (including RESTful services) {% endcall %} {% call section('--------------------------------------------------') %} ## Challenges in adopting - Finding developers is *the* outlier - Considered hard to learn (steep learning curve, arcane) - Concern over current levels of adoption (risk, cost, reliance on scarce resources) - Convincing managers is hard - Dissatisfaction with libraries, documentation, and tooling — often cited as barriers to adoption {% endcall %} {% call section('--------------------------------------------------') %} ## Frequently cited alternatives - JVM languages (Clojure, Scala, Java) - Go - Haskell - None - Elixir - Actor and messaging libraries {% endcall %} {% call section('--------------------------------------------------') %} # Implications {% endcall %} {% call section('--------------------------------------------------') %} ## Targets for change - Documentation is *the* outlier (primarily "how to" guides and examples) - Package/dependency management and repository - Library consistency - Build and release tools - Improve community development (multiple issues) {% endcall %} {% call section('--------------------------------------------------') %} ## Respondents Want - *Simple* not *complicated*, from getting started onward - Solve problems that have accumulated over time, in particular library consistency/breadth, build and release tools, package management - An open, transparent, and growing community - Increased adoption {% endcall %} {% call section('--------------------------------------------------') %} ## Things To Consider - Community owned, authoritative site - Revamped documentation - Standardized collection of tools - Package manager and repository {% endcall %} {% call section('--------------------------------------------------') %} ## Next Steps? - Study community development processes, good and bad - Options for community development - Options for library cleanup - Options for consolidation or integration of third party libraries {% endcall %} {% call section('--------------------------------------------------') %} # Pause {% endcall %} {% call section('--------------------------------------------------') %} ## References ### Survey Github Project #### https://github.com/gar1t/erlang-survey ### Survey Tools #### https://www.surveymonkey.com ### Language Rankings #### http://redmonk.com/sogrady/2014/01/22/language-rankings-1-14/ #### http://langpop.com/ ### Tag Clouds #### http://www.abcya.com/word_clouds.htm {% endcall %} {% call section('--------------------------------------------------') %} # Yo, Questions? {% endcall %}