In demand


Wednesday, October 7, 2015

5 Reasons that Learning Erlang is Hard

Why isn't Erlang more popular? The Erlang community is the last place with insight into why Erlang is not popular. Even with it's use by big names like Facebook and WhatsApp  Erlang remains a mystery to the greater percentage of web developers and programmers. Let's take a look at five good reasons for this mystery. Reasons that do not involve language syntax and functional programming.

Erlang is a great solution to many of the ailments of the internet. Note that I say Erlang is a great solution and not a great language. To become a great language the Erlang Community will have to embrace some things that it is not willing to do or is incapable of showing. The following is a list of the things that are strong in other language communities but are weak and missing for Erlang. If you are a devout part of the Erlang community please don't read this as what I am about to say can be considered flamebait ( inflammatory ). I hope though that it is taken more as constructive criticism. But it is necessary to show that the reason learning Erlang is hard is the fault of the community and not the language.

Web Development  

Put simply they have to make web development a first class priority.  Web site and application building is responsible for leading new developers be they classically educated or self taught to new languages and possibilities. Though not ignored completely by the Erlang community web development is still not taken seriously. They can take a lesson from PERL which gained tremendous traction until the early days of the 21st century by pairing itself with Apache a becoming the de facto web language. PERL is a good example of how a programming languages strange syntax can be overcome by the community.

Putting it up for consideration is a parents polite way of saying no. But by not acknowledging that Yaws is as important as RabbitMQ or Elixir a great many opportunities for recruitment are missed. The use of web development to as a teaching platform is a strong incentive for developers. The online use of a language is the most common point for developers in mixed areas of software development. Questions involving Yaws out number other areas of Erlang at StackOverflow.

While I appreciate Erlang Solutions efforts in bringing Erlang packages to all the popular operating systems. I don't think they are aware of the significance of the Yaws Web Server. The Yaws Web Server is the key for teaching and learning Erlang in the modern age. It is also how to gain the attention of potential users by giving them an alternative to Apache and Microsoft IIS. Because in the end everyone wants to deliver HTML and Yaws is the easiest and most mature solution for doing so with Erlang. There's more. But this is the number one reason and the most important. So you can stop reading here if you think the rest might bore you.

It's all Academic

The writing, teaching methods and practices in the Erlang community is the main reason that Erlang is not adopted by more and curious developers are difficult to convince. Teacher's and speakers use English that no one understands. Using words like "imperative" which cause the learning audience to waste brain power to find out what they mean. Thinking to translate the words into everyday English on the fly is difficult secondary task. This is true not just for those with English as a mother tongue.  It is very important to remember that when trying to build an ecosystem on a global scale.  The vocabulary used in conference talks and books has to be one that is translatable in a dozen popular spoken languages

  • imperative = dominant or popular
  • auto-didactic = Self-taught
  • opsimath = life-long learner

Erlang's syntax is mysterious ( arcane ) enough without having to use a  word-finder ( thesaurus ) every other sentence as though you are learning a foreign language.

The previous paragraphs had some words in them that are not found in everyday use by the self-taught developer or man in the street. Two of them I have seen on vocabulary tests designed by my high school English teachers to make everyone pick up a dictionary.  I mean really, who talks like that? a douche! Do I really want to learn from someone that is trying so hard to prove how smart they are by using words no one cares about?

Human beings as a group can only remember 7 things short term (8 if you count nothing).  Try to teach them more than a single page an they will forget when turning to the next.  If the page is filled with word choices they do not understand then the job of getting the subject to stick is doubled again. In classroom teaching if you a have to stop to explain your vocabulary choices then the material won't be learned. Any excitement the students have about the class is slowly drained away by the lack of understanding.

knock knock,
Who's there.. ?
obscure phrase to be explained at the end of this joke.

If you did not get that because you are too smart for such distractions or maybe you are like me and find that an authors attempts to make light while teaching something difficult to learn a waste of time.  Rather than odd jokes I would like to see simplicity in beginner's writings and tutorials.

