[Edu-sig] CTL: Computer Thinking Language

kirby urner kirby.urner at gmail.com
Mon Mar 2 23:20:25 CET 2009


On Mon, Mar 2, 2009 at 1:41 PM, Jason Axelson <bostonvaulter at gmail.com> wrote:
> As a current college student myself, I feel like chiming in here.
>
> 2009/3/2 michel paul <mpaul213 at gmail.com>:
>> However, it is again more mathematically effective to read "2 + 3 * 4" as
>> "the sum of 2 and the product of 3 and 4", or,  sum(2, product(3, 4)).  No
>> ambiguity there!  And this is how you have to think when you hook chains of
>> functions together.  This kind of stuff could be done very early in the
>> curriculum.  Doesn't have to wait for either advanced math classes or
>> computer science.
>

The mental model in Python is 2, 3 and 4 each "know their stuff" when
it comes to doing these operations, have them internalized ("in their
bones").

In that sense, translating 2 + 3 to sum(2, 3) is less useful that
using native Pythonic 2.__add__(3) with __add__ being a verb like
"eat" (ingest).  "2 eats 3, returns 5 object" is a better image that
"sum eats a 3 and 2 objects, returns 5 object".

Of course if you're bridging to Scheme, then maybe that's another
matter.  OO isn't going to be so important, your mental models will be
different.

However, in the Python head space, we don't so much like the idea of
"operations" just floating as globals, unencapsulated, outside of any
number objects.  That's the old paradigm, kind of gets in the way.

And yes, I know it's still quite possible to code and think in that
way with Python, a forgiving environment.  But in terms of helping
students master OO, we want the idea of methods *internal* to the
class definition.

 sum(2, product(3, 4)) means 2.__add__ ( 3.__mul__(4) )  -- like fish
eating fish:

http://www.efuse.com/Plan/fish-eat-fish-richard-cook-artville-com.jpg
( integers = fish )

> Perhaps it may be appropriate to try and introduce prefix notation to
> students, such as what lisp uses. So instead of "2 + 3 * 4" or sum(2,
> product(3, 4)) it would be (+ 2 (* 3 4)). Unfortunately, that might
> make their eyes glaze over, but you could state how it is unambiguous
> and maybe formalize infix notation for them.
>
>> Math teachers often forget, or are unaware, that the ordinary arithmetic
>> operators are themselves functions.  I think it would be good for math
>> classes to explore this kind of functional composition for very simple
>> ideas.
>

There's not just one overarching model in my model.  Different
languages and notations, all with a claim to being mathematical, will
come with different gestalts, core abstractions.

This is what math teachers often forget:  that there's no "one thing"
that is "a mathematics".

Wittgenstein's notion of "family resemblance" enters at this juncture,
helps break the spell of "an essence" (so tempting, so wrong).

> Personally I found that being able to think about many math concepts
> as functions helped me a great deal with managing the complexity of
> many math courses. Just my 2 cents.
>
> -Jason

Finding a model helpful is a good recommendation for sharing it with
others and I wouldn't want to get in your way of doing that.

On the other hand, if Python is what we're learning, then looking at 2
+ 3 as a way of firing the add method
inside of an integer, is what we'd like to focus on in many cases.

However, we're not so far apart, as functions are very akin to methods
and static methods are really quite indistinguishable, not even
needing a self.

>From Oregon Curriculum Network (OCN):
http://www.flickr.com/photos/17157315@N00/3308514585/sizes/o/

Kirby


More information about the Edu-sig mailing list