

Smug Lisp Weenies and Lateral Thinking - nickb
http://dorophone.blogspot.com/2008/05/smug-lisp-weenies-and-lateral-thinking.html

======
ngvrnd
It's _not_ a lisp thing. It's the smart way to approach the problem of helping
folks in trouble. Start from goals.

This is also not _why_ lisp users tend to be smug.

Lisp users tend to be smug because they _know_ they are smarter than most
people. And, to be fair, on the basis of IQ, they probably are.

They are smug because they prefer the "correct" to the "effective" and will
make extended academic arguments to support this point.

They advance "worse is better" as if it were a _criticism_ of the technologies
that are successful in the marketplace.

Perhaps this is even true in a strict academico-logical sense.

But this is also why Lisp has had such limited success in that marketplace
which they love to criticise.

If you want to mostly live in a cloister, then being the Confucian master of
correctness is fine.

If you want to make it in the hurly-burly, you must adopt a different
attitude.

------
jrockway
This is not a Lisp thing, everyone on IRC does this. "Step back. Explain what
you are trying to achieve." is the cute catchphrase.

~~~
michael_dorfman
It may not be solely a Lisp thing, but I think it is much more prevalent in
the communications betweem Lisp devotees and folks used to procedural
programming. People tend to see solutions in terms of what they are
comfortable with, and functional programming approaches are _different_ , not
merely translations of procedural notions into a different syntax.

~~~
jrockway
I disagree. Here's a typical conversation on #catalyst (Catalyst is a Perl web
framework that I develop):

    
    
      <newbie> How can I make the start of a request die if a precondition isn't met?
      <@developer> Step back.  Explain what you are trying to achieve.
      <newbie> Well, I want the user to be redirected to the login page if a session cookie hasn't been created.
      <@developer> Don't do that manually.  Use the Session and ACL plugins.
    

What happened here is that newbie was half way into his half-baked solution,
and couldn't figure out how to get it to work. The developer knew that they
were solving the wrong problem, and pushed them in the right direction. (It
does come down to reputation in cases like this, I admit. If it's someone
we've never heard of, they're probably just trying to write an app and they
don't need to understand the internals. If _I_ asked the same question,
someone would probably immediately give me the answer. Or flame me for asking
a dumb question ;)

Anyway, I don't think Lisp will throw off imperative programmers; Lisp can be
as imperative as you want it to be. Compare:

    
    
        (do ((i 1 (1+ i))) ((> i 10)) (format t "~d" i))
    

To:

    
    
        for(int i = 1; i <= 10; i++){
            fprintf(STDOUT, "%d", i);
        }
    

_Edit: I replaced the loop macro with do, because it looks more like C. (ugly
though ;)_

Pretty much exactly the same.

As for other functional languages, you are probably right. I'm sure people ask
#haskell "how do I do a for loop" and are told about recursion. I think that's
the same as the use-the-right-libraries example above.

------
cconstantine
Well put. I'm still a lisp newbie (I've only made one useful thing with lisp),
and I still end up trying to do [[x]] :/

~~~
gaius
[[x]] looks like Tcl to me :-)

~~~
davidw
Hecl too:

    
    
        hecl> proc x {} {return y}
        hecl> proc y {} {return z}
        hecl> proc z {} {puts "hello world"}
        hecl> [[x]]
        hello world

