If you want X, you know where to find it (was Re: do...until wisdom needed...)

Alex Martelli aleaxit at yahoo.com
Thu Apr 19 07:01:35 EDT 2001


"Douglas Alan" <nessus at mit.edu> wrote in message
news:lcelupiv6m.fsf at gaffa.mit.edu...
> "Alex Martelli" <aleaxit at yahoo.com> writes:
>
> > > I know perfectly well how to write
> > > robust macros, having written many of them in days gone by.  And you
> > > know what?  They worked and were bug-free.
>
> > You have written robust macros in Python?  Peculiar.  The time
> > machine must be malfunctioning...
>
> I did not say I wrote them in Python.  I have written them in Lisp,

Ah -- I had sort of suspected that:-).


> > you _sure_ you didn't use instead a language whose first and
> > foremost design choice was to use a form for its programs that is
> > easy to process by program, rather than one that's easy for humans
> > to read and write?
>
> You seem to think that this is an insurmountable barier.  I feel that

I have already quoted McCarthy's home page and 1980 article (which
he states still represents his thinking on the subject) about this.

As you were flaming Mr Lamb about reading Dr McCarthy's works,
this was very important.  To summarize, his thinking is that Lisp's
success is due to hitting pretty close to a "local optimum" in the
space of programming languages with its choice to optimize for
easy manipulation of programs by programs rather than for human
ease of reading and writing.  Macros, clearly, play to that
very strength, although he does believe complexity can easily
take over with them (he specifically mentions Lisp Machine Lisp,
which I confess I remember but dimly, never having _used_ it).
In his view, clearly, dropping alternative algolish syntax was
anything BUT "a mistake" as you state it was.  Please do read
his works and the very reasonable doubts he expresses out of
the many decades of his and the Lisp communities' experiences.

Of course, he may well be wrong.  It seems to me that Dylan is
a heroic attempt to fit lots of nice vaguely Lisp-ish things
into an algolish-syntax framework -- although its success over
the last (14 years? do I recall correctly?) has not exactly been
enormous, it IS still alive in a commercial implementation and
an open source one.  I would say the only important thing that
Dylan lacks is *SIMPLICITY* -- it sure does have lots of very
fine, sophisticated stuff, such as advanced exceptions, the kind
of macros you want, optimization potential through optional
declarations, multiple dispatch with very powerful ways to
'navigate up' multiple inheritance relationships -- the works.
A really fine language indeed, EXCEPT maybe for simplicity.

I have a hard time thinking of extra features that Usenet
posters claim Python must add, that Dylan lacks.  Therefore,
it would seem that studying the success and spread of Dylan
versus that of Python might make an interesting case study
for simplicity versus everything-else.  Of course, Dylan had
big initial advantages -- a few years' lead time, funding
for a full-time development team back when Guido was still
hacking at Python as a part-time solitary effort, &c.  Where
are they now?  I've read claims of anywhere between 500,000
and 800,000 Python developers; I don't know what Dylanistas
claim, but my impression is rather different.  For example,
how many new Python books, vs new Dylan books, have come out
in the last couple of years?


> > try/except/else is of course no rocket science compared to the High
> > Surgery you will be proposing in your PEP, no doubt.  But care about
> > little things (such as spelling, or correct usage of a programming
> > language even in illustrative examples) may be a good indicator of a
> > person's mindset and attitude.
>
> My usage of the programming language was perfectly correct.  My

I beg to disagree on this point: a _perfectly_ correct idiom
in Python _would_, I think, have been try/except/else rather
than a bare try/except.  I'm not claiming you made some huge
mistake, mind you, just a quite ordinary imperfection as just
about anybody might, but, if you CLAIM perfection, and you
ARE claiming it here, then you HAD better live up to your
claims.

> spelling is often problematic.  As I already told you, I am dyslexic.

You only mentioned that _after_ I had written the post you
are here responding to, so (not having the time machine
around at the moment) I could hardly be expected to know it.


> > If I had my choice each and every time, I would take the latter,
>
> I have not taunted you into a flame war.  You have done it of your own
> accord.

No "taunting" involved -- I dived into it right after you
seriously insulted Steve Holden by impugning his honesty,
actually.  Of _course_ that was of my own accord -- I might
perfectly well have chosen to let you keep insulting my
friends AND attacking the simplicity which is what I most
cherish in Python; a cost/benefit analysis, considering the
other zillion things I had better be doing right now, would
probably point to that course of non-action.  But "le coeur
a ses raisons, que la raison ignore", and, like Wittgenstein,
I'm too much of a rational being to ignore that:-).

