[erlang-questions] Erlang Intro/Evangelism Presentation -- Starbucks!

Edmond Begumisa <>
Sat Jan 8 17:53:20 CET 2011

On Sat, 08 Jan 2011 22:19:22 +1100, Michael Turner  
<> wrote:

> "What do you do when your highly optimised procedures have to run on  
> slower
> sequential processors? "
> How often is that *truly* a requirement?

It's not now. But the worry (which I don't necessarily agree with) is that  
it will be in the near future.

> In those cases where it is, these
> people who sell tools to parallelize legacy code are offering something
> Erlang can't offer, except perhaps through NIF interfaces to those highly
> optimized procedures.  Either way, you're re-architecting the app.  And
> requiring that the app be re-architected in a way that necessitates  
> learning
> a new language will lose out pretty often to doing it in a way that
> preserves existing skill-sets.  Companies like to get human skill-sets  
> built
> for free, ideally by their competitors.  Up-front investments in  
> training --
> even for conventional technologies -- are one of the hardest things to  
> sell
> to management, in corporate life.

Probably true. But I am reminded of something very interesting Ulf has  
just pointed me to...

"The Innovator's Dilemma (C. Christensen) as quoted by Todd A. Proebsting  

"… companies [languages] that did everything right---were in tune with  
their competition, listened to their customers, and invested aggressively  
in new technologies---*still* lost their market leadership when confronted  
with disruptive changes in technology…"


- Edmond -

