[Tutor] Complications Take Two (Long) Frustrations.

Laura Creighton lac at openend.se
Sat Aug 22 10:10:49 CEST 2015

In a message of Sat, 22 Aug 2015 17:00:55 +1000, "Steven D'Aprano" writes:
>On Fri, Aug 21, 2015 at 11:29:52PM +0200, Roel Schroeven wrote:
>> Joel Goldstick schreef op 2015-08-21 23:22:
>> >so:
>> >    print -max(-A, -B)
>> That's what I mean, yes. I haven't tried it, but I don't see why it 
>> wouldn't work.
>It won't work with anything which isn't a number:
>py> min("hello", "goodbye")
>But the max trick fails:
>py> -max(-"hello", -"goodbye")
>Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
>TypeError: bad operand type for unary -: 'str'
>If you want to write your own min without using the built-in, there is 
>only one correct way to do it that works for all objects:
>def min(a, b):
>    if a < b: return a
>    return b
>Well, more than one way -- you can change the "a < b" to "a <= b" if you 
>prefer. Or reverse the test and use >, or similar, but you know what I 

Yes, but I think the OP's problem is that he has a fool for a teacher,
or a course designer at any rate.  For some reason the author thinks
that the fact that max(A, B) == -max(-A, -B) (for integers) is very,
very clever.

And somehow the teacher hasn't learnt that his or her job is to make
students question 'clever programming' while not distroying the
enthusiasm of any students who come up with clever solutions on their
own.  Cleverness is the consolation prize in this business -- what you
want to write is code that demonstrates wisdom, not cleverness.

They are fun to write, though.

But remember:

     Everyone knows that debugging is twice as hard as writing a
     program in the first place. So if you're as clever as you can be
     when you write it, how will you ever debug it?

     — Brian Kernighan The Elements of Programming Style

So the reflex you want to develop is 'I just did something clever.
Hmmm.  Maybe _too_ clever.  Let's see ...'  The cleverer you are as a
person, the more you have to develop this reflex, because after all,
somebody much less clever -- or experienced -- than you are may have
to fix a bug in your code some day.

so the max(A, B) == -max(-A, -B) trick has everything to do with
'Watch me pull a rabbit out of this hat' and nothing to do with
'good programming style'.

Too much education of the sort that rewards cleverness and penalises
wisdom means we end up with a lot of smart people in this world who
have managed to get the idea that 'Wisdom is something that only
stupid people need.  It is optional for smart people, and I am smart
enough to do without!'

Some people _never_ unlearn this one.  My family is, alas, full of them.


More information about the Tutor mailing list