Subject: Loyal opposition [was: Possible bug in ACL and Corman Lisp?]
From: Erik Naggum <erik@naggum.net>
Date: Fri, 01 Feb 2002 05:01:21 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3221528480408972_-_@naggum.net>

* Erann Gat
| Erik's view in a nutshell was:
| 
|   [We should] focus our attention on stuff that actually affects
|   users of all categories much more than this trifling issue
| 
| The reason I raise this issue again now is that here we have evidence that
| it *does* affect users of all categories, from beginners to implementors. 
| The fact that *two* implementors got this wrong, including the industry
| leader, indicates that this really is a pervasive problem, and not just a
| fluke.

  A slightly more accurate nutshell summary would be just what I said:

    removing special variables because they confuse a few people is a
    typical "modern" reaction to the lack of diligence and effort that
    "modern" users are no longer expected to expend in learning anything.
    this is simply a beginner's issue.  Common Lisp used to cater to
    experienced programmers at the cost of having to learn it, like a
    _skill_, something people of reasonable competence levels would _value_.

  Most countries have laws that are fairly obscure and hence are neither
  commonly followed nor broken.  However, a universal legal principle is
  "ignorantia legis neminem excusat" (ignorance of the law excuses no one).
  It behooves the citizen of a country to know its lawa.  We find that more
  or less formal standards of good practice exists in every field of
  professional endeavor -- with the exception of programming computers.
  For some unfathomable reason, computers should be optimzed for those who
  are completely clueless, who cannot accept the responsibility for their
  own actions, who do nothing to rectify problems they run into, who are,
  plain and simple, _incompetent_ at their job.  Microsoft has clearly made
  a huge contribution to this state of affairs in its incessant propaganda
  that computers should be _so_ easy to use that actually learning to use
  them well has become a disadvantage.  However, failing to understand how
  something works, be it the society in which you live of the computer you
  use, can only lead to frustrations, complaints, and miserable experiences
  with the software you use.  So, too with programming languages.

  I believe that there is nothing whatsoever to be gained by catering to
  stupid and incompetent people.  Others, such as Bill Gates, believe
  otherwise, but in order to take advantage of stupidity and incompetence,
  you have to make a choice: Make yourself manifestly unattractive to good
  and smart people.  If a society catered to its criminals, good and smart
  people would leave that society, too.  This is why I think it is worth
  the pain to expose and get rid of those who have no desire to see their
  wishes in a context of a community that would have to (help) fulfill them.

  If there is a law we do not like, there are some exceptionally complex
  _laws_ to follow to change it.  It is not just in programming language
  communities that "cost to implementors" is considered and valueed higher
  than some "perfect solution".  If a society is made up of people who are
  so ill equipped to deal with disagreement that they throw up their arms
  and cry "design flaw" whenever their pet peeve comes up, they survive
  solely on the momentum of whatever processes allowed that society to be
  created and grow out of barbarianism and "might is right" to begin with..
  Sadly, many Western societies virtually surf on the waves made by those
  who were smart enough to figure out that need for legal infrastructures
  such as constitutions.  It takes a considerable amount of intellectual
  effort to see that freedom is achieved only within a society of just law,
  because most people who have not quite grown up mentally are still quite
  short-sigtedly egoistic and think that their desires are the law.  Some
  think this regardless of the consequences for others.  Those who hold the
  community interests above their own, or, more precisely, who adjust their
  own desires so that they do not require a different community than that
  in which they live, are generally much more successful in achieving their
  goals than those who spend their time wishing for a different community,
  society, world, or universe.

  If you stumble and fall, do you blame gravitation, meomentum, friction,
  or some other part of what we consider "laws of physics"?  If you stumble
  in your code and it misperforms, do you blemae physics for making it
  harder to type in correct programs, do you blame the hardware for not
  doing what you want, do you blame the compiler for not understanding you,
  do you blame the language specification for not being what you want?  If
  you get ill from a disease for which you were genetically predisposed, do
  you blame your God, do you blame your parents, do you blame your doctors
  for not fixing it, do you blame medicine as a whole for not being able to
  give you the life you want?  Or do you, in each of these cases, figure
  out that there are many things you cannot change and that it is useless
  to fight, that there are many things that just happen by coincidence and
  which have no conscious will behind them, that even if things seem wrong
  to you, they are in fact right for a lot of other people?

  You are rich if you can purchase whatever you want, whenever you want it.
  Corollarily, it depends more on what you want and when than on how much
  money you have.  The basic question is: Can you adapt to a society made
  by others?  Some are unable to do this and have to have their own will or
  they threaten to destabilize the society that made their very "protest"
  possible -- in a less civilized society, they would have been orstacized
  or killed, but because of the freedom they enjoy to express their views,
  they attack the very basis of that freedom.  These people are generally
  dissatisfied with some part of their society (and this will not stop --
  they are basically fighting _against_ the "establishment" and it will
  never be to their liking, because their role is a fighter, a role that
  would vanish if their "demands" were met) and act like the proverbial
  disgruntled postal workers instead of trying to find something more
  valuable to wast their life on.

  Are special variables in Common Lisp difficult to understand?  No, but
  let me rephrase the question to explain why: how much _education_ (as
  opposed to mere _training_) do you need to figure out what variable
  reference mechanisms exist and how they work and is this more than (1)
  any other feature in the language (it is clearly not), (2) any other
  features of other languages regarding non-trivial handling of bindings
  (it is clearly not).  What we have is a failure of some people to spend
  any effort _at all_ to learn how to use special variables, and those seem
  to think it is legitimate to fault the language for their lack of desire
  to expend effort to learn it.  So, the question is really, do we want to
  optimize a _language_ for the uneducated, untrained, unskilled moneky who
  coulud be replaced at a moment's notice or do we aim for the professional
  or professioal-to-be in both our education of beginners and in the design
  of our language?

  In yet other terms, do we recognize that knowing how anything works that
  is not exactly like something else you already know takes special effort?
  The first thing you learn is so simple and easy to internalize precisely
  because _nothing_ is there to get into a conflict with, but if you know
  one thing, like C's global variables, then your next thing, which will in
  _some_ way be different, will take some effort to understand.  Those who
  do not want to expend this effort, _assume_ that all things are the same
  and do not even want to recognize that they might be wrong when they run
  into problems.  This is flat out _stupid_ and betrays an _unconscious_
  modus operandi, which I consider to be _fundamentally_ incompatible with
  programming computers.  Those who fail to think even when the suggestion
  that they do so is presented by something as clear-cut as a failure of a
  computer do their bidding, should not be used as arguments to redesign a
  language that works perfectly well for those who _have_ learned it.  Such
  is no more than nihlistic change-for-the-sake-of-change and serves nobody.

  Common Lisp does _not_ have the luxury of being first contect, so those
  who discover it and want to learn it and use it productively have no more
  choice about having to expend the extra, but necessary effort to learn
  how it both exceeds and differs from other languages whose designers
  never dared to challenge the same design issues than those who wish to
  learn a physical skill that involved "unlearning" some bad habits, such
  as learning proper pronunciation in a foreign language, driving a car,
  becoming a master marksman, or even just typing faster on a computer.
  However, if the first thing an otherwise eager student sees when he is in
  this transition and re-learning period is some disgrunted ex-Lisper whine
  that so and so feature is a design flaw, the likelihood that he will want
  to expand that effort approaches zero faster than intelligent youngsters
  get rid of their desire to learn mathematics when presented with idiotic
  drills in arithmetic and a teacher who thinks real mathamatics is "too
  difficult".

  What we should do instead of this stupid whining about how badly designed
  the language is, is simply to show people what is on the other side of
  learning it well.  It is my personal opinion that those who gripe about
  bad design are unable to adapt their personal will to _any_ design not
  their own, and if my memory does not fail me, the same person who whines
  about special variables yet again also whined about how "impossible" it
  would be to use Common Lisp is real life applications, too, going all
  George Michael on us and "losing his religion" in the process.

  Learning the prerequisite skills to do the necessary work is _not_ an
  option.  Education to understand the theoretical underpinnings of one's
  work is _not_ an option.  Being nice to uneducated, untrained, unskilled
  fools who effectively complain that the world is not to their lazy liking
  _is_ an option, but forcing others to accomodate them because there are
  lazy idiots out there who do not want to learn anything at all, is not.
  Every other human endeavor requires expenditure of effort and some pain
  in learning even to be bad at it, and much more to be good at it.  There
  is not a single exceptions. and computer programming most certainly is
  not it just because it has an amazing ability to reward those who learn
  its first, simple skills faster than any other discipline.  However, one
  must not _stop_ at the simple skills just because it begins to get harder
  to become better and more advanced.  If there is only one way to destroy
  a discipline, it is to rob people of the opportunity to improve by giving
  them too few challenges.

  I am, incidentally, interested in and care deeply about _professional_
  exchange of information, among and for the professional programmer or
  professional-to-be.  Lazy hobbyists who do not want to work at all,
  disgruntled ex-professionals who still hang around instead of just doing
  something else that is valuable to them, anti-social individuals who want
  to destroy the basis of the profession, i.e., its formal standards and
  informal standards of best practice, etc, should in my view get the hell
  out of public fora designed for the exchange of information between those
  who have at least some of the interests they do not share with the rest
  of the community.  Compulsive whiners are not welcome in any professional
  setting and I fail to see how they are welcome in any personal company,
  either.

  As for the Common Lisp community's "resistance to change": If you have
  only bad ideas, do not blame other people for the resistance to change,
  be _intelligent_ and figure out what constitutes acceptable changes and
  propose them.  Improving Common Lisp is _hard_.  That is the result of it
  being good in the first place.  It used to be damn easy to improve Perl
  or C++, and any random idea got in, but even that is getting harder.  It
  would be foolish to argue that that which has precisely been _matured_ by
  exposure to a barrage of ideas, good and bad, and have in the past been
  more than willing to adopt the good ones, has somehow _stopped_ adopting
  ideas, but it turns out that the education necessary to improve something
  that is highly advanced takes so much longer to acquire that those who
  have no such education, and who fail to understand what they are trying
  to improve, will merely _repeat_ all the "good ideas" that have already
  been rejected in the past.  This, howeer, is precisely what marks the
  transition from a hobbyist discipline to a professional discipline: When
  the hobbyists can no longer offer up random ideas that are good enough to
  merit changes, the language is so good on its own terms that only those
  ideas made by experienced, mature professionals stand a chance of causing
  a change.  As examples: random syntactic stunts are foolish hobbyist
  ideas, whether "marking" special variables or some new conditional macro
  to supplant all others, but a new basic design for streams that maintains
  compatibility and respect for other members of the professional community
  by offering something superior in functionality and performance, is very
  clearly a professional idea, complete with implementation.  Another good
  pair of examples: Useless whining about lowercase symbol names and a way
  of doing this that violates the standard is a hobbyist's lack of ability
  to grasp what he is facing, while using the substrate of the language to
  offer extensive support for external-formats and a uniform internal
  character set, complete with implementations with very good performance,
  is clearly a professional design improvement.  In my view, the Common
  Lisp community is short on praise for real, professional changes, and
  very long on whining about the resistance to adopting hobbyist stunts.

  In summary, what we lack is a professional attitude towards loyal
  opposition.  The disloyal opposition offered by whining hobbyists who
  want change because _they_ feel bad about something and cannot get over
  it for personal reasons, causes a lot of grief and traffic in this
  newsgroupp.  Those who have misgivings about something, appear to be so
  uneducated, untrained, and unskilled in public debate that they cannot
  present an argument from loyal opposition, which would have respected
  past decisions, accepted and existing designs, rejected suggestions, and
  those who have made up the community and brought it where it is today,
  but seem instead obsessed about the need to make that which they want to
  "improve" look _bad_, those who designed it _braindamged_, those who want
  to adhere to procedures and to support the community _religious_, etc.
  Instead of being able to see a series of steps from here to there, those
  who are far more disgruntled than interested in improving anything, want
  all of their changes in one giant step, crushing any and all opposition
  and forcing a _departure_ and _forking_ instead of linear improvement.

  The disloyal opposition can be summarized with "I don't like this, so
  therefore it's bad", while the loayl opposition would argue "this might
  be even better than what we already have".

///                                                             2002-02-01
-- 
  In a fight against something, the fight has value, victory has none.
  In a fight for something, the fight is a loss, victory merely relief.