""" Date: Thurs, 27 Apr 2007 From: "Kirby Urner" Subject: Recap of Python Python for Wanderers I used this module for my first official 'Python for Wanderers' class @ Linus Pauling House on Hawthorne. Although Allen wasn't able to make the Tuesday night generic talk, which was a sort of front loading recruiting session, designed as a standalone but also to build interest in this class, he had no trouble getting up to speed (that's Allen Taylor the 'SQL for Dummies' author, plus father to the Taylor Twins, movie makers par excellance. Link: http://www.imdb.com/title/tt0389989/). Other than the source code below, which takes the source code from last week's wanderers.py and develops the concept of inheritance, we didn't do a lot with source code. Instead, I covered the following points (plus showed 'Warriors of the Net'): * just as antiquities specialists get kudos and fun lifestyles for knowing such dead languages as Sumerian, we're still going to need new talent to focus on old languages that aren't changing any more, yet still have operational responsibilities, e.g. M or MUMPS used by the VA, or ADA by the DoD. Python helps recruit new talent to the world of computer languages, but as a front end to a vast and growing tool box of same, not as some be all end all panacea. * Python as a part of a Southern African curriculum sequence, wherein we start with a Logo-inspired avatar control experience (perhaps Logo itself) with the youngest, move to a more immersive Squeak-like environment (or Squeak itself initially), winding up in Python for the final pre-college segment, wherein we use this language to formalize some of the algebra and geometry currently taught with almost no technology in the classroom except calculators. Cryptography provides a lot of grist for the mill here, with students reaching an understanding of RSA (a public key algorithm) by the end of our sequence. * My attempts to prototype elements of the above in a more local context, in particular via Saturday Academy and HPD (Hillsboro Police Department). HPD's George Heuston recruited me 'n Jerritt Collord to deliver 'Adventures in Open Source' to teenagers at West Precinct in 2005. I discuss this experiment at somewhat more length in a Quicktime movie made @ London Knowledge Lab during the Kusasa Summit in London the following year (2006). Link: http://www.bfi.org/bfi_community/pythonic_mathematics_talk_by_kirby_urner * The history of computer science in thumbnail, starting with Rear Admiral Grace Hopper rescuing us from too much tedium via her notion of the compiler, which helped make Ada Byron's dreams come true. The Wild 'spaghetti code' West era followed (that's really how assembler code needs to be, but FORTRAN coded the same way is a bad habit), until Edsger Dijkstra's religious revolution and Structured Programming, followed in turn by a divergence into several paradigms, a main one being the Object Oriented and the Design Patterns it supports (LISP and Scheme go another direction with Functional Programming, APL and J in yet another with Array Based Programming). * Although we're still talking "warm fuzzy" animal kingdom stuff below, if you just change Mammal to Vector (or Quaternion), you're suddenly in a position to use a sophisticated OO language to define 'math objects', with mathematics itself an 'extensible type system' (define your types using already- existing types). This is how many students outside the USA are already learning mathematical thinking. So maybe we'll make more headway in PDX with this curriculum? The local knowledge based economy (KBE) would be well-served by such a trend, I confidantly predict. My current Pythonic Math course for Saturday Academy @ PSU, for middle and high schoolers, is another opportunity to prototype curriculum segments. * The best way to teach Python is to focus on OO concepts right out of the box. Don't make newcomers to programming slog through a lot of pre-OO style thinking, which is where too many CS profs remain stuck to this day, trying to make Python a crutch for their lame/obsolete pedagogies. The code below represents me walking my talk in this regard, getting into classes and subclasses as a part of our very first meeting. """ class Mammal: """ My funky Mammal class, based on a refactoring of last time's http://www.4dsolutions.net/ocn/python/wanderers.py """ def __init__(self, name): """... a mammal is born...""" self.name = name self.stomach = [] def eat(self, food): self.stomach.append(food) def poop(self): return self.stomach.pop(0) # FIFO def __repr__(self): return "I'm a mammal named " + self.name class Dog (Mammal): """ My funky dog class """ def sound(self, n): print "Bark! " * n def __repr__(self): return "I'm a dog named " + self.name def __add__(self, other): return Dog(self.name + "-" + other.name) class Monkey (Mammal) : """ My funky monkey class """ def sound(self, n): print "Hoot! " * n def __repr__(self): return "I'm a monkey named " + self.name def __add__(self, other): return Monkey(self.name + "-" + other.name) """ so then you would go like: >>> from wanderers_class0 import Monkey, Dog >>> some_wanderer = Dog('Sarah Angel') >>> some_other_wanderer = Monkey('Mono by Miguel') >>> some_other_wanderer.eat(some_wanderer) >>> some_other_wanderer.stomach [I'm a dog named Sarah Angel] ... """