I pretty much agree with Arthur that CS needs grist for its mill, and
geometry and mathematics are good suppliers.  

I would also turn that around and go with Scott's point that CS is not alone
in needing grist:  geometry and mathematics benefit by having CS supply
context and applications.

For example, a purist mathematician might scorn an approach to the concept
of vectors that uses Python code as a means to communicate just what a
vector *is* i.e. uses a computer language to help anchor a mathematical
generality.  

However, not being a purist, I think such cross-breeding begets many
positive synergies.  We get to use string substitution to generate scene
description language, directly from our Python vector class, as food for
POV-ray.[1]

Python and POV-ray are wonderful and powerful tools.  It hardly makes sense
to teach mathematics/geometry without these tools, or tools like them, if
the requisite tech is available.  They're free, after all.

In sum, it makes plenty of sense to teach CS while importing from other
fields (I'd argue that Knuth makes extensive use of pre-CS mathematics), and
it makes just as much sense teach math and geometry while importing from CS.

The advantages of a cultivating a math/CS hybrid for use in present and
future curricula are just too great to ignore.  Why rip ourselves off
unnecessarily?  We should continue this lineage, which is already a
tradition, stretching back to before Python was born.

Kirby

Related thread @ Math Forum (math-teach list):
http://mathforum.org/kb/message.jspa?messageID=3934957&tstart=0

[1]

 >>> reload(satacad)
 <module 'satacad' from 'D:\Python24\lib\site-packages\satacad.py'>
 >>> from satacad import Vector, Edge
 >>> v0 = Vector((1,1,1))
 >>> v1 = Vector((1,2,-3))
 >>> v2 = v0 + v1
 >>> e = Edge(v2,v0)
 >>> e
 Edge <2, 3, -2>, <1, 1, 1>
 >>> e.write()
 'cylinder <2, 3, -2>, <1, 1, 1>, 0.1 pigment { color Red }'
 >>> v0
 Vector <1, 1, 1>
 >>> v2*3
 Vector <6, 9, -6>

class Vector(object):

    color = 'Red'
    
    def __init__(self, xyz):
        self.xyz = xyz

    def write(self):
        basic = "cylinder <0,0,0>, <%s,%s,%s>, 0.1" % self.xyz
        return "%s %s" % (basic, "pigment { color %s }" % self.color)
    
    def __repr__(self):
        return "Vector <%s, %s, %s>" % self.xyz
            
    def __mul__(self, scalar):
        xyz = tuple([scalar * i for i in self.xyz])
        return Vector(xyz)

    def __add__(self, other):
        xyz = tuple([ i+j for i,j in zip(self.xyz, other.xyz)])
        return Vector(xyz)

    def _get_xyz(self):
        return '<%s, %s, %s>' % self.xyz
  
    coords = property(_get_xyz)
    

class Edge(object):

    color = 'Red'

    def __init__(self, v0, v1):
        self.v0 = v0
        self.v1 = v1

    def __repr__(self):
        return "Edge %s, %s" % (self.v0.coords, self.v1.coords)

    def write(self):
        basic = "cylinder %s, %s, 0.1" % (self.v0.coords, self.v1.coords)
        return "%s %s" % (basic, "pigment { color %s }" % self.color)

    


_______________________________________________
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig

Reply via email to