Tuesday, July 15, 2008
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.How many Haskell programmers are there today?
And I postulate that some technologies will be adopted on "marketing" merit only (RFID for example).
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:
http://www.ohloh.net/languages/compare?measure=commits&percent=&l0=cncpp&l1=java&l2=haskell&l3=erlang&l4=visualbasic&l5=lisp&l6=-1&commit=Update
The languages mentioned in the original post are sinking or stable.
And, the author does not know the difference between Visual Basic and VBA.
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.
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.
I'd be glad to be proven wrong here, but right now I think that's patent conspiracy theory nutjob nonsense.
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).
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.
http://research.microsoft.com/~emeijer/
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!
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.
--
Jedaï
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.
<< Home
Subscribe to Posts [Atom]

