Subject: Re: *Why* is LISP better?
From: Erik Naggum <erik@naggum.no>
Date: 05 Aug 2002 12:02:12 +0000
Newsgroups: comp.lang.lisp
Message-ID: <3237537732679110@naggum.no>

* "Icosahedron" <noone@nowhere.com>
| Thank you all for the various responses.  Regretfully I must say that I have
| yet to see one compelling piece of evidence that lisp is better than other
| languages, C++ in particular.

  If you think in C++ terms, Common Lisp barely offers you anything new.
  If you think in Common Lisp, terms, C++ is horribly deficient and painful.

  If you think in C terms, you can do everything you are used to in C++.
  If you think in C++ terms, you find yourself horribly constrained in C.

  People offer you their thoughts in a public forum, not compelling evidence to
  change your mind.  If you expect to convince or be convinced when you talk to
  people, you will neither convince nor be convinced.  You have to /think/
  about what people tell you to arrive at the evidence yourself.  Other people
  have no obligation whatsoever to offer you the material they used to arrive
  at their opinions.  Many people appear to believe that their own opinions may
  be held without constant scrutiny and re-evaluation, while the opinions of
  others must be backed up by fact, and argued for coherently and logically.
  For some reason I have yet to understand, this disparity afflicts people who
  believe they are "rational" more than normal people, but you that they tend
  to stick to their beliefs in the face of contradicting information or opinion
  if it somehow does not satisfy as "compelling evidence", rather than /think/
  about what they have heard.

  When people arrive at some conclusion they express in a few words, they have
  /received/ more than six and probably closer to nine orders of magnitude more
  information, most of it ignored by pre-filtering because they have already
  made up their mind about many things and their "receiver" is not tuned to
  information that runs counter to their beliefs.  The "compelling evidence",
  i.e., the mass of observations most which is not consciously registered, that
  "convinced" or otherwise caused them to conclude "I want to use Common Lisp"
  has probably been filtered out by other people who have not (yet) reached
  that conclusion.  We can say something stupid like "The Truth is Out There"
  and expect people to yield to "objective fact" or some disembodied "truth"
  without understanding that people hear everything in the context they have
  established over many years.

  Contrary to what many highly conscious intellectuals believe, most of our
  decisions are not made rationally or even consciously.  It may be that the
  Free Will that has eluded philosophers for millennia is really about what we
  concentrate our attention, or focus, on, not about which choices we make once
  have made that decision to focus.  What some call "seeing the light", or
  reaching enlightenment, appears to happen when there is a critical mass of
  received information that has not been fully processed and it yields to a
  pattern or spawns .  Consciousness may have spontaneously emerged this way.

  This discursion into cognitive philosphy was spurred by your demand that
  others provide you with the massive amounts of information that somehow
  constitutes the "compelling evidence" that would change your mind and cause
  you to embrace Common Lisp.  Nobody can even come close to provide you with
  this much information if you are unwilling to do /most/ of the work yourself,
  to think about what you have heard, and effectively believing people for the
  sake of the argument and to see if you can find the evidence among what you
  have already observed that supports their conclusions and not a whole lot
  that would contradict it.  Most of the arguments that have been made here
  have tried to appeal to the experience you already have, to show you Common
  Lisp offers something that would make what you already done simpler and
  easier and more convenient.  Some of the arguments clearly show you that some
  of the experience to which we appeal may come only after you tentatively
  accept the conclusions and arguments you are offered to be true and then to
  see what follows from them.  This is what constitutes /thinking/ about the
  arguments you have received.  You have not chosen C++ for its set of
  features, or your ability to get your job done using it, or what people have
  told you about it.  There was no "compelling evidence" that made you choose
  C++ over any other language you could have chosen at the same time, was
  there?  It "just happened", exactly as it "just happened" to everyone else.

  The difference between C++ and Common Lisp is not that the decision to use
  Common Lisp does not "just happen" like it does for every other programming
  language, but that it "just happens" in the presence of much more information
  about programming computers, a lot more /thinking/ about how to do it better,
  how to make the life of a programmer better, how to express hard problems
  easier.  To a person who has just enough information to decide to go from C
  to C++, there is a dearth of information to make a transition to Common Lisp.
  The "compelling evidence" that caused many of the Common Lisp programmers I
  know to start to use Common Lisp was a /massive/ amount of information that
  had accumulated over many years.  Early exposure to Lisp, without actually
  using it, may have "primed" the information receptors to pay attention to the
  signals that would otherwise be drown in the noise, but nonetheless, those
  who have chosen Common Lisp have used a whole lot of other languages.

| It isn't the closures unfortunately.  They look much like static and class
| variables in C++, or function pointers.

  Well, they do if you look with C++ eyes, but static and class variables and
  function pointers in C++ look nothing like closures with Common Lisp eyes.

| I like the idea behind special variables, I must admit.

  Good, because this is quite important.  You have seen them as more than
  global variables, but many programmers never realize that they are called
  "special" because of their behavior in bindings.  For that matter, many
  programmers from inferior languages do not understand the concept of a
  binding, either.  /Perhaps/ you do not understand how bindings actually work?

  That would explain your failure to appreciate closures.  Let me make a stab
  at it.  Because of closures, /functions/ in Common Lisp are like instances of
  a subclass of `function´ that is created on the fly containing the captured
  bindings as slots and whose instances contain the values of these slots (as
  we call members in C++).  This class has only one method in C++ parlance: to
  call the function with the same bindings in place.  In Common Lisp terms, you
  could regard `funcall´ as a /generic function/ that takes a symbol (only to
  call its value) or any instance of a subclass of `function´ and transfers
  program control to it.  This happens to be very close to how they actually
  work in most implementations, but not completely, as `funcall´ and `apply´
  are fundamental functions.

  If you see no use for this and no difference from static or class variables,
  the most probable reason is lack of experience with the kind of problems that
  spawned them to begin with, for which nobody can really blame you.  You are,
  however, guilty of not /wanting/ to listen to the experience of others, if
  you think there /can/ be no use for you.  By the way, functional programming
  depends on closures, so if you are able to use Ocaml or Clean, you should
  have known how they work and something about their implementation.

| In short, I'm sorry I wasted the bandwidth.  I think I'm going to just
| convert the ray tracer over to Scheme to see if I "get it".  I'm going to use
| the PLT scheme package since it 1) supports structures, and 2) I hate the
| dual namespace for functions and variables of Lisp.

  If you "hate" this property of Common Lisp, you do not understand it and you
  have failed to lower your defense shields when you asked for opinions on the
  language.  In brief, this single aspect of your behavior on the newsgroup has
  shown me that you are too narrow-minded and uncreative to figure out the
  point with Common Lisp for years to come.  You have indeed wasted the
  bandwidth as far as yourself is concerned, but not necessarily for everybody
  else.  Someone out there will read this and pay attention and /think/ about
  what people have said, pointing out something they had missed, reinforcing an
  impression that something they had not previously regarded as important
  should receive more attention.  Every "round" of these discussions tend to
  send a "trace signal" (as in trace metals) that may influence choices without
  the person consciously aware of them.  The value of replying to such a
  question as yours at all is that it is done publicly, where more readers than
  just you can benefit from it, both now and later.

| I guess the thing I regret most is that I wanted to be part of the
| "enlightened" club of people who "get it" as Eric S. Raymond said.  I guess I
| just don't.

  Enlightenment is probably antithetical to impatience.

-- 
Erik Naggum, Oslo, Norway

Act from reason, and failure makes you rethink and study harder.
Act from faith, and failure makes you blame someone and push harder.