Why your favorite language is unpopular

The total world's population of Haskell programmers fits in a 747. And if that goes down, nobody would even notice.
-- Erik Meijer

I recently saw an interesting talk on functional programming by Erik Meijer (of Bananas, Lenses, Envelopes, and Barbed Wire fame). Among other things, he discussed why many superior technologies such as Haskell don't catch on.

Geek formula for success

He claims the "Geek formula" for success of a technology is that if a technology is 10 times better, it should catch on and become popular. Even if it is slower, Moore's law will soon make it 10 times faster.

So if Haskell is 10 times better than C and Haskell programs are 10 times shorter, everybody should be using Haskell.

Real-life formula for success

However, as Erik points out, "That's not how it is in real life." In real life, success is based on the perceived crisis divided by the perceived pain of adoption. Users want something that will get the job done and solve their crisis, without a lot of pain to switch.

This argument applies to many languages that remain unpopular despite their technical merits, such as Lisp, Arc, and Erlang, as well as technologies such as the Semantic Web and LaTex.

The Change Function

The above argument is based on the book The Change Function: Why Some Technologies Take Off and Others Crash and Burn by Pip Coburn. To summarize the book, new technologies aren't adopted because they are great, new, and disruptive; they are adopted only if the user's crisis solved by the technology is greater than the perceived pain of adoption. As a result, most new technologies fail.

The first half of the book is a bit fluffy, but gets more interesting when it discusses specific technologies that failed or succeeded. The book also goes out on a limb and predicts future winners (mobile enterprise Email, satellite radio, business intelligence software) and losers (RFID, entertainment PC, WiMax).

Languages and The Change Function