loop = function calling itself
loop = recursion 

This will bring in more people willing to learn. While writing as though they are in a University classroom where everyone is expected to have completed preliminary courses or have complete understanding of specific concepts ... " If you don't understand anything I've been  talking about for the last 15 minutes then pick up a drop card at the end of the class.". Will only end in frustration.

Based on my recent teaching experience, there are definitely many students signing up for CS majors who aren’t prepared enough and have difficulty getting through foundational material. Some of them manage to learn through perseverance (retaking courses several times), some don’t.
You see this is the hard part of teaching. Getting everyone on the same page is difficult in the least and improbable at the very best. There is a reason why self study seems to stick for many and forced institutionalized study only works for some. The teaching methods available to self study are many in comparison to the single track method used in the halls of universities.

The Condescension Ascension 

The following is a typical mindset of the Erlang programming community. I found this was true nearly ten years ago and to this day I have not found any evidence to the contrary. As a matter of fact everytime I have seen a glimmer of hope in this area I am proven to be mistaken upon closer inspection. The title of many  Erlang books are proof of the old saying "Don't judge a book by it's cover"  nor should you judge it by the title.

I have made a broad assumption: Because only smart people would want to learn Erlang (that is you), that you are then also smart enough to find your way to all the language specifics when needed. So this book is not meant as a complete reference guide for Erlang. But it will teach you enough to give you a running start. -- Learning Erlang By Example

a much better mantra to follow is the one given by Zed A. Shaw and the
Become a Programmer, Motherfucker community.

If you don't know how to code, then you can learn even if you think you can't. Thousands of people have learned programming from these fine books --- programming mother fucker

But though the community idea is a good one Zed himself is not immune to a bit of use of hard to understand words as shown by his choice of domain name, see above for my opinion on the use of words like "inculcate" when in a teaching situation.

Learn yourself some Erlang for the greater good.

While the title of this book is a great hook.  The actual  contents are still reflective of the problem that the Erlang community has with bringing in self-teachers in. Everyday examples are missing. No web development and not a cook book. The attempts at light hearted jokes are more in the way than a help.

In so many books each author starts talking about what would be better or how to make it perform better. They do this before having taught the reader anything of worth. Somehow they can't stick to their line of thought and bring it to completion. You'll find this a lot in "learn you some Erlang..". Each concept or explanation is interrupted by another concept with explanation. Something that is very common in a university classroom or lecture but makes for a terrible learning experience in any situation. This is why lecture notes are so important, they filter out the noise of these "teaching" interruptions. It is also the reason that so many drop out of universities or change their major.

It's like comedy where the punchline is interrupted by another poorly timed punchline. What the audience wants to learn is the punchline for the joke being told. Maybe at the end of the set then one of the punchlines becomes the punchline of another closing set joke. Timing is everything even when writing a book. Although this book is kind of the go to answer for the question "how do I learn Erlang ...".  The problem is the book is by no means a finished product. A few glaring shortcomings for this attempt at teaching Erlang are;
  • It's badly in need of editing. Not  just grammar or word editing but story editing by a professional copy writer. 
  • No community editing because of the Creative commons no derivatives license. This is sad because open source has some great writers. Maybe not specifically in the Erlang community but in general. 
  • It has no index or reference pages and even lacks the proper navigation that an online book should have.

The author would be better off adopting Zed A. Shaw's way of doing things. As mentioned earlier Zed is not perfect but he would most certainly do a better job with beginners books than anyone in the Erlang community to date. Hopefully his way of doing things with the "Learn the Hard Way Series... " will continue on in his efforts later  with Erlang. At the very least he can teach programmers how to write better books.

Another Work In Progress that will teach you how to write your own "Learn The Hard Way" book for your language. It's an effective way to teach a new language, and this book teaches the teacher. Very meta. --

Good advice for authors that want to write books that put them out of their comfort zone. Get help from others with Zed's technique. Use the community and partner up. Few if any really good books on programming are written by a lone author. 