"Rational debate" was not on the menu, given that you keep
bluntly spewing outright insults (starting from that attack
on Steve's honesty, and onwards ceaselessly) etc -- only
non-action, or flames.  Of course there are plenty of
relevant technical points in my flames -- just a matter
of personal style -- while the points would not be made
if I chose to non-act, so I can easily rationalize that
I flame for the common good!-)


> > What you are advocating here in the last few days is not "Python",
> > but, rather, declaration of variables, infinitely extensible syntax
>
> You are saying that because I have a difference of opinion from you
> that you are justified in being abusive?

I dispute my flames are _abusive_ -- I can quote a dozen
outright insults you spewed out to people who dared disagree
with you, while my formal politeness never wavered.  The
hostile tone, of course, has more to do with the insults
that keep fanning the flames, although the disagreements
would be just as large if we were the closest of friends.


> > (and, I gather from the grapevine, only single-inheritance rather
> > than multiple, and no spaces for indentation -- not sure how many
> > other brilliant ideas you've still spared us for the moment).
>
> You gather wrong.  Time for a new grapevine.

Thanks for clarifying that misunderstanding, and I'm glad
I brought this up -- I see my source for that now wrote to
us both about it and explained where the miscommunication
came from.


> > If this is the "python" you're relentlessly evangelizing, then my
> > interest in your evangelization activities is a _negative_ one.
>
> I evangelize Python as it is.  When people point out flaws in Python,
> I agree with them that Python has some flaws, but I point out that it
> is still by far the best tool out there for many tasks.  I don't call
> the "whiners" idiots because they have a difference of opinion from me
> or from Guido.

How admirable.  And when they "point out flaws" which are in fact
Python's key "competitive differentiators" versus other languages,
as could easily be ascertained by not very difficult research, I'm
sure you also refrain from impugning their honesty, calling them
names, and bemoaning their general bad influence on the Universe:
as exhibited on these threads, these are treats you reserve for
people who dare *DEFEND* what they consider Python *STRENGTHS*,
such as its lack of declarations and overall simplicity.  What a
wonderful kind of Evangelist; with friends like you, Python
may need no enemies...


> > Our passion level on such themes is then probably on a par.  A key
> > difference would seem to be that I would never try to *pervert* a
> > programming language by totally ignoring its fundamentals,
>
> Then you must think that Guido has at times wanted to "pervert" Python
> and ignore its fundamentals.

You keep bringing this up, and I keep responding: my personal
opinion is that, of all that Guido HAS put in Python, or
specifically mentioned as possibly slated for Python 3000,
the only real wart is "print>>", and one per decade is a
_great_ batting average.  Other things I personally consider
minor defects, such as lambda, truncating-division, or case
sensitivity, appear to be things he isn't all that hot
about -- design decisions that seemed to be good ideas at
the time and became frozen-in due to backwards compatibility
needs.  None of these "ignore fundamentals" -- there ARE
significant trade-offs in each case (yes, even in 'print>>'),
and a designer's job includes choosing trade-offs.  If one
reads the early archives of the Python mailing list, one
does unearth interesting nuggets -- although it IS
interesting that the assertion "I don't believe explicit
declarations of local variables is a good idea" (qualified
by his views on Python at the time, of course) is found
on Guido's _third_ message to the list, so that considering
it one of Python's foundations may not be too far off base,
wouldn't you think?-)  [I'll be devil's advocate enough to
point out that as Python is used for a vast variety of tasks
beyond those envisaged back in Nov '91, arguments made back
then need not generalize to today's and tomorrow's needs;
indeed, in the very next message Guido is explaining that
there are no methods on strings or tuples, and, as we know,
half of this DID change less than 10 years later:-)].

At least one early aspect of Python's original design
did represent what I would call an outright kludge:
http://www.cwi.nl/www.python.org/search/hypermail/python-1992/0023.html
It DID fortunately go away, but it shows that Rome was
not built in one day, etc, etc:-).


> > while you appear to be one of the kind of people who love to _grasp_
> > beautiful things for the specific purpose of sullying their purity.
>
> You know very little about me.

...so I'm careful to sprinkle "seem" and "appear" with some
frequency to connote that, of course.  I address the image
given by these posts, not hypothetical noumena behind it.


> > Do you hang around Haskell lists whining that Haskell would be
> > just great if it just switched over to eager evaluation, mutability,
> > and no type-correctness?
>
> No, because Haskell is a research language.  It serves its purpose of
> furthering research well.  I would suggest to the Haskell folk,
> however, that it needs to become more object-oriented as the problem
> domain becomes more undertood.

