Magic function

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sat Jan 12 00:17:59 EST 2008


On Fri, 11 Jan 2008 19:36:24 -0800, Michael Tobis wrote:

> On Jan 11, 8:40 pm, Steven D'Aprano <st... at REMOVE-THIS-
> cybersource.com.au> wrote:
> 
>> Read the OP's post again. His (her?) users aren't expected to create
>> the toolkit, merely to use it. To create good toolkits you need both a
>> master programmer and an expert in the field. It is an advantage if
>> they are the same person. But to use such a good toolkit, you shouldn't
>> need to be a master programmer.
> 
> It appears we are in agreement, then.
> 
> But that leaves me in a position where I can't understand your
> complaint. There's no reason I can see for the sort of compromise you
> ask for.

What compromise do you think I'm asking for?

I'm suggesting that the scientists be given a brief, introductory 
education in *how to use their tool*, namely, Python.

Instead of creating some sort of magic function that "just works" (except 
when it doesn't) by doing some sort of implicit "grab every object of 
type Obj() you can find and do processing on that", stick to the more 
reliable and safer technique of having the programmer explicitly provide 
the objects she wants to work with.


> Clean abstractions benefit from their cleanliness.

An automatic "run()" that uses a bunch of stuff you can't see as input is 
not a clean abstraction. "Do What I Mean" functions have a long and 
inglorious history of not doing what the user meant.

There's a fundamental difference between (say) Python's automatic garbage 
collection and what the OP is suggesting. Explicitly deleting variables 
is almost always the sort of trivial incantation you rightly decry. The 
computer can tell when a variable is no longer reachable, and therefore 
is safe to delete. But the computer can't safely tell when the user wants 
to use a variable as input to a function. The user needs to explicitly 
tell the computer what is input and what isn't.

The OP is suggesting taking that decision out of the hands of the user, 
and making every variable of type Obj automatically input. If you think 
that's a good idea, consider a programming tool kit with a function sum() 
which inspects every variable you have and adds up every one that is a 
number.



> It's not clear that this is the sort of application where cutting
> corners makes sense, so I don't see how your advice is justified.

Sorry, are you suggesting that training the scientists to use their tools 
is cutting corners? Because I'd call the OP's suggestion to use magic 
functions a dangerous, ill-conceived cut corner.


-- 
Steven



More information about the Python-list mailing list