If you are an experienced programmer and want to edit code that's in the book, or help with editing, then hit the git repo and start digging. You know what to do
  • Fork my git repo.
  • Make your changes.
  • Send me a merge request.
By asking me to merge your changes in you agree that I retain copyright. Please don't make me make you sign something to prove that -- Learn C the Hard Way

Unfortunately we may have to suffer through the publishing of more books like Building Web Applications with Erlang: Working with REST and Web Sockets on Yaws. Even the highest marked reviews come with warnings of;

BEWARE: It's not a book to teach you web dev with Erlang in depth, but rather to whet your appetite. It merely scratches the surface, so make sure you set your expectations accordingly! I found lots of gaps to fill on my own as I worked through the examples.

This is indicative of a community problem one that shows a total lack of understanding of the audience and the potential of web development. In a way it seems only fitting seeing as Erlang came from telecom and  web apps are becoming the lifeblood of telecom usage. So much so that the market for books in this area is open to anyone willing to spend more than 30 pages on the subject.

The price is fair and, as far as I know, the only book out there on writing web apps using Erlang. All I'm saying is that if another book came out, it wouldn't be hard to top this one.-- amazon reviewer
So if you are into it and have some teaching and writing chops its a free ticket to fame in this area of the Erlang community.  I personally would like to see titles such as "Beginning Erlang for the PHP Programmers"  or "Beginning Erlang for Javascript Coders" and  of course "Erlang for Web Developers"

The Erlang Community has to stop placing the language on a pedestal. But more importantly it has to be willing to let people shoot themselves in the foot, paint themselves into a corner, burn their fingers or whatever.  The community has to allow people to come in stupid and trust them become smarter as they learn. Trying to do otherwise accomplishes nothing and pushes away potential users.

One of the great things about becoming a programmer is that once you get there few are concerned about the journey. Starting out as a web developer and moving to the desktop can be just as good as going straight to the desktop.

Coders vs. Programmers

Software development coders and programmers are like the woodworking professions carpenters and cabinetmakers. Cutting and building a house with wood makes a carpenter. But a carpenter is by no definition a cabinetmaker the skill set and learning curve is much steeper. The same is can be said in learning software development skills.  Erlang as community needs more coders there are those wanting to become Erlang coders but the community on the whole is consistently trying to teach them fuctional programming and giving them learning resources as programmers rather than coders. Erlang needs people that can use the language to get things done, coders. Not programmers that are to be taught functional programming at every opportunity.


  1. My 2 cents as an Erlang developer who has worked in multiple web servers (although not many webSITES):
    - Yaws is *just* one way to develop a webserver in Erlang. I actually like cowboy and erlydtl much more. There is also ChicagoBoss out there and others. Including all of them in the erlang distros would be wrong. Including just one of them will be wrong as well ;)
    - Have you seen ? Do you still think that's academic? What about ?

  2. Yes, of course there are a number of ways to deliver web pages via Erlang. But Yaws has much more to offer in the way of standards compatibility from Apache, IIS(.etc) and features. In comparison to the hey me too queue of we server solutions Yaws has no real competition. Take a look at Steve's presentation and you'll see some major differences.

  3. Erlang is a different language and very good at what it does. It may take some time adapting to its constructs but when you pick it you will grow to enjoy it.

  4. Another reason would be this article and your lack of understanding of the fundamental structure and purposes of Erlang. Many good resources and documents at your disposal but instead you negatively critique nothing tangibly wrong. Check outsome functioning Erlang code and follow the code construct model and the puzzle should start to fit together. Once it does you should come to appreciate it. I am currently in an Erlang solutions class and it is great.

  5. I actually heard about Erlang for the first time here :|

  6. A little bump from my notes. I forgot to mention that many do not have English as a mother tongue and the limitations of translation & 2nd language. Which is why the section on choices of vocabulary is so important.

  7. I actually heard about Erlang for the first time here :|


Print this!