Fw: Case sensitivity

Alex Martelli aleax at aleax.it
Sat Feb 22 10:02:21 CET 2003

Arthur wrote:
> Guido succumbed to evidence.  Which you will not let yourself succemb to.

Guido succumbed to the hostility he felt projected strongly from this
group against this idea -- which, indeed, I will not let myself succumb
to: I may have more appetite for being attacked than he does.  

> Beginners don't care. 

Your assertion is false.  Read the post on the subject by Anna.  SOME
beginners DO care.  It seems the beginners to whom I teach Python
care more than others do: or perhaps it matters that I'm keen to NOT
let beginners learn by rote, assuming that anything that seems weird
to them must reflect on their own mental failings... sometimes things
seem weird because they ARE weird.  Often they don't, and I'm keen
for my students to speak up and discover the rationale for the way
things are -- understanding the rhyme and reason of things makes,
IMHO, for much more effective learning than rote memorization.

> seems incredible that you would not overcome the temptation to press the
> beginner issue.

Get over your incredulity, then, because the issue IS in good part
connected to what happens when one is BEGINNING to use a
new large module or package -- and in this sense we're all beginners
reasonably often, unless we sleep on our laurels.  David Mertz made
the point quite well, I think, verbalizing how one must fumble to
reconstruct (or rather memorize by rote) that while in module "string"
and type "str" one must use lowercase, in StringIO one must use
uppercase, EXCEPT that although the (case-sensitive) C language
HAS an uppercase name, one must STILL lowercase it to obtain
the name of module cStringIO, or else Python will scream at you.

It's worse for total beginners, people who have not yet internalized
the fact that computer programs are designed with bad human
interfaces and WILL scream at you for no good reason on weird
occasions.  And that applies, in some corners or other, even to
programs that are generally quite good.  "Python fits your brain",
except when you think that the "C" in "CStringIO" should be in
uppercase, because in this case it doesn't, and your brain must
instead warp to fit Python's stupid case-sensitivity -- "oh well".

Many people feel stupid because they push on a door before
reading the "pull" instruction and realizing it opens by pulling.  The
antidote to that is reading Norman's "The Design of Everyday
Things", which explains why it's _door designers_ who are, if not
stupid, at the very least not good designers on this specific point.

Well-designed doors don't require you to read instructions: they
rely instead on _affordances_ and make it OBVIOUS whether one
pushes or pulls the door to open it.  Python is so good in good
part exactly because it has "good affordance", it DOES "fit your
brain".  This doesn't mean it's wart-less, it only means it has fewer
warts than other languages, and thereby yields higher productivity.

While this matters most to beginners, good affordance helps ALL.
If you go through that one door twenty times a day you'll soon
learn which way it opens.  But there WILL always be doors less
traveled by, for any of us -- and the need to read or memorize
instructions because of poor door design.  So, I _am_ a beginner
regarding doors I don't use often.  I've read Norman so I curse at
the door designer rather than feeling sheepish myself -- but when
I hear somebody expostulating on how WONDERFUL that door
is and/how how silly those who push instead of pulling, I speak up.

If by speaking up I can shore up the confidence of at least one
beginner that, no, they AREN'T stupid, it's the door that is badly
designed, it will have been worth the time and effort.  Exactly
because a total beginner is going through so much that is hard
and CANNOT be made easy, he or she needs reassurance and
compassion and lovingkindness, just as much as he or she needs
smacking with clue-by-four's occasionally to jog understanding of
the rationale for things that are INTRINSICALLY hard.

> Because that's exactly were the discussion went off track Round One, and
> will continue to go off track.  You know what you know from your own
> experience. As I know from mine.  And if I were working with twenty did
> API's a week, as you might be, I might see better your point.  Its an
> advanced users issue, if its an issue at all.

I'm not sure what are "twenty did API's" (maybe I'm missing some English
idiom here?), but it's an issue for everybody -- at least everybody who's
not settled into sleeping soundly on their laurels, never using new things
and never teaching others.  It will "continue to go off track" because it
seems many people ARE thus "settled" (and lacking in empathy with
others) AND quite happy that everybody else should suffer so they can
keep their favourite cutesy "peepLop = PeepLop()" idioms -- while others
will not stand idly by and let errant design principles be praised.

Python won't change on this, alas: it will keep the wart.  So be it.  But
don't hope anybody who DOES use new things often, teach often, and
have verbal rather than visual mental orientation, will let you proclaim
that is "good" without challenging your arguments.


More information about the Python-list mailing list