> People keep saying Erlang is a simple language, implying that getting  
> over
> the learning curve must therefore be a simple matter.  No.  Erlang is a
> *small* language, but one that incorporates some powerful ideas and
> idiosyncratic approaches, requiring some time to digest.  I'd had  
> exposure
> to Prolog (helpful in understanding that "=" is pattern-match, not
> assignment, and in getting used to the odd convention for symbols where
> capitalization means "variable").  I had some experience in Lisp  
> (helpful in
> understanding how Erlang handles lists).  I'd also gotten some  
> experience in
> parallel programming in more conventional terms (albeit in C- and  
> C++-coded
> apps).  And yet, Erlang was not, and is still not, easy for me.  No  
> amount
> of repetition of Erlang's selling points is going to make much dent in  
> that
> sense of difficulty.  Only long hard practice will get me to the point  
> where
> I find Erlang programs as readable -- or more readable -- than their more
> conventional equivalents.  And businesses don't pay employees for long,  
> hard
> practice.  They don't pay them for learning.  That's just a cost, a
> necessary evil to be minimized.  They pay employees for results that some
> customer will pay for, ideally tomorrow, though all too often the  
> deadline
> was yesterday.
> -michael turner
> On Fri, Jan 7, 2011 at 11:54 PM, Edmond Begumisa <
> > wrote:
>> On Sat, 08 Jan 2011 00:42:54 +1100, Michael Turner <
>> > wrote:
>>  "... I started to think about how Starbucks processes drink orders.
>>> Starbucks, like most other businesses is primarily interested in
>>> maximizing
>>> throughput of orders. More orders equals more revenue. As a result they
>>> use
>>> asynchronous processing ..."
>>> Starbucks might actually be an interesting metaphor here, instructive  
>>> for
>>> thinking about how to write Erlang apps, but I beg to differ about  
>>> what's
>>> being optimized.
>>> Starbucks is NOT optimizing throughput.  It's optimizing replicability.
>>> I must explain: I come from Berkeley, a town that lives on espresso.   
>>> At
>>> certain cafes, I could routinely see two people behind the counter
>>> delivering twice as much espresso per minute as Starbucks does with  
>>> five
>>> or
>>> six people behind the counter.
>>> What Starbucks is optimizing is how to rapidly deploy relatively slow,
>>> lower-skill employees to provide a consistent experience of a  
>>> relatively
>>> even flow of order processing, a sense (for the customer) that  
>>> inexorable
>>> progress is being made.  So long as this continues to attract a flow of
>>> customers who've never known better, it will work.  And I have to  
>>> admit,
>>> I've gotten used to finally getting to the Starbucks counter, ordering  
>>> a
>>> capuccino, and having two other employees echo my order, even though  
>>> it's
>>> rarely under three minutes before I actually get the drink.  But at  
>>> first
>>> I
>>> couldn't stand it. In some of the cafes I got used to in Berkeley,  
>>> someone
>>> at the counter would often be taking my order before I even got to the
>>> cash
>>> register, and putting the drink in front of me by the time I had my  
>>> wallet
>>> out to pay the cashier.  THAT was some real throughput.  Not to mention
>>> that
>>> watching these people furiously take orders, crank out drinks and  
>>> collect
>>> money was like being at a martial arts performance.
>>> Sometimes the way to speed something up is to parallelize it.   
>>> Sometimes
>>> the
>>> way to speed it up is with a fast uni-processor running highly  
>>> optimized
>>> procedures.
>> Food for thought: What do you do when your highly optimised procedures  
>> have
>> to run on slower sequential processors? (i.e when your program has to  
>> run on
>> newer hardware)
>> If your procedures are already optimised to death, your only option is  
>> to
>> _try_ and parellise. I think that's what's getting peoples knickers in  
>> knots
>> regarding multi-core.
>>  But sometimes what you're trying to optimize isn't speed of
>>> operations, really, but growth.  Starbucks was in fact doing that last.
>>>  It's optimizing for blanketing cityscapes with its storefronts, as it  
>>> has
>>> in Tokyo.  Optimizing throughput -- which requires optimizing  
>>> employees --
>>> would only have slowed that growth process. Those cafes in Berkeley I
>>> worshipped for their ferociously pirouetting baristas were wonderful,  
>>> but
>>> they would never scale.  Starbucks scaled.  A good process structure in
>>> Erlang also scales.  That's the real lesson in any such analogy, I  
>>> think.
>> Interesting observation -- I hadn't thought of the replication angle or
>> process structure.
>> In terms of "Optimizing throughput": I think the point of the article
>> though was to illustrate an alternative to two-phase commit.  
>> Specifically,
>> the use of async message-passing techniques to avoid blocking  
>> transactions
>> improving throughput in the process. I think async message-passing +
>> non-blocking operations and the impact this has on responsiveness is an
>> important lesson for Erlang newcomers and/or can be used as a "pitch" to
>> sell the environment to those thinking about dipping their feet and  
>> needing
>> a reason to jump in. Well, at least it was for me :)
>> - Edmond -
>>  -michael turner
>>> On Fri, Dec 17, 2010 at 9:48 PM, Edmond Begumisa <
>>> > wrote:
>>>> "... I started to think about how Starbucks processes drink orders.
>>>> Starbucks, like most other businesses is primarily interested in
>>>> maximizing
>>>> throughput of orders. More orders equals more revenue. As a result  
>>>> they
>>>> use
>>>> asynchronous processing ..."
>>>> "... we can see that the real world is often asynchronous. Our daily
>>>> lives
>>>> consists of many coordinated, but asynchronous interactions...
>>>> asynchronous
>>>> messaging architecture can often be a natural way to model these  
>>>> types of
>>>> interactions... also means that often we can look at daily life to  
>>>> help
>>>> design successful messaging solutions ..."*
>>>> http://www.eaipatterns.com/ramblings/18_starbucks.html
>>>> I hope I'm not too late with this, but I really liked this old  
>>>> article by
>>>> Google's Gregor Hohpe on asynchronous message passing. He wasn't  
>>>> talking
>>>> explicitly about Erlang but the content should resonate  
>>>> instantaneously
>>>> with
>>>> Erlang programmers while at the same time being insightful for
>>>> non-Erlangers. You might want to reference a few of his well-worded
>>>> analogies for evangelising some of the core ideas built into Erlang.
>>>> *Joe Armstrong made a similar compelling argument at the beginning of  
>>>> his
>>>> book. As a relatively new Erlang programmer myself, _THIS_ is the main
>>>> line
>>>> of argument that convinced me to try out the Erlang environment.
>>>> Particularly the implications on concurrency which I had struggled  
>>>> with
>>>> in
>>>> other environments (in retrospect, it was because those environments
>>>> didn't
>>>> have these ideas built-in or actively encouraged -- I've found Erlang
>>>> does a
>>>> lot of hand-holding to make sure you do the sane thing in order to  
>>>> avoid
>>>> painting yourself into a corner -- something you could emphasise in  
>>>> your
>>>> presentation.)
>>>> - Edmond -
>>>> On Sat, 04 Dec 2010 05:43:34 +1100, Ryan Zezeski <>
>>>> wrote:
>>>>  I've been tasked with giving an introductory level presentation on
>>>> Erlang
>>>>> at
>>>>> work.  The focus is on why you would use Erlang and what does it look
>>>>> like
>>>>> on the surface level.  We have a lot of your standard Java/C#/C
>>>>> developers
>>>>> and this will act as a potential launching pad to introducing Erlang  
>>>>> to
>>>>> the
>>>>> company.  There is the potential for a large number of people to  
>>>>> video
>>>>> conference into this possibly spanning several countries so I really
>>>>> want
>>>>> to
>>>>> knock this out of the park.
>>>>> I'm writing as an inquiry for links to any prior art that I may use  
>>>>> for
>>>>> inspiration or even steal and use as my own.  Anything that you think
>>>>> might
>>>>> be helpful is appreciated, even input on possible approaches.  I'd
>>>>> really
>>>>> like to hear from people who have done this sort of thing before,  
>>>>> i.e.
>>>>> pubic
>>>>> speaking on Erlang.
>>>>> Thanks,
>>>>> -Ryan
>>>> --
>>>> Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
>>>> ________________________________________________________________
>>>> erlang-questions (at) erlang.org mailing list.
>>>> See http://www.erlang.org/faq.html
>>>> To unsubscribe; mailto:
>> --
>> Using Opera's revolutionary e-mail client: http://www.opera.com/mail/

Using Opera's revolutionary e-mail client: http://www.opera.com/mail/

More information about the erlang-questions mailing list