From ...
Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!newsfeeds.belnet.be!news.belnet.be!newsgate.cistron.nl!amsnews01.chello.com!news01.chello.no!not-for-mail
Newsgroups: comp.lang.lisp
Subject: Loyal opposition [was: Possible bug in ACL and Corman Lisp?]
References: <3C5801B8.C66E1ECC@eurocom.od.ua> <4k7tz6o0b.fsf@beta.franz.com>
Mail-Copies-To: never
From: Erik Naggum
Message-ID: <3221528480408972_-_@naggum.net>
Organization: Naggum Software, Oslo, Norway
Lines: 241
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Date: Fri, 01 Feb 2002 05:01:21 GMT
X-Complaints-To: abuse@chello.no
X-Trace: news01.chello.no 1012539681 212.186.234.171 (Fri, 01 Feb 2002 06:01:21 MET)
NNTP-Posting-Date: Fri, 01 Feb 2002 06:01:21 MET
X-Received-Date: Fri, 01 Feb 2002 06:01:34 MET (news01.chello.no)
Xref: archiver1.google.com comp.lang.lisp:25584
* 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.