Oh, and would you proffer that suggestion before, or after, visiting
http://www.cs.chalmers.se/~nordland/ohaskell/ -- or were you really
unaware of O'Haskell, its strengths and issues, and why most "Haskell
folks" look at it with interest but stick to "non-O'"?  The definition
of "problem domain" is also interestingly problematical, since the
Haskell page quite correctly states "Haskell is a wide-spectrum
language, suitable for a variety of applications [...] specifically
designed to handle a wide range of applications".


> > or is Python the only language lucky enough to get the unmeasurable
> > benefits of your boundless wisdom...?
>
> Any language whose purpose is to be a general purpose programming
> language can learn from other languages.  No general purpose
> programming language yet created cannot be improved.

Python _has_ "learned from other languages" right from the start,
of course (as has Haskell, &c -- I can't think of many languages
designed in the last few decades of which this couldn't be said;
Python, in particular, has acknowledged intellectual legacy from
more places than most other languages).  And since perfection is
not a trait observable in this sublunar world, it can be argued
that _any_ mutable artefact "could be improved".

Applying 'random' changes without understanding, however, is a
halfway sensible strategy only when one can easily measure a
merit-figure (target function) for any given parameter set and
easily undo counterproductive changes after experimentation
shows them up as so being -- see my recent post about simulated
annealing (even then, spending some time to "get a grasp" on
the deep nature of the function you're targeting is often a
very fruitful endeavour).

As general-purpose languages still target different criteria,
separate languages may well occupy separate "local optima" in
their hypothetical parameter-space, to borrow once again the
metaphor McCarthy uses so lucidly.  Nothing suggests that the
union or compromise between two different languages need be
preferable to either for any purpose whatsoever.  In fact,
as adding features increases complexity, and thus always does
bring _some_ measure of cost, it's likeliest that a feature
accretion damages a language, rather than improving it; very
few features will provide such advantages, when added, that
their cumulative cost is justified, *PARTICULARLY* for a
language (there are precious few...) which has simplicity
as one of its core values.


> > You know, the "print>>flop" fiasco _did_ make me suspect that at one
> > point:-).  But then I rationalized that one disaster per ten years
> > is still a very good batting average -- far better than any I can
> > claim.  As for musings, they're innocuous enough until and unless
> > they become substance.
>
> Well all *I've* provided is musings too.  Why don't you start treating
> Guido the way you've treated me?  I've mused about nothing here that
> he hasn't also mused about.

I've _never_ seen Guido insult *anybody* (which is not to say
he hasn't done so -- I am not claiming to have surveyed all of
his behaviour since birth, please note).  Nor have I ever flamed
somebody who was not insulting (to me or others) nor kept
flaming after clarifications and acceptable apologies were
offered.  It's not that hard to check these claims I'm making,
as http://groups.google.com/groups?q=%22alex+martelli%22 will
reveal a fair-sized sample of 3520 posts mentioning me or
written by me in the last few months, while a similar search
on the web shows a few more which happened to get archived
from previous times.

I have never seen Guido post "musings" on any newsgroup or
mailing list I was following; should that happen, I may well
choose to respond (no doubt as courteously as I'm sure his
tone will deserve) just as I did the only time I did respond
to a post of his here (about "print>>") -- please be sure
that I do not mute my expressions of disagreement out of
"respect for authority".  When I started to get interested
in Python and to post here, pretty soon there followed a
(mild) flamewar between me and Tim Peters -- nothing as crude
as name-calling, of course, but it wasn't muted, either.


> > > Your hypothetical army of monkeys sitting
> > > at typewriters would better serve the community.
>
> > *MINE*?  _BLUSH_.  You know, Mr Alan, I _have_ received many
> > interesting compliments on the net, but, so far, none as high as
> > somebody mistaking me for Emile Borel
>
> You need to brush up on your idiomatic English.

And you, perhaps, your handbook of rhetorical techniques: taking
the adversary's assertion at face value and responding to it as
such, just as answering rhetorical questions, etc, are elementary
debating techniques which were no doubt old hat to poor maligned
Gorgias.  Of course, one never _reveals_ one is using rhetorical
techniques -- that IS an obvious meta-principle, isn't it?

> I know quite well
> that the story of the monkeys with typewriters did not originate with
> you.  Thanks for the history lesson though.

You're welcome, and a plus for not claiming you KNEW it was
Emile Borel's -- it's one of those memes which everybody has
heard but very few people can attribute correctly (and, of
course, I can't _prove_ Borel's 1913 use *was* first, except
by a very hypothetical Borgesian approach -- procure and
examine ALL the written material that humanity produced up
to 1913 [maybe I only need to go back to the invention of
typewriters...] and verify that this fancy image was not
found there...).


Alex






More information about the Python-list mailing list