[Edu-sig] Visual Programming in Python?

Ian Bicking ianb at colorstudy.com
Thu Apr 20 05:26:26 CEST 2006

Jeff Sandys wrote:
> Kirby said:
>> So this isn't Logo, but it's probably where we're headed with 
>> the turtle stuff:
>> t1 = Turtle()
>> t1.forward(10)
>> I can imagine a big commercial company contributing a colorful
>> professional grade edition to the education community, via GNU 
>> or whatever.  Making the syntax consistently Pythonic would be 
>> an attractive feature (implement bindings for both Python *and*
>> traditional Logo why not?).
> Thank you, Kirby, for expressing this.  While PyLogo is an 
> interesting and valuable experiment, I don't think that it will 
> contribute to introductory Python programming education.  I love 
> Logo syntax and enjoy teaching Logo to Middle school students.
> I wouldn't use PyLogo when teaching Python.

PyLogo wouldn't be particularly useful teaching Python, since it isn't 
Python.  But it makes it possible to share infrastructure and 
environment between the two languages.  So (barring some small details) 
you could run VPython from Logo, and the students would be building 
familiarity with that model.  And I think there's no reason VPython in 
Logo would look much different than in Python -- the core concepts there 
aren't bound to the language, they are bound to the domain of 3D modeling.

A bunch of other parts are also relatively unassociated with the 
language, like the basic development process (editing code, running 
programs, etc).

As to the merits of Logo as a language and Python as a language, I'm not 
sure.  Logo is grammatically simpler.  Generally it is more insulated 
from the underlying implementation.  It isn't burdened with ideas like 
"good software engineering".  But it's not necessarily designed to lead 
to Python, as say Guido van Robot is.  But anyway, that's a different 
(though still interesting) discussion.  At least PyLogo lets you hedge 
your language bets a bit, if you are working on non-language concerns.

> What I would like to see in a turtle environment comes from 
> StarLogo ( http://education.mit.edu/starlogo/ ).  StarLogo has 
> multiple turtles, the turtles can inherit methods to make new 
> turtle classes, and the background also has methods for its cells, 
> implementing Conway's Life only takes several lines.  The Santa 
> Fe Institute uses StarLogo to teach non-programmers sophisticated 
> behavior and business simulations.
> I think that creating a StarPython, with Python syntax, would be 
> a more valuable effort that forcing Python to resemble Logo.

That's hard, or maybe easy.

With CPython, something like StarPython is hard. The kind of concurrency 
it does isn't practical with OS threads.  Maybe with Greenlets, though I 
must admit I don't understand them.

But with Stackless Python it might not be so hard, at least within 
certain constraints.  Cooperative microthreads are possible there, and 
that's kind of at the core of StarLogo's system.  Implementing the 
turtles from that point might not be so hard.

That said, I'm not sure how well Stackless interacts with C extensions, 
i.e., the graphics available in Python.  I guess that would be something 
to try out.

> Python would be easier to teach if it had clearer error messages. 
> Most Logo error messages lead the programmer to the solution for 
> the bug.  I would like to see an IDE that had Doctest and maybe 
> profile as a button in the menu bar.

Error messages are indeed hard.  It's easier when you have a clear idea 
of system and user code.  In a typical Logo implementation where the 
library is implemented in a language other than Logo, it's easy to tell 
what is inside and outside -- everything in Logo belongs to the 
programmer, everything not in Logo belongs to the system.  In Python it 
is not so easy, especially because errors often bubble up from deep in 
system code, and you actually have to inspect the system code to 
understand what it means in the context of your code.  As an example, 
shutil(None, 'tmp'):

Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "/usr/lib/python2.4/shutil.py", line 81, in copy
     copyfile(src, dst)
   File "/usr/lib/python2.4/shutil.py", line 41, in copyfile
     if _samefile(src, dst):
   File "/usr/lib/python2.4/shutil.py", line 31, in _samefile
     return os.path.samefile(src, dst)
   File "/usr/lib/python2.4/posixpath.py", line 218, in samefile
     s1 = os.stat(f1)
TypeError: coercing to Unicode: need string or buffer, NoneType found

Sigh.  It's not like hiding that traceback can make that error more 
understandable.  I really don't know how to resolve that.

Though it definitely is possible to trim exceptions down.  For instance, 
not to show code that is part of the standard library (or at least 
filter that out unless explicitly expanded).  That won't make the 
exception make sense (coerce to Unicode?! talk about obscure), but at 
least it will better highlight the problem code.

> Another advanced Logo is Elica ( http://www.elica.net/ ).  Elica 
> has 3D geometry, a nice object browser and abandons the Logo like 
> Ask and Tell object syntax for Python like dot notation.  Elica 
> architecture allows linking other programs.  I imagine a close 
> integration of Python and Elica ( Pelican ? ) but this is beyond 
> my programming abilities.

Elica is definitely interesting.  It seems pretty bound to Windows; or 
at least the graphical side, I would assume.  A Windows dependency seems 
like a problem for many of the target projects.

Ian Bicking  |  ianb at colorstudy.com  |  http://blog.ianbicking.org

More information about the Edu-sig mailing list