The Change Function argument has a lot of merit for explaining what languages become popular and what languages don't. If Lisp is so great, why are there 8 million Visual Basic programmers worldwide and few Lisp programmers? The answer isn't pointy-haired bosses (since Lisp isn't popular on SourceForge either). The crisis vs. pain of adoption model provides a powerful explanation:

Magnitude of crisis solved by Visual Basic: High (e.g. how to easily write Windows applications)
Total Perceived Pain of Adoption for Visual Basic: Very Low (hit Alt-F11 in Excel and you're done)

Magnitude of crisis solved by Lisp: Low (metaprogramming, powerful macros, and higher-order functions are solutions in search of problems)
Total Perceived Pain of Adoption for Lisp: High (this shouldn't require explanation)

The same model explains the success of, for instance, Java:
Magnitude of crisis solved by Java: High (originally how to run code in a browser and write portable code, now how to avoid crashes due to memory allocation errors and bad pointers)
Total Perceived Pain of Adoption: Low (syntax similar to C++, easy to deploy)

Applying this model to other languages is left as an exercise for the reader.

Erik points out that Erlang and Haskell are now being marketed according to the second formula: there is a multicore crisis and functional languages are the solution. It will be interesting to see how much additional traction these languages get without addressing the "pain of adoption" part.

The Change Function and startups

The Change Function ends with ten sets of questions and a set of techniques for designing technologies that will be adopted; this part of the book has many ideas that would be beneficial for startups. Many of these are fairly obvious, such as "Fail fast and iterate", and have a customer-centered culture instead of a sales-centered culture, while others are more thought-provoking: "What is the user crisis you intend to solve? What are the top five reasons a user with this crisis would not use your product?" The ultimate conclusion of the book is "Figure out what people really want!", which brings to mind the advice to make something people want.


Anonymous said...

When was that statement made by Eric? Was it just a generalization? How did he conclude it was less than 1087?

How many Haskell programmers are there today?

Anonymous said...

What was so great about Arc, again? I think you miss the point. Adoption is not *that* easy to predict. Java was adopted not because it was portable (it wasn't) and not because you could write web apps (you couldn't; except applets, which you didn't), but it won on marketing merit alone.
And I postulate that some technologies will be adopted on "marketing" merit only (RFID for example).

Anonymous said...

When was the last time you deployed a piece of Java code to say it's easy?

Anonymous said...

Anyone that says sun won because of marketing is delusional. Their marketing "machine" (do they even have one?) is useless.

Anonymous said...

sun "won" because it's marketing strategy included donating ass-loads of equipment to universities in exchange for teaching java.

Anonymous said...

Java is taught on so many universites. Haskell is also taught on many universities. This is not irrelevant.

Also, the popularity of all the languages the original post mentioned are sinking, not rising, according to Google Trends.

Here's also a graph at Ohloh.net:

The languages mentioned in the original post are sinking or stable.

And, the author does not know the difference between Visual Basic and VBA.

Ed said...

Yup, Java won because of Sun's "great" marketing, just like I'm sure JavaFX is going to replace Flash/Flex based webapps /end_sarcasm.

As far as deploying java code, when was the last time you deployed a complex application in ANY language and thought it was easy?

I think the post is pretty spot on as far as adoption of new languages is concerned (how much you can extend it to any technology is more iffy in my mind). All the cool new langauges that people rave about usually require a complete paradigm shift in terms of how you write code in order to be used properly, going from a imperative to functional style is not a simple transformation.

Unless those languages solve very hard and COMMON problems and do it an order of magnitude times better then current heavily used languages no project/company/whatever is going to take the immense amount of time to actually adopt it. But, as the post states, designing highly concurrent applications has become more and more important as the only way to speed up processors is to add more cores. So in comes erlang, etc. to fill in the space. You can already see it being adopted in some major projects, and I think its only going to get more popular in the future.

Anonymous said...

I've been pondering lately whether to invest time into learning Lisp or PHP.

Crisis: need to pay rent next month.
Magnitude of crisis: high.

And I have paying customers who want PHP right now. It's a god-awful language... but there are plenty of existing customers with a working PHP code base that want me to build upon it.

In a perfect world, I'd study Lisp or Haskell, but Perl and PHP are what pay my bills right now, and they're both more likely to pull in business from customers than a beautiful language that they've never heard of.

Michael Campbell said...

I'd like to see a cite of this apocryphal "sun donated ... in exchange for teaching Java" claim. I've heard it a million times, but no one has /ever/ produced any evidence of it (that I've seen).

I'd be glad to be proven wrong here, but right now I think that's patent conspiracy theory nutjob nonsense.

Anonymous said...

Saying that some technologies will be adopted on "marketing" merit only reinforces the basic point: marketing was successful either in creating a perceived crisis or in making a technology seem easier to adopt.

I've read The Change Function, and found it passable. For a more scholarly look at the issue of technology adoption, see The Diffusion of Innovations. The author lays out five reasons why people adopt technologies: relative advantage, compatibility, complexity, trialability (you can try it easily), and observability (you can easily watch how others use it).

Anonymous said...

Ha, my language is more fringe than your language, and we Dylan Hackers fit in a Cessna!

Anonymous said...

Regardless of whether there was ass-loads of equipment involved, *something* convinced the universities to move to Java as a teaching language (although now the move is away from Java, funny enough).

Wolter said...

Java won because it avoided the common memory allocation/deallocation and pointer bugs of C/C++, and because lots of magazine editors knew about it and talked about it.

Seriously, how many magazine articles have you read about LISP or Haskell? Has your boss even HEARD of them?

Managers are far more likely to accept a new technology suggestion if they've heard about it before, and that happens through magazine fluff pieces.

Anonymous said...

If Haskell is so rare, why are the rest of us redditers having to suffer DAILY with continual links referring to Haskell?

Anonymous said...

I just have one question thought, I visited the link to Eric's site on Wikipedia and then to his site on Microsoft Research, and I was astonished to find that his picture took a long while to load, then checked and the picture is actually a wall-sized 2MB close up of his face. And the logo next to it, another resized and horribly looking one.


I wonder if this was a secretary using Word or something of the kind to upload a profile. I refuse to think this was him! A well known programmer and researcher, not able to make an internet friendly pic?

I am not a programmer, no I am not, but I do know how to resize a pic!

Anonymous said...

I've been impressed with the new Hüsker Dü language based on the original Polish Postfix punk band. The basic instruction set operations are associated with instruments, and programmatic macros are assigned to instrument triggers and patterns such that note sequences and percussive events are used to dynamically respond to browser requests.

Jedaï said...

If Haskell is so rare, why are the rest of us redditers having to suffer DAILY with continual links referring to Haskell?

Probably because Haskell is really an awesome language, that his recent new users want to use it at work and thus promote it desperately (and you have some snowballing effect).
Either it will get some of this success it deserves and you won't find that the amount of post on Haskell is so disproportionate to its user base or it won't and the passion will fade after some years.


Anonymous said...

Lisp, as well as other functional languages, also solves more pressing problems such as the ability to formally audit code functionality. It provides much easier way for testing the system, since it allows writing code without side effects. It also allows much easier way to write concurrent code.

All of these are current problems for large systems. It is very difficult to follow the data flow in large imperative systems, and they do not lend themselves well to concurrency.

Anonymous said...

Nobody cares about Arc.

Unknown said...

You say "superior technology", but I'm still waiting for someone to prove it --- not "present examples chosen to make Language X look better than C++", not "quote some anecdote about how really smart developers who happened to be using it built a financial application in a tenth the time it would have taken if they'd used something else", but prove the same way you'd prove that one medication is more effective than another.

Anonymous said...

well if that fails, you can just partly go by the fact that these smart programmers are using those languages. It wasn't random that they chose that langauge over C++ and others.

Anonymous said...

Requirements for a functional language to be popular.

1. Make sure it can serve up web pages via .htaccess/CGI on Dreamhost with some kind of Lispy, functional Framework. FastCGI will also help. Dreamhost allow practically anything so long as you don't bring down their servers.
If Ruby has done it with Ruby on Rails, the Arcs, Lisps and Schemes also can

2. Make sure it has MySQL and SQLite ORM mappings, people need access to their data using common SQL based reporting tools.

3. Don't!!! mention the words functional, lambda etc, just tell them it can get their job then, and show them how.

In effect show them how it works in their field of interest.

They 'AHA' moment will arive later

Will Arc be doing that soon? Will it generate PDFs and link up with ImageMagick, GD etc