From pdx4d@teleport.com Wed Feb 2 23:32:26 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Wed, 02 Feb 2000 15:32:26 -0800 Subject: [Edu-sig] Hello from Kirby in Oregon Message-ID: <3.0.3.32.20000202153226.00757508@pop.teleport.com> I don't know how few of us there are here at this point -- I'd like to share this again later perhaps... http://www.inetarena.com/~pdx4d/ocn/oop7.html is my sort of "Python headquarters" page, where I link to most of what I've done around Python -- that page being itself the last chapter in a seven chapter "book" I started writing quite some time ago (before I'd run across Python). More recently (like yesterday), I sort of stumbled into the Scheme folks at Rice University. There was some initial smoldering at first, but I feel we reached a good place in the aftermath (like, I've had some useful follow-up correspondence with Shriram Krishnamurthi, and have downloaded DrScheme in preparation for study). You'll find some links documenting that experience as well. I do not consider myself a Python guru or anything. What excited me about it was how quickly I could learn it, and how easily it wrapped itself around my application. True, I'd already done this polyhedron job in Xbase and Java -- most things are easier on the 3rd try -- but I felt the language really worked with the grain of my thinking, made clear my approach, which was to use polyhedra as paradigm "objects" in both the geometric sense, but in the OOP sense as well. For more on my vision of how OOP might become more integral within K-12 (this vision is not really language-specific, though of course Python is one way to go), see: http://www.inetarena.com/~pdx4d/ocn/trends2000.html Reserving the right to post this again down the road, if it turns out I'm just talking to myself in a big empty room. :-D Kirby 4D Solutions Portland, Oregon From matthias@rice.edu Thu Feb 3 00:26:33 2000 From: matthias@rice.edu (Matthias Felleisen) Date: Wed, 2 Feb 2000 18:26:33 -0600 (CST) Subject: [Edu-sig] starting out ... Message-ID: <200002030026.SAA25527@africa.cs.rice.edu> Ladies and gentlemen -- this list is not off to a good start. Please be more optimistic! I am the leader of the TeachScheme! project. Our goal is similar to that of "Programming for Everyone" -- get programming into the hands of many more people. Our specific goal is to bring computing and programming into the core of the liberal arts curriculum of high schools and to enrich mathematics education. Think of it as Logo extended to the upper levels of school. From there we hope to jump start more. When we started five years ago, we faced similar questions. We spent a lot of time studying - what the average student knows - how C++ fails high school students of all ability levels (you must be able to articulate this point effectively!) - what teachers need to translate our knowledge into the classroom - how to attracte and (re)train teachers (there are highly committed individuals out there who earn far less than any of us but who dedicate themselves and are as capable as we are). Then we carefully built the program: the languages (yes, you will need more than one), the environment (no, a professional IDE or emacs aren't enough), the curriculum, the workshops (you need to use the teachers who are out there; it's all you got; don't yell at them), the follow-up support (web pages, mailing lists, etc), and a few more things that I am forgetting now. If you wish to inspect the details in person, see http://www.cs.rice.edu/CS/PLT/Teaching/ The Web tree contains only the positive results, not the negative ones, but it's a start if you wish to understand how we got to train our first 100 teachers. It takes time, patience, energy, and a lot of it. But the goal of wrestling the high school teaching away from the C++ establishment is worthwhile. Heads up -- Matthias Felleisen From samschul@pacbell.net Thu Feb 3 04:50:54 2000 From: samschul@pacbell.net (sam schulenburg) Date: Wed, 02 Feb 2000 20:50:54 -0800 Subject: [Edu-sig] Some thoughts on CP4E Message-ID: <001601bf6e02$41299f60$1cd3d6cf@samintel> This is a multi-part message in MIME format. ------=_NextPart_000_0013_01BF6DBF.32988260 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable After looking over the documentation on this sig, I have the following = thoughts: 1) Keep the first release of the development system simple enough that = it can be run from a minimum system. a) If CP4E is to be used in various countries, then their are many = older systems to support. 2) Start the first sessions from console mode, and after the = introduction lessons, migrate to Tkinter environment. 3) In programming documentation, keep from using slang terms such as = "foobar", as new programmers will get confused with terms that are not = generic English. Samuel Schulenburg ------=_NextPart_000_0013_01BF6DBF.32988260 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
After looking over the documentation on = this sig, I=20 have the following thoughts:
 
1) Keep the first release of the = development system=20 simple enough that it can be run from a minimum system.
     a) If CP4E is = to be used=20 in various countries, then their are many older systems to = support.
2) Start the first sessions from = console mode, and=20 after the introduction lessons, migrate to Tkinter = environment.
3) In programming documentation, keep = from using=20 slang terms such as "foobar", as new programmers will get confused with = terms=20 that are not generic English.
 
Samuel = Schulenburg
------=_NextPart_000_0013_01BF6DBF.32988260-- From ulf.engstrom@b2b-link.com Thu Feb 3 16:50:39 2000 From: ulf.engstrom@b2b-link.com (Ulf Engstrøm) Date: Thu, 03 Feb 2000 16:50:39 CET Subject: [Edu-sig] Getting it going Message-ID: <20000203155039.71475.qmail@hotmail.com> Seems like some people have gathered up now, but still the posting is close to nothing. With what intentions do you all get into this and what kind of discussions should we have? The post from Matthias Felleisen for example wasn't really focusing on Python but on CP4E using any existing languages or creating one. Are we focusing on general CP4E or Python? Do we wanna build new tools, make smaller implications of the core language of Python, or discuss how to teach, which books are good for teaching and what books we can write? (I'm interested either way:) I've been programming for a couple of years and stumbled onto Python 6 months ago, and now I do all my programming in Python. I'm trying to help some of my friends to start programming with Python instead of C/C++ which they are beeing taught in school now, but don't get at all. Their progress in Python is a lot better however. I think Python is a perfect language to start out with and I'd sure like to teach it to people of any age. (I'm not a teacher, but I might get to teach others in my job) What do y'll think? Regards Ulf Engstrøm (mail) ulf.engstrom@b2b-link.com (phone) +47 6676 5863 (fax) +47 6676 5861 (web) http://www.b2b-link.com ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com From tgabriel@bellsouth.net Thu Feb 3 17:04:26 2000 From: tgabriel@bellsouth.net (Xenophanes) Date: Thu, 03 Feb 2000 12:04:26 -0500 Subject: [Edu-sig] Getting it going References: <20000203155039.71475.qmail@hotmail.com> Message-ID: <3899B519.58CC8237@bellsouth.net> Hi, The point of your letter is exactly what this group should be about. As activists for the core idea of Python, I think we should be trying to change the direction schools are taking in programming. The next step from helping someone who "does not get" C++ is to visit the education officials with some well thought out planned arguments about how they can make programming more available to thier students. I realize that institutions have built in prejudices and when they install systems to teach things like C++ or Microsoft Word, or whatever, changing the system can be quite daunting. That is where a group like this can come in handy. From the top down the Python organization needs to be activist minded as much as possible. It needs to pursue any advantage it can to getting into the education community wherever it is possible to do so. If that means people who know Python going to a school on a volunteer basis and teaching after hours, ok. Try to do so. If that means pressuring school departments to modernize their approach, then try to do so. To prompt change in the status quo, we have to pursue every opportunity to illustrate our program. Programming should be ubiquitous. Python makes it easy to become so. Everyone should have the opportunity to at least know that self determination in the operation of information devices is possible. Everyone might not be interested in pursuing that end, but they all should at least have the opportunity. I think that is what this group is all about. My own goal is to eventually start a school where kids come in several times/hours a week and "play" with programming on computers using Python and its game playing education role. I am not prepared yet to implement this goal, but it is something I am working toward. Terry From smorris@nexen.com Thu Feb 3 17:15:01 2000 From: smorris@nexen.com (Steve Morris) Date: Thu, 03 Feb 2000 12:15:01 -0500 Subject: [Edu-sig] Interesting applications Message-ID: <200002031715.MAA29228@eric.cnri.reston.va.us> [I am resending this for Steve, who accidentally sent it to edu-sig-admin instead of to edu-sig. --GvR] Hi everyone. I suggest that to get started people post a mini biography mostly to tell where their interest comes from. My personal interest in this subject is a desire teaching programming to my small children and then perhaps assisting their schools in setting up programs. While I am a poor python programmer I am an experienced programmer in many other languages. I have made a living programming in an eclectic mix of languages (FORTRAN, Forth, MUMPS, C, TCL, Perl, VERILOG) and have diddled with perhaps 20 more. My primary experience is embedded control for real time systems. I got into this business as a hobby. I studied physics in school but got fascinated by microprocessors early. I owned a KIM-1 single board computer which I used to make music. At school I used computers for various projects concerning music composition (always my favorite,) visualization of 4th dimensional objects, investigating the relative motion of two pendulums (a harmonogram) and other things too numerous to mention. In general I have always seen computers as a tool to make things happen that can't be done any other way. Eventually I realized that people would pay me for this hobby and I have never turned back. I thought this way of using computers was the beginning of a new world order where we could use the computer to enhance our abilities and expand the range of our every day activities. It has been a great dissapointment to me to see it degrade into merely a word processor, email agent and web browser for most people. In other words computers have been reduced to standard applications and users only interact with the applications that other people write. The programmibility inherent in computers is only a minor part of how most people use computers. I see Guido's CP4E project as one possible way to come closer to my vision of computer programming as a normal tool to enhance the way we live. Given that context I have a few questions (actually a few lists of questions) that I would like to see discussed. 1) Who is the target for a CP4E type project? Currently it seems to be a "whoever is interested" list of people, i.e. build it and see who comes. This is very democratic approach but maybe gives us too large an adgenda. 2) What are they going to do with it. In other words what will the CP4E students be able to do with their knowledge after they leave the course. If this is only a training ground for future CS students then it is hardly as interesting. You've got to have an answer to "why bother?" To those of us in the business the question seems obvious. We think programability is neat all by itself, and what you can do with it is merely gravy. That won't sell with the masses. I think these questions are key. Teaching people how to bubble sort, regardless of how elegent the teaching method, is not going to ring any bells. On the other hand if you have a compelling enough application kids will pull the knowledge from you regardless of how bad the course. I have my own list of applications that grab my imagination and might reach others. CP4E has chosen a 3D graphics world which is not a bad place to start. However I think it is worthwhile to discuss what are the elements of a good teaching application. Here is one pass: o - It should the visible. You should be able to see the results of your software efforts. o - It should be interactive. o - It would be good if the result was something physical. Why do I list these characteristics? Because they are the characteristics of the objects in the world we live in. These are things everyone relates to. If you could program a baseball to change its lift characteristics in flight imagine the number of kids that would be fiddling with baseball software and throwing baseballs to see what happens. Here are my current favorite applications. o - LEGO robots. Check out the Mindstorms system. A python interface to these robots is quite feasable. There is a substantial world of programmers playing with these robots. There are over 5 sourceware programming environments for them. o - Music composition. Almost all computers have sound output these days. Kids love to make noise. To be really interesting a higher abstraction than simple tones is needed. It should be easy to make a list of chords that sound good or to play with riffs. Laying down a basic blues pattern should be almost trivial. Notation should be related to more intuitive concepts like the relationships of notes. o - Computer Games. I don't think I need to elaborate on the interest factor of this one. The trick would be to provide a game programming world where much of the nitty gritty detail is hidden. Here is another list, Namely what essenital features should be part of a learning environment for CP4E. This list is based on an understanding of how people learn and solve problems. o - It should be iterative. By this I mean encouraging experimentation. The process should be to do something, see the results, do something different based on what you learned, repeat. o - It should be scalable. By this I mean that beginners can do simple things which can grow with experience and application to complex things. o - It should be possible to encapsulate knowledge. This goes with scalability. Once the student has learned something they don't want to bother with the details next time. The will want to build on initial efforts to move their projects to a new level. As a rather superficial summary let me offer my opinion that if CP4E or similar projects are to be successful they have to provide an interesting world to work in and solve problems. The software should almost be incidental except as a the tool. The problem space will make or break such an effort. Providing a variety of problem spaces would be better. Making an environment where it is easy to create problem spaces would be best. Then the basic tool would grow as advanced users and developers added problem spaces. Knowledge gained in one space would be transferable to the others. From jmax@portal.ca Thu Feb 3 17:32:19 2000 From: jmax@portal.ca (John Maxwell) Date: Thu, 3 Feb 2000 09:32:19 -0800 (PST) Subject: [Edu-sig] Getting it going In-Reply-To: <200002031730.JAA03278@cr366361-a.crdva1.bc.wave.home.com> from "John Maxwell" at Feb 03, 2000 08:31:59 AM Message-ID: <200002031732.JAA03288@cr366361-a.crdva1.bc.wave.home.com> Ulf Engstrøm writes: > With what intentions do you all get into this and what kind of > discussions should we have? Well, by way of introduction... I'm a grad student in education at the U of B.C. and the research work of my professor and colleagues has to do with general technology-integration issues in curriculum. My own bent is to promote a more general 'literacy' by getting kids (grade 8-10?) programming *again*, rather than doing a lot of shallow websurfing or learning how to run MS Office so they can get a "job". I'm just starting to get this stuff defined, and I was playing around with the idea of doing a project using Tcl/Tk when I ran across CP4E -- which gives me a whole bunch of encouragement to go the Python route and to tie in to things others are doing under this umbrella. Just to head off the debate which I don't want to start, the Tcl/Tk idea was based on the ability to scaffold it into some *very* simple building blocks for younger kids. But looking deeper into Python (a language I'd worked with myself a couple of years back and had some difficulty with 3rd party modules) I'm feeling pretty confident about it being the right direction to go. - John Maxwell jmax@portal.ca ------------------------------------------------ Multimedia Ethnographic Research Lab (MERLin) University of British Columbia, Canada From slitt@troubleshooters.com Thu Feb 3 17:37:07 2000 From: slitt@troubleshooters.com (Steve Litt) Date: Thu, 03 Feb 2000 12:37:07 -0500 Subject: [Edu-sig] Getting it going Message-ID: <3.0.6.32.20000203123707.00ef3330@pop.pacificnet.net> Ulf, to answer for myself (Steve Litt), I'm here primarily to hear what everyone else has to say. Python is my favorite language, and I agree with all of you that it's the best teaching language, especially for raw= beginners. I might write a book on beginning programming this year, and if I do, Python will be the language. I've personally always been skeptical of school systems -- with all the hoops they make you jump through, those with really good offerings generally go elsewhere. But given Guido's leadership and the grant, that might not be the case this time. Thanks Steve Steve Litt Webmaster, Troubleshooters.Com http://www.troubleshooters.com slitt@troubleshooters.com At 04:50 PM 02/03/2000 CET, you wrote: >Seems like some people have gathered up now, but still the posting is close= =20 >to nothing. >With what intentions do you all get into this and what kind of discussions= =20 >should we have? The post from Matthias Felleisen for example wasn't really= =20 >focusing on Python but on CP4E using any existing languages or creating= one.=20 >Are we focusing on general CP4E or Python? Do we wanna build new tools,= make=20 >smaller implications of the core language of Python, or discuss how to=20 >teach, which books are good for teaching and what books we can write? (I'm= =20 >interested either way:) > >I've been programming for a couple of years and stumbled onto Python 6=20 >months ago, and now I do all my programming in Python. I'm trying to help= =20 >some of my friends to start programming with Python instead of C/C++ which= =20 >they are beeing taught in school now, but don't get at all. Their progress= =20 >in Python is a lot better however. I think Python is a perfect language to= =20 >start out with and I'd sure like to teach it to people of any age. (I'm not= =20 >a teacher, but I might get to teach others in my job) > >What do y'll think? >Regards >Ulf Engstr=F8m > >(mail) ulf.engstrom@b2b-link.com >(phone) +47 6676 5863 >(fax) +47 6676 5861 >(web) http://www.b2b-link.com > > >______________________________________________________ >Get Your Private, Free Email at http://www.hotmail.com > > >_______________________________________________ >Edu-sig mailing list >Edu-sig@python.org >http://www.python.org/mailman/listinfo/edu-sig > From pdx4d@teleport.com Thu Feb 3 17:36:24 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Thu, 03 Feb 2000 09:36:24 -0800 Subject: [Edu-sig] Getting it going In-Reply-To: <3899B519.58CC8237@bellsouth.net> References: <20000203155039.71475.qmail@hotmail.com> Message-ID: <3.0.3.32.20000203093624.0076700c@pop.teleport.com> Greetings folks -- I too am one of the early posters in the February chapter. In case you missed what I wrote, and are curious, here's the URL: http://www.python.org/pipermail/edu-sig/2000-February/000003.html Part of what I like about Python is how easy it is to get right into object oriented thinking, without getting bogged down in a lot of constructs. I like what they say about it being "working pseudo-code". I think the "object" style is highly useful because of how it encourages us to think in real world terms. We're already naturally conditioned to view our reality in terms of systems with insides and outsides (like bodies). Inside, you have the encapsulated "guts" (data and methods), the "under the hood workings". And only "trained mechanics" or "authorized personnel" (aka the programmer-owner of the objects) needs to tinker with the guts. The user (of the object) just needs an interface (dashboard, controls, cockpit, API). So I'm quite excited by the potential of a language like Python to communicate to younger kids: (a) what's actually meant by the term "object oriented" (rescue it from buzzword status) and (b) how this could be a useful paradigm for you too -- when it comes to diagramming a large challenge, even before you start thinking about coding I work to communicate my excitement about object-oriented thinking, and it's potential to impact early math learning, in the following paper (you'll see Python mentioned): http://www.inetarena.com/~pdx4d/ocn/trends2000.html You'll see in the above paper that my other passion is polyhedra. As a geometry teacher, I'm seeing great promise in linking early ideas about "object oriented programming" to polyhedra as "paradigm objects". Why? Because all polyhedra rotate, translate, scale, and consist of points, edges and faces. So we can put these generic methods and data structures in the superclass (Poly) and then subclass Poly to get the various shapes we want to further specify. And polys are great because they drag in so many topics already near and dear to any math teacher's heart: coordinate geometry, trig ops, matrix ops, vectors, rotational symmetry, lattices, sphere packing, volume -- all the things any math savvy kid should know about. Plus there's buy in from students, because spatial geometry is, after all, the segue into computer games, animations and so on (I support the CP4E concept of roping in Alice -- a package I've tinkered with only a little (my approach so far has been to use the Povray ray tracer (freeware) and VRML as target "back ends")). Applying the OOP model to Polys, using Python, is exactly what I've done (source code available) at: http://www.inetarena.com/~pdx4d/ocn/oop7.html Kirby Curriculum writer Oregon Curriculum Network http://www.inetarena.com/~pdx4d/ocn/ From ulf.engstrom@b2b-link.com Fri Feb 4 08:19:00 2000 From: ulf.engstrom@b2b-link.com (Ulf Engstrøm) Date: Fri, 04 Feb 2000 08:19:00 CET Subject: [Edu-sig] Getting it going (long) Message-ID: <20000204071900.74302.qmail@hotmail.com> > > Seems like some people have gathered up now, but still the posting is >close > to nothing. > >That's probably because everyone thinks "I'm not talking yet because I >don't want to repeat things". I'm going to say everyone joining after now >to read the archives. But reading the archives can't take more then 10 minutes as of now, and then they don't have to be afraid to repeat. I think it's mostly a matter of people not really knowing what to say before everything's gotten started. I'm one of those people who really doesn't like it when it too quiet and therefore talking with or without something to say ;) > > With what intentions do you all get into this and what kind of >discussions > should we have? > >Everythink concerning education: >* changes to Python like case insensitivity >* how to explain things in books, lik a variable is a box with a > sticker on it, a dictionairy is a... a class is a... >* CP4E >* ...any suggestions? I don't wanna get into a big discussion about this, but I really prefer a language to be case sensitive. I know some people have trouble seeing the difference between upper and lower case, so it might be a thing that would have to be changed in order for 'Everyone' to learn. I just hope it won't be necessary. > > The post from Matthias Felleisen for example wasn't really > focusing on >Python but on CP4E using any existing languages or creating one. > >I wouldn't like it if Python became case sensitive. But that's me. If >there'll be a big quarrel, we can split up the interpreter. But I hope >that won't be necesarry, because it would only give more difficulties. Splitting the interpreter is not such a good idea, and it'd mean a lot of problems importing modules, since some people are going to use var-names such as In instead of using in which is reserved, as long as the language is case sensitive. > > Are we focusing on general CP4E or Python? > >CP4E, with Python as language. OKi :) > > Do we wanna build new tools, > >No, we want to extent idle. One patch I want to write is that >"if a:" autoindents, "if a: # if it's true" does not. I can't find where >to change it, and that's one thing Guido pointed out: tools would make >that easier. Especially (how do you spell that word?) for kids. But I >don't think new tools would be needed for that: idle could be extended >and promoted. Then I think we come to another question as well; seems like we're focusing a lot about learning for children (which I like), but I think that if we're talking everyone, we should talk about older novices as well. And they don't need an extended IDLE, they don't need 3D-stuff. They just need someone to show them Python. I think even a lot of kids could learn a lot from the current IDLE, which I myself really like for fast interaction. > > make smaller implications of the core language of Python, > >Why would we? Something smaller is easier to learn, and eventhough the core language is not that big, there are still some things in there that's been on the python-list that 'can' be taken away. Take the well-talked-of lambda (Sorry for bringing it up again Guido), it's used a whole lot now and can't be taken away, but is that something someone wanna try to teach a novice? Also in the standard distribution there's a lot of things that a beginner to a language don't need. "OKi, so don't use them". But if they're there, you ARE gonna look them up, right? At least that's the curious me ;) > > or discuss how to teach, > >Definetely. Great :) Are there many school-teachers here? Are people planning to teach as an extra thing? Someone wanna teach teachers? I myself would like to go to a couple of schools and just show them Python, I think that'd make a big difference. Also planning on writing some programming things. > > which books are good for teaching > > and what books we can write? (I'm interested either way:) > >I'd love to see such a book. And because it's for kids, translating >is important. I want to help with the book. I think I'm the youngest >one here who learned programming as a kid, *almost* with python. I tried >to learn Python first, but didn't understand it. After a Logo like >language, learning what variables and lists are, I did understand it. I'm not very old either, and I've been more or less programming since your age (started a little earlier, got stuck without a computer for a couple of years and returned;), but I didn't know of Python 'til last year, after going through a 15 languages or so, not beeing an expert in either one. But after learning a lot of basics from languages I know how *I* like an introduction to be and how I learn. (One thing is that I'm an 'by example' learner) >I think that bridge should be destroyed. Not only for English speaking >kids, but also for Dutch, German, French, Japanese and Chinese speaking >kids. But translating is definately something for the future. Of course :) > > I've been programming for a couple of years and stumbled onto Python 6 > >months ago, and now I do all my programming in Python. I'm trying to help > >some of my friends to start programming with Python instead of C/C++ which > > they are beeing taught in school now, but don't get at all. Their >progress > in Python is a lot better however. I think Python is a perfect >language to > start out with and I'd sure like to teach it to people of any >age. (I'm not > a teacher, but I might get to teach others in my job) > >I already got *five* people to learn Python instead of C, C++, Perl, Pascal >and Java :) That's great going, and if now everyone in here get 5 new, and each of those 5 get 5 new and ... and... ;) We're gonna conquer the world ;) Regards Ulf Engstrøm (mail) ulf.engstrom@b2b-link.com (phone) +47 6676 5863 (fax) +47 6676 5861 (web) http://www.b2b-link.com ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com From gerrit@nl.linux.org Fri Feb 4 07:34:11 2000 From: gerrit@nl.linux.org (Gerrit Holl) Date: Fri, 4 Feb 2000 08:34:11 +0100 Subject: [Edu-sig] Getting it going In-Reply-To: <20000203155039.71475.qmail@hotmail.com>; from b2blink@hotmail.com on Thu, Feb 03, 2000 at 04:50:39PM +0100 References: <20000203155039.71475.qmail@hotmail.com> Message-ID: <20000204083411.A376@stopcontact.palga.uucp> Ulf Engstrøm wrote on 949593039: > Seems like some people have gathered up now, but still the posting is close > to nothing. That's probably because everyone thinks "I'm not talking yet because I don't want to repeat things". I'm going to say everyone joining after now to read the archives. > With what intentions do you all get into this and what kind of discussions > should we have? Everythink concerning education: * changes to Python like case insensitivity * how to explain things in books, lik a variable is a box with a sticker on it, a dictionairy is a... a class is a... * CP4E * ...any suggestions? > The post from Matthias Felleisen for example wasn't really > focusing on Python but on CP4E using any existing languages or creating one. I wouldn't like it if Python became case sensitive. But that's me. If there'll be a big quarrel, we can split up the interpreter. But I hope that won't be necesarry, because it would only give more difficulties. > Are we focusing on general CP4E or Python? CP4E, with Python as language. > Do we wanna build new tools, No, we want to extent idle. One patch I want to write is that "if a:" autoindents, "if a: # if it's true" does not. I can't find where to change it, and that's one thing Guido pointed out: tools would make that easier. Especially (how do you spell that word?) for kids. But I don't think new tools would be needed for that: idle could be extended and promoted. > make smaller implications of the core language of Python, Why would we? > or discuss how to teach, Definetely. > which books are good for teaching > and what books we can write? (I'm interested either way:) I'd love to see such a book. And because it's for kids, translating is important. I want to help with the book. I think I'm the youngest one here who learned programming as a kid, *almost* with python. I tried to learn Python first, but didn't understand it. After a Logo like language, learning what variables and lists are, I did understand it. I think that bridge should be destroyed. Not only for English speaking kids, but also for Dutch, German, French, Japanese and Chinese speaking kids. But translating is definately something for the future. > I've been programming for a couple of years and stumbled onto Python 6 > months ago, and now I do all my programming in Python. I'm trying to help > some of my friends to start programming with Python instead of C/C++ which > they are beeing taught in school now, but don't get at all. Their progress > in Python is a lot better however. I think Python is a perfect language to > start out with and I'd sure like to teach it to people of any age. (I'm not > a teacher, but I might get to teach others in my job) I already got *five* people to learn Python instead of C, C++, Perl, Pascal and Java :) -- Please correct any bad Swahili you encounter in my email message! -----BEGIN GEEK CODE BLOCK----- http://www.geekcode.com Version: 3.12 GCS dpu s-:-- a14 C++++>$ UL++ P--- L+++ E--- W++ N o? K? w--- !O !M !V PS+ PE? Y? PGP-- t- 5? X? R- tv- b+(++) DI D+ G++ !e !r !y -----END GEEK CODE BLOCK----- From hei@adtranzsig.de Fri Feb 4 08:33:59 2000 From: hei@adtranzsig.de (Dirk-Ulrich Heise) Date: Fri, 4 Feb 2000 09:33:59 +0100 Subject: [Edu-sig] Getting it going Message-ID: <01bf6eea$95741a80$13ec1fc2@pc696.adtranzsig.de> Hi! Like Steve Morris, i have a kid and that's why i'm here. I will create programs he can abuse anyway over the time, so let's see what the others do. So, i'm interested in "teaching programming to absolute beginners." As kids learn fast as long as they have fun, a main objective is to define goals that are fun. Every now and then when i tried to explain programming to an adult programming illiterate, they would roll their eyes and say something like: "But *why* do you do it?" or "Why should i want to write a program?" So, i go conform to the "sound&vision" ideas like "control a 3D world" or "make noise". 2D animations could also be interesting, the maths behind it is much easier to grasp. So much for now. Dirk Heise From pdx4d@teleport.com Fri Feb 4 09:15:13 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 04 Feb 2000 01:15:13 -0800 Subject: [Edu-sig] Sample Lesson Plan In-Reply-To: <01bf6eea$95741a80$13ec1fc2@pc696.adtranzsig.de> Message-ID: <3.0.3.32.20000204011513.0075d40c@pop.teleport.com> Re recent posts, my operating assumption is there's no time to change the language. Case sensitivity and the interface are just the way they are. That doesn't mean others need to operate on this assumption, plus I realize Python is evolving. But I want to brainstorm about how to use Python in K-12 right now, without requiring that any "wish list" be fulfilled. I take it "as is". Here's an example of a lesson plan which uses Python in context, to generate triangular, square, tetrahedral, and half-octahedral numbers. In this example, there's no graphical output. However, a teacher of this lesson might well have graphics to share, plus hands-on exercises with actual ping pong ball or other spheres (e.g. marbles). Kirby ================================================ Triangular numbers represent the sum of consecutive integers, as per this picture: * 1 * * 2 * * * + 3 --- 6 The 3rd triangular number is the sum of the numbers 1,2 and 3. So if we think of "row number", we could write: tri(1) = 1 # = 1 tri(2) = 3 # = 1 + 2 tri(3) = 6 # = 1 + 2 + 3 ... The notion is similar to 'factorial' (n!), except instead of doing 1 x 2 x 3..., we're doing 1 + 2 + 3... Just as factorial may be written recursively (as in "a function that calls itself"), so may we write the 'tri' function: >>> def tri(n): if n<=1: return n else: return n + tri(n-1) >>> tri(1) 1 >>> tri(2) 3 >>> tri(3) 6 >>> tri(4) 10 >>> tri(10) 55 Notice that a parallelogram of stars may be composed of two consecutive triangular numbers, e.g. * * * * * * * * * * * * * * * * * * * * = * * * + * * * * * * * * * = tri(4) + tri(3) And a parallelogram of stars easily transforms to a square: * * * * * * * * * * * * * * * * * * * * = * * * * * * * * * * * * sqr(4) In other words, a "square number" is the sum of two consecutive triangular numbers. Let's see this in code: >>> def sqr(n): return tri(n) + tri(n-1) >>> sqr(1) 1 >>> sqr(2) 4 >>> sqr(3) 9 >>> sqr(4) 16 >>> sqr(20) 400 Imagine triangles stacked on top of each other, with 1 at the apex, 3 under it, 6 under that and so on. This is a tetrahedron with an expanding triangular base. You'd get the number of spheres in a tetrahedral packing (imagine stacked ping pong balls) by summing consecutive tri numbers. Here's one way to write the tetra() function: >>> def tetra(n): sum = 0 for i in range(n+1)[1:]: sum = sum + tri(i) return sum >>> tetra(1) 1 >>> tetra(2) 4 >>> tetra(3) 10 >>> tetra(4) 20 >>> tetra(5) 35 >>> tetra(100) 171700 Notice that we want to force a loop that goes from 1 to n. The range() function goes from 0 to n-1, so we have to bump up the highest outcome by 1, and start the series with term 1 (instead of term 0). Let's see this just using range(n): >>> range(5) [0, 1, 2, 3, 4] >>> range(5+1)[1:] [1, 2, 3, 4, 5] >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(10+1)[1:] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] So you see that range(n+1)[1:] gives us the numbers 1 thru n. That's what we're doing in the tetrahedral numbers function. Instead of stacking bigger and bigger triangles, we could stack bigger and bigger squares. 1 ball would sit on top of 4, on top of 9, on top of 25 and so on. Here's the function, which we'll call 'hoct' for "half octahedron" (the shape of a square-based pyramid): >>> def hoct(n): sum = 0 for i in range(n+1)[1:]: sum = sum + sqr(i) return sum >>> hoct(1) 1 >>> hoct(2) 5 >>> hoct(3) 14 >>> hoct(4) 30 >>> hoct(100) 338350 [ to be continued ] Background reading: http://www.teleport.com/~pdx4d/sphpack.html From glossner@pobox.com Fri Feb 4 11:28:12 2000 From: glossner@pobox.com (John Glossner) Date: Fri, 4 Feb 2000 06:28:12 -0500 Subject: [Edu-sig] Getting it going References: <20000203155039.71475.qmail@hotmail.com> <3.0.3.32.20000203093624.0076700c@pop.teleport.com> Message-ID: <00a801bf6f02$ebcbe850$07000100@elite> Ok... here's my background and interest in this group. I have 4 kids the oldest of which is 10. I live North of New York City. I work for IBM Research. I know more languages than I would like to (C/C++/VHDL/Verilog/Java/Python/Perl /ML/FORTRAN/APL/ and on and on). I blush to say that I can even program in Visual BASIC. Now, my struggle has been what language do I teach my 8 and 10 year olds. Being trained in Computer Science, my first thought was teach my oldest functional programming (ML) before he is corrupted :-) Then, to my horror, he received a math assignment which required BASIC. ugh... This began my journey of trying to find resources for kids to learn programming. Yes, I know of Logo but my kids are all very computer literate and all they really want to do is program Pokemon stuff rather than turtles :-) Actually to be fair, Logo is probably the best thing to teach kids but lets continue on from here. Well, I was amazingly disapointed. As near as I can tell there are no resources to teach kids serious programming. Since my personal favorite language is Python, I decided this was the route to go. Well there are still no materials and my son doesn't really know what virtual methods and dispatch tables are (or by the way binary arithmetic). So, try to tell me how you teach a 4th grader computer architecture (my specialty) and programming when the first question he asks is what is hex! Oh boy... So I figured the best way to learn is just start to copy some programs and see how they run. Thus the Python annotated archives comes to the rescue. He has worked through about 3 programs so far. It has been better than I expected and he has gotten to learn some important math. Oh, by the way, you may ask why he persists in this. Well that's simple - no gameboy time unless he does something educational :-) So this is still totally unsatisfying because now he still does not know what he is typing. However, he can at least use the Python interpreter, emacs, and Linux. We will struggle through the programming part together and eventually he will be able to fly on his own but the learning curve is tremendously steep. However, just wait until he graduates to Zope (which after 3 months I'm still restling with!!!). Now having my eldest jumpstarted I set off to figure out what to do for an 8 year old. This was a total bust and I rationalized Logo was the only choice. Then I found alice. I am just now evaluating it but I am encouraged by what I see. Maybe 3D Pokemon games are just around the corner :-) What I would like to see from this sig is a set of resources for Python which are age appropriate. Perhaps the following categories: 1) Math illiterate (any age but probably under 5) 2) Early Education (5-7 year old) 3) Elementary Education (8-10 year old) 4) Middle school (11-13 year old) 5) Senior high (14-16 year old) 6) Advanced Senior high (16-18 year old) Since I currently have 2/6/8/10 year olds I cover a lot of the categories. I would be interested in helping develop free and open curriculum for these age groups. Thus, I ended up here on this sig. John Glossner glossner@pobox.com http://einstein.et.tudelft.nl/~glossner (my homepage is slightly out of date) From guido@python.org Fri Feb 4 14:13:29 2000 From: guido@python.org (Guido van Rossum) Date: Fri, 04 Feb 2000 09:13:29 -0500 Subject: [Edu-sig] Sample Lesson Plan In-Reply-To: Your message of "Fri, 04 Feb 2000 01:15:13 PST." <3.0.3.32.20000204011513.0075d40c@pop.teleport.com> References: <3.0.3.32.20000204011513.0075d40c@pop.teleport.com> Message-ID: <200002041413.JAA09270@eric.cnri.reston.va.us> Nice lesson! I got lost with tetra() at first because it lacked a picture :-) Also, I've never seen for i in range(n+1)[1:]: to write a loop from 1 to n; it seems better to write for i in range(1, n+1): You could also write for i in range(n): sum = sum + tri(i+1) Finally, is it a pedagogical device to start with recursion and then write a for loop? I suppose tetra(n) is easily defined recursively: def tetra(n): if n <= 1: return n else: return tetra(n-1) + tri(n) --Guido van Rossum (home page: http://www.python.org/~guido/) From ebyers@mountain.org Fri Feb 4 14:16:35 2000 From: ebyers@mountain.org (Elizabeth Byers) Date: Fri, 04 Feb 2000 09:16:35 -0500 Subject: [Edu-sig] Learning/Teaching Python In-Reply-To: <20000204091531.6B39E1CE0A@dinsdale.python.org> Message-ID: <4.2.2.20000204090018.01db8590@mail.mtnforum.org> I'm a conservation activist and did a little Fortran programming in graduate school 20 years ago. My children are now interested in computers, and I would like to volunteer in their rural Appalachian school to help get something going in computer programming. I have done a fair amount of asking around, and it seems as though Python might be an approachable, useful language for my purposes, and for the middle school audience I'd be targeting. I need to learn it myself first, and I'm going to start with the tutorials on the Python web site. I hope I can manage it! I'm enjoying the discussion so far, and will be very interested to learn about the experience others have had in working with the public school system. Any good arguments or convincing facts associating programming skills with success in school and life would be most welcome. I know it will be an uphill battle to convince teachers that it is worth the effort to try this, instead of just teaching word processing and MS Office. I look forward to learning from all of you! With best regards, ______________________________________________________ Elizabeth Byers The Mountain Institute 107 Westridge Drive Elkins, WV 26241 USA Email: ebyers@mountain.org Web: http://www.mtnforum.org (Mountain Forum) http://www.mountain.org (The Mountain Institute) ______________________________________________________ From gerrit@nl.linux.org Fri Feb 4 13:43:33 2000 From: gerrit@nl.linux.org (Gerrit Holl) Date: Fri, 4 Feb 2000 14:43:33 +0100 Subject: [Edu-sig] Getting it going In-Reply-To: <01bf6eea$95741a80$13ec1fc2@pc696.adtranzsig.de>; from hei@adtranzsig.de on Fri, Feb 04, 2000 at 09:33:59AM +0100 References: <01bf6eea$95741a80$13ec1fc2@pc696.adtranzsig.de> Message-ID: <20000204144333.A2342@stopcontact.palga.uucp> Dirk-Ulrich Heise wrote on 949653239: > Hi! > Like Steve Morris, i have a kid and that's why i'm here. I am a kid and that's why I'm here :) > So, i go conform to the "sound&vision" ideas like "control > a 3D world" or "make noise". 2D animations could also be > interesting, the maths behind it is much easier > to grasp. So much for now. In my class, everyone is very excited about 3DRAD (I think). I think it's very important to develop a library with logo-like turtles, but 3D instead of 2D. You create an object, and you can say obj.up(10), obj.down, .left, .right, .forward or .backward, and .scream() :). You can change the image file used for it with .image. etc. Something like that is important. VHLL-rules-for-kids-like-me-ly y'rs - gerrit From gerrit@nl.linux.org Fri Feb 4 13:57:51 2000 From: gerrit@nl.linux.org (Gerrit Holl) Date: Fri, 4 Feb 2000 14:57:51 +0100 Subject: [Edu-sig] Age groups In-Reply-To: <00a801bf6f02$ebcbe850$07000100@elite>; from glossner@pobox.com on Fri, Feb 04, 2000 at 06:28:12AM -0500 References: <20000203155039.71475.qmail@hotmail.com> <3.0.3.32.20000203093624.0076700c@pop.teleport.com> <00a801bf6f02$ebcbe850$07000100@elite> Message-ID: <20000204145751.B2342@stopcontact.palga.uucp> John Glossner wrote on 949642092: > 1) Math illiterate (any age but probably under 5) You should not try to teach them programming. > 2) Early Education (5-7 year old) I think it's still to early to teach kids who can't read programming. > 3) Elementary Education (8-10 year old) You can start here. The concept of variables, lists and functions can be explained. Dictionairies too, I think. Classes will probably be only for the very smart ones. > 4) Middle school (11-13 year old) I learned Python at this age. I found it difficult and reread things a lot. Finally, I understood it. You can teach those kids much about classes, but multiple inheritance is more difficult. I don't think they'll understand map, reduce, filter, lambda and multiple inheritance. I don't understand reduce either. Why and when to use it? > 5) Senior high (14-16 year old) There's already enough documentation for this ones, but to encourage them it's needed to use alice like things. Translations are also useful. > 6) Advanced Senior high (16-18 year old) It's not needed to give them extra documentation. They know English and can make their way perfectly. > Since I currently have 2/6/8/10 year olds I cover a lot > of the categories. I would be interested in helping > develop free and open curriculum for these age groups. We shouldn't try to teach kids who can't read yet to learn programming. Turtle graphics are also harder than you might think for these ones: there must be a window for "turtle.right(5)", because they don't know about degrees yet. regards, Gerrit. -- Please correct any bad Swahili you encounter in my email message! -----BEGIN GEEK CODE BLOCK----- http://www.geekcode.com Version: 3.12 GCS dpu s-:-- a14 C++++>$ UL++ P--- L+++ E--- W++ N o? K? w--- !O !M !V PS+ PE? Y? PGP-- t- 5? X? R- tv- b+(++) DI D+ G++ !e !r !y -----END GEEK CODE BLOCK----- From hei@adtranzsig.de Fri Feb 4 14:39:02 2000 From: hei@adtranzsig.de (Dirk-Ulrich Heise) Date: Fri, 4 Feb 2000 15:39:02 +0100 Subject: [Edu-sig] Learning/Teaching Python Message-ID: <01bf6f1d$94600a40$13ec1fc2@pc696.adtranzsig.de> -----Ursprüngliche Nachricht----- Von: Elizabeth Byers An: edu-sig@python.org Datum: Freitag, 4. Februar 2000 16:11 Betreff: [Edu-sig] Learning/Teaching Python [...] >I know it will be an uphill battle to >convince teachers that it is worth the effort to try this, >instead of just teaching word processing and MS Office. Being german, i know nothing about the american schools; but is that really true? They teach something like Winword in school and omit programming? Okay, maybe this sort of stuff happens today in Germany as well, it's a while ago that i left school. I remember sitting in front of CBM 4032 (yeah okay, it's AGES since i left school...) machines and learning to program them in BASIC. The math teachers ran the courses voluntarily and they always wanted to convince us that Pascal is better. (This wasn't true for several reasons: Pascal had a slow compiler, BASIC was interpreted immediately; Pascal had a impractical type system (no casts), BASIC had nearly no types (no types == no errors). But the worst thing was: Pascal didn't allow to poke bytes into memory, so we needed BASIC to get our machine programs running, for really fast graphics. That was when the math teachers realized they had lost control. Anyway. ) Hmm. You could show them how a Python takes control over Word using the COM interface. This would show them that Python is mightier than Word. (The snake is mightier than the feather.) Dirk From dscherer@cmu.edu Fri Feb 4 14:44:29 2000 From: dscherer@cmu.edu (David Scherer) Date: Fri, 4 Feb 2000 09:44:29 -0500 Subject: [Edu-sig] Getting it going In-Reply-To: <20000204083411.A376@stopcontact.palga.uucp> Message-ID: I haven't introduced myself yet, and I'm not addressing a very central issue, but... > * how to explain things in books, lik a variable is a box with a > sticker on it, a dictionairy is a... a class is a... A variable in Python isn't a box with a sticker on it, it's just a sticker. You can stick multiple stickers on the same thing, but there is still only one of the thing. This matters when the object is mutable: a = [3] # a list [3] with the sticker "a" on it b = a # now the list has stickers "a", "b" on it a[0] = 4 # the list is mutated to [4] # and still has stickers "a", "b" print a # [4] print b # [4] This is extraordinarily hard to explain with variables as boxes. How can I put one object in two boxes, neither of which contains the other? Of course, you can explain Python's semantics with boxes with stickers containing pointers, but that's a rather needlessly complicated approach! Dave Scherer From guido@python.org Fri Feb 4 14:52:47 2000 From: guido@python.org (Guido van Rossum) Date: Fri, 04 Feb 2000 09:52:47 -0500 Subject: [Edu-sig] On case sensitivity In-Reply-To: Your message of "Fri, 04 Feb 2000 08:19:00 +0700." <20000204071900.74302.qmail@hotmail.com> References: <20000204071900.74302.qmail@hotmail.com> Message-ID: <200002041452.JAA09408@eric.cnri.reston.va.us> For those here who weren't at the recent Python Conference, it may be hard to understand the case sensitivity issue. I'll try to explain some of the background. One of the best keynotes was given by Randy Pausch, who demonstrated Alice, a 3D virtual reality builder that uses Python as the control language (www.alice.org). Randy is a very motivating speaker, and his stories and demos of small teams of 19-year old non-cs students creating interactive virtual worlds using Alice (and hence programming in Python) had the audience in awe. He reminded us that we (the audience) were geeks -- who make up only one percent of the population -- and that we need to think about how we talk to non-geeks. Randy explained the importance of user testing, and mentioned that only two Python language issues were a problem: (1) case sensitivity and (2) integer division. I believe he said that case sensitivity was by far the worst offender, affecting as many as 75% of the students. He also said that *that's it*. No other Python features (used in Alice) caused problem for his audience. The rest of the user testing dealt with things like how to express a quarter turn (the answer is 1/4, not 90, as we geeks think :-), and what to name rotations along the x/y/z axes (the answer is, surprising, turn left/right, turn up/down, and *roll* left/right). Alice now uses a modified Python interpreter which is case insensitive and where 1/4 returns 0.25. Randy's scientific evidence swayed many who were there into accepting that a language for "everybody" has to be case insensitive. For those who still don't like it, trust me that the programming environment will enforce case *consistency* -- if you name a function or variable "Spam", later references to it as "spam" or "SPAM" will quietly be changed to use "Spam". There are also some ideas on how to start warning about dependencies on case sensitivity in Python 1.6. (We'll probably have to change the standard library in some places to make it conform!) --Guido van Rossum (home page: http://www.python.org/~guido/) From guido@python.org Fri Feb 4 14:57:38 2000 From: guido@python.org (Guido van Rossum) Date: Fri, 04 Feb 2000 09:57:38 -0500 Subject: [Edu-sig] Getting it going In-Reply-To: Your message of "Fri, 04 Feb 2000 08:34:11 +0100." <20000204083411.A376@stopcontact.palga.uucp> References: <20000203155039.71475.qmail@hotmail.com> <20000204083411.A376@stopcontact.palga.uucp> Message-ID: <200002041457.JAA09421@eric.cnri.reston.va.us> > No, we want to extent idle. One patch I want to write is that > "if a:" autoindents, "if a: # if it's true" does not. I can't find where > to change it, and that's one thing Guido pointed out: tools would make > that easier. Especially (how do you spell that word?) for kids. But I > don't think new tools would be needed for that: idle could be extended > and promoted. Note that that particular change is already in the CVS tree for IDLE (python.org/download/cvs.html). I've also found at the conference that there are already at least half a dozen serious IDEs (interactive development environments) for Python in existence or under development. I still want to continue to use IDLE to experiment with some advanced features (such as syntax checking while you type), but I think it's important that the classroom materials allow the choice of different IDEs -- if only because not all IDEs work on all platforms, and we do need to support Windows, Mac and Linux! --Guido van Rossum (home page: http://www.python.org/~guido/) From hei@adtranzsig.de Fri Feb 4 15:00:34 2000 From: hei@adtranzsig.de (Dirk-Ulrich Heise) Date: Fri, 4 Feb 2000 16:00:34 +0100 Subject: [Edu-sig] Age groups Message-ID: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de> -----Ursprüngliche Nachricht----- Von: Gerrit Holl [...] >> 3) Elementary Education (8-10 year old) > >You can start here. The concept of variables, lists and functions can >be explained. Dictionairies too, I think. Classes will probably be only >for the very smart ones. Don't you think classes are as easy as variables? Start right with objects, before they even know there were non-OO-approaches in the past. (now, i read several posting from functional programming guys stating Haskell etc.would provide all kinds of OO, so i think they won't backstab me, although i have no notion of what OO means in a functional programming context. I also read that Python is a version of Scheme with a funny syntax. So i think they don't really hate OO.) Dirk From gward@cnri.reston.va.us Fri Feb 4 15:14:11 2000 From: gward@cnri.reston.va.us (Greg Ward) Date: Fri, 4 Feb 2000 10:14:11 -0500 Subject: [Edu-sig] Age groups In-Reply-To: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de>; from hei@adtranzsig.de on Fri, Feb 04, 2000 at 04:00:34PM +0100 References: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de> Message-ID: <20000204101411.B19977@cnri.reston.va.us> On 04 February 2000, Dirk-Ulrich Heise said: > Don't you think classes are as easy as variables? > Start right with objects, before they even know there were > non-OO-approaches in the past. Interesting point: I've been trudging through Yourdon & Coad's *Object-Oriented Analysis* of late, and they had an interesting point on teaching OO: their experience is that old-style programmers brought up in a COBOL world have a really hard time "getting" OO, but non-programmers -- in their context, it was marketing and sales staff, but it could be anyone -- "get it" immediately. Another point they drive home again and again is that "generalization/specialization" and "whole/part structures" are not just pie-in-the-sky abstractions dreamed up by CS professors, but two of the fundamental techniques used in human thought. Duh! Of *course* they are, but I never really saw it that way before, since I grew up in a pre-OO world (Pascal and BASIC) and had to learn it through the same artificial examples (biological taxonomy and a graphics library) as everyone else. I think this argues that OO concepts should be built in from the start, if possible. Finally, one more data point: I have known more than one C++ or Perl programmer who thought that *using* objects was fairly natural, but that *defining* them (err, defining classes) was reserved for gurus, something that "mere mortals" don't mess with. Given C++ and Perl syntax, I can see why. However, might it be easier to introduce neophytes to OO first by giving them some canned classes to play with, and *then* show them how to define their own? The icing on the cake would be to show them how they can use inheritance to add functionality to those canned classes they started out with: if that doesn't motivate OO, I don't know what would. Greg From jelkner@yorktown.arlington.k12.va.us Fri Feb 4 13:01:12 2000 From: jelkner@yorktown.arlington.k12.va.us (Jeffrey Elkner) Date: Fri, 4 Feb 2000 08:01:12 -0500 Subject: [Edu-sig] Getting it going In-Reply-To: <01bf6eea$95741a80$13ec1fc2@pc696.adtranzsig.de> References: <01bf6eea$95741a80$13ec1fc2@pc696.adtranzsig.de> Message-ID: <00020408190600.01180@tpaine.yorktown.arlington.k12.va.us> Hi All! Some news and some thoughts: 1. The link to "How to Think Like a Computer Scientist" is temorarily broken while we upgrade our server to RedHat 6.1 in preparation for installing Zope. It will be back up by the end of today. 2. The teaching materials that Ricard Crook and Gareth McCaughan sent to me are excellent! We will have those up on our web site by the end of next week. 3. Taking an idea from the first edu-sig meeting at the conference, four of our students are working on a Pokemon card game in Python. They will be putting it on sourceforge when it really gets underway. I'm hoping both to give them a fun project to work on and to have something to use to begin to interest my 8 year old son in Python. jeff elkner From guido@python.org Fri Feb 4 15:50:03 2000 From: guido@python.org (Guido van Rossum) Date: Fri, 04 Feb 2000 10:50:03 -0500 Subject: [Edu-sig] Getting it going In-Reply-To: Your message of "Fri, 04 Feb 2000 08:01:12 EST." <00020408190600.01180@tpaine.yorktown.arlington.k12.va.us> References: <01bf6eea$95741a80$13ec1fc2@pc696.adtranzsig.de> <00020408190600.01180@tpaine.yorktown.arlington.k12.va.us> Message-ID: <200002041550.KAA13768@eric.cnri.reston.va.us> > 2. The teaching materials that Ricard Crook and Gareth McCaughan > sent to me are excellent! We will have those up on our web site by > the end of next week. Can you send me the URL (when it's done) so I can point to them from the edu-sig home page? > 3. Taking an idea from the first edu-sig meeting at the conference, > four of our students are working on a Pokemon card game in Python. > They will be putting it on sourceforge when it really gets underway. > I'm hoping both to give them a fun project to work on and to have > something to use to begin to interest my 8 year old son in Python. Didn't someone at the meeting coin the term Pokethon? Or was it Pythemon? :-) --Guido van Rossum (home page: http://www.python.org/~guido/) From slitt@troubleshooters.com Fri Feb 4 15:54:28 2000 From: slitt@troubleshooters.com (Steve Litt) Date: Fri, 04 Feb 2000 10:54:28 -0500 Subject: [Edu-sig] Programming sound In-Reply-To: <200002041452.JAA09408@eric.cnri.reston.va.us> References: <20000204071900.74302.qmail@hotmail.com> Message-ID: <3.0.6.32.20000204105428.0120b2f0@pop.pacificnet.net> I have 6 year old triplets, and could test this concept on them. I'm thinking they'd just love programming different sounds, like arcade sounds, etc. Maybe graduating to monochromatic songs. Does Python have a command to output a specific frequency to the CPU case's built in speaker? Thanks STeve Litt From fig@oreilly.com Fri Feb 4 15:54:25 2000 From: fig@oreilly.com (Stephen R. Figgins) Date: Fri, 04 Feb 2000 07:54:25 -0800 Subject: [Edu-sig] Getting it going In-Reply-To: Your message of "Thu, 03 Feb 2000 16:50:39 +0700." <20000203155039.71475.qmail@hotmail.com> References: <20000203155039.71475.qmail@hotmail.com> Message-ID: <200002041554.HAA20559@rock.west.ora.com> The managing editor of the O'Reilly Network introduced me to CP4E. A discussion of it broke out on our editorial mailing list. At the time I was just beginning my studies with the Wilderness Awareness School (http://www.natureoutlet.com). As a parent intending to homeschool my children, I was also doing a lot of reading on education and how children learn. My reading on homeschooling and education issues led me to the conclusion that the problems are not so much in what we teach, or the tools/materials we use to teach, but in how we teach. How to teach has also been the focus of the Wilderness Awareness School, but their focus is on how to teach tracking for everybody. As I read CP4E, I was struck by how similar the task was to what WAS was doing. I wrote the editors list about it, and alse wrote Guido. I couldn't stop there. I convinced the O'Reilly Network to give me a column to write about similarities between Hackers and Trackers. (http://www.oreillynet.com). I am currently taking a correspondence course with WAS. I don't know how many of you may have tried to learn plant identification, forest ecology, or how to read little markings on the ground, but these are not simple things. They are tough skills to learn. Lots of people buy field guides, learn a few things, but never really master the skills. They often give up in frustration. I have been dabbling with it for years, I got my first bird field guide when I was about 11. But I never made any headway until I started this course. The WAS approach comes from studying the teaching techniques of the most successful tracking cultures. Story telling, awareness games, teaching with questions and misdirection, and a sense of mentoring has been brought together in their written materials used for the correspondence course providing inspiration and guidance in how to tackle this monstrous subject. I am convinced that these same techniques can be applied to teaching other arts, both to create masters and raise general literacy. And I am happy to find somewhere that the passion I feel for nature, the great pleasure I get from computing, and the joy I feel in teaching all come together. I hope to provide insight where I can. I haven't really mastered any of these things, but having my hands in all these things, I think I can help weave them together a bit. Stephen R. Figgins fig@oreilly.com From dscherer@cmu.edu Fri Feb 4 16:00:46 2000 From: dscherer@cmu.edu (David Scherer) Date: Fri, 4 Feb 2000 11:00:46 -0500 Subject: [Edu-sig] On case sensitivity In-Reply-To: <200002041452.JAA09408@eric.cnri.reston.va.us> Message-ID: I hate to be the devil's advocate here, because I *do* believe that Python is an excellent language for education or I wouldn't be in this SIG. Nevertheless, you have made some points here that I think need to be corrected. > One of the best keynotes was given by Randy Pausch, who demonstrated > Alice, a 3D virtual reality builder that uses Python as the control > language (www.alice.org). Randy is a very motivating speaker, and his > stories and demos of small teams of 19-year old non-cs students > creating interactive virtual worlds using Alice (and hence programming > in Python) had the audience in awe. He reminded us that we (the > audience) were geeks -- who make up only one percent of the population > -- and that we need to think about how we talk to non-geeks. Alice has been tested on non-cs students at the University of Virginia using a two-person talk-aloud protocol, but this testing only covered a short tutorial. I wasn't at the conference, but the demos that Randy usually shows off were created by teams of students in his Building Virtual Worlds class here at CMU, each of which are composed of programmers, artists, and writers. Programmers are required to show some competence with Python to get into the course, and are generally CS majors from the rather competitive CS program here at Carnegie Mellon. The computer labs on campus are often filled with bleary-eyed BVR students trying to write their own collision detection algorithms for Alice at 4:30 in the morning. The stuff that comes out of BVR is proof that Randy is good at motivating people, not that Alice is easy to use. > Randy explained the importance of user testing, and mentioned that > only two Python language issues were a problem: (1) case sensitivity > and (2) integer division. I believe he said that case sensitivity was > by far the worst offender, affecting as many as 75% of the students. > He also said that *that's it*. No other Python features (used in > Alice) caused problem for his audience. The rest of the user testing > dealt with things like how to express a quarter turn (the answer is > 1/4, not 90, as we geeks think :-), and what to name rotations along > the x/y/z axes (the answer is, surprising, turn left/right, turn > up/down, and *roll* left/right). I strongly suggest reading http://www.alice.org/advancedtutorial/ConwayDissertation.PDF which I believe describes the result you are referring to, and perhaps also walking through the latest alice tutorial to get an idea of how far it goes. I believe that the tutorial used in the testing involved interactive use of the interpreter to move objects around in the world, as well as some short scripting. Because of the way Alice works, very few of the constructs in Python were involved in the testing at all. At a guess, there were no loops, no conditional statements, no variable assignments, few arithmetic operations, no lists, no dictionaries, no class definitions, no function definitions, etc, etc. Some of Python's syntax was surely exercised, in particular function call syntax (keyword arguments are used extensively and to good purpose by the Alice API). However, I think this is an extremely weak "scientific" assessment of Python's ease of use. Further, the problem with case sensitivity is described this way by Conway: | To make matters worse, the specific stylistic case rules for | the Alice API were very confusing to novices. We employed a | rather standard set of rules that most programmers would find | familiar: constants in ALL_CAPS, class names in | LeadingCapsMixedCase, method names in lower_case_and_underscores | This kind of consistency helps programmers understand, read, and | navigate through large programs, but to a novice, these rules | are arbitrary and confusing. To explain that FORWARD is a | constant and move is a method makes no sense to a person who | does not know or care what a constant or a method is. To a | novice these are both just "words" that are used in the Alice | command language; words that play more-or-less equal roles in the | novice programmer's mind. As such, novices perceive the case | rules not as evidence of organization, but of deep inconsistency. It is clear that such "inconsistent" use of case in the standard library is confusing to novices, especially when (as in Alice) users are asked to use many constructs such as functions, classes, and methods well before the stage of sophistication where they could create any of those things and hence understand that they are distinct. However, this use of case in the Alice standard library severely confounds the result that case sensitivity in the *language* is crippling. Conway does make a convincing argument that case insensitivity makes sense: | Case sensitivity is an artificial rule that fights against | older knowledge that novice users have, namely that while | forward and FORWARD may *look* different, they should at | least *mean* the same thing. However, this latter argument does not constitute "scientific evidence." It is possible that Randy has done more recent and comprehensive testing. We should discuss this with him directly. Is he on this list? (Hi, Randy!) > Alice now uses a modified Python interpreter which is case insensitive > and where 1/4 returns 0.25. The integer division problem *is* rather well documented both by the Alice team and others. > Randy's scientific evidence swayed many who were there into accepting > that a language for "everybody" has to be case insensitive. I believe that case insensitivity, either in the language itself or enforced through the IDE in some way, is a good idea. But this particular study is only weak evidence in favor of this. > For those who still don't like it, trust me that the programming > environment will enforce case *consistency* -- if you name a function > or variable "Spam", later references to it as "spam" or "SPAM" will > quietly be changed to use "Spam". There are also some ideas on how to > start warning about dependencies on case sensitivity in Python 1.6. > (We'll probably have to change the standard library in some places to > make it conform!) This seems reasonable. It may be that these changes are even sufficient. I assume that the IDE would search lexically for variables in order to enforce consistency? How would it search the module system? The dynamic nature of python makes this problem intractable in general: # pathological case a = raw_input('Select module: ') if a=='foo': from foo import * elif a=='bar': from bar import * else: from foobar import * # at this point the correct case of every # identifier is basically up in the air I know this seems a little far-fetched, but the standard libraries actually do this sort of thing. Dave Scherer From pdfernhout@kurtz-fernhout.com Fri Feb 4 16:16:39 2000 From: pdfernhout@kurtz-fernhout.com (Paul Fernhout) Date: Fri, 04 Feb 2000 11:16:39 -0500 Subject: [Edu-sig] Common Graphical Framework for Python Tutorials? References: <20000203155039.71475.qmail@hotmail.com> <3.0.3.32.20000203093624.0076700c@pop.teleport.com> <00a801bf6f02$ebcbe850$07000100@elite> Message-ID: <389AFB67.7FA4D066@kurtz-fernhout.com> John Glossner wrote: > So this is still totally unsatisfying because now > he still does not know what he is typing. However, > he can at least use the Python interpreter, emacs, > and Linux. We will struggle through the programming > part together and eventually he will be able to > fly on his own but the learning curve is tremendously > steep. However, just wait until he graduates to > Zope (which after 3 months I'm still restling with!!!). One of the difficulties in using Python for education is that it depends on the host environment for many things -- editor (emacs, TK/IDLE, notepad), window system (COM, Delphi, TK, wxWindows, etc.), running issues (command line, IDE) and so on. So, even the simplest tutorial has to make a commitment to one system. If for example, a tutorial explains Emacs and Linux shells for running Python, it won't be immediately useful for a student trying to use IDLE/TK. For Kirby's excellent lesson plan involving numbers and shapes, one might expect it to come with step by step screen shots of what the Python environment screen should look like at each stage. This is problematical if people are using various editors, debugging approaches, and widget sets. Squeak Smalltalk http://www.squeak.org is another system designed in part of education and use by children that solves some of these problems by creating an entire virtual environment. In short, the VM is written with a common set of primitives. Some of these define a simple surface which bitmaps can be drawn on. Others define simple sound and network interfaces. From there, the entire system (graphics, windows, debugger, compiler, version control, code browsers, update system, 3D graphics, TTS) is written in Smalltalk. This machine dependent part is only around 2000 lines of code or so, and has already been ported to over a dozen platforms (Mac, Win32, WinCE, Acorn, Solaris, Linux, etc.) All of the rest of the VM code is written in a subset of Smalltalk, and then is translated to C for performance. There are some difficulties for beginners with using the Smalltalk system because so much of the source is immediately available. It is not clear which parts are more important and which are rarely needed. Another system like LearningWorks http://learningworks.neometron.com/ (created using VisualWorks Smalltalk) addresses this by creating custom browsers that hide much of the source unrelated to the current learning task. Now I'm not suggesting people here who like Python move to Squeak or LearningWorks. Python's modularity, commercial usage (including Zope web application server), indentational syntax, integration with C, and familiar functional notation (similar to C or BASIC) make it a good choice for education. Python does strike a nice balance. Python is a very approachable language with an extensive set of libraries that can be learned in bits and pieces as needed. But, I might suggest that for a common curriculum to evolve around Python, it would be very advantageous to have the same sort of virtual environment like Squeak has. Then tutorials would look completely consistent for any learner. How could Squeak and LearningWorks be useful to the Python learning effort? It might be possible to create a platform independent graphics environment for Python by leveraging the part of Squeak that was machine dependent (so as to not reinvent that wheel). It might instead be possible to somehow integrate the Python compiler into the Squeak environment, with some sort of inter-object translator, so that one worked in Python on top of Squeak but had access to all the Smalltalk tools and yet was cross platform. Squeak is completely open source, so integrating the Python VM bytecode interpreter alongside the Smalltalk bytecodes would be doable. If one got going on this, one might also be able to add support for other languages as well on top of this common cross platform (object) layer. It might also be possible to adapt some of the LearningWorks ideas of customized learning browsers to interacting with tutorial tasks. The alternative is to focus on making IDLE the learning environment to use. That might be a good choice. But, I've always believed TK/TCL has added an extra burden to learning to use Python for GUI work -- there is just something a little awkward about it (probably mostly due to the TCL layer). That is improving with better documentation, but it still IMO lacks the elegant seamless integration on might otherwise desire. However, perhaps that is all resolveable. When one starts building more sophisticated tutorial environments, some of these integration issues might become more problematic. For example, for a very long time I have had difficulties debugging TK apps under IDLE, as there are (were?) some issues related to who thought they were the top level application. If even such a simple issue was problematical -- then what will happen when one has very fancy complex systems that entail single stepping graphics and other program threads and so on? For example, consider implementing something like: Http://Apsymac33.uni-trier.de:8080/Lisp-Course This is an adaptive Lisp tutor on the web. But, imagine it running under TK and trying to teach you TK programming. What would be the implementation issues? Underlying another aspect of this difficulty when creating tutorial systems is that the common (and preferred) method of defining a Python program is as a text file (where often order of definition matters, given side effects of executing Python code as files are loaded). Something about this way of working makes me less likely to use the IDLE class browser for example. This is a very different mind set than imagining a program as something that lives as a collection of functions in a development environment (like most Smalltalk programs) -- where files are just used for backup and transport. Obviously in John's case, he went with Emacs for editing Python text files (although perhaps is using IDLE too?) Why did you not just go with IDLE for everything? Also, it is quite likely that for complete programming novices, there will need to be many levels of tutorial which have nothing to do with Python programming syntax, but involve perhaps a more graphical type of programming. These early levels would introduce very basic concepts anyone on this list would take for granted. For example, an early exercise might be putting notes on a musical staff to make a musical "program" showing the relation between sequence and effect. Making those earlier tutorial levels widely available requires a common graphics (and probably sound, etc.) platform. There is obviously a tension here -- Python is so useful in part because it interoperates so well with a wide variety of systems, giving the user a lot of choice. And obviously, the issue of TK as the common graphical framework comes up every year. I'm just wondering how that flexibility will interact with using Python for education. -Paul Fernhout Kurtz-Fernhout Software Chappaqua, NY ========================================================= Developers of custom software and educational simulations Creators of the open source Garden with Insight(TM) garden simulator http://www.kurtz-fernhout.com From guido@python.org Fri Feb 4 16:22:53 2000 From: guido@python.org (Guido van Rossum) Date: Fri, 04 Feb 2000 11:22:53 -0500 Subject: [Edu-sig] On case sensitivity In-Reply-To: Your message of "Fri, 04 Feb 2000 11:00:46 EST." References: Message-ID: <200002041622.LAA14035@eric.cnri.reston.va.us> Randy is not on the list, but I've forwarded your mail to him. > I assume that the IDE would search lexically for variables in order to > enforce consistency? Actually, I want to create an IDE that is sufficiently aware of the syntax that it can tell assignment from use in most cases. > How would it search the module system? It would parse the module source code (caching results to make the time expenditure acceptable). For extension modules it could simply import the module and report the names it defines. We may also create special interface description files in a dialect of Python to describe extensions; the work being done in the Python type-sig on optional static typing is relevant here. > The dynamic > nature of python makes this problem intractable in general: > > # pathological case > > a = raw_input('Select module: ') > if a=='foo': > from foo import * > elif a=='bar': > from bar import * > else: > from foobar import * > > # at this point the correct case of every > # identifier is basically up in the air This is not very common (usually the from M import * is executed unconditionally) so it will rarely be a problem. The IDE could always compute a worst case outcome. > I know this seems a little far-fetched, but the standard libraries actually > do this sort of thing. Where? --Guido van Rossum (home page: http://www.python.org/~guido/) From pdx4d@teleport.com Fri Feb 4 16:26:25 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 04 Feb 2000 08:26:25 -0800 Subject: [Edu-sig] Sample Lesson Plan In-Reply-To: <200002041413.JAA09270@eric.cnri.reston.va.us> References: <3.0.3.32.20000204011513.0075d40c@pop.teleport.com> Message-ID: <3.0.3.32.20000204082625.006aa638@pop.teleport.com> >to write a loop from 1 to n; it seems better to write > > for i in range(1, n+1): Good point. >Finally, is it a pedagogical device to start with recursion and then >write a for loop? I suppose tetra(n) is easily defined recursively: > > def tetra(n): > if n <= 1: return n > else: return tetra(n-1) + tri(n) Yes, recursive OK here too. I was actually going to give recursive and non-recursive forms for both the tri() and tetra() functions but forgot my intent. But I _do_ think it pedagogically useful to not get hooked on either/or thinking here. Thanks for the Python pointers. Your use of range() is of course far better, although range(n+1)[1:] does have the "advantage" of introducing the : business (something that's fun to play with). Kirby From gerrit@nl.linux.org Fri Feb 4 16:10:35 2000 From: gerrit@nl.linux.org (Gerrit Holl) Date: Fri, 4 Feb 2000 17:10:35 +0100 Subject: [Edu-sig] Getting it going In-Reply-To: <200002041457.JAA09421@eric.cnri.reston.va.us>; from guido@python.org on Fri, Feb 04, 2000 at 09:57:38AM -0500 References: <20000203155039.71475.qmail@hotmail.com> <20000204083411.A376@stopcontact.palga.uucp> <200002041457.JAA09421@eric.cnri.reston.va.us> Message-ID: <20000204171035.B16068@stopcontact.palga.uucp> Hello, Guido van Rossum wrote on 949654658: > > No, we want to extent idle. One patch I want to write is that > > "if a:" autoindents, "if a: # if it's true" does not. I can't find where > > to change it, and that's one thing Guido pointed out: tools would make > > that easier. Especially (how do you spell that word?) for kids. But I > > don't think new tools would be needed for that: idle could be extended > > and promoted. > > Note that that particular change is already in the CVS tree for IDLE > (python.org/download/cvs.html). Ah! I think it would be useful to distribute Idle seperate from Python as well as included: why wait for Python 1.6 releasing such changes to the big public? Or does Idle already rely on string methods? > I've also found at the conference that there are already at least half > a dozen serious IDEs (interactive development environments) for Python > in existence or under development. I still want to continue to use > IDLE to experiment with some advanced features (such as syntax > checking while you type), but I think it's important that the > classroom materials allow the choice of different IDEs -- if only > because not all IDEs work on all platforms, and we do need to support > Windows, Mac and Linux! Unfortunately, yes. Alice isn't crossplatform, is it? But what does any other IDE have what Idle does not have? Idle is crossplatform, isn't it? regards, Gerrit. From gerrit@nl.linux.org Fri Feb 4 16:13:18 2000 From: gerrit@nl.linux.org (Gerrit Holl) Date: Fri, 4 Feb 2000 17:13:18 +0100 Subject: [Edu-sig] Age groups In-Reply-To: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de>; from hei@adtranzsig.de on Fri, Feb 04, 2000 at 04:00:34PM +0100 References: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de> Message-ID: <20000204171318.C16068@stopcontact.palga.uucp> Dirk-Ulrich Heise wrote on 949676434: > -----Ursprüngliche Nachricht----- > Von: Gerrit Holl > [...] > >> 3) Elementary Education (8-10 year old) > > > >You can start here. The concept of variables, lists and functions can > >be explained. Dictionairies too, I think. Classes will probably be only > >for the very smart ones. > > Don't you think classes are as easy as variables? No, they're not. Maybe the theory is as easy as a variable, but the practice isn't. It took quite long for me to find out when to use classes. And multiple inheritance still struggles me, and private methods (__aaa changes to whatever but still isn't private?). I think we shouldn't be too fast with classes. We _can_ explain how to use them (jan = Turtle(100, 200)), but subclassing is not easy to explain. regards, Gerrit. -- Please correct any bad Swahili you encounter in my email message! -----BEGIN GEEK CODE BLOCK----- http://www.geekcode.com Version: 3.12 GCS dpu s-:-- a14 C++++>$ UL++ P--- L+++ E--- W++ N o? K? w--- !O !M !V PS+ PE? Y? PGP-- t- 5? X? R- tv- b+(++) DI D+ G++ !e !r !y -----END GEEK CODE BLOCK----- From gerrit@nl.linux.org Fri Feb 4 16:05:56 2000 From: gerrit@nl.linux.org (Gerrit Holl) Date: Fri, 4 Feb 2000 17:05:56 +0100 Subject: [Edu-sig] On case sensitivity In-Reply-To: <200002041452.JAA09408@eric.cnri.reston.va.us>; from guido@python.org on Fri, Feb 04, 2000 at 09:52:47AM -0500 References: <20000204071900.74302.qmail@hotmail.com> <200002041452.JAA09408@eric.cnri.reston.va.us> Message-ID: <20000204170556.A16068@stopcontact.palga.uucp> Guido van Rossum wrote on 949654367: > Randy explained the importance of user testing, and mentioned that > only two Python language issues were a problem: (1) case sensitivity > and (2) integer division. I believe he said that case sensitivity was > by far the worst offender, affecting as many as 75% of the students. I understand. But it would be yet another show stopper for many users, especially those coming from a Unix environment. I think changing this will cause a huge quarrel, and maybe even a split of the project. This question araises: * Is teaching imporant enough to change the Python interpreter in a way *many* people won't like and causing *much* backward-incompatibility? > For those who still don't like it, trust me that the programming > environment will enforce case *consistency* -- if you name a function > or variable "Spam", later references to it as "spam" or "SPAM" will > quietly be changed to use "Spam". Where and by who? Will 'SPAM' be changed in 'Spam' while typing in an IDE? But the change is not backward compatible. I think this idiom is used very often: >>> class Foo: >>> # some methods ... >>> foo = Foo() if 'foo' would be silently changed too 'Foo', this code would be equivalent to: >>> Foo = Foo() So future references to Foo would refer to the instance instead of the class. The keyword 'Class' is also used now and then (in HTMLgen, for example). regards, Gerrit. -- Please correct any bad Swahili you encounter in my email message! -----BEGIN GEEK CODE BLOCK----- http://www.geekcode.com Version: 3.12 GCS dpu s-:-- a14 C++++>$ UL++ P--- L+++ E--- W++ N o? K? w--- !O !M !V PS+ PE? Y? PGP-- t- 5? X? R- tv- b+(++) DI D+ G++ !e !r !y -----END GEEK CODE BLOCK----- From pdx4d@teleport.com Fri Feb 4 17:15:23 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 04 Feb 2000 09:15:23 -0800 Subject: [Edu-sig] On case sensitivity In-Reply-To: <200002041622.LAA14035@eric.cnri.reston.va.us> References: Message-ID: <3.0.3.32.20000204091523.007678a0@pop.teleport.com> If case sensitivity is a big problem for non-CS Alice programmers, my first response would be to front load the intro with plenty of warnings to students that they'll likely introduce bugs by forgetting about such sensitivity. But I wouldn't make the sensistivity go away necessarily, as this would encourage laziness and bad habits. Truth to tell: most sophisticated programming languages care about case. If they hand hold, trying to catch bugs of this nature, that's great, but at the end of the day, SPAM, Spam and spam are three different names, and should be allowed to co-exist if that's trully the author's intent. I happen to write a lot of code in Xbase, which does NOT care about case. I've gotten comfortable with this and sometimes stumble in a case sensitive environment. But I've never whined about it. The problem is MY reflex-conditioning, not someone else's. Kirby From dscherer@cmu.edu Fri Feb 4 17:23:07 2000 From: dscherer@cmu.edu (David Scherer) Date: Fri, 4 Feb 2000 12:23:07 -0500 Subject: [Edu-sig] On case sensitivity In-Reply-To: <200002041622.LAA14035@eric.cnri.reston.va.us> Message-ID: > Actually, I want to create an IDE that is sufficiently aware of the > syntax that it can tell assignment from use in most cases. What is the desired behavior in this case? t = 5 if t<0: T = -t print t It seems that T should be corrected to t, but in that case there is little need to distinguish assignment from use. Separately, I think the following heuristic would be valuable (and does require the distinction): Assignment to a variable which is never used should generate a warning in the IDE. This helps with a vast class of typographical errors which are not limited to case errors. A single typo in use will usually generate an exception: position = 5 position = posiiton + 1 # error print position At present, though, a typo in an lvalue is silently ignored: position = 5 posiiton = position + 1 # silent failure print position > It would parse the module source code (caching results to make the > time expenditure acceptable). Reasonable, provided it can deal successfully with dynamic importing (worst-case is acceptable, but see below). > For extension modules it could simply > import the module and report the names it defines. We may also create > special interface description files in a dialect of Python to describe > extensions; the work being done in the Python type-sig on optional > static typing is relevant here. Importing a module might have side effects. One thing I think is axiomatic is that the IDE must not crash. Never ever ever, no matter what the user program does. If a program loads itself or another broken program as a module, the IDE must not go off trying to solve the halting problem. > This is not very common (usually the from M import * is executed > unconditionally) so it will rarely be a problem. The IDE could always > compute a worst case outcome. Even worst-case is hard when there are calls to __import__ like this (somewhere obscure in \python\Lib): for _name in _names: try: _mod = __import__(_name) except ImportError: continue if not _defaultmod: _defaultmod = _mod _errors.append(_mod.error) Fortunately, these symbols will not end up in the global namespace unless the user takes extraordinary measures. There are cases where they can, like os.py: elif 'nt' in names: from nt import * for i in ['_exit']: try: exec "from nt import " + i except ImportError: pass The standard libraries could be special-cased or altered; the real worry is something like an extension module that does this sort of thing in C. I doubt that's very common, but the IDE can never prove that an identifier is undefined. It would be nice to say, "if the IDE can't figure out a module, it just doesn't do case correction in that module's namespace." The presence of from ... import * breaks this approach. OTOH, it is probably not an entirely bad thing to encourage people to avoid from ... import * for modules that define names dynamically! Dave Scherer p.s. I just read Gerrit's post, and the point about the foo = Foo() idiom is disturbing. What can the IDE do about that? From dscherer@cmu.edu Fri Feb 4 17:42:31 2000 From: dscherer@cmu.edu (David Scherer) Date: Fri, 4 Feb 2000 12:42:31 -0500 Subject: [Edu-sig] On case sensitivity In-Reply-To: <3.0.3.32.20000204091523.007678a0@pop.teleport.com> Message-ID: > If case sensitivity is a big problem for non-CS > Alice programmers, my first response would be > to front load the intro with plenty of warnings > to students that they'll likely introduce bugs > by forgetting about such sensitivity. But I > wouldn't make the sensistivity go away necessarily, > as this would encourage laziness and bad habits. The Alice tutorial used in the relevant testing DID include strong warnings to such effect, and I believe the testers even explained it verbally to people who had trouble, and they found problems nevertheless. However, as I've already discussed, those results were confounded by the case conventions in their API. > Truth to tell: most sophisticated programming > languages care about case. So what? Cockroaches are much more numerous than humans, but I prefer humans to cockroaches in all respects. > If they hand hold, > trying to catch bugs of this nature, that's great, > but at the end of the day, SPAM, Spam and spam > are three different names, and should be allowed > to co-exist if that's trully the author's intent. Why? I've never seen any strong justification for case sensitivity other than backward-compatibility with some other language or library. eNGLISH IS NOT cAse SenSitiVe, although there are certainly strong conventions! > I happen to write a lot of code in Xbase, which > does NOT care about case. I've gotten comfortable > with this and sometimes stumble in a case sensitive > environment. But I've never whined about it. The > problem is MY reflex-conditioning, not someone > else's. If the goal is really Computer Programming For Everyone, everything is OUR problem. The needs of the (10M?) programmers in the world are vastly outweighed by the needs of the six billion normal people. They are always right and we are always wrong. Randy and Guido are 110% right about that. However, I agree that forking Python is not desirable. If Python 2 can somehow help everyone to migrate to case insensitivity, fine. Otherwise, implementing case correction at the IDE level seems like the most sensible approach. I note that backwards-incompatible syntax changes are most acceptable if there is a reliable automated translation which converts all correct code in the old syntax into correct code in the new syntax. Given the availability of Python parsing code, this should be quite possible as long as such a mapping is defined for a given syntax change. The REAL problem occurs when there is no general way to do such a translation lexically. This is the case for integer division, unfortunately, in the absence of static typing: # Python 1.5 code a = input('A:') b = input('B:') c = a/b # what is the type of a? b? c? print c Dave Scherer From pdx4d@teleport.com Fri Feb 4 17:51:08 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 04 Feb 2000 09:51:08 -0800 Subject: [Edu-sig] On case sensitivity In-Reply-To: References: <3.0.3.32.20000204091523.007678a0@pop.teleport.com> Message-ID: <3.0.3.32.20000204095108.00770d0c@pop.teleport.com> >Why? I've never seen any strong justification for case sensitivity other >than backward-compatibility with some other language or library. That's justification enough. "Backward compatibility" in this context means being able to write in that language, even today. I don't insist that Chinese drop reliance on tonality because "meaning through tone is difficult for the Western ear". Tone-sensitivity is here to stay as well -- if not in Python :-D. >eNGLISH IS NOT cAse SenSitiVe, although there are certainly strong >conventions! > English is EXTREMEly complicated. >If the goal is really Computer Programming For Everyone, everything is OUR >problem. The needs of the (10M?) programmers in the world are vastly >outweighed by the needs of the six billion normal people. They are always >right and we are always wrong. Randy and Guido are 110% right about that. > The goal is to gradually erode this concept of OUR kind, versus "normal" people. There is no "they" versus "we" in the ideal world for which CP4E strives. No one gets to point the finger at those "cockroach" others. Kirby From dscherer@cmu.edu Fri Feb 4 18:00:18 2000 From: dscherer@cmu.edu (David Scherer) Date: Fri, 4 Feb 2000 13:00:18 -0500 Subject: FW: [Edu-sig] Getting it going Message-ID: > > I've also found at the conference that there are already at least half > > a dozen serious IDEs (interactive development environments) for Python > > in existence or under development. I still want to continue to use > > IDLE to experiment with some advanced features (such as syntax > > checking while you type), but I think it's important that the > > classroom materials allow the choice of different IDEs -- if only > > because not all IDEs work on all platforms, and we do need to support > > Windows, Mac and Linux! This may be appropriate in the very short run. However, I think that a completely cross-platform IDE suitable for novices needs to be developed, packaged with everything that will be needed for novice users in an absolutely airtight installer for every platform, and distributed with tutorials and course materials. Programmers are conditioned to believe that the lexical content of a program is everything, and that the programming environment is secondary. This is just not the case. To draw an analogy from an introductory Psych course I once took: when scuba divers are taught factual information ("What should the pressure in your oxygen tank be?") in a classroom and then tested underwater, they perform poorly. If they are taught underwater and tested in the classroom, they perform poorly. If they are taught and tested underwater, they perform well! Environment is at least as important as syntax in ease-of-use for beginners. Further, students should be able to work in the computer lab at school and their computers at home in a consistent environment. Another issue is that the IDE needs to be absolutely stable. IDLE and most other Python IDEs share a single Python interpreter with the user program. I am convinced that this architecture is unacceptable for novice users (and for me!) A program like: while 1: pass executed in the console-mode python interpreter, can be easily stopped with control-break. The same program in IDLE will cause the editor to freeze, possibly destroying unsaved changes, and force the user to use OS-level mechanisms to kill the process. The single-interpreter architecture also causes problems running programs that access the same libraries (e.g. Tk) as the IDE. Features like symbolic debugging are much harder if the user program runs in a separate process, but I think that stability needs to take priority. > Unfortunately, yes. Alice isn't crossplatform, is it? No, it's based on Direct3D retained mode (version 3, no less) and will not be portable until and unless that changes. > But what does any other IDE have what Idle does not have? Idle is > crossplatform, isn't it? As of a few weeks ago, at least, it did not run on the Macintosh. As much as I dislike MacOS, the Macintosh is important in many educational settings. I'm not clear on WHY it does not work on the Mac. Dave Scherer From jhrsn@pop.pitt.edu Fri Feb 4 18:00:54 2000 From: jhrsn@pop.pitt.edu (Jim Harrison) Date: Fri, 04 Feb 2000 13:00:54 -0500 Subject: [Edu-sig] On case sensitivity In-Reply-To: <3.0.3.32.20000204091523.007678a0@pop.teleport.com> Message-ID: on 2/4/00 12:15 PM, Kirby Urner at pdx4d@teleport.com wrote: > If case sensitivity is a big problem for non-CS > Alice programmers, my first response would be > to front load the intro with plenty of warnings > to students that they'll likely introduce bugs > by forgetting about such sensitivity. But I > wouldn't make the sensistivity go away necessarily, > as this would encourage laziness and bad habits. Though I have no objective evidence to show, I would guess that one of the main problems with case stems from Python's ability to create variables on-the-fly (without declarations). If variables are required to be declared up front, most case errors involving variable names would be caught immediately as syntax errors and fixed. In Python, a case error in an assignment statement would create a new variable with a new name. This would yield a logical error with unpredictable results that might be very difficult for a beginner to track down. I can imagine a novice staring at the code for a long time without seeing the problem in a situation like this. One such episode, and I'd tell my teacher that the main problem with Python is case sensitivity. It would be interesting to see whether the case errors that make an impression on beginners are the ones that yield immediately identifiable and fixable syntax errors, or the ones that yield logical errors. That being said, I vote for Guido's approach of handling this in the IDE as an optional feature. Jim Harrison Univ. of Pittsburgh From dscherer@cmu.edu Fri Feb 4 18:09:01 2000 From: dscherer@cmu.edu (David Scherer) Date: Fri, 4 Feb 2000 13:09:01 -0500 Subject: [Edu-sig] On case sensitivity Message-ID: -----Original Message----- From: David Scherer [mailto:dscherer@cmu.edu] Sent: Friday, February 04, 2000 1:09 PM To: Jim Harrison Subject: RE: [Edu-sig] On case sensitivity > Though I have no objective evidence to show, I would guess that one of the > main problems with case stems from Python's ability to create variables > on-the-fly (without declarations). If variables are required to > be declared > up front, most case errors involving variable names would be caught > immediately as syntax errors and fixed. In Python, a case error in an > assignment statement would create a new variable with a new name. > This would > yield a logical error with unpredictable results that might be very > difficult for a beginner to track down. I can imagine a novice staring at > the code for a long time without seeing the problem in a situation like > this. One such episode, and I'd tell my teacher that the main problem with > Python is case sensitivity. Variable declarations also add a lot of cognitive overhead - one more meaningless piece of syntax that would be a prerequisite to _doing something_. As I pointed out earlier in the thread, the typo problem is not limited to case errors. I think it should be addressed by checking the user program for identifiers that are used as lvalues and that appear exactly once in the program. That addresses both case errors of the type you describe and other typos. > It would be interesting to see whether the case errors that make an > impression on beginners are the ones that yield immediately > identifiable and > fixable syntax errors, or the ones that yield logical errors. In the case of the Alice trials, almost certainly the immediately identifiable errors! Alice code usually looks something like: DoInOrder( bunny.Move(UP,3), bunny.Turn(LEFT,1/4), bunny.Move(DOWN,3) ) Since there are rarely any assignments at all at the level of the tutorial, logical errors are unlikely. However, beginners who do not understand the difference between the different kinds of constructs in this program (functions, methods, constants, objects) don't understand why all of the identifiers have different required case. > That being said, I vote for Guido's approach of handling this in > the IDE as an optional feature. Agreed, but it must be useful when enabled! It's easy to accept any problem with something by saying "oh, well you can always turn it off." Dave Scherer From dscherer@cmu.edu Fri Feb 4 18:20:10 2000 From: dscherer@cmu.edu (David Scherer) Date: Fri, 4 Feb 2000 13:20:10 -0500 Subject: [Edu-sig] On case sensitivity In-Reply-To: <3.0.3.32.20000204095108.00770d0c@pop.teleport.com> Message-ID: > >Why? I've never seen any strong justification for case sensitivity other > >than backward-compatibility with some other language or library. > > That's justification enough. "Backward compatibility" in > this context means being able to write in that language, > even today. Perhaps, but you made the argument that case sensitive is how things *should be*. My understanding is that Guido looks at Python 2 as an opportunity to introduce a few incompatibilities to make the language a lot better, and programs that depend on case sensitivity *could* in theory be fixed mechanically. > I don't insist that Chinese drop reliance on tonality > because "meaning through tone is difficult for the Western > ear". Tone-sensitivity is here to stay as well -- if not > in Python :-D. If you did insist, they probably wouldn't pay much attention. On the other hand, how many Westerners actually know Chinese? If we are the Chinese in this analogy, and we want everyone to learn our language, we will get a lot farther by changing the language than by trying to change everyone else. This analogy breaks down because there are a lot of Chinese speakers, and very few programmers. The number of supporters of something doesn't predict it's value, but it DOES affect "conversion cost." The cost of converting billions of people to think case sensitively exceeds the cost of converting all existing Python code. > The goal is to gradually erode this concept of OUR kind, versus > "normal" people. There is no "they" versus "we" in the ideal > world for which CP4E strives. No one gets to point the finger > at those "cockroach" others. This will not be accomplished by leaving the language and tools alone and converting everyone else. Ideal or not, it's not going to happen. At best, CP4E is asking a huge number of people to learn a huge number of new concepts. We need to meet them *more* than halfway. Dave From pdx4d@teleport.com Fri Feb 4 18:43:17 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 04 Feb 2000 10:43:17 -0800 Subject: [Edu-sig] On case sensitivity In-Reply-To: References: <3.0.3.32.20000204095108.00770d0c@pop.teleport.com> Message-ID: <3.0.3.32.20000204104317.0077734c@pop.teleport.com> At 01:20 PM 02/04/2000 -0500, you wrote: >> >Why? I've never seen any strong justification for case sensitivity other >> >than backward-compatibility with some other language or library. >> >> That's justification enough. "Backward compatibility" in >> this context means being able to write in that language, >> even today. > >Perhaps, but you made the argument that case sensitive is how things *should >be*. More just that's how things are. Java isn't going to change. In my curriculum, Python is an on ramp into the world of programming more generally. Whether I like it or not, design decisions were made (no, I wasn't consulted). I'd rather accept the status quo, in this case, than use Python to tilt at wind mills. >My understanding is that Guido looks at Python 2 as an opportunity to >introduce a few incompatibilities to make the language a lot better, and >programs that depend on case sensitivity *could* in theory be fixed >mechanically. > I like this as an option. Kinda like MSFT Word and "IntelliSense" -- always looking over my shoulder and being helpful (except sometimes we fight -- I reserve the right to _override_ any stupid machine). Sounds like a lot of good thinking has gone into the cs thread already. My two cents already given. >> I don't insist that Chinese drop reliance on tonality >> because "meaning through tone is difficult for the Western >> ear". Tone-sensitivity is here to stay as well -- if not >> in Python :-D. > >If you did insist, they probably wouldn't pay much attention. On the other >hand, how many Westerners actually know Chinese? If we are the Chinese in >this analogy, and we want everyone to learn our language, we will get a lot >farther by changing the language than by trying to change everyone else. There's a billion of us and we'd have no hope of changing our language. Despite the reputation of Chinese authoritarianism, there's no way committees "just decide" that tomorrow tone isn't going to matter. Computer languages are a little less "organic" but not a whole lot. Python is somewhat unusual in that there's this one guy named Guido overseeing it. Other languages have gotten away from their originators in large degree (my own Xbase, for example). My only thought re the Alice people is "hey, it's OK if your program crashes sometimes because of cs issues. Yes, it's annoying, but don't let your whole attitude to programming be colored by this little 'feature'. As Miss Frizzle would say: make mistakes, get messy." And when you go to China, don't give up if you say "screw!" instead of "please!" because of the tone thing. xxxx happens. >This analogy breaks down because there are a lot of Chinese speakers, and >very few programmers. The number of supporters of something doesn't predict >it's value, but it DOES affect "conversion cost." The cost of converting >billions of people to think case sensitively exceeds the cost of converting >all existing Python code. You seem to assume that the default is to not be case sensitive. But we DO know the difference between upper and lower case A (a). A lot of time goes into this. Kids know. They don't need to be patronized. I find this bending over backwards to remove case sensitivity to be patronizing, condescending. It's not a big deal, really. >> The goal is to gradually erode this concept of OUR kind, versus >> "normal" people. There is no "they" versus "we" in the ideal >> world for which CP4E strives. No one gets to point the finger >> at those "cockroach" others. > >This will not be accomplished by leaving the language and tools alone and >converting everyone else. Ideal or not, it's not going to happen. At best, >CP4E is asking a huge number of people to learn a huge number of new >concepts. We need to meet them *more* than halfway. > >Dave OK, let's agree to disagree. I think my 5 year old girl will have no problem with case sensitivity and I don't plan to shield her from this ugly aspect of the real world. On the other hand, if there's some nifty feature in Python X.X that lets us sweep a module for possible bugs introduced by inadvertant typos, so much the better. I'd use that too. Kirby From smorris@nexen.com Fri Feb 4 19:43:54 2000 From: smorris@nexen.com (Steve Morris) Date: Fri, 4 Feb 2000 14:43:54 -0500 (EST) Subject: [Edu-sig] Getting it going (long) In-Reply-To: <20000204071900.74302.qmail@hotmail.com> References: <20000204071900.74302.qmail@hotmail.com> Message-ID: <200002041943.OAA10149@brocade.nexen.com> Ulf Engstrøm writes: > a lot about learning for children (which I like), but I think that if we're > talking everyone, we should talk about older novices as well. And they don't > need an extended IDLE, they don't need 3D-stuff. They just need someone to > show them Python. I don't agree. Most adults that I know have similar issues. You are thinking of already motivated adults that understand where they want to get to and just need a little help getting there. These people often don't need any help at all, they cruise the web and bookstores and dig out what they need; for these people it is probably not CP4E. A more typical case is someone that is afraid of computers, pretty sure that programming is something that only "really smart people" do and that learning computer programming is impossible for them. They have difficulty even knowing why they should. This is who I think the "everyone" of CP4E refers to. We know that programming is within their reach if only a few hurdles can be surmounted. They don't know this. The same issues of simple, friendly starting environment and easy, fun goals apply with these adults as with kids, perhaps even more so. At least kids are willing to take your word for it when you say it is possible to learn something. They more or less trust adults (teachers) to only present them with achievable goals. (This is an exageration I know but you get the difference.) It's the bubble sort again. How many computer courses and books start with the bubble sort as the first algorithm? How many students give a big whoop about the bubble sort. I'm a 25 year software professional and I have difficulty giving a big whoop about any sorting algorithm even though I've implemented quite a few over the years. From bas@andrew.cmu.edu Fri Feb 4 19:46:18 2000 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Fri, 04 Feb 2000 13:46:18 -0600 Subject: [Edu-sig] Case sensitivity Message-ID: <484206184.949671978@MUON.PC.CC.CMU.EDU> I was intrigued by the comments of my colleague Dave Scherer on treating with caution how well proved is the assertion that case sensitivity is a problem for novices. Let me offer some context to provide another view on the issue of case sensitivity. CONTEXT Ruth Chabay and I have been teaching an unusual introductory university freshman physics course at Carnegie Mellon University taken by science students, in which computer modeling plays a central role: http://cil.andrew.cmu.edu/mi.html We spend just two 50-minute periods teaching a subset of the cT programming language developed in our Center for Innovation in Learning, after which the students write programs with 2D graphic output including a spacecraft coasting to the Moon, a planet in an elliptical orbit, the motion of a mass on a spring with or without friction or air resistance, the scattering of an alpha particle off a gold nucleus (the Rutherford experiment that discovered the nucleus), and statistical mechanics calculations of the entropy and specific heat of a solid modeled as quantized harmonic oscillators. A sizable minority of our students have not previously written a computer program, but they are able to do serious computer modeling with little instruction, and they are able to do this on Windows, Mac, or Linux, with no installation or environment difficulties. A group of us at Carnegie Mellon including David Andersen, Ruth Chabay, Ari Heitner, Ian Peters, Dave Scherer, and I are investigating the possibility of having our physics students use Python instead, with 3D graphics implemented through an innovative package being developed by Dave Scherer that talks to Open GL. The challenge is to make a package installable and usable by novices, with 3D graphics, that works on Windows, Mac, and Linux. (We don't see it to be feasible to build 3D graphics onto cT.) Note that we have chosen a very narrow focus: Making it possible for science students in a university physics course to learn quickly and use productively Python plus 3D graphics in order to do computer modeling of physical systems. This is a different focus from that of many contributors to this SIG, whose main interest is in using Python as the language of instruction in computer science or programming courses. One possible overlap of interests is this: We believe that those just beginning to write programs want in the year 2000 to write graphics-oriented programs, not programs that just calculate mathematical quantities. Graphics is a huge motivator and of the highest interest in the public at large. We define "computer programming for everybody" as starting with graphics, not in getting Joe Public to write Python code to control his web server, at least not at first! It is possible that what we may be able to do in making 3D graphics available to the masses would find use in introducing programming to newcomers. CASE SENSITIVITY In our physics teaching we have not seen any hint of a problem with case sensitivity, even though cT is case sensitive. There are confounds, however, so I don't want to claim too much. In cT one is required to declare all variables, so it seems plausible that the student will use the name that the student defined. Also, system-defined commands that might be problematic don't cause trouble because these commands are at the beginning of a line, followed by TAB, so there is no problem if the student declares a variable named "disk" and also uses the "disk" command. System-defined names that can collide with user-defined names, such as "zred" for the color red, all start with a z to help avoid collisions. It is possible that these special considerations are the reason why we have seen no hint of an issue with case sensitivity. But there may also be significant contextual differences between our physics environment and that of an English student trying to command a bunny to hop in Alice. The algebra-savvy science student is used to making distinctions between t (time) and T (temperature), between a (acceleration) and A (area), etc. A particularly nice pair is e (charge on an electron) and E (electric field operating on that electron), so that the force on the electron is represented by e*E. (Of course there may also be a collision with the natural-log base e!) The reason for these letter pairs in physics is a shortage of letters in the Roman alphabet coupled with a historical style that mandated single-letter names for algebraic quantities. We are now accustomed to using multiletter names in computer programs, so we could write Qelectron instead of e and Efield instead of E. But I would be cautious in throwing out case sensitivity on the basis of usage problems in one particular community. Perhaps it could be optional on a per module, based on a directive found at the start of the module, in order to accommodate the needs of different communities? FLOATING-POINT DIVISION I have a very different view of the other problem that was reported, the problem with division indicated by "/". Here I VERY much want a change so that "/" means floating-point division, even if both operands are integer. I VERY much want 1/4 to be 0.25, not 0. There are a variety of possible solutions to provide backward compatibility. At worst, a conversion could change all occurences of a/b into "olddivision(a,b)" which would mimic the current behavior. And of course there would be a new syntax such as "a div b" to do integer division. The current convention causes trouble even for expert programmers when they're in a mathematical frame of mind. OTHER ISSUES ARE BIGGER The division issue is important. The case sensitivity issue may be important. But both of these issues pale into utter insignificance compared to the huge barriers currently facing novices with respect to installation, running (search path issues, IDE issues), graphics, and cross-platform issues. Bruce Sherwood Center for Innovation in Learning and Department of Physics Carnegie Mellon University From smorris@nexen.com Fri Feb 4 20:19:23 2000 From: smorris@nexen.com (Steve Morris) Date: Fri, 4 Feb 2000 15:19:23 -0500 (EST) Subject: [Edu-sig] Age groups In-Reply-To: <20000204171318.C16068@stopcontact.palga.uucp> References: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de> <20000204171318.C16068@stopcontact.palga.uucp> Message-ID: <200002042019.PAA10183@brocade.nexen.com> Gerrit Holl writes: > Dirk-Ulrich Heise wrote on 949676434: > > -----Urspr=FCngliche Nachricht----- > > Von: Gerrit Holl > > [...] > > >> 3) Elementary Education (8-10 year old) > > > > > >You can start here. The concept of variables, lists and functions= can > > >be explained. Dictionairies too, I think. Classes will probably b= e only > > >for the very smart ones. > >=20 > > Don't you think classes are as easy as variables? >=20 > No, they're not. > Maybe the theory is as easy as a variable, but the practice isn't. I= t took > quite long for me to find out when to use classes. And multiple > inheritance still struggles me, and private methods (__aaa changes t= o > whatever but still isn't private?). I think we shouldn't be too fast= > with classes. We _can_ explain how to use them (jan =3D Turtle(100, = 200)), > but subclassing is not easy to explain. That's funny. My experience was quite different. When I first saw objects and classes it was like a relevation from God. They seemed intuitively obvious and the answer to my prayers. I wonder if this is a right brain/left brain thing or something. From guido@python.org Fri Feb 4 20:22:28 2000 From: guido@python.org (Guido van Rossum) Date: Fri, 04 Feb 2000 15:22:28 -0500 Subject: [Edu-sig] Age groups In-Reply-To: Your message of "Fri, 04 Feb 2000 15:19:23 EST." <200002042019.PAA10183@brocade.nexen.com> References: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de> <20000204171318.C16068@stopcontact.palga.uucp> <200002042019.PAA10183@brocade.nexen.com> Message-ID: <200002042022.PAA15201@eric.cnri.reston.va.us> > That's funny. My experience was quite different. When I first saw > objects and classes it was like a relevation from God. They seemed > intuitively obvious and the answer to my prayers. I wonder if this is > a right brain/left brain thing or something. Gerrit is definitely a left-brain type of person :-) --Guido van Rossum (home page: http://www.python.org/~guido/) From slitt@troubleshooters.com Fri Feb 4 20:29:34 2000 From: slitt@troubleshooters.com (Steve Litt) Date: Fri, 04 Feb 2000 15:29:34 -0500 Subject: [Edu-sig] Keep Python's advantages In-Reply-To: <484206184.949671978@MUON.PC.CC.CMU.EDU> Message-ID: <3.0.6.32.20000204152934.00ade450@pop.pacificnet.net> If we have an IDE, please, please, please decouple it from the interpreter, such that a person using an editor can achieve all the same advantages. IDE's often require GUI, they distance the user from the concept of instructing a computer, and often IDE created apps break hopelessly if an app is revisited after a few IDE upgrades. As far as case sensitivity, Python's a spectacularly good language with a good installed base, including Zope. I'd hate to jeopardize Python's future as a real app language just to use it for teaching. It's pretty easy the way it is. Given the right instructional materials and a few classes to output cool stuff like sounds and graphics, once a kid can type he/she can use the existing Python to program, IMHO. The instructional materials are key. Steve Steve Litt Webmaster, Troubleshooters.Com http://www.troubleshooters.com slitt@troubleshooters.com From smorris@nexen.com Fri Feb 4 21:00:30 2000 From: smorris@nexen.com (Steve Morris) Date: Fri, 4 Feb 2000 16:00:30 -0500 (EST) Subject: [Edu-sig] a modest proposal Message-ID: <200002042100.QAA11228@brocade.nexen.com> Let me suggest that the goal be restated. Rather than teaching programming to the masses perhaps the goal should be to teach the masses to solve various problems using programming. Maybe I am picking nits here but many of the success stories here and otherwhere seem to come from projects that had specific problems that they wanted the student to solve and programming happened to be the convenient (sometimes the only possible) approach. I think if we focus more on a problem solving framework the needs of the IDE and language come into better focus. What I would like to see is a framework which presented a programming "world" probably with an easily visible (browsable) set of classes and objects which more or less defined that world, maybe a workspace concept. In otherwords the user should be able to "enter" one or more worlds, each of which defined a problem space. The worlds would be "explorable" in some way. Properties of objects would be discoverable by examination and experimentation. Simple behaviors would be simple to invoke. More complex behaviors would be possible as a simple progression. To me making this kind of world is key. Standardizing this kind of interface so that people could create worlds/problem spaces/applications as extensions to the system would makes its use grow. Various contributors would add different worlds and the thing would grow. Am I way off base? I think jumping into the nitty gritty of things like case sensitivity puts the cart before the horse. We need to make sure we are solving the right problem. From kuncej@mail.conservation.state.mo.us Fri Feb 4 21:26:14 2000 From: kuncej@mail.conservation.state.mo.us (Jeffrey Kunce) Date: Fri, 04 Feb 2000 15:26:14 -0600 Subject: [Edu-sig] Rational Division Message-ID: Smalltalk has a subclass of "Number" called "Fraction". When you write 2/3 in Smalltalk, it actually stores the numerator and the=20 denominator, and the whole roundoff question is moot. (Of course there is a protocol for mixed-mode arithmetic.) I taught Smalltalk to a number of programmers, and this was always a difficult feature. The "integer vs real" dichotomy is so engrained in the programming culture that it was hard to accept a different representation. Usually, once I reminded them about their high school algebra classes, and how they dealt with fractions in equations, the concept would fall into place. So, what does "E" think? Does 2/3=3D=3D0 or does 2/3=3D=3D1 or does 2/3=3D0.66..67 or does 2/3=3D=3D2/3? I'm not saying that "E" thinks of 2/3 as a rational fraction, but I think we ought to do some asking before we decide on something else. --Jeff From hank@prosysplus.com Thu Feb 3 02:54:28 2000 From: hank@prosysplus.com (Hank Fay) Date: Wed, 2 Feb 2000 21:54:28 -0500 Subject: [Edu-sig] baby steps, packaged Message-ID: Hi all, my connection with education is as a psychologist for 25 years, and a developers consultant for a couple of years (with 20 years of programming thrown in on the side -- no, I'm not 85 ). In addition, a good friend is heading a startup that packages educational software for classroom use. I also grew up in education: my father was a teacher/guidance counselor/high school principal, and my older sister a teacher for 30 years. Making things practical, and packaged, is the key to getting them in the classroom. Give a teacher a program that meets the level of her students, and a lesson plan that goes with the software, together with a teaching guide, and if it works, it will be adopted. Give them building blocks they have to put together themselves, and adoption will be spotty. Tying the software/lesson plans into national curriculum standards would be real plus: this is work that the teacher doesn't have to reinvent. What standards? What does developing software entail? What doesn't it entail? Wouldn't it be great for writing courses to teach documentation skills? (Speaking of which, check out the "fast and easy" series of teaching books for MS products -- they are written, or rather not written, in a style which speaks to the average person.) Psychologist Jerome Bruner maintains that all complex concepts are isomorphs of simpler concepts; same shape, different levels of complexity within. I think that has to be the organizing principle for the K-12 curriculum, or whatever range is chosen. Now, our range of convenience (a term from George Kelly's Personal Construct Theory, important in this task because we have to realize our limitations in seeing things the way little people see them) is in standard programming, so I would start there, and then work backwards. Describe the end tasks of the multi-year curriculum first. Then work backwards. You will need educational specialists at the different age levels to tell you the level of cognitive complexity appropriate to an age group. Thus my $.02. Hank Fay http://www.prosysplus.com From hank@prosysplus.com Fri Feb 4 17:17:37 2000 From: hank@prosysplus.com (Hank Fay) Date: Fri, 4 Feb 2000 12:17:37 -0500 Subject: [Edu-sig] Age groups In-Reply-To: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de> Message-ID: When I think of "classes" and 5 year olds, I think of a visual scene (e.g., a trail in an outdoors setting) that has various challenges (e.g., a ledge that needs to be jumped to). To get through the trail, the youngster has to "drop" one object on another, in order to extend the properties of the object to be able to surmount the challenges. A dice roll would determine whether you got to "buy" Michael Jordan's legs for your object, e.g. In other words, take the concepts of subclassing, and put them in the world of the 5-year old. A next step would be a simple command language (simpler than Python) that allows "adding" abilities: myobject.add_ability Michael_Jordan_Legs myobject.Michael_Jordan_Legs.jump with appropriate visual results in both cases, of course. Hank http://www.prosysplus.com > -----Original Message----- > From: edu-sig-admin@python.org [mailto:edu-sig-admin@python.org]On > Behalf Of Dirk-Ulrich Heise > Sent: Friday, February 04, 2000 10:01 AM > To: edu-sig@python.org > Subject: Re: [Edu-sig] Age groups > > > -----Ursprüngliche Nachricht----- > Von: Gerrit Holl > [...] > >> 3) Elementary Education (8-10 year old) > > > >You can start here. The concept of variables, lists and functions can > >be explained. Dictionairies too, I think. Classes will probably be only > >for the very smart ones. > > Don't you think classes are as easy as variables? > Start right with objects, before they even know there were > non-OO-approaches in the past. (now, i read several > posting from functional programming guys stating Haskell > etc.would provide all kinds of OO, so i think they won't > backstab me, although i have no notion of what OO means > in a functional programming context. I also read that > Python is a version of Scheme with a funny syntax. So i think > they don't really hate OO.) > > Dirk > > > > _______________________________________________ > Edu-sig mailing list > Edu-sig@python.org > http://www.python.org/mailman/listinfo/edu-sig > From hank@prosysplus.com Fri Feb 4 17:10:07 2000 From: hank@prosysplus.com (Hank Fay) Date: Fri, 4 Feb 2000 12:10:07 -0500 Subject: [Edu-sig] On case sensitivity In-Reply-To: <200002041452.JAA09408@eric.cnri.reston.va.us> Message-ID: Case consistency in place of case sensitivity will make it much easier to convert xBase programmers to Python. xBase programming is an interesting language to study from an historical perspective: it has changed as needed to meet the needs of the users, rather than the theoretical concepts of cs. As a result, it has become more and more productive over time. Evolution to meet real life needs is a good thing. Hank http://www.prosysplus.com > -----Original Message----- > From: edu-sig-admin@python.org [mailto:edu-sig-admin@python.org]On > Behalf Of Guido van Rossum > Sent: Friday, February 04, 2000 9:53 AM > To: edu-sig@python.org > Cc: Randy > Subject: [Edu-sig] On case sensitivity > > > For those here who weren't at the recent Python Conference, it may be > hard to understand the case sensitivity issue. I'll try to explain > some of the background. > > One of the best keynotes was given by Randy Pausch, who demonstrated > Alice, a 3D virtual reality builder that uses Python as the control > language (www.alice.org). Randy is a very motivating speaker, and his > stories and demos of small teams of 19-year old non-cs students > creating interactive virtual worlds using Alice (and hence programming > in Python) had the audience in awe. He reminded us that we (the > audience) were geeks -- who make up only one percent of the population > -- and that we need to think about how we talk to non-geeks. > > Randy explained the importance of user testing, and mentioned that > only two Python language issues were a problem: (1) case sensitivity > and (2) integer division. I believe he said that case sensitivity was > by far the worst offender, affecting as many as 75% of the students. > He also said that *that's it*. No other Python features (used in > Alice) caused problem for his audience. The rest of the user testing > dealt with things like how to express a quarter turn (the answer is > 1/4, not 90, as we geeks think :-), and what to name rotations along > the x/y/z axes (the answer is, surprising, turn left/right, turn > up/down, and *roll* left/right). > > Alice now uses a modified Python interpreter which is case insensitive > and where 1/4 returns 0.25. > > Randy's scientific evidence swayed many who were there into accepting > that a language for "everybody" has to be case insensitive. > > > For those who still don't like it, trust me that the programming > environment will enforce case *consistency* -- if you name a function > or variable "Spam", later references to it as "spam" or "SPAM" will > quietly be changed to use "Spam". There are also some ideas on how to > start warning about dependencies on case sensitivity in Python 1.6. > (We'll probably have to change the standard library in some places to > make it conform!) > > --Guido van Rossum (home page: http://www.python.org/~guido/) > > _______________________________________________ > Edu-sig mailing list > Edu-sig@python.org > http://www.python.org/mailman/listinfo/edu-sig > From ivanlan@callware.com Fri Feb 4 20:39:05 2000 From: ivanlan@callware.com (Ivan Van Laningham) Date: Fri, 04 Feb 2000 13:39:05 -0700 Subject: [Edu-sig] Age groups References: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de> <20000204171318.C16068@stopcontact.palga.uucp> <200002042019.PAA10183@brocade.nexen.com> <200002042022.PAA15201@eric.cnri.reston.va.us> Message-ID: <389B38E9.F77270AD@callware.com> Hi All-- Guido van Rossum wrote: > > > That's funny. My experience was quite different. When I first saw > > objects and classes it was like a relevation from God. They seemed > > intuitively obvious and the answer to my prayers. I wonder if this is > > a right brain/left brain thing or something. > > Gerrit is definitely a left-brain type of person :-) > We ought to make up posters advertizing Python, and put Gerrit's picture on them. I'd studied objects before Python, but Python transformed my perception of them. Now they make sense. Only I think that objects and classes are as pure an expression of the Buddha nature underlying all existence as you can find outside of a Tibetan monastery. -ly y'rs, Ivan;-) ---------------------------------------------- Ivan Van Laningham Callware Technologies, Inc. ivanlan@callware.com ivanlan@home.com http://www.pauahtun.org See also: http://www.foretec.com/python/workshops/1998-11/proceedings.html Army Signal Corps: Cu Chi, Class of '70 Author: Teach Yourself Python in 24 Hours ---------------------------------------------- From smorris@nexen.com Fri Feb 4 21:53:13 2000 From: smorris@nexen.com (Steve Morris) Date: Fri, 4 Feb 2000 16:53:13 -0500 (EST) Subject: [Edu-sig] a modest proposal II In-Reply-To: <200002042100.QAA11228@brocade.nexen.com> References: <200002042100.QAA11228@brocade.nexen.com> Message-ID: <200002042153.QAA14897@brocade.nexen.com> Steve Morris writes: > Let me suggest that the goal be restated. Rather than teaching > programming to the masses perhaps the goal should be to teach the > masses to solve various problems using programming. Let me approach this a different way. The world seems to be filled with ad hoc solutions to how one teaches programming. Each has its separate goals, successes and failures. Most of this seems to be isolated projects and individual contributions. I propose that we generalize a little. We need a platform where the emphasis is on providing worlds with interesting problems to solve. Let individual educators provide the worlds, let us provide the platform that we can all share for our individual teaching needs. I basically propose an umbrella project that provides components and tools useful to many problem sets and teaching goals. The emphasis should be on that shareability. Creating worlds should be an easily defined and implement process. If someone wants to create a segment on gravity and parabolic motion they shouln't have to research languages and create a programming environment. Lets give them a system that they can customize for their individulaized ideosyncratic needs to save starting from scratch. Here I am guided by a talk I saw given by Semour Pappert (sic.) probably 15-20 years ago. I think his point is still valid so I will try to paraphrase. Undoubtedly he said the same things in his books but the talk stands out in my mind. He talked about how small children learn foreign languages when they move to a place where that language is spoken, without the benefit of instruction. He observes that they learn by a variety of detailed processes but the overriding one is that they experimentally use it to interact with their new world, i.e. they talk to friends, play games, ask for a snack etc. They learn naturally because it (the new language) is useful. They don't think that they are learning a language per se. They are living in a world where the language allows them to solve important problems. Small steps have small uses, bigger steps have bigger rewards. Later steps build on earlier ones. His suggestion was that the power of computers in education was their ability to make virtual worlds which required the use of the skills that needed to be learned. To teach math he said that you need to create a math world where math is the language required to reach interesting goals. I think this directly applies to learning programming. In fact programability should be an important feature of these worlds regardless of other educational objectives. We need to create worlds where programming is easy and useful and interesting. To be a useful and powerful teaching tool programming worlds should be easy to create and expand. Lets not limit ourselves to a world where it is easy to learn programming, lets use that feature to make it easy to learn other things. I have my personal biases about what such a project would look like. I would populate it with object and their defining classes. I would expand the browser metaphore to give more textual information about objects, i.e. merge the basic browser with the help system. I would probably attempt to support multiple languages. I would allow plugin GUI's to encourage experimentation. I would start with the process of formally defining what a problem space or world looks like, what its components are, how to manipulate them. The formal definition would then split the project into the two components of defining worlds and creating the tools that manipulate them. Regards, Steve Morris From slitt@troubleshooters.com Fri Feb 4 22:03:18 2000 From: slitt@troubleshooters.com (Steve Litt) Date: Fri, 04 Feb 2000 17:03:18 -0500 Subject: [Edu-sig] baby steps, packaged In-Reply-To: Message-ID: <3.0.6.32.20000204170318.008f3260@pop.pacificnet.net> At 09:54 PM 02/02/2000 -0500, Hank Fay wrote: >Hi all, > [clip] > Making things practical, and packaged, is the key to getting them in the >classroom. Give a teacher a program that meets the level of her students, >and a lesson plan that goes with the software, together with a teaching >guide, and if it works, it will be adopted. Give them building blocks they >have to put together themselves, and adoption will be spotty. Hank -- the preceding is fascinating. Can you be more specific? Steve Steve Litt Webmaster, Troubleshooters.Com http://www.troubleshooters.com slitt@troubleshooters.com From gerrit@nl.linux.org Fri Feb 4 22:07:48 2000 From: gerrit@nl.linux.org (Gerrit Holl) Date: Fri, 4 Feb 2000 23:07:48 +0100 Subject: [Edu-sig] Age groups In-Reply-To: <389B38E9.F77270AD@callware.com>; from ivanlan@callware.com on Fri, Feb 04, 2000 at 01:39:05PM -0700 References: <01bf6f20$96944800$13ec1fc2@pc696.adtranzsig.de> <20000204171318.C16068@stopcontact.palga.uucp> <200002042019.PAA10183@brocade.nexen.com> <200002042022.PAA15201@eric.cnri.reston.va.us> <389B38E9.F77270AD@callware.com> Message-ID: <20000204230748.A19625@stopcontact.palga.uucp> Ivan Van Laningham wrote on 949667945: > Guido van Rossum wrote: > > > > > That's funny. My experience was quite different. When I first saw > > > objects and classes it was like a relevation from God. They seemed > > > intuitively obvious and the answer to my prayers. I wonder if this is > > > a right brain/left brain thing or something. > > > > Gerrit is definitely a left-brain type of person :-) > > We ought to make up posters advertizing Python, and put Gerrit's picture > on them. Sorry, I don't understand you both. Am I left-brain? What does left-brain has to do with object oriented design? > I'd studied objects before Python, but Python transformed my perception > of them. Now they make sense. Only I think that objects and classes > are as pure an expression of the Buddha nature underlying all existence > as you can find outside of a Tibetan monastery. > > -ly y'rs, > Ivan;-) > ---------------------------------------------- > Ivan Van Laningham > Callware Technologies, Inc. > ivanlan@callware.com > ivanlan@home.com > http://www.pauahtun.org > See also: > http://www.foretec.com/python/workshops/1998-11/proceedings.html > Army Signal Corps: Cu Chi, Class of '70 > Author: Teach Yourself Python in 24 Hours > ---------------------------------------------- Ivan, can you please shorten your .signature? I find 11 lines much too long! regards, Gerrit. -- Please correct any bad Swahili you encounter in my email message! -----BEGIN GEEK CODE BLOCK----- http://www.geekcode.com Version: 3.12 GCS dpu s-:-- a14 C++++>$ UL++ P--- L+++ E--- W++ N o? K? w--- !O !M !V PS+ PE? Y? PGP-- t- 5? X? R- tv- b+(++) DI D+ G++ !e !r !y -----END GEEK CODE BLOCK----- From skip@mojam.com (Skip Montanaro) Fri Feb 4 22:31:19 2000 From: skip@mojam.com (Skip Montanaro) (Skip Montanaro) Date: Fri, 4 Feb 2000 16:31:19 -0600 Subject: [Edu-sig] On case sensitivity Message-ID: <200002042231.QAA04000@beluga.mojam.com> I'm just trying to catch up on this list. Sorry if I'm late beating a dead horse... A couple things come to mind. 1. Perhaps the language doesn't need to be changed. Guido talked about putting case-desensitization magic in the programming environment, not in the language. If that can be done well enough, then that can be the default there (with perhaps a flag to disable it). Most of us old-line programmer types will probably continue to use Emacs, vi, Joe, BBEdit or something else to edit our files anyway. 2. Dave Scherer wrote: eNGLISH IS NOT cAse SenSitiVe, although there are certainly strong conventions! But certain dialects are getting more so. As more and more people grow up with computers, the dialect of (written) English they use will more and more be the Internet dialect with its SHOUTING, *emphasis*, smileys/emoticons, and curious acronyms like ROTFL and RTFM. The upshot of this is that people will gradually get more comfortable with the idea and "SHOUT", "Shout" "*shout*", and "shout" mean subtly different things depending on context. 3. Dave also wrote: Cockroaches are much more numerous than humans, but I prefer humans to cockroaches in all respects. To which I respond: s/[cC]ockroaches/Windows/ s/humans/Unix/ 4. And later in the same message, there is an apparent contradiction with the cockroach statement: The needs of the (10M?) programmers in the world are vastly outweighed by the needs of the six billion normal people. They are always right and we are always wrong. Randy and Guido are 110% right about that. So we should stop cleaning our tables and countertops after dinner, right? The more serious point is that majority rule accepted blindly can have substantial negative consequences for minority members of the population. It frustrates me to no end to see people release software that *only* runs on Windows, even though I know that "majority rules" or "the VCs have never heard of Unix". I'm not suggesting that moves toward making Python case-insensitive are being undertaken blindly, just that the needs of the minority shouldn't be ignored. Skip Montanaro | http://www.mojam.com/ skip@mojam.com | http://www.musi-cal.com/ 847-971-7098 "Languages that change by catering to the tastes of non-users tend not to do so well." - Doug Landauer From smorris@nexen.com Fri Feb 4 22:50:24 2000 From: smorris@nexen.com (Steve Morris) Date: Fri, 4 Feb 2000 17:50:24 -0500 (EST) Subject: [Edu-sig] Age groups Message-ID: <200002042250.RAA18589@brocade.nexen.com> Gerrit Holl writes: > Ivan Van Laningham wrote on 949667945: > > Guido van Rossum wrote: > > > Steve Morris wrote: > > > > That's funny. My experience was quite different. When I first saw > > > > objects and classes it was like a relevation from God. They seemed > > > > intuitively obvious and the answer to my prayers. I wonder if this is > > > > a right brain/left brain thing or something. > > > > > > Gerrit is definitely a left-brain type of person :-) > > > > We ought to make up posters advertizing Python, and put Gerrit's picture > > on them. > > Sorry, I don't understand you both. Am I left-brain? > What does left-brain has to do with object oriented design? I can't speak for Guido and Ivan's follow ups but as the author of the original reply to your post I was pondering why some people find objects a difficult subject and others find them obvious and intuitive. That's quite a dicotomy. There doesn't seem to be anyone in the middle on this subject. It is clearly not an issue of programming ability because senior experienced programmers come down on both sides. Since left brain and right brain people are often categorized by their different problem solving strategies I was wondering out loud if this particular problem solving technique (OOP) exemplified some of those differences. If you are interested in this subject and determining which category you fall in you can probably find many references on the WWW. Actually left/right brain has been replaced with a more sophisticated breakdown defined by the Myers Briggs profile. Left/right brain turned out to be a little too simplistic to be generally useful. A quick synopsis is that left brain people are described as rational and pedantic with right brained people being intuitive and artistic. As I said... a major simplification. I find the suggestion interesting that experienced programmers often have more difficulties with objects than beginners. That isn't my personal experience but I have heard it said many times. BTW this topic may seem a little off point except that we need to teach people with different learning strategies. There is a tendancy of programmer types to use left brain teaching techniques and thus lose half their audience out of the gate. Anyone who has ever sat in front of a room full of young students knows that there are as many learning strategies as there are students. CP4E needs to be sensitive to this or it will be one more also ran strategy. From pdfernhout@kurtz-fernhout.com Fri Feb 4 23:03:01 2000 From: pdfernhout@kurtz-fernhout.com (Paul Fernhout) Date: Fri, 04 Feb 2000 18:03:01 -0500 Subject: [Edu-sig] a modest proposal II References: <200002042100.QAA11228@brocade.nexen.com> <200002042153.QAA14897@brocade.nexen.com> Message-ID: <389B5AA5.69E7A70F@kurtz-fernhout.com> Steve Morris wrote: > [Papert's] suggestion was that the power of computers in education was their > ability to make virtual worlds which required the use of the skills > that needed to be learned. To teach math he said that you need to > create a math world where math is the language required to reach > interesting goals. > > I think this directly applies to learning programming. In fact > programability should be an important feature of these worlds > regardless of other educational objectives. We need to create worlds > where programming is easy and useful and interesting. To be a useful > and powerful teaching tool programming worlds should be easy to > create and expand. Lets not limit ourselves to a world where it is > easy to learn programming, lets use that feature to make it easy to > learn other things. > > I have my personal biases about what such a project would look like. I > would populate it with object and their defining classes. I would > expand the browser metaphore to give more textual information about > objects, i.e. merge the basic browser with the help system. I would > probably attempt to support multiple languages. I would allow plugin > GUI's to encourage experimentation. I would start with the process of > formally defining what a problem space or world looks like, what its > components are, how to manipulate them. The formal definition would > then split the project into the two components of defining worlds and > creating the tools that manipulate them. I could not agree more! Some Seymour Papert related links: http://www.papert.org/ http://papert.www.media.mit.edu/people/papert/ http://www.google.com/search?q=seymour+papert Two company/book related sites he is involved with: http://www.connectedfamily.com/ http://www.mamamedia.com/ Papert has for example developed a simulation where young children learn to program by directing a knight around on a horse in front of a castle. Papert's thinking was in large part behind our design of our garden simulator -- an educational world where children can learn about science playing in a virtual garden. (No programming yet though -- that's what I'd like to use Python for.) The term "microworld" covers some of this sort of learning by exploring and constructing in a limited environment (which may not always entail programming). More details on microworlds here: http://www.kurtz-fernhout.com/help100/00000508.htm A Smalltalk teaching product called LearningWorks http://learningworks.neometron.com/ includes specially designed starter browsers (and even limited debuggers!) where for example a student learns programming by sending Smalltalk messages to a square in a window connected to the browser. Please look at the pictures here for some ideas: http://learningworks.neometron.com/overview/LWPapers/VRLW.htm This is somewhat like teaching using the Logo turtle. One can tell the square to move left or right, or change the color. The Square represents an instance of a class. Then one can add behaviors to the square class, and invoke them. So, there is immediate feedback in a tiny virtual world. LearningWorks includes an authoring tool http://learningworks.neometron.com/doc/AuthTool/Default.htm to make these sorts of systems (as sort of learning notebooks). The LearningWorks system comes with a 3D interactive world (somewhat like a multi user Alice) where people can create dynamic objects and interact with them. Various papers on it are here: http://learningworks.neometron.com/overview/overview.htm I imagine one could add a Python interpreter to the LearningWorks system. I recently downloaded a Squeak program that teaches programming using a turtle. You have a "broken" program missing a couple of statement. This program makes a turtle move. You drag and drop existing statements into the program to fix it. After each try, the turtle moves and you can see the effect of your change. So here is a simple learning world of creating sequences by trying to match a graphical pattern. These patterns get more complex and involve more programming constructs (loops, etc.) as you progress through the program. YOu need to learn the language to get the results you want. An Alice-like 3D environment has been added to Squeak for teaching programming as well. Again, this is not to say use Smalltalk or Logo instead of Python. This is to say that these good ideas could be translated into a new Python teaching environment. There is much good work out there in ways to teach programming -- the Python learning effort should either build on top of it or at least "borrow" good ideas from it whenever possible. -Paul Fernhout Kurtz-Fernhout Software ========================================================= Developers of custom software and educational simulations Creators of the open source Garden with Insight(TM) garden simulator http://www.kurtz-fernhout.com From ivanlan@callware.com Fri Feb 4 23:10:02 2000 From: ivanlan@callware.com (Ivan Van Laningham) Date: Fri, 04 Feb 2000 16:10:02 -0700 Subject: [Edu-sig] Age groups References: <200002042250.RAA18589@brocade.nexen.com> Message-ID: <389B5C4A.4BFDB0E8@callware.com> Hi All-- Steve Morris wrote: > [snip] > A quick synopsis is that left brain people are described as rational > and pedantic with right brained people being intuitive and artistic. > As I said... a major simplification. > ``Pedantic'' is probably not a word that ought to be used in this context. I've always found that yes, you can sort of divide people into these two camps, but there's lots of crossover and bleed-through. Far more than people used to think, and lots more than I ever expected. As for me, I'm still struggling to see the difference between science and art. So far, I'm with Gregory Bateson on this. Let me cite the relevant part of a conversation with his ex-wife, Margaret Mead: Bateson: ``I'm not sure if I know the difference between science and art.'' Mead: ``That's all right, Gregory. I do.'' (Coevolution Quarterly #10) And sometimes I wonder if the borderland between the two isn't the land of Engineering, or at least Craftspersonship. (What a klunky word! But you get the idea.) > I find the suggestion interesting that experienced programmers often > have more difficulties with objects than beginners. That isn't my > personal experience but I have heard it said many times. > This actually wouldn't surprise me, because good objects are works of art. > BTW this topic may seem a little off point except that we need to > teach people with different learning strategies. There is a tendancy > of programmer types to use left brain teaching techniques and thus > lose half their audience out of the gate. Anyone who has ever sat in > front of a room full of young students knows that there are as many > learning strategies as there are students. CP4E needs to be sensitive > to this or it will be one more also ran strategy. > > I concur. And it's not enough being sensitive, either. That "other half of the audience" might have some blinding insights that CP4E can't do without. -ly y'rs, Ivan ---------------------------------------------- Ivan Van Laningham Callware Technologies, Inc. ivanlan@callware.com http://www.pauahtun.org http://www.foretec.com/python/workshops/1998-11/proceedings.html Army Signal Corps: Cu Chi, Class of '70 Author: Teach Yourself Python in 24 Hours From pdfernhout@kurtz-fernhout.com Fri Feb 4 23:32:54 2000 From: pdfernhout@kurtz-fernhout.com (Paul Fernhout) Date: Fri, 04 Feb 2000 18:32:54 -0500 Subject: [Edu-sig] IDLE/TK limitations for learning environments References: Message-ID: <389B61A6.3CFF45B8@kurtz-fernhout.com> David Scherer wrote: > This [using exisiting IDEs] may be appropriate in the very short run. > However, I think that a > completely cross-platform IDE suitable for novices needs to be developed, > packaged with everything that will be needed for novice users in an > absolutely airtight installer for every platform, and distributed with > tutorials and course materials. Totally agree! However, I do also see Steve Litt's point about the weakness of IDEs in: "Keep Python's advantages". He is quite correct in pointing out that IDEs may add another layer of complexity to the learning task. Of course, this assumes the user knows how to use an editor (and their OS) and this is not also somehow part of the instruction. Ah, the good old days of starting up a Commodore PET or C64 and just typing in BASIC... And I don't mean that sarcastically. Those were good days for learning programming -- instant on, no GUI clutter, immediate responsiveness, easy interruptability, even if it meant the power switch. We should strive to provide that sort of immediacy and recoverability in learning environments. To the extent that GUIs get in the way, or provide one more thing that breaks, they can be one more hurdle as Steve points out. We need to use the power of the machine and GUI to make things easier. How to do that is a difficult question -- especially when assuming total novices, and maybe no teacher, and you are considering the entire experience. Really, you want a user to get a friend to help download an EXE (or whatever), and then run it and be hand held by the program immediately to the degree the user needs it from there (even avoiding install choices if possible!). Web page tutorials also might help, assuming the user knows how to access them at the same time. Otherwise at least the core needs to be self contained. > Another issue is that the IDE needs to be absolutely stable. IDLE and most > other Python IDEs share a single Python interpreter with the user program. > I am convinced that this architecture is unacceptable for novice users (and > for me!) You hit the nail right on the head! Beginners have the least tolerance for delays and failures. Now that I think about it, this single interpreter is probably what is bothering me most about debugging with IDLE. I end up using IDLE to write code because of the prettyprinting and launch the Python programs seperately from a shell command line to get error messages. Or if I am desperate, I think I get one launch under TK from IDLE to get error messages before launching under the debugger won't work. A learning environment needs to be much more forgiving and reliable than average. Compartmentalization and "remote debugging" seems like the way to go. A learning environment also needs to hide much complexity (which entails some big changes). For example, for LearningWorks they modified the debugger to hide messages not related to the learning task. So, in Smalltalk's case, intermediate send and dispatch methods and lowest level errors (a final exception) were hidden from the beginning user. In the case of IDLE for example, to use the debugger in single step mode you may have to step through a lot of initialization code you don't want to. I still don't clearly understand when I can and cannot set various break points. A debugger that lets a learner focus on one section of code, and limited layers of code, is invaluable to the novice. While an expert knows when to step in or jump over, a novice does not. This is the sort of thing a learning environment should provide -- so for example if a novice is developing a GUI application as part of a learning exercise they can step into their code but not a library. Obviously they may need to understand the library eventually, so how and when they step into the library code is an issue of some complexity. -Paul Fernhout Kurtz-Fernhout Software ========================================================= Developers of custom software and educational simulations Creators of the Garden with Insight(TM) garden simulator http://www.kurtz-fernhout.com From pdx4d@teleport.com Sat Feb 5 04:19:15 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 04 Feb 2000 20:19:15 -0800 Subject: [Edu-sig] More Lesson Planning In-Reply-To: <3.0.3.32.20000204082625.006aa638@pop.teleport.com> References: <200002041413.JAA09270@eric.cnri.reston.va.us> <3.0.3.32.20000204011513.0075d40c@pop.teleport.com> Message-ID: <3.0.3.32.20000204201915.00703c24@pop.teleport.com> More re Kirby's Lesson Plan thread: Been continuing with my lesson planning. Those of you who followed links from my initial two posts (Feb) know that I'm essentially using a functional programming approach to talk about numeric series, then switching to object-oriented for polyhedra. Numeric series (e.g. odd numbers, square numbers) are a well-explored topic. If my curriculum is new in some way, it's simply that my focus is on series which have simple geometric pictures to go with them: square and triangular numbers, cubic and tetrahedral numbers. Even cuboctahedral numbers, with 1,12,42,92,162... spheres in successive layers of the cuboctahedron, with this animated GIF to go with it: http://www.inetarena.com/~pdx4d/ocn/graphics/cubanim.gif All of these series may be modeled by packing spheres together -- a hands-on activity or computer-graphical application (I use Povray and VRML) to go with the purely algebraic approach. To tie my series together, I go to Pascal's Triangle, already a rich source of math topics.[1] The entries result from evaluating n!/k!(n-k)! so you can use Python to develop Factorial (fact): Recursive [2]: def fact(n): # factorial of n, recursive if n <= 1: return long(1) else: return long(n) * fact(n-1) Non-recursive: def fact(n): # factorial of n, non-recursive reduce(lambda x,y: long(x*y), range(1,n+1)) Notice, mathematicians have no problem with: 5 * 4 * 3 * 2 * 1 ----------------- i.e. n!/k!(n-k)! where n=5, k=2 2 * 1 * 3 * 2 * 1 but, from a computational point of view, this is inefficient, as a lot of terms "cancel". We'd do a lot better starting with: 5 * 4 ----- 2 * 1 In other words, I'd like to start down the factorial path, but depending on my value for k, not go all the way down to 1. That way I'll get n!/(n-k)! without redundant ops, leaving only the final division by k! for n!/(n-k)!k! def kfact(n,k): # n!/(n-k)! if k < 1: return 1 else: return n * kfact(n-1,k-1) With kfact in place, I have what I need to generate Pascal's Triangle: def pascal(n,k): # row n, column k return kfact(n,k) / fact(k) def showpascal(n): # print successive rows of pascal's triangle to row n for r in range(0,n+1): row = [] for c in range(0,r+1): row.append(pascal(r,c)) print row >>> reload(series) >>> series.showpascal(10) [1L] [1L, 1L] [1L, 2L, 1L] [1L, 3L, 3L, 1L] [1L, 4L, 6L, 4L, 1L] [1L, 5L, 10L, 10L, 5L, 1L] [1L, 6L, 15L, 20L, 15L, 6L, 1L] [1L, 7L, 21L, 35L, 35L, 21L, 7L, 1L] [1L, 8L, 28L, 56L, 70L, 56L, 28L, 8L, 1L] [1L, 9L, 36L, 84L, 126L, 126L, 84L, 36L, 9L, 1L] [1L, 10L, 45L, 120L, 210L, 252L, 210L, 120L, 45L, 10L, 1L] I suppose all those Ls will be annoying to some. Factorial blows up quickly and I didn't want to cap it with mere integers. I note that in Scheme I wouldn't need to explicitly 'type' my return values to make them long. But most other languages don't even support the long integer type, allowing 1000! without overflow.[3] You'll see the triangular and tetrahedral numbers appear as diagonals in Pascal's triangle. Alternative functions might therefore return tri(n) or tetra(n) simply by going to the relevant (row,col) entry in Pascal's: def tri2(n): # lookup nth triangular number in pascal's triangle return pascal(n+1,n-1) def tetra2(n): # lookup nth tetrahedra number in pascal's triangle return pascal(n+2,n-1) There's also a way to get the Fibonacci's as sums of yet other diagonals. This is my link to PHI, which also figures in my geometric bridge from the cuboctahedron to icosahedron via the jitterbug transformation.[4] Kirby Notes: [1] http://www.inetarena.com/~pdx4d/ocn/binomial.html [2] I notice the Scheme books do a 'tail-recursive' version of factorial that doesn't require two separate calls to a recursive function, as per the above Python def. This is accomplished by embedding a function inside of fibbo. I know Python allows defs within defs -- but can the inner defs be recursive? [3] cite thread on AMTE listserv: http://forum.swarthmore.edu/epigone/amte/phoxtilteld [4] http://www.teleport.com/~pdx4d/volumes2.html (all animated GIFs on this page done using Python) From pdx4d@teleport.com Sat Feb 5 04:37:58 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 04 Feb 2000 20:37:58 -0800 Subject: [Edu-sig] More Lesson Planning (correction) In-Reply-To: <3.0.3.32.20000204201915.00703c24@pop.teleport.com> References: <3.0.3.32.20000204082625.006aa638@pop.teleport.com> <200002041413.JAA09270@eric.cnri.reston.va.us> <3.0.3.32.20000204011513.0075d40c@pop.teleport.com> Message-ID: <3.0.3.32.20000204203758.007057c0@pop.teleport.com> >[2] I notice the Scheme books do a 'tail-recursive' > version of factorial that doesn't require two ^^^^^^^^^ Correction: this should have been 'fibonacci', not factorial. Like, in Python I might write: def fibbo(n): # return nth fibonacci number if n == 0: return 0 elif n == 1: return 1 else: return fibbo(n-1) + fibbo(n-2) but that sets up two separate recursive calls. There's a "tail recursive" alternative which sets up an inner function accepting two args that I saw in a Scheme text. Wondering if there's a Python equivalent. Can internal defs be recursive, is the first question? Yes, I tried. But I'm no Python guru. From glossner@pobox.com Sat Feb 5 04:47:50 2000 From: glossner@pobox.com (John Glossner) Date: Fri, 4 Feb 2000 23:47:50 -0500 Subject: [Edu-sig] Age groups References: <20000203155039.71475.qmail@hotmail.com> <3.0.3.32.20000203093624.0076700c@pop.teleport.com> <00a801bf6f02$ebcbe850$07000100@elite> <20000204145751.B2342@stopcontact.palga.uucp> Message-ID: <019501bf6f94$28e1c1b0$07000100@elite> Hi Gerrit, > > John Glossner wrote on 949642092: > > 1) Math illiterate (any age but probably under 5) > > You should not try to teach them programming. > Why? This could apply as easily to a 30 year old in a third world country as to a 3 year old. If you pick up many programming books (other than visual basic books) you typically end up learning how to solve scientific problems. By the way, if you think there are no requests for this I will introduce you to my 82 year old grandfather who would like to learn how to program but does not have any of the background for it. The hurdle is just too high. He can however use a computer. > > 2) Early Education (5-7 year old) > > I think it's still to early to teach kids who can't read programming. > My just barely 6 year old is fully able to read. She is also extremely computer literate. > > 3) Elementary Education (8-10 year old) > > You can start here. The concept of variables, lists and functions can > be explained. Dictionairies too, I think. Classes will probably be only > for the very smart ones. > I can tell you from experience that it is very difficult to keep their interest. My son complains why does he have to learn this binary arithmetic stuff. Why can't I just make Ash's Pokemon battle Gary? And let's talk about the current literature available to them. It is impossible for them to take any of the Python books and just start reading them. There is too much background that they assume. These books are excellent for programmers but not ok for kids. There really needs to be some python material that gently introduces non-technical people into programming. > > 4) Middle school (11-13 year old) > > I learned Python at this age. > I agree to a large extend that it gets easier at this stage. > > 5) Senior high (14-16 year old) > > There's already enough documentation for this ones, > but to encourage them it's needed to use alice like things. > Translations are also useful. > Can you tell me where this is? All I can find is BASIC for dummies. I would accept Java, C++ or any other reasonable language. If it is in Python I'll kick my heels up! I have looked and can't find anything appropriate. However, since I'm older ;-) you may have access to sources I don't (ps: they can even be in Dutch if necessary :-) > > 6) Advanced Senior high (16-18 year old) > > It's not needed to give them extra documentation. They know English > and can make their way perfectly. > Ouch... so you throw them right into Lutz's excellent book? I suppose it could work. Even my 10 year old is working his way through the annotated archives. But I really think the point of this forum is to find a better way for them. > We shouldn't try to teach kids who can't read yet to learn programming. > Ok. I may grant you that ages 0-4 will find it more difficult but even for them I can envision an environment that allows them to program by visually manipulating commands (ala record). > Turtle graphics are also harder than you might think for these ones: > there must be a window for "turtle.right(5)", because they don't > know about degrees yet. > I think you really have understood my point. There is so much Math and Computer related concepts required to write your first program that the hurdle is overwhelming for the majority of people. This is what we need to fix. Thanks for your comments. It is nice to have all ages participating in this sig! Best Regards, John Glossner From glossner@pobox.com Sat Feb 5 04:48:12 2000 From: glossner@pobox.com (John Glossner) Date: Fri, 4 Feb 2000 23:48:12 -0500 Subject: [Edu-sig] Pythemon or Pokethon References: <01bf6eea$95741a80$13ec1fc2@pc696.adtranzsig.de> <00020408190600.01180@tpaine.yorktown.arlington.k12.va.us> <200002041550.KAA13768@eric.cnri.reston.va.us> Message-ID: <019601bf6f94$356f6900$07000100@elite> Wow... I go to visit a friend for 1 day and this list explodes! > > 3. Taking an idea from the first edu-sig meeting at the conference, > > four of our students are working on a Pokemon card game in Python. > > They will be putting it on sourceforge when it really gets underway. > > I'm hoping both to give them a fun project to work on and to have > > something to use to begin to interest my 8 year old son in Python. > > Didn't someone at the meeting coin the term Pokethon? Or was it > Pythemon? :-) > I can't begin to tell you how much my kids will appreciate this! Thanks, John Glossner From hank@prosysplus.com Sat Feb 5 05:35:43 2000 From: hank@prosysplus.com (Hank Fay) Date: Sat, 5 Feb 2000 00:35:43 -0500 Subject: [Edu-sig] baby steps redux Message-ID: [clip] > Making things practical, and packaged, is the key to getting them in the >classroom. Give a teacher a program that meets the level of her students, >and a lesson plan that goes with the software, together with a teaching >guide, and if it works, it will be adopted. Give them building blocks they >have to put together themselves, and adoption will be spotty. Hank -- the preceding is fascinating. Can you be more specific? ******** Steve, when a teacher teaches in a classroom, everything is laid out in a lesson plan. That lesson plan references curriculum objectives, details methods, etc. It's a lot of work to develop these. Typically, it takes until the 3rd year for an experienced teacher moving to a new grade level to have it all down to a comfortable level. The general curriculum demands come from the State, but generally fall into line with curriculum standards that are essentially national: if California and Texas adopt a textbook, e.g., the rest of the states will likely end up using that book, because that's what the publishers will offer (and the associated curriculum materials will be available for those books, etc.). Nothing will happen in this (programming) initiative in the classroom unless these materials are made available to the teachers. To create a new curriculum for a single subject at the local level typically involves a team of 5 teachers meeting half-days for several weeks during the summer (if not much more, depending on the degree of sea-change). Not that they don't like this work (it's a way to make some money during the summer and still be able to golf and fish ), but the school districts have to fund it, the teachers have to have the background in the area which in this case would involve additional training, etc. But if they are presented with the materials ready to go, and a few web-based workshops can teach them how to use the materials, then the chance of adoption shoots up. That brings one to the issue of what they need. The best educational software involves teacher and class: Tom Snyder Productions specializes in this kind of software, e.g. It's a whole area of expertise which is outside of the ken of anyone I've seen represented on this list, including myself. Then there is the 1- or 2-person software, with which we're more familiar (but it's still not our field of expertise), needed for triangulating the previously learned material. I think we're in a position to give some limited input; but getting it to happen will involve educational curriculum specialists, educational software designers, and Python users. Our input will need to be elicited into usable form by the educational curriculum specialists, specifically those with an orientation toward cognitive development; then put into curriculum form by those curriculum specialists who are classroom oriented. Then put into educational software by the ed. software designers, coordinated with teaching materials, lesson plans, and test materials geared to curriculum standards. It's a daunting task. The danger I see in this list is that one always tends to see other people's jobs as being easy, not requiring special expertise. I would no more tell a classroom teacher how to teach a subject than I would let a classroom teacher tell me how to design a database, or subclass an object. thanks for asking , Hank From glossner@pobox.com Sat Feb 5 06:13:04 2000 From: glossner@pobox.com (John Glossner) Date: Sat, 5 Feb 2000 01:13:04 -0500 Subject: [Edu-sig] Common Graphical Framework for Python Tutorials? References: <20000203155039.71475.qmail@hotmail.com> <3.0.3.32.20000203093624.0076700c@pop.teleport.com> <00a801bf6f02$ebcbe850$07000100@elite> <389AFB67.7FA4D066@kurtz-fernhout.com> Message-ID: <01e901bf6fa0$12b9a4f0$07000100@elite> Hi Paul, > Obviously in John's case, he went with Emacs for editing Python text > files (although perhaps is using IDLE too?) Why did you not just go with > IDLE for everything? > When I started this I had python 1.5.1 on my Linux box. I should probably re-evaluate this now. > -Paul Fernhout > Kurtz-Fernhout Software > Chappaqua, NY > By the way, you are very close to me. I live in Carmel NY. John From fig@oreilly.com Sat Feb 5 07:36:17 2000 From: fig@oreilly.com (Stephen R. Figgins) Date: Fri, 04 Feb 2000 23:36:17 -0800 Subject: [Edu-sig] Creating worlds. In-Reply-To: Your message of "Fri, 04 Feb 2000 16:53:13 EST." <200002042153.QAA14897@brocade.nexen.com> References: <200002042100.QAA11228@brocade.nexen.com> <200002042153.QAA14897@brocade.nexen.com> Message-ID: <200002050736.XAA02098@rock.west.ora.com> On the subject of providing worlds, not providing worlds, etc. Don't we already live in a world with interesting problems to solve? I would rather see something grounded in the real world - or at least, the real internet world. Maybe there are some sections of the internet that are more easily manipulated than others. Hopefully lots of them. Rather than creating game worlds, perhaps we could help people find those places they can manipulate, that will be their teachers. CP4E suggests that when everyone knows a bit of programming, they can more easily script and manipulate the programs they use. There is a promise of freedom there. A freedom to alter the real world. Anyone out there have any inspiring stories of some problem you solved cleverly using a tiny bit of programming. A few lines of code that changed everything? Any stories that explore the freedom found in knowing how to program? Maybe a problem that eluded you until just the right aha moment got you? Ever manipulate an existing program or set of programs or some feature on the web or internet with a bit of python to glue it together and make it into something different? Such stories could be part of the inspiration provided in training materials, along with explorations of where programs are most scriptible, how to become aware of what is scriptable, how is it scriptable? How can you find out more? A lot of applying programming well is just knowing where to look. Then you take some power tools and patterns commonly found in programming and utilized in the stories, and show how those tools can be applied to change the world, if only just a little bit. The more ineresting and useful the change the better. The more connected it is to the real world (or at least the internet) the better. Even scripting some MUD out there - building objects online would be better than some isolated world you are trying to problem solve. The more others can see it, comment on it, be impressed by it, the better. And the less it is something contrived to teach a lesson, the more likely it is that a lesson will be learned. If our own world does not provide enough interesting opportunities for programming, then why should everybody learn programming? Actually that is probably the biggest hurdle to teaching anyone programming, inspiring them about what is possible. Once inspired, you can hardly stop them from learning. We must answer "why should everybody learn programming" for each person to whom we will say "you should learn programming." Stephen R. Figgins fig@oreilly.com From tim_one@email.msn.com Sat Feb 5 08:01:43 2000 From: tim_one@email.msn.com (Tim Peters) Date: Sat, 5 Feb 2000 03:01:43 -0500 Subject: [Edu-sig] Age groups In-Reply-To: <20000204145751.B2342@stopcontact.palga.uucp> Message-ID: <001c01bf6faf$3e523c80$182d153f@tim> [Gerrit Holl, on teaching Python to ages 11-13] > ... > I learned Python at this age. I found it difficult and reread things > a lot. Finally, I understood it. You can teach those kids much about > classes, but multiple inheritance is more difficult. I don't think > they'll understand map, reduce, filter, lambda and multiple inheritance. > I don't understand reduce either. Why and when to use it? Never, Gerrit! reduce is essentially worse than useless in Python (an expert may use it for "go fast" reasons, although in *most* cases it's not only more obscure, but also slower than the obvious Python loop!). At the advanced age of 14, it's time to face an ugly truth: grownups sometimes make really bad decisions too . I think this raises a larger issue, one of the few wholly valid points in the recent infamous criticism of CP4E: you need to define the goals of a curriculum. If the goal is primarily to teach programming as a means toward the improvement of the mind (developing reasoning skills, & so forth), forcing people to learn things like map and reduce may be a good thing: they're non-trivial but make perfectly good sense, so mastering them is a worthy accomplishment. If the goal is primarily to teach "computer science", then teaching map & reduce etc are essential -- but almost certainly better done in the context of Scheme (or some other language where higher-order functions are "natural", instead of (as in Python) "minor conveniences for people who miss Scheme" <0.1 wink>). If the goal is primarily to teach practical programming skills, best to forget them entirely! They add no power to Python, and the testimony of "almost all" posters to c.l.py over the years who have addressed this issue is that a straight Python loop is easier to write, and to understand later, and *much* easier to modify later (Python's "expression syntax" is (by design!) weak, and so expression-oriented programming suffers badly under modification in Python). I don't claim that those goals can actually be separated, but any specific curriculum will-- consciously or not --emphasize some particular one over the others. Make that decision in advance and it should be a powerful aid in guiding later decisions. one-size-fits-nobody-ly y'rs - tim From pdx4d@teleport.com Sat Feb 5 08:52:32 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Sat, 05 Feb 2000 00:52:32 -0800 Subject: [Edu-sig] Age groups In-Reply-To: <001c01bf6faf$3e523c80$182d153f@tim> References: <20000204145751.B2342@stopcontact.palga.uucp> Message-ID: <3.0.3.32.20000205005232.0074cb50@pop.teleport.com> >I think this raises a larger issue, one of the few wholly valid points in >the recent infamous criticism of CP4E: you need to define the goals of a >curriculum. My view is that programming languages give us more opportunities to present some of the same content you might find in an older, pre-computer math notation. Instead of using a big, funny-looking greek letter, called 'sigma', with these little i,j subscripts, we might try communicating some of the same ideas using a do-loop instead. Get back to the sigma later. Lots of kids will get into it deeper if we "lose the geeky greek" and just do it in something less alien -- like APL . The advantage of taking a math notation and re-expressing it in a programming language is you get something that runs, executes. This means you can start automating processes which are too tedious to do by hand, and your math curriculum can start taking advantage of this ability to do operations "in bulk" (every "add" operation now only costs you a penny, in terms of student time/energy, instead of 10 dollars). You can really start to take advantage of the computer's ability to render spatial forms. "Beyond Flatland" is very much a theme of the emerging 21st century math curriculum, the way I see it. BTW, I agree with comments made earlier that bubble sorts, or sorts of any kind, aren't particularly exciting. A lot of texts just get bogged down in examples that are dry as bones -- are in no way more interesting than the most boring of math books. And that's pretty boring. I think what's more challenging and interesting is to see math as Keith Devlin does, as a discipline which "makes the invisible visible". In this sense, a math teacher's job should be about deobfuscating, demystifying, helping students to flesh out their understanding of systems and infrastructure that runs "behind the scenes" in the real world. In this sense, the teacher is more a storyteller, weaving interesting narratives which interlace history, world affairs, technological innovations. But in order to tell these stories from a math-literate point of view, you have to impart numeracy and, as we get closer to talking about our own time, computer literacy. So in the course of your storytelling, you'll want to toss out a lot of connected "artifacts" which point beyond themselves to how the world works (sometimes I call them "cave paintings" -- because they're rather sketchy, schematic, idealized). Patches of notation, snippets of working code, flow charts, diagrams, graphical displays... always trying to up the comfort level, the confidance level, around working with "technical communications" in their many forms. To this end, I'd like to have sessions where we just play with some of the operatators a runtime (REPL) environment gives us. Play with entering expressions, getting back results (that's satisfying in itself). Play with writing short functions. In whatever language. Part of the fun is reading a short explanation of the syntax, and then testing it for real, to see if you're getting it right. 'map' and 'reduce' and so on are just more toys, fun to tinker with. Python is good because it provides in an immediate feedback setting, as do Scheme, APL, Logo, Xbase, Smalltalk... That's a number one criterion for a "teaching environment" -- this ability to enter an expression and have it be evaluated immediately. It's also good because you can set up an object structure very simply, and start talking about what OOP is all about. That's helpful, because then you can get kids to imagine how much more complicated systems of objects might be used to talk about heart surgery, transportation, toy manufacturing, banking -- you can start to bring the real world into view, in terms of objects. In sum, I'd like to see a more "Smithsonian Institution" approach to math learning, where we take time out to watch documentaries and to really appreciate what challenges people faced in the past, and how their mathematical abilities often entered into whatever solutions they managed to come up with (e.g. radar, encryption devices, navigation devices, ways to paint in perspective). As we approach the present day, we should be looking very closely at what people actually do on the job, and how mathematical thinking enters into that. This helps students to realistically "look over the shoulders" of people in many walks of life -- because if you're a creative teacher, you'll find a "math angle" on just about anything people are doing (and without making it seem highly contrived -- I'm really against all the "faux problems" which fill math texts, which have the ring of inauthenticity (kids know these aren't real problems, and don't want to waste their time on them -- understandably (not talking about abstract problems, which don't pretent to be "real world", but the ones which do so pretend, and fall way short of being convincing in this regard))). Kirby From tim_one@email.msn.com Sat Feb 5 10:51:40 2000 From: tim_one@email.msn.com (Tim Peters) Date: Sat, 5 Feb 2000 05:51:40 -0500 Subject: [Edu-sig] More Lesson Planning (correction) In-Reply-To: <3.0.3.32.20000204203758.007057c0@pop.teleport.com> Message-ID: <000001bf6fc6$fd6f49c0$a82d153f@tim> [Kirby Urner] >> [2] I notice the Scheme books do a 'tail-recursive' >> version of factorial that doesn't require two >> ^^^^^^^^^ > Correction: this should have been 'fibonacci', not > factorial. Like, in Python I might write: > > def fibbo(n): > # return nth fibonacci number > if n == 0: return 0 > elif n == 1: return 1 > else: return fibbo(n-1) + fibbo(n-2) > > but that sets up two separate recursive calls. There's > a "tail recursive" alternative which sets up an inner > function accepting two args that I saw in a Scheme > text. Wondering if there's a Python equivalent. > Can internal defs be recursive, is the first question? > Yes, I tried. But I'm no Python guru. There's a Python equivalent for everything <0.7 wink>, but "writing Scheme in Python" is a bad road to go down. Tail recursion is vital in Scheme but of no particular interest in Python (the Python interpreter doesn't look for it -- it does you no good (that's true in most languages, btw) -- in Scheme it can make the difference between a program that works and one that "blows up" the stack). Similarly, there are (exceedingly non-obvious!) ways to do nested recursive functions in Python, but they're unnatural in Python too: the scoping rules highly discourage it. "Flat is better than nested" is a good rule of thumb in Python. The things Scheme does with lexical closures are intended to be done with objects and explicit state in Python; in small examples the point to that is admittedly hard to get across; but read a Scheme function nested ten levels deep and it's hard to miss . An iterative Fibonacci function is most natural in Python. The one above is very inefficient (in Python or Scheme). BTW, note that the function recurses infinitely if an integer < 0 is passed. Python will detect that and raise an exception (although in 1.5.2, the detection doesn't work in the Windows release; fixed long ago, but not yet released); a tail-recursive Scheme program that gets into an infinite loop just runs forever. Interesting in *both* Python & Scheme (= *all* languages with recursion) is a technique called "memoization" for speeding functions like this, and that's interesting from both the "comp sci" and "practical programming" points of view. Like so, where I've taken the liberty of repairing the infinite-loop bug too (and where from all points of view, the value of validating arguments cannot be overemphasized): _fibcache = {} def fib(n): if n < 0: raise ValueError("fib argument must be >= 0: " + str(n)) elif _fibcache.has_key(n): return _fibcache[n] elif n <= 1: result = long(n) # prevent overflow else: result = fib(n-1) + fib(n-2) _fibcache[n] = result return result Then test: >>> fib(5000) # takes a noticeable (but small) amount of time 38789684543883256337019163083259053120821277146462451061605972148 95550139044037097010822916462210669479293452858882973813483102008 95498294036143015691147893836421656394410691021450563413370655865 62382546567007125259299038549338139288363783475189087629707120333 37052923107693008518093849801803847813996748881765554653788291644 26891298038461377896902150229308247566634622492307188332480328037 50391303529033045058427011476352422702109346376991040067141748832 98422891491273104054328753298044273676822977244987749874555691907 70388063704683279481135897373999311010621930814901857081539785437 91953056175107610530756887837660336673554452588448862416192105534 57493675897849027988234351023599844663934853256411952221859563060 47536464547076033090242080638258492915645287629157575914234380914 23029174910889841552098544324865940797935713168416928680395453095 45388698114665082066862897420639323438488465240988742395873801976 99382031717420893226546887936400263079778005875912967138963421425 25791168727556003603113705477547246046399875880469851784086743828 63125L >>> fib(5000) # doing it again appears instantaneous 38789684543883256337019163083259053120821277146462451061605972148 95550139044037097010822916462210669479293452858882973813483102008 95498294036143015691147893836421656394410691021450563413370655865 62382546567007125259299038549338139288363783475189087629707120333 37052923107693008518093849801803847813996748881765554653788291644 26891298038461377896902150229308247566634622492307188332480328037 50391303529033045058427011476352422702109346376991040067141748832 98422891491273104054328753298044273676822977244987749874555691907 70388063704683279481135897373999311010621930814901857081539785437 91953056175107610530756887837660336673554452588448862416192105534 57493675897849027988234351023599844663934853256411952221859563060 47536464547076033090242080638258492915645287629157575914234380914 23029174910889841552098544324865940797935713168416928680395453095 45388698114665082066862897420639323438488465240988742395873801976 99382031717420893226546887936400263079778005875912967138963421425 25791168727556003603113705477547246046399875880469851784086743828 63125L >>> fib(1) 1L >>> fib(-1) Traceback (innermost last): File "", line 1, in ? fib(-1) File "D:/Python/misc/fib.py", line 5, in fib raise ValueError("fib argument must be >= 0: " + str(n)) ValueError: fib argument must be >= 0: -1 >>> In Scheme, the cache is most naturally set up via a lexical closure. Making it a module vrbl in Python has a real advantage, in that it's trivial to inspect the contents whenever you like (& Scheme can also do it this way, although it's kinda "impure" in that worldview and so will earn you raised eyebrows and muted clucking ): >>> _fibcache # empty at first {} >>> fib(3) 2L >>> _fibcache # see what's in it now {3: 2L, 2: 1L, 1: 1L, 0: 0L} >>> fib(20) 6765L >>> _fibcache # detecting a pattern yet? {20: 6765L, 19: 4181L, 18: 2584L, 17: 1597L, 16: 987L, 15: 610L, 14: 377L, 13: 233L, 12: 144L, 11: 89L, 10: 55L, 9: 34L, 8: 21L, 7: 13L, 6: 8L, 5: 5L, 4: 3L, 3: 2L, 2: 1L, 1: 1L, 0: 0L} >>> Note that IDLE and PythonWin have good facilities for replaying earlier lines, and for word-completion, so I only had to type "_fibcache" once. Prettier output can be gotten via using the pprint (for "pretty print") module: >>> import pprint >>> dir(pprint) # see what's in it (refreshing my memory) ['DictType', 'ListType', 'PrettyPrinter', 'StringIO', 'TupleType', '_Recursion', '__builtins__', '__doc__', '__file__', '__name__', '_safe_repr', 'isreadable', 'isrecursive', 'pformat', 'pprint', 'saferepr'] >>> print pprint.pprint.__doc__ # was pprint it? Pretty-print a Python object to a stream [default is sys.sydout]. >>> pprint.pprint(_fibcache) # yup, that was it {0: 0L, 1: 1L, 2: 1L, 3: 2L, 4: 3L, 5: 5L, 6: 8L, 7: 13L, 8: 21L, 9: 34L, 10: 55L, 11: 89L, 12: 144L, 13: 233L, 14: 377L, 15: 610L, 16: 987L, 17: 1597L, 18: 2584L, 19: 4181L, 20: 6765L} >>> There's been some thought given to letting you "hook" the interpreter's "automagic output" formatting function, so that e.g. pprint could be invoked "by magic" all the time (or any function to do any kind of processing you like). The "jog my memory" and "print the help" procedures above are (IMO) too clumsy right now. not-the-answer-you-asked-for-but-hope-it-was-interesting- anyway-ly y'rs - tim From humbert@hagen.de Sat Feb 5 11:43:19 2000 From: humbert@hagen.de (L. Humbert) Date: Sat, 5 Feb 2000 12:43:19 +0100 Subject: [Edu-sig] inspecting a special world: the computer Message-ID: <00020513061000.00846@haspe> Hi, please excuse my english, I learned it at school many years ago (;- Let me introduce myself: I'm a teacher in informatics (this is sligthy different from CS). Before prepared to teach informatics, I studied informatics in general. In teaching, I began to _teach_ concepts in schools using several programming languages: - Pascal (and not BASIC),=20 - Modula-2 (and not Pascal),=20 - I took a look at Oberon-2, but the computers in school couldn't run it=20 - Python (and not Oberon-2), - JPython (and not Java) in secondary school (K-13) for beginners in thei= r 11th year in school. I know, it is very late, but at this moment there is no way to teach informatics for all students in secondary I - schools. What do you want to teach? -------------------------- my credo: =09o=09Programming -- no, =09o=09[perhaps] Solving problems -- even better, =09o=09modelling -- that's quite good, I think. case InSeNsItIvE? -- No! ---------------------- In my opinion the case sensitive construction is ok. - not only for me, b= ut for my students, because they are teached to regulary write case-sensiti= ve in my country. I never had problems with this in the beginning courses, the 2nd reason m= aybe,=20 I told them not only the difference, but the advantage of this decision. But you have to consider: I'm a german and in my language nouns are writt= en=20 with a first uppercase character. So, when modelling objectoriented, the students learn how to analyse and how to write classes, methods and attribute (classes are nouns --> 1st character uppercase, ...) =20 So I beg you: tell your students, that and why this decision makes sense and without sense, they never will be able to understand other levels of clean abstraction. platform dependend -- No! -------------------------- The last years of working as teacher I had to teach young assistent-teachers to become teachers. This way I became a look insight other schools: different platforms, different languages different examples, differnt curricula, ... So, this is a must: schools need software, running on the Mac, on Linux and of course on Win.=20 You may construct and evaluate prototypes - running only on one platform, but if we want to go into "production", we need software, which runs on all of the above mentioned OS. Why JPython? ------------ I'm a teacher with low time capabilities in modelling (and implementing) a _paedagogical_ well defined class-structure for my students.=20 Some years ago, several teachers sat down and constructed a class-library for teaching objectoriented concepts rather than languages. We implemented the class structure for some Pascal-dialects, Oberon-2, and later on Java. In the meantime, the material for teaching this concept is available (but it's written in german). Find some information http://region.hagen.de/OOP/#PYTHON=20 At this location you find a link to: =09SuM.jar (this includes all the classes you need to work) So you are able (if you installed JPython), to test the=20 beginners example, I give at the bottom of this mail. In the meantime, the material is published (but again: it's in German): (Czischke1999,EDITION) =3D 1.~Ed. (Czischke1999,PUBLISHER) =3D DruckVerlag Kettler GmbH (Czischke1999,YEAR) =3D #1999 (Czischke1999,EDITOR) =3D {Landesinstitut f{\"u}r Schule und Weiterbildun= g} (Czischke1999,ADDRESS) =3D B{\"o}nen (Czischke1999,REFTYPE) =3D book (Czischke1999,ANNOTE) =3D ISBN 3-8165-4165-8 (Czischke1999,TITLE) =3D Von Stiften und M{\"a}usen (Czischke1999,AUTHOR) =3D J{\"u}rgen Czischke and Georg Dick and Horst Hildebrecht and Ludger Humbert and Werner Ueding and Klaus Wallos My way to JPython:=20 in JPython I am able to use the SuM.jar and the students too. 1. The students work with the JPython-console interactive (on iMacs). They learn how to import and use classes, for working on "the screen". opening a window, drawing on it with some method-call, etc. They are told how to "explore" a given class: =09dir(classname) or package: =09dir(packagename) 2. the first classes in this package (SuM.jar) are: Bildschirm, Tastatur, Maus, Stift [later extended to BuntStift] and some more. The students themself identify the components of their actual computer environment and point out, what methods should be realized. They are able to inspect this by looking at the classes. The classes are handy, easy to use and so you can concentrate on concepts instead of syntactical constructions. The JPython interactive environment is - for my students - the frontend for testing. Ok: they have to learn how to use an editor (in our special case it's BBEdit) and to save their work. But isn't it easy to type _and_ evaluate interactive? Example: =09>>> from stiftUndCo import Bildschirm =09>>> from stiftUndCo import Stift =09>>> meinBildschirm=3DBildschirm() # you see the window coming up =09>>> meinStift=3DStift() =09>>> meinStift.runter() =09>>> meinStift.bewegeBis(320,240) # you see the line getting drawn =09>>> meinStift.zeichneKreis(30) # ... It's a turtle based geometry, with some more methods for absolute placing. =20 This way students learn, how to control components in this environment. They learn to interactive control the scene by the mouse (class Maus) and keyboard (class Tastatur). In this way, you teach control structures, as they are needed. One day they'll ask: why can't we use some color and you have to teach that there are some more classes:=20 at first BuntStift,=20 --> here you have to explain, what subclassing is good for. BuntStift is an extension of Stift =2E.. I'll stop here in describing. This is not the place to show the whole course. In some months, I'll hope to be able to put some material online, so you can get it by using the URL=20 =09http://region.hagen.de/OOP/ At the moment, the material for my course is only online in the intranet = of my school (using a local BSCW-Server, which was writen in Python). =09L. Humbert =09humbert@hagen.de From pdx4d@teleport.com Sat Feb 5 16:00:41 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Sat, 05 Feb 2000 08:00:41 -0800 Subject: [Edu-sig] More Lesson Planning (correction) Message-ID: <3.0.3.32.20000205080041.03866d34@pop.teleport.com> >not-the-answer-you-asked-for-but-hope-it-was-interesting- > anyway-ly y'rs - tim On the contrary, this was _exactly_ the kind of answer I was hoping for. Very lucid and elucidating oh Mr. Python guru sir. Sincerely, Kirby From dscherer@cmu.edu Sat Feb 5 16:05:12 2000 From: dscherer@cmu.edu (David Scherer) Date: Sat, 5 Feb 2000 11:05:12 -0500 Subject: [Edu-sig] On case sensitivity In-Reply-To: <200002042231.QAA04000@beluga.mojam.com> Message-ID: > 1. Perhaps the language doesn't need to be changed. Guido talked about > putting case-desensitization magic in the programming > environment, not in > the language. If that can be done well enough, then that can be the > default there (with perhaps a flag to disable it). Most of us old-line > programmer types will probably continue to use Emacs, vi, Joe, > BBEdit or > something else to edit our files anyway. We all agree that changing the environment is much easier. There are some subtle problems related to names being dynamically defined by different methods. Hopefully they can be worked out. GvR is probably the right person to be working on it. > The upshot > of this is that people will gradually get more comfortable > with the idea > and "SHOUT", "Shout" "*shout*", and "shout" mean subtly > different things > depending on context. They key word here is "subtly". The difference between the following two programs is not subtle: t=0 while t<5 T=t+1 t=0 while t<5 t=t+1 See one of my previous posts for a proposed way of addressing this problem. > s/[cC]ockroaches/Windows/ > s/humans/Unix/ > B^) > 4. And later in the same message, there is an apparent contradiction with > the cockroach statement: > > The needs of the (10M?) programmers in the world are vastly outweighed > by the needs of the six billion normal people. They are always right > and we are always wrong. Randy and Guido are 110% right about that. This is not a contradiction. Numbers do not imply value. They do imply conversion cost: either each non-programmer or each programmer and each existing program need to change. Windows users are more numerous than Unix users, so converting all of the Windows users to Unix would involve an enormous cost. Economics guarantees that this will not happen unless an equally enormous benefit is available, or the distance from being a Windows user to being a Unix user is reduced. We have a goal: get everyone writing computer programs. If we want it to happen, we must keep the overall costs as low as possible. That involves minimizing the distance that non-programmers need to travel. There are no value judgements involved. If we believed that teaching case-sensitive programming would be much more beneficial than teaching programming in a case-insensitive language, then we could weigh that against the conversion cost. In this case, though, I don't think there's any real advantage to case sensitivity for anyone; there's just a large conversion cost. > The more serious point is that majority rule accepted blindly can have > substantial negative consequences for minority members of the population. > It frustrates me to no end to see people release software that *only* > runs on Windows, even though I know that "majority rules" or "the VCs > have never heard of Unix". How much open-source software is there that doesn't run on Unix? Python is open source. I assume that most of the tools developed by the people in this SIG will be open source. Real Programmers (tm) will always be able to get the programming environment they want, because the source is available and they know how to change it. The only thing this SIG can possibly take away from the existing Python community is a little of Guido's attention. The goal is to place that power in the hands of everyone else! Dave From ping@lfw.org Sat Feb 5 18:52:57 2000 From: ping@lfw.org (Ka-Ping Yee) Date: Sat, 5 Feb 2000 10:52:57 -0800 (PST) Subject: [Edu-sig] Rational Division In-Reply-To: Message-ID: On Fri, 4 Feb 2000, Jeffrey Kunce wrote: > Smalltalk has a subclass of "Number" called "Fraction". When you > write 2/3 in Smalltalk, it actually stores the numerator and the > denominator, and the whole roundoff question is moot. (Of course > there is a protocol for mixed-mode arithmetic.) > > I taught Smalltalk to a number of programmers, and this was > always a difficult feature. The "integer vs real" dichotomy is > so engrained in the programming culture that it was hard to > accept a different representation. Usually, once I reminded > them about their high school algebra classes, and how they > dealt with fractions in equations, the concept would fall > into place. > > So, what does "E" think? Does 2/3==0 or does 2/3==1 > or does 2/3=0.66..67 or does 2/3==2/3? I'm not saying > that "E" thinks of 2/3 as a rational fraction, but I think > we ought to do some asking before we decide on > something else. In E, there are two operators for division: 2 / 3 yields 0.666666 2 _/ 3 yields 0 Read "_/" as "floor-divide". (See http://www.eright.org/elang/grammar/expr.html.) Note that in the current Python, if a and b are integers and f is the floating-point result of dividing a by b, then a/b is *not* equal to int(f). It's equal to math.floor(f). int() truncates, always rounding towards zero (an abomination in my opinion!), while floor() rounds down. -9 / 10 yields -1 9 / 10 yields 0 but int(0.9) yields 0 int(-0.9) yields 0 floor(0.9) yields 0.0 floor(-0.9) yields -1.0 -- ?!ng I never dreamt that i would get to be The creature that i always meant to be But i thought, in spite of dreams, You'd be sitting somewhere here with me. From jmax@portal.ca Sat Feb 5 18:56:41 2000 From: jmax@portal.ca (John Maxwell) Date: Sat, 5 Feb 2000 10:56:41 -0800 (PST) Subject: [Edu-sig] Creating worlds. In-Reply-To: <20000205073524.D17F61CD20@dinsdale.python.org> from "edu-sig-request@python.org" at Feb 05, 2000 02:35:24 AM Message-ID: <200002051856.KAA05863@cr366361-a.crdva1.bc.wave.home.com> Stephen Figgins writes: > On the subject of providing worlds, not providing worlds, etc. Don't > we already live in a world with interesting problems to solve? I > would rather see something grounded in the real world - or at least, > the real internet world. Maybe there are some sections of the > internet that are more easily manipulated than others. Well, the Web itself seems like pretty good fodder, and if we are indeed likely to see a shift to XML as the main language of web-based data (producing, in other words, an actual parse-able web) then Python with an XML module becomes an extremely powerful tool for churning through massive amounts of the world. One of the things I'm interested in developing is a heavily-scaffolded framework (for younger kids) to create bots or agents (or whatever you want to call them) to dig through web-based content... to build little, specialized crawlers, or to post-process the results of search engines out there. As I say, the more we start seeing an XML-based Web, the more possible this becomes for (young) casual hackers. > scripting some MUD out there - building objects online would be better > than some isolated world you are trying to problem solve. The more > others can see it, comment on it, be impressed by it, the better. And > the less it is something contrived to teach a lesson, the more likely > it is that a lesson will be learned. The work and writings of Amy Bruckman (www.cc.gatech.edu/fac/Amy.Bruckman) are instructive here... she had kids as young as 9 and 10 programming, sharing code, and teaching one another how to do it. The key wasn't the technological superiority of the system (she built an IDE and a Logo-like layer on top of Pavel Curtis' MOO language), but rather that the whole thing was set up to be a collaborative working environment, where the kids were sharing stuff, rather than just solo hacking. The environment (I mean the conceptual and social environment, not the IDE) also provided the reasons WHY they were motivated to do it. - John Maxwell jmax@portal.ca ------------------------------------------------ Multimedia Ethnographic Research Lab (MERLin) University of British Columbia, Canada From jelkner@yorktown.arlington.k12.va.us Sat Feb 5 19:19:05 2000 From: jelkner@yorktown.arlington.k12.va.us (Jeffrey Elkner) Date: Sat, 5 Feb 2000 14:19:05 -0500 Subject: [Edu-sig] baby steps redux In-Reply-To: References: Message-ID: <00020514413601.02613@tpaine.yorktown.arlington.k12.va.us> Hi All! I want to thank Hank for his excellent explaination of how things work in school systems regarding curriculum materials. In particular, the following comments hit the nail on the head: > To create a newcurriculum for a single subject at the local level typically > involves a team of 5 teachers meeting half-days for several weeks during the > summer (if not much more, depending on the degree of sea-change). > But if they are presented with the materials ready to go, and a few > web-based workshops can teach them how to use the materials, then the chance > of adoption shoots up. I think what we need is a sort of contentforge.net for teachers. It would be a place where teachers could share open content lesson plans and other educational materials. It should be aimed at teachers and developed in consultation with them, inorder to be a tool that will meet their needs. As someone who has participated in several of the newcurriculum teams that Hank speaks of, it has always struck me how inefficient the system is. Teachers in each local area are forced to recreate the same materials over and over. A lot of sharing does happen at conferences and other meetings set up for this purpose, but it is not nearly as well organized as it could be. The two biggest drawbacks have been: 1. How to distribute the materials (paper copies are the way it is still normally done, making it both difficult and expensive to get the stuff in the hands of the teachers). 2. Copyright restrictions. I have seen many fine teachers willingly share their materials, but I have also been at confernces where much of the best stuff is only for sale. I think that and open content environment could be created that would encourage more teachers to share. We would need to find a site to host such a contentforge, and I believe Frank Willison at Oreilly is looking into this. Maybe CNRI could host it as well, particularly a site aimed at Python educational materials. jeff elkner From jason@crash.org Sat Feb 5 19:40:54 2000 From: jason@crash.org (Jason L. Asbahr) Date: Sat, 05 Feb 2000 13:40:54 -0600 Subject: [Edu-sig] Common Graphical Framework for Python Tutorials? Message-ID: <3.0.32.20000205132951.00d74214@mail112.pair.com> Greetings, Quick intro: My name is Jason Asbahr, I've been using Python since 1.3, and it's now my favorite language. I presented a paper on using Python in interactive 3D environments at the 1998 conference in Houston, and I'm currently developing massively multiplayer persistent virtual world games at Origin Systems (http://www.origin.ea.com) -- using Python, of course. :-) I have a strong personal interest in technology education, both the teaching of technology and how technology can be used to improve education as a whole. Paul Fernhout presented some good points about the strengths of the Squeak Smalltalk environment. I suspect that merging Python and Squeak would be difficult, but building a Python learning environment using Squeak as a model is a great idea. To quote myself (ahem) in an old email to Guido: >There's a great video of Adele Goldberg's presentation at OOPSLA 1995 >called "What Should We Learn? What Should We Teach?" that might have >some application for the project. She presents some terrific ideas >for teaching fundamental OOP concepts (in Smalltalk) using interactive >2D graphical systems. I immediately thought how cool it would be to >port/rebuild such a system in Python for Python. It wasn't Squeak, exactly, but it looked like a good way to teach OOP without getting hung up in syntax issues. I need to review this tape again and post more specifics. :-) Cheers, Jason Asbahr Origin Systems, Inc. jasbahr@origin.ea.com From jason@crash.org Sat Feb 5 20:11:25 2000 From: jason@crash.org (Jason L. Asbahr) Date: Sat, 05 Feb 2000 14:11:25 -0600 Subject: [Edu-sig] On case sensitivity Message-ID: <3.0.32.20000205141021.00d5914c@mail112.pair.com> Guido wrote: >Actually, I want to create an IDE that is sufficiently aware of the >syntax that it can tell assignment from use in most cases. Would it be reasonable to conceive of these IDE enhancements as middleware -- and make them part of the standard Python distro? The idea would be to allow third party IDE developers to hook into these extremely useful functionality sets... Cheers, Jason Asbahr Origin Systems, Inc. jasbahr@origin.ea.com From jhrsn@pop.pitt.edu Sat Feb 5 21:58:17 2000 From: jhrsn@pop.pitt.edu (Jim Harrison) Date: Sat, 05 Feb 2000 16:58:17 -0500 Subject: [Edu-sig] Creating worlds -- graphical interfaces In-Reply-To: <200002051856.KAA05863@cr366361-a.crdva1.bc.wave.home.com> Message-ID: re Stephen Figgins' and John Maxwell's discussion: >> On the subject of providing worlds, not providing worlds, etc. Don't >> we already live in a world with interesting problems to solve? I >> would rather see something grounded in the real world - or at least, >> the real internet world. The point is that you need to select problems that the students will find motivating. The nature of the most motivating problems will vary among different groups of students of different age and background. The manipulation of graphical objects on screen is a useful task for younger students because it is highly motivating and it provides immediate feedback about the correctness of a program's logic. To be successful with younger students, Python needs both a straightforward development IDE and tight integration with a cross-platform GUI library that covers Mac, Windows and Linux. I've not done GUI development with Python yet, but my impression is that Tkinter is a bit unwieldy, particularly on the Mac where there are residual problems with menubar swapping. wxWindows and wxPython looked pretty good at the Python conference. Though a Mac version of wxPython isn't available yet, Mac wxWindows 2 is out and I understand that wxPython for Mac should be straightforward. Would it make sense to explicitly choose a GUI package (like wxWindows) to integrate with Python for educational work? If that were done, perhaps some standard tools could be developed in the forthcoming IDE that would allow young students to add a subset of GUI features to their programs in a straightforward way. Jim Harrison Univ. of Pittsburgh From skip@mojam.com (Skip Montanaro) Sat Feb 5 22:56:33 2000 From: skip@mojam.com (Skip Montanaro) (Skip Montanaro) Date: Sat, 5 Feb 2000 16:56:33 -0600 (CST) Subject: [Edu-sig] On case sensitivity In-Reply-To: References: <200002042231.QAA04000@beluga.mojam.com> Message-ID: <14492.43681.208581.935276@beluga.mojam.com> me> The more serious point is that majority rule accepted blindly can me> have substantial negative consequences for minority members of the me> population. It frustrates me to no end to see people release me> software that *only* runs on Windows, even though I know that me> "majority rules" or "the VCs have never heard of Unix". Dave> How much open-source software is there that doesn't run on Unix? Not quite the point I was trying to make. In the commercial software arena we see people making decisions strictly on the basis of numbers. That same thing can happen in the open source arena. If Guido decides to make some future version of Python case-insensitive using strictly a numbers argument, then the same problem exists, open source or not. The only difference would be that I'd have the freedom to create my own version of Python that was still case-sensitive. Of course, it would have no real chance of survival, because it wouldn't be able to reliably use modules written for ci-python. Skip From guido@python.org Sun Feb 6 02:58:35 2000 From: guido@python.org (Guido van Rossum) Date: Sat, 05 Feb 2000 21:58:35 -0500 Subject: [Edu-sig] Stop the insanity -- no more case sensitivity discussion! Message-ID: <200002060258.VAA17111@eric.cnri.reston.va.us> The discussion on case sensitivity has already driven at least one educator away from this forum. I'm very sorry that that has happened. I propose that we impose a voluntary ban on further discussion of that topic in the edu-sig; feel free to take the discussion elsewhere (c.l.py for example; it will look good in the stats :-). I will not respond to any posts on this topic in the edu-sig, nor in private email -- I simply don't have the capacity to argue this point any more. Python 1.x will remain case sensitive anyway. --Guido van Rossum (home page: http://www.python.org/~guido/) (I am also going away for a week.) From pdx4d@teleport.com Sun Feb 6 03:34:45 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Sat, 05 Feb 2000 19:34:45 -0800 Subject: [Edu-sig] Creating worlds -- graphical interfaces In-Reply-To: References: <200002051856.KAA05863@cr366361-a.crdva1.bc.wave.home.com> Message-ID: <3.0.3.32.20000205193445.0077a6ac@pop.teleport.com> >different groups of students of different age and background. The >manipulation of graphical objects on screen is a useful task for younger >students because it is highly motivating and it provides immediate feedback >about the correctness of a program's logic. > >To be successful with younger students, Python needs both a straightforward >development IDE and tight integration with a cross-platform GUI library that >covers Mac, Windows and Linux. I've not done GUI development with Python I'm not sure I agree with Jim that tight integration with a cross-platform GUI is essential. Python is very good as a "glue language" that finds ways to establish working, collaborative relationships with a lot of other tools (Tk is one such). I think this is a feature, not a bug, and it inspires kids to look beyond Python, and to think in terms of using one software tool to control another. That's useful. When it comes to graphical output, I use Python with a freeware ray tracer called Povray (www.povray.org). I've done lots of graphics in this way, and melded their production with a more formal presentation of geometry/algebra concepts (as per previous posts). But at no point have I felt a strong need to code a GUI in support of my curriculum. IDLE itself is a GUI of course, and I'm all in favor of having kids code using some intelligent interface that automatically color-codes key words, does other housekeeping. But we already have this in several forms -- and yes, there's always room to make it better. What I would never give up, in my ideal learning environment, is an interactive command line. But you can get that with Python in Linux or DOS in a terminal window, and still make do.[1] I'm going back to my original theme: I think we dilute the potential if we just dream and scheme about what Python could or should be, that it isn't already.[2] I'm sure Python will continue to evolve, but it's something that we could be phasing into more learning environments right now, today -- with 0.0 enhancements. Posts which use this ("immediate suitability") as a premise are more interesting to me at least, even if I dream of a unicode implementation that allows native Thai speakers to do all their coding using the Thai character set (same engine, alternative non-ASCII fonts with renamed key words). I think putting out ideas about how Python needs to be tweeked (or even overhauled) in this or that way, before knuckling down to the real work of integrating it into the curriculum, is to let oneself off the hook to easily. It's like saying "3 years from now, when Python X.X comes out, then maybe we can...". I really don't have much interest in such speculations, personally. Python is a nifty little package right now. More teachers should be aware of the potential. Ideas about how we need to "improve" it fail to answer their need, which is for solutions they can implement today, not tomorrow. Just my two cents. Kirby [1] PS: I highly recommend the small, slim paperback "In the Beginning was the Command Line" by Neal Stephenson, author of the best-selling 'Cryptonomicon'. It's about the history of OSs, weaving together lots of metaphors about culture (borrows a lot from H.G. Wells). Not just somebody getting on a soap box and venting their pet peeves -- way more informative than that. Gives another perspective on GUIs though, and gives ammo to those who think a command line is a great place to cut teeth, if you really plan to grow up as more than just an "end user" of other people's code. [2] "Re recent posts, my operating assumption is there's no time to change the language. Case sensitivity and the interface are just the way they are. http://www.python.org/pipermail/edu-sig/2000-February/000015.html From guido@python.org Sun Feb 6 13:58:11 2000 From: guido@python.org (Guido van Rossum) Date: Sun, 06 Feb 2000 08:58:11 -0500 Subject: [Edu-sig] Stop the insanity -- no more case sensitivity discussion! In-Reply-To: Your message of "Sat, 05 Feb 2000 21:58:35 EST." <200002060258.VAA17111@eric.cnri.reston.va.us> References: <200002060258.VAA17111@eric.cnri.reston.va.us> Message-ID: <200002061358.IAA17309@eric.cnri.reston.va.us> This is the message I received; forwarded with permission. To repeat, I'm really sorry to see people withdraw from this great forum for this reason. Let's all behave like grown-ups and heed his warning without sending him a reply -- clearly more arguments in his mailbox is the last thing he needs. If you disagree, do so in silence. I've learned that that's a great mental exercise and usually gets the job done! Now, let's go back to our educational focus... --Guido van Rossum (home page: http://www.python.org/~guido/) ------- Forwarded Message Date: Sat, 05 Feb 2000 18:53:20 -0500 From: Xenophanes To: guido@python.org Subject: Education forum Hi Dr. van Rossum, The other day I received an e-mail from you about the edu-sig forum for the Python programming language. It described this new forum as one where communication would generally be about how the Python community could get a broader acceptance and penetration of Python into educational areas, helping kids and adults to get into programming. Your paper "Computer Programming For Everyone," was referred to, I believe. The goal of this forum , it seemed to me was to advocate in the various communities we all are a part of to get Python "out there." I subscribed to the list and after a few days of moderate activity, the forum took off like a rocket to Alpha Centauri. The only problem with it was the direction it took off in. Instead of discussing ways to get Python widely accepted and to use Python in programming and computer classes to help kids to become better at critical thinking and eventually providing an avenue toward self determination, the forum degenerated into a group of programmers arguing whether there ought to be case recognition in the syntax of the programs written in Python. It seems the Unix people could not stand that Python is not case sensitive and Unix is. (At least that is what it seems to have evolved to) Dr van Rossum, this should not be a discovery environment where developers try to change Python to reflect some idealistic fairy tale land. It should be a time where the ideas of a Jeffrey Elkner or the environmental activist from Appalachia, or the many others who struggle with the impossibility of computer programming get heard. Instead, the only forum with that kind of opportunity has been stolen by computer language developers who are concerned about teaching their five-year-olds to program!! Yesterday at about five-thirty p.m., I received over 25 e-mails from forum participants at one time when I logged on to the net. Not one was concerned with getting Python out to the people who need it. Most were concerned with whether or not Python knows the difference between This and this. I am not amused. I am a fan of Python. I think Python is what is going to be instrumental in saving democracy. If that sounds extreme, maybe it is. But Python, the way you developed it is the only hope we have as a people to fight the corporate interests who want to dumb the society down to the point where we will be willing and happy to work for the same wages that the Bangladeshis do. My understanding when I was first exposed to Python was that it first and foremost was a tool to help kids and other people to enhance their critical thinking skills by being able to relatively easily program solutions for themselves and others that corporate America did not spoon feed them. Apparently, the Python community is too tied up in knots over case sensitivity to understand that case sensitivity is not an issue. "The language is not case sensitive, get over it." That should be your message to these Philistines. I was sorry to have to unsubscribe from the edu-sig group. I just could not abide by the idiotic arguing over nothing that was going on. I do not have time in my day to read such drivel. Please let me know when and if the group returns to the land of the living and starts discussing how to use Python as it was intended instead of what Python is. Thanks, Terry Gabriel ------- End of Forwarded Message From dscherer@cmu.edu Sun Feb 6 15:24:00 2000 From: dscherer@cmu.edu (David Scherer) Date: Sun, 6 Feb 2000 10:24:00 -0500 Subject: [Edu-sig] Split the edu-SIG? In-Reply-To: <200002061358.IAA17309@eric.cnri.reston.va.us> Message-ID: I think there's a deep issue raised by Terry Gabriel's complaint. There are two large issues which need to be discussed regarding "Python in education": 1. Lesson planning, evangelism, course content creation. 2. Tool improvements, such as IDE enhancements, specialized libraries, frameworks for problem domains, and, less significantly, future changes to the language itself. Clearly these topics are related. However, there are some obvious problems with having both of these topics discussed in the same forum: 1. People who want to start teaching python NOW couldn't care less about tool development because it will happen too slowly. They will look on discussions of (2) as distractions at best. 2. Similarly, those of us who believe that some tool development is absolutely a prerequisite to using Python in our environments or for CP4E find discussion of (1) a little too premature to be helpful. 3. Discussion of (2) is likely to become excessively technical for some of the people in this forum. 4. At least right now, the traffic on the list is much too high for anyone without procmail and a threaded mail reader. I am therefore convinced that this forum is inappropriate for discussing (2). I therefore put the following question to the SIG: 1. Is anyone else interested in seriously discussing new or enhanced Python libraries and tools to make Python more usable in educational settings, or in a specific curriculum? 2. If so, is there a better forum to discuss these issues? 3. If not, should one be created? If the answer to (1) is no, then let's make that explicit in the SIG charter, and restrict discussion of tool development to private communication channels. Otherwise, let's find another forum. I'm deeply sorry that anyone felt it necessary to leave the SIG because of excessive discussion of language issues. However, I am also aware that there are several different groups, including Guido at CNRI and our group at Carnegie Mellon, actively engaged in the development of Python-based environments for education, and I think there should be *some* forum for us to communicate with each other and with people interested in applying our work. Dave Scherer From glossner@pobox.com Sun Feb 6 16:06:53 2000 From: glossner@pobox.com (John Glossner) Date: Sun, 6 Feb 2000 11:06:53 -0500 Subject: [Edu-sig] Stop the insanity -- no more case sensitivity discussion! References: <200002060258.VAA17111@eric.cnri.reston.va.us> <200002061358.IAA17309@eric.cnri.reston.va.us> Message-ID: <031401bf70bc$2ff681b0$07000100@elite> Guido, > It should be a time where the ideas of a Jeffrey Elkner or the > environmental activist from Appalachia, or the many others who struggle > with the impossibility of computer programming get heard. Instead, the > only forum with that kind of opportunity has been stolen by computer > language developers who are concerned about teaching their > five-year-olds to program!! > Clearly, you need to define "what everyone" is and the goals of this sig. If you wish to limit it to some age group, fine. Just state so and I will unsubscribe. By the way, I am serious about teaching my 6/8/10 year olds to program. I am not a language developer and I could care less about case sensitivity. John Glossner signing off from here From smorris@nexen.com Sun Feb 6 16:27:05 2000 From: smorris@nexen.com (Steve Morris) Date: Sun, 6 Feb 2000 11:27:05 -0500 (EST) Subject: [Edu-sig] Split the edu-SIG? In-Reply-To: References: <200002061358.IAA17309@eric.cnri.reston.va.us> Message-ID: <200002061627.LAA07081@brocade.nexen.com> Dave, You are making valid points but I think you are rushing a little. I expect that the current flood of traffic will settle down a lot in a week or so as people finish stating their initial interests and objectives. It may be that when the traffic settles we can handle both threads. There are not completely exclusive. Tool development needs to be guided by the practical experience of those on the ground trying to teach. Those on the ground need to understand the possibilities of what tool people can deliver in the future. By the way I am clearly on the tool development side but would hate to move forward without significant feedback from the intended users. I also don't think the dichotomy is as clear as you state it. I suspect that most people are more in the middle. Where do you put such things as creation of examples. How about packaging examples with the interpreter, ide and documentation in an easy to deploy package. I would define your dichotomy as more of a continuous spectrum with at least these tentative breakdowns: 1) People wanting to use existing software unchanged and looking for ways to do that. 2) People looking for simple short term enhancements that improve their ability to deploy in the short term. 3) Longer term ideas of varying scales. Plese don't try to define this in polarizing us and them terms. Steve David Scherer writes: > I think there's a deep issue raised by Terry Gabriel's complaint. There are > two large issues which need to be discussed regarding "Python in education": > > 1. Lesson planning, evangelism, course content creation. > > 2. Tool improvements, such as IDE enhancements, specialized libraries, > frameworks for problem domains, and, less significantly, future changes to > the language itself. > > Clearly these topics are related. However, there are some obvious problems > with having both of these topics discussed in the same forum: > > 1. People who want to start teaching python NOW couldn't care less about > tool development because it will happen too slowly. They will look on > discussions of (2) as distractions at best. > > 2. Similarly, those of us who believe that some tool development is > absolutely a prerequisite to using Python in our environments or for CP4E > find discussion of (1) a little too premature to be helpful. > > 3. Discussion of (2) is likely to become excessively technical for some of > the people in this forum. > > 4. At least right now, the traffic on the list is much too high for anyone > without procmail and a threaded mail reader. > > I am therefore convinced that this forum is inappropriate for discussing > (2). I therefore put the following question to the SIG: > > 1. Is anyone else interested in seriously discussing new or enhanced Python > libraries and tools to make Python more usable in educational settings, or > in a specific curriculum? > > 2. If so, is there a better forum to discuss these issues? > > 3. If not, should one be created? > > If the answer to (1) is no, then let's make that explicit in the SIG > charter, and restrict discussion of tool development to private > communication channels. Otherwise, let's find another forum. > > I'm deeply sorry that anyone felt it necessary to leave the SIG because of > excessive discussion of language issues. However, I am also aware that > there are several different groups, including Guido at CNRI and our group at > Carnegie Mellon, actively engaged in the development of Python-based > environments for education, and I think there should be *some* forum for us > to communicate with each other and with people interested in applying our > work. > > Dave Scherer > > > _______________________________________________ > Edu-sig mailing list > Edu-sig@python.org > http://www.python.org/mailman/listinfo/edu-sig From jhrsn@pop.pitt.edu Sun Feb 6 17:12:39 2000 From: jhrsn@pop.pitt.edu (Jim Harrison) Date: Sun, 06 Feb 2000 12:12:39 -0500 Subject: [Edu-sig] Creating worlds -- graphical interfaces In-Reply-To: <3.0.3.32.20000205193445.0077a6ac@pop.teleport.com> Message-ID: on 2/5/00 10:34 PM, Kirby Urner at pdx4d@teleport.com wrote: > I'm not sure I agree with Jim that tight integration with > a cross-platform GUI is essential. Python is very good as > a "glue language" that finds ways to establish working, > collaborative relationships with a lot of other tools (Tk > is one such). I may not have been clear in my original post. I am arguing that a well-integrated *GUI framework* for Python that allows students to create GUI elements in their own programs is both pedagogically desirable and essential for Python's success as a general-purpose teaching language in the long term. I'm basing this partly on my own experience with my son, who started programming when he was 9 and has gotten a lot of enjoyment from it in the subesequent 4 years. He's worked with several development environments, and the ones that are the most reinforcing are the ones that provide a straightforward way to set up a GUI for his programs (and thus generate "real" programs, in his view). I also suspect that many secondary school teachers and administrators would take this view as well, and that a low-cost "Visual Basic for Education" would be a strong competitor (though much less desirable than Python from our perspective). Randy Pausch's Alice Project provides a visual framework for program output that immediately displays the results of program logic (in the setting of a 3D world) and is strongly reinforcing for students. His work tends to validate the concept that visual output is a useful endpoint for programming exercises. My preference, though, would be a more general-purpose framework like Tkinter or wxWindows that allowed construction of a variety of different programs, rather than just 3D worlds. This framework would ideally be integrated with a Python educational IDE so that students could create and manage interface elements in a straightforward way, without dealing with the GUI framework as a separate entity. In my original post, I was concerned that we were almost but not quite there yet with Python GUI frameworks across Wintel, Mac and Linux. It also occurred to me that if one of the available frameworks had particular promise for use within a Python educational IDE, it might be useful to make that choice explicitly to promote completion of the final work on it and ultimately allow easier sharing of example code, howto's, etc. Python is an excellent "glue" language, of course. However, I don't think that requiring beginning programming students to learn multiple tools (that may vary across platforms) to get the output they really want from simple programs is a winning strategy. > IDLE itself is a GUI of course, and I'm all in favor of > having kids code using some intelligent interface that > automatically color-codes key words, does other housekeeping. > But we already have this in several forms -- and yes, there's > always room to make it better. > > What I would never give up, in my ideal learning environment, > is an interactive command line. But you can get that with > Python in Linux or DOS in a terminal window, and still make > do.[1] I agree that the interactive command line is a very useful feature of the Python environment, both for working programmers and for students. My comments were directed toward GUI elements available for use in programs, not the IDE. > I'm going back to my original theme: I think we dilute the > potential if we just dream and scheme about what Python could > or should be, that it isn't already.[2] > > I'm sure Python will continue to evolve, but it's something > that we could be phasing into more learning environments > right now, today -- with 0.0 enhancements. ... > I think putting out ideas about how Python needs to be > tweeked (or even overhauled) in this or that way, before > knuckling down to the real work of integrating it into > the curriculum, is to let oneself off the hook to easily. > It's like saying "3 years from now, when Python X.X > comes out, then maybe we can...". I really don't have > much interest in such speculations, personally. Guido's original CP4E proposal included testing Python in education "as is," development and testing of an education-oriented IDE, and consideration of changes to the language itself if such changes appeared to be important for educational uses. It seems to me that all of these elements, along with ways to promote immediate adoption of Python in the curriculum, are appropriate for discussion in the list. I don't think anyone is advocating waiting for any particular development process if you have, or can create, a good opportunity to put Python into the curriculum now. Jim Harrison Univ. of Pittsburgh From pdx4d@teleport.com Sun Feb 6 17:20:36 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Sun, 06 Feb 2000 09:20:36 -0800 Subject: [Edu-sig] Stop the insanity -- no more case sensitivity discussion! In-Reply-To: <200002061358.IAA17309@eric.cnri.reston.va.us> References: <200002060258.VAA17111@eric.cnri.reston.va.us> Message-ID: <3.0.3.32.20000206092036.00754208@pop.teleport.com> At 08:58 AM 02/06/2000 -0500, Guido van Rossum wrote: >This is the message I received; forwarded with permission. To repeat, >I'm really sorry to see people withdraw from this great forum for this >reason. Guido -- Personally, I think it's immature of Terry to whine to you privately, instead of sharing his valuable focus and perspective with the whole group. He gave us only a few days to live up to his standards and then quit in a huff. I have likewise shared my frustration with the "fantasy land" attitute taken by many posters, who just want to sit back and dream of language improvements they're not going to implement themselves. But I don't take advantage of my frustration to make a big stink. I note that you yourself were one of those who weighed in on the case-sensitivity issue (as did I --both of us briefly). >he needs. If you disagree, do so in silence. I've learned that I'm not sending an email to Terry about any of this, but it may come up again that some lurker is outraged by the direction of the threads and doesn't bother to pipe up. So I'm going to disagree with Terry's approach out loud, not in silence. If you want this to be a moderated group, that's fine, but in the meantime I don't think you can assume that everyone reads your edicts -- about what to talk about or not talk about (nor mine either of course). If we get more posts re cs, it might be from newbies just joined, or others who didn't track this 'insanity' thread. They shouldn't get jumped on either -- make this a moderated group if you plan to exercise strict controls over content. Kirby From jhrsn@pop.pitt.edu Sun Feb 6 17:26:15 2000 From: jhrsn@pop.pitt.edu (Jim Harrison) Date: Sun, 06 Feb 2000 12:26:15 -0500 Subject: [Edu-sig] Split the edu-SIG? In-Reply-To: Message-ID: on 2/6/00 10:24 AM, David Scherer at dscherer@cmu.edu wrote: > 1. Lesson planning, evangelism, course content creation. > > 2. Tool improvements, such as IDE enhancements, specialized libraries, > frameworks for problem domains, and, less significantly, future changes to > the language itself. Crossover discussion between these two groups is essential. If the list is split, it needs to be done in such a way that the groups are not isolated from each other. Perhaps a weekly summary of important issues discussed on each list could be posted to the other. > 4. At least right now, the traffic on the list is much too high for anyone > without procmail and a threaded mail reader. At least in my hands the download times have not been particularly long, and anyone with a POP or IMAP client that supports mail sorting rules should be able to deal with the message numbers. > 1. Is anyone else interested in seriously discussing new or enhanced Python > libraries and tools to make Python more usable in educational settings, or > in a specific curriculum? Yes. Jim Harrison Univ. of Pittsburgh From matthias@rice.edu Sun Feb 6 17:35:37 2000 From: matthias@rice.edu (Matthias Felleisen) Date: Sun, 6 Feb 2000 11:35:37 -0600 (CST) Subject: [Edu-sig] pedagogy, programming environments, and readings In-Reply-To: <20000206162611.2D0771CD1B@dinsdale.python.org> (edu-sig-request@python.org) References: <20000206162611.2D0771CD1B@dinsdale.python.org> Message-ID: <200002061735.LAA27652@africa.cs.rice.edu> Dear Python CP4E-ers: I follow your discussions with great interest as an outsider and would like to comment/suggest a few things. It surprises (and saddens) me that so much enthusiasm is spent on discussions with so little background information. Our discipline is a science with a large body of research (not educational) literature. Other communities have gone through the discussions on how implementations of IDEs relate to pedagogy and vice versa. For example, 1. Your community is not the first one to discuss case-sensitivity and case-insensitivity. Why not check how they dealt with the issue? 2. You're not the first to discuss the merits of tail-call optimizations in a pedagogic context. Study some of the recent pattern literature on OO design and then consider why tail-call optimizations are essential. Don't shoot from the hip with lots of and and . Unless, of course, you have too much time at your hands. 3. The same applies to GC. 4. The connection between IDE design and beginners, at all levels, is important and has been recognized as such. We have published a paper on this, among others. 5. Nobody (as far as I can tell) has raised the question how you want to differ from the rest of the world. What value do you add? Playing with worlds? Yes, Pappert has suggested it. Has anyone checked whether he and his team have done anything about it? (They did.) What is new about Pythin's pedagogy vs the prevailing, argh, C++ pedagogy? Etcetc. My goal is not to be negative. I am only suggesting that you study what exists, clarify where you want to go, and advertise why your ideas and (future) curriculum is better than what's out there. While we, the outsiders, discuss, the rest of the world gets entrenched into the next fashion wave and we will have to battle it. -- Matthias Matthias Felleisen Professor of Computer Science Rice University For a new way to look at the world of high school computing, see http://www.cs.rice.edu/CS/PLT/Teaching/Workshops/ "Computer Science is no more about computers than astronomy is about telescopes." -- E. W. Dijsktra From pdx4d@teleport.com Sun Feb 6 18:15:34 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Sun, 06 Feb 2000 10:15:34 -0800 Subject: [Edu-sig] Creating worlds -- graphical interfaces In-Reply-To: References: <3.0.3.32.20000205193445.0077a6ac@pop.teleport.com> Message-ID: <3.0.3.32.20000206101534.03860514@pop.teleport.com> >I may not have been clear in my original post. I am arguing that a >well-integrated *GUI framework* for Python that allows students to create >GUI elements in their own programs is both pedagogically desirable and >essential for Python's success as a general-purpose teaching language in the >long term. Jim -- I think you were clear. We're just talking about graphical front ends versus back ends. Command line Python can be used to create rich "3D worlds" (using VRML, Povray, Alice or whatever) but people are used to that "control panel look" which gives their application a GUI. From their point of view "real programming" includes GUI design and implementation (and they're right of course -- it does). I've written GUIs that run real time during open heart surgery, others for a Food Bank, an Urban League. There's a whole art and a science to GUI design -- but is it really essential to get into all that in conjunction with using Python in the curriculum? I think not. Let me explain.... As a curriculum writer, it's not necessarily my goal, when using Python, to teach programming or good program design (Matthius is from a different school entirely on this point -- and we need his school too). My goal is to elucidate concepts in other disciplines (such as mathematics) by taking advantage of the user-friendly access Python provides to the inner guts of the CPU -- where I can take advantage of "cheap, in bulk" operations. My focus is the knowledge domain (e.g. geometry, number theory, the calculus, philosophy), and not on Python per se. The reality is classrooms are stuck with calculators, and it's silly to move to a computer if all you get is a scientific calculator on the screen (a graphical version of the TI). If we're going to overcome this incredible bias in favor calculators (and to the exclusion of computers), we need a way to give students immediate access to the power of a command line environment. Right away, you can start working with character and string data, long integers (OK, maybe DERIVE can do characters -- I know it handles long integers). Calculators can't do that. Plus you can start outputting scripts ready to drive a ray tracer (colorful "3D" polyhedra, just minutes away). Calculators can't do that. OK, I see why we're using a computer, and not a calculator. And even though programming a calculator is possible in some models, using Python to do is is actually MUCH easier. Case closed: we should have been using more computers in math class years ago.[1] But as soon as you move into GUI design or the theory of tail recursive function calls, you've started to lose this focus. As a teacher phasing Python into a math context, I have some interest in presenting Python in a good light, by showing fairly intelligent examples of working code (so I appreciate Tim's use of a dictionary to streamline the Fibbo algorithm). But my students are mostly looking beyond efficiency issues to the underlying mathematics (notice my remark about mathematicians having no problem with n!/k!(n-k)! -- even though that's just a fancy way to "cancel" many of n!'s digits ("efficiency" is in the notation, not in clock cycles (part of why my Python "notation" contained no error checking for illegal parameters -- do math notations do this?)). Python is just another way of expressing concepts they're already learning, and that we've taught for decades without any programming language at our elbow . They are using a programming language, yes, but not to write full blown applications or to understand all the fundamentals of application design -- that'd be another course of study entirely.[2] Kirby Note: [1] Also under the category of "user friendly" I include/ weigh the fact that Python is cross-platform and free. Sometimes teachers as me "what about Mathematica?". I say "Mathematica is a great program. You might find MathCad easier if you don't need all that power. But you can give your students valuable experience in any powerful command line environment -- both Python and DrScheme provide this for free". IE, let's not assume that schools have any real budget for this kind of thing. Maybe they will down the road, but right now, Python is an ideal "foot in the door" kind of language (remember, BASIC was so successful in a lot of ways simply because it was ROM-coded in the early PC chips -- you didn't need to buy anything extra). [2] I was at one time a full-time classroom math teacher at the high school level, plus I've worked in the math and computer literacy text book section of McGraw-Hill. I've taught in the talented and gifted program for Portland Public Schools (in a program that allowed non-union outsiders like myself to participate -- details on request) and presented state-of-the-art math content to public school teachers from all over Oregon at the 1997 Math Summit at Oregon State University. I am currently doing pioneering work via my Oregon Curriculum Network, with offices in Portland. I have a BA from Princeton University and my thesis was entitled 'Some Thoughts on the Philosophy of Ludwig Wittgenstein' (Dr. Richard Rorty was my advisor). However, I am not currently a classroom teacher, so when I write about "my students" I'm talking about a full age range of kids and adults who engage with me over the internet -- more of a distance learning kind of environment. From pdx4d@teleport.com Sun Feb 6 18:19:43 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Sun, 06 Feb 2000 10:19:43 -0800 Subject: [Edu-sig] pedagogy, programming environments, and readings Message-ID: <3.0.3.32.20000206101943.0386ba28@pop.teleport.com> I am becoming increasingly aware of the two schools of thought that Dave Scherer posted about recently: (1) lets use Python now, how? and (2) we need more/better tools too. Jim accurately point out (at the end a recent post) that both schools find a footing in the actual text of the CP4E, a sort of "founding document" for this group. I don't think it's either/or. I'm quite in agreement that teaching Python requires background development -- at the very least the public sharing of a lot of .py files (I liked the PythonForge.com suggestion). Websites with template lesson plans and integrated Python, made known to teachers, is a goal I'd very much like to see realized. And I see no barriers to providing such content immediately (I'm already a provider, and found Python very suitable in its present form). Personally, what I want to see along the lines of (2), are pointers to web sites and possibly other listservs where developers are actually developing/implementing. I'd like to lurk, in many cases, or at least check out the approach. For example, it sounds like this Alice stuff could take up a lot of bandwidth (usefully, with good reason). What I personally don't particularly want to read a lot of is "good ideas" by people who are not actually doing anything to implement them. Developers who (a) have an idea and (b) are publicly committing to testing/implementing it themselves have credibility. But people who just want to dream of a bright tomorrow, and hope others will do all the work, have little to say that I want to read. That's just my own bias. I can apply my own filters and don't pretend these are "moderator remarks" -- many people posting here may never read these words, or care what my biases are. It's very common when a topic is as rich as this one for the flood of business to at times become overwhelming. The standard response is to delegate big chunks to "committees" (don't have to call 'em that) and get summary reports back from time to time. Maybe it's harder to organize such infra- structure on-line, among spontaneously posting individuals, but I've seen it work in other cyberspace contexts. It's very easy to create listservs these days, and web sites. So I remain optimistic that after this initial period of flailing around, we'll continue on an even keel with a strong sense of direction and purpose. Kirby From dscherer@cmu.edu Sun Feb 6 18:57:18 2000 From: dscherer@cmu.edu (David Scherer) Date: Sun, 6 Feb 2000 13:57:18 -0500 Subject: [Edu-sig] pedagogy, programming environments, and readings In-Reply-To: <200002061735.LAA27652@africa.cs.rice.edu> Message-ID: At the risk of holding a mere signature quote up as a straw man, let me hold your signature quote up as a straw man :) >"Computer Science is no more about computers than astronomy is > about telescopes." > -- E. W. Dijsktra Is CP4E about computer science? Computer science is certainly a discipline valuable to software professionals, and I happen to think that it would be valuable to people in many other fields, also. However, I don't think that teaching CS is a primary goal of CP4E or of all of the people in this SIG. CP4E *is* about computers. It's about the incredibly versatile machines sitting on all our desks, and (soon) in our pockets and around our wrists and in our clothing and cars and walls. It's about giving ordinary people some real control over those objects, the basic tools they will need to learn more about them, and the freedom to change or extend software that isn't right for them. It's about billions more eyes to make bugs seem shallow. It's about the (perpetual) software crisis. It's about the powerful ways that computer programming can be used to teach *other* subjects. If you can write a computer program to do something, you understand how to do it. If you write a computer program to model something, you might reach new insights about it. If ordinary educators can write educational software, there will be great educational software. If ordinary scientists can write scientific software, there will be better scientific software. If ordinary writers could write writing software, maybe there would be better word processors! THAT is how CP4E should differ from "the rest of the world." CP4E will teach everyone to write (perhaps small) REAL software that serves their needs. None of this requires the deep understanding of computational processes that computer science provides. None of it requires tail recursion. None of it requires proofs of program correctness, or asymptotic analysis of running time, or new results in graph theory. What it *does* require is a programming language capable of interacting with the world around it, and environment that does not present unnecessary obstacles to the use of the languge, and a curriculum for teaching basic programming, and evangelists to spread the word once it's all ready. Certainly one of the things that could be built on that foundation would be real CS instruction. Imagine a first-year CS course that did not have to spend *any* time on syntax or basic programming, because everyone already learned that in first grade. It is, however, silly to ignore the value of programming for teaching geometry, physics or engineering. It's worse to ignore the value of programming, even in the hands of someone with little theoretical understanding, for getting real work done in the real world. Further, I don't think that the attitude about pedagogy advanced by Dijsktra is at all useful to CP4E. He had this to say about the old MacGNOME environment: |I was recently exposed to a demonstration of what was pretended |to be educational software for an introductory programming |course. With its "visualizations" on the screen it was such an |obvious case of curriculum infantilization that its author |should be cited for "contempt of the student body", but this was |only a minor offense compared with what the visualizations were |used for: they were used to display all sorts of features of |computations evolving under control of the student's program! |The system highlighted precisely what the student has to learn |to ignore, it reinforced precisely what the student has to |unlearn. Since breaking out of bad habits, rather than |acquiring new ones, is the toughest part of learning, we must |expect from the system permanent mental damage for most |students exposed to it. My aunt taught me BASIC programming at age 5 or so, not that long after I learned to read. Despite everything Dijkstra and others have said about that language, my brain was not damaged, any more than learning to say "Da-da" or "Di-di-di-dat" (don't do that) permanently damaged my professional writing ability. Instead, it gave me one more perspective with which to look at the many other things I was learning as I grew up. Much later I taught myself Prolog. Played with Visual Basic 1.0. Taught myself C++. Learned Pascal. Forgot Pascal (good riddance, too :). Wrote a couple of little languages, then forgot them, too. Wrote the computer game that won the first annual Independent Game Festival. Then I learned some CS (actually, I'm still a sophomore in Carnegie Mellon's excellent program). Every year our society unleashes millions of 16-year-olds on the roads. They hardly know how to drive, let alone how a car works. A few of them die; the rest learn :) If we can do that, we can teach people to write code and hand them the keys. Then we can worry about whether they understand what they are doing. Maybe, having glimpsed all the power available to them, they will actually *want* to learn more. Dave Scherer > -----Original Message----- > From: edu-sig-admin@python.org [mailto:edu-sig-admin@python.org]On > Behalf Of Matthias Felleisen > Sent: Sunday, February 06, 2000 12:36 PM > To: edu-sig@python.org > Subject: [Edu-sig] pedagogy, programming environments, and readings > > > > Dear Python CP4E-ers: > > I follow your discussions with great interest as an outsider > and would like to comment/suggest a few things. > > It surprises (and saddens) me that so much enthusiasm is spent on > discussions with so little background information. Our discipline > is a science with a large body of research (not educational) > literature. Other communities have gone through the discussions on > how implementations of IDEs relate to pedagogy and vice versa. For > example, > > 1. Your community is not the first one to discuss case-sensitivity > and case-insensitivity. Why not check how they dealt with the issue? > > 2. You're not the first to discuss the merits of tail-call optimizations > in a pedagogic context. Study some of the recent pattern literature > on OO design and then consider why tail-call optimizations are > essential. Don't shoot from the hip with lots of and > and . Unless, of course, you have too much time at your hands. > > 3. The same applies to GC. > > 4. The connection between IDE design and beginners, at all levels, is > important and has been recognized as such. We have published > a paper on > this, among others. > > 5. Nobody (as far as I can tell) has raised the question how you want to > differ from the rest of the world. What value do you add? Playing with > worlds? Yes, Pappert has suggested it. Has anyone checked > whether he and > his team have done anything about it? (They did.) What is new about > Pythin's pedagogy vs the prevailing, argh, C++ pedagogy? Etcetc. > > My goal is not to be negative. I am only suggesting that you study what > exists, clarify where you want to go, and advertise why your ideas and > (future) curriculum is better than what's out there. While we, the > outsiders, discuss, the rest of the world gets entrenched into the next > fashion wave and we will have to battle it. > > -- Matthias > > > Matthias Felleisen > Professor of Computer Science > Rice University > > For a new way to look at the world of high school computing, > see http://www.cs.rice.edu/CS/PLT/Teaching/Workshops/ > > "Computer Science is no more about computers than astronomy is > about telescopes." > -- E. W. Dijsktra > > > _______________________________________________ > Edu-sig mailing list > Edu-sig@python.org > http://www.python.org/mailman/listinfo/edu-sig > From pdx4d@teleport.com Sun Feb 6 19:10:25 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Sun, 06 Feb 2000 11:10:25 -0800 Subject: [Edu-sig] More remarks on User Friendliness In-Reply-To: <3.0.3.32.20000206101534.03860514@pop.teleport.com> References: <3.0.3.32.20000205193445.0077a6ac@pop.teleport.com> Message-ID: <3.0.3.32.20000206111025.0077ab38@pop.teleport.com> >[1] Also under the category of "user friendly" I include/ >weigh the fact that Python is cross-platform and free. A last remark about user-friendliness and then I really need to get back to my Xbase (Fox head logo). Deadlines looming. Another "selling feature" of Python when it comes to winning hearts and minds (in K-12 especially) is the name -- and the link to Monty Python. The fact that Python conventions have names like 'SPAM8' and that allusions to Monty Python are explicitly encouraged in the documentation is a breath of fresh air into what is otherwise an overly stiff (read "rigor mortis") and stultifying (read "dry as bones") "academic" environment. The snake connection is good too -- no reason not to pursue both (I know there's a tendency for the Monty camp to boo hissss the snake camp, but I think we should join forces). The fact that the O'Reilly book cover has that very cool Python, and that in Windows95/98/NT you get a cute snake icon, is very very positive. DrScheme may not be at any real disadvantage here of course. As someone pointed out on comp.lang.python, this "DrScheme" meme has a sort of comic/dramatic sheen all its own. Every time I read "DrScheme", I think of some "Dr Evil" (ala Austin Powers) rubbing his hands and going "Muuuuhahahahha". Kids will get into it. Seriously -- it pays to keep an audience in mind. A lot of you are dealing with university-age students and aren't thinking at my level. But I encourage you to reach out in your minds to rows and columns of kids, sitting in classrooms, slaving away all day using text books that are borrrrring beyond belief. Then go to a book store like Border's (Powell's Technical in Portland even more overwhelming) and see the **explosion** of titles about Java, SQL Server, CORBA, Cold Fusion, DHTML... An average high schooler might well think "gosh darn it, when am I ever going to start getting into THAT world??" Never, in an ordinary public school, given current trends (but we're *bucking* current trends, and have a winning hand). Monty Python to the rescue (with DrScheme not far behind - - muuuuuhahahahahahha). Kirby From dscherer@cmu.edu Sun Feb 6 19:23:09 2000 From: dscherer@cmu.edu (David Scherer) Date: Sun, 6 Feb 2000 14:23:09 -0500 Subject: [Edu-sig] pedagogy, programming environments, and readings In-Reply-To: <3.0.3.32.20000206101943.0386ba28@pop.teleport.com> Message-ID: > have credibility. But people who just want to dream of a > bright tomorrow, and hope others will do all the work, have > little to say that I want to read. I would be disturbed to be placed in this category, since I'm currently putting at least 25 hours a week into a project to design and implement a graphics and visualization library for Python, a GUI library for Python, a novice-friendly IDE, and a properly packaged and supported distribution that includes all of this. There are several other people at Carnegie Mellon also working on this project (see Bruce Sherwood's post to the case sensitivity thread). When our work is ready for prime-time, we will certainly post it here for review. That doesn't mean that I want to limit my discussion of new features and possible work to things that I, personally, expect to be developing. Nor do I want others to do so - if you suggest some tool that would vastly improve your classroom, but have no idea how to implement it, I may find that it fits perfectly into my plans. Blue-sky discussion of how things should be, tempered by realistic discussion of how things can never be, is EXACTLY what us active tool developers need. From what I've seen everyone here has something valuable to add. Guido can hardly be accused of waiting for other people to do the work for him. Which poster can be? I think that the signal-to-noise ratio in the SIG has actually been quite good. The problem is that one person's signal is another person's noise, and this SIG still lacks a charter. > It's very common when a topic is as rich as this one for > the flood of business to at times become overwhelming. The > standard response is to delegate big chunks to "committees" > (don't have to call 'em that) and get summary reports back > from time to time. Maybe it's harder to organize such infra- > structure on-line, among spontaneously posting individuals, > but I've seen it work in other cyberspace contexts. It's > very easy to create listservs these days, and web sites. Infrastructure enhancements would improve the situation greatly. In fact, mailing lists are intrinsically a poor forum for people without adequate mail filters and clients (such as several of my colleagues). As long as the daily traffic is high, I suggest that people who don't want to deal with a high traffic volume in their inbox simply read the archives daily. The threaded view is very usable. I would be quite content to change my earlier proposal from "Split the SIG" to "form a tools committee" if that wording would make it clearer that we are still all on the same side :) Dave Scherer From pdx4d@teleport.com Sun Feb 6 19:24:25 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Sun, 06 Feb 2000 11:24:25 -0800 Subject: [Edu-sig] pedagogy, programming environments, and readings In-Reply-To: References: <200002061735.LAA27652@africa.cs.rice.edu> Message-ID: <3.0.3.32.20000206112425.0077ab58@pop.teleport.com> >If we can do that, we can teach people to write code and hand them the keys. >Then we can worry about whether they understand what they are doing. Maybe, >having glimpsed all the power available to them, they will actually *want* >to learn more. > >Dave Scherer Dave -- A good, clear statement that reflects many of my own views. Embedding more computer language in the curriculum is about opening new doors into many subjects besides computer science and computer programming as professional disciplines. In K-12, exposure to programming is no more about turning out future programmers than exposure to mathematics is about turning out full-time mathematicians. Such specialization (some might say "over-specialization") comes much later, after students have had a chance to savor offerings from many walks of life. "Numeracy" and "computer literacy" are increasingly convergent goals. We seek to provide this background to everyone, whether they want to be gurus, global traders, ship captains, medical doctors, shamans -- or plain ol' rocket scientists. Kirby PS: I _really_ need to get back to my Xbase. I'll post again in a week or so. From tim_one@email.msn.com Sun Feb 6 20:45:40 2000 From: tim_one@email.msn.com (Tim Peters) Date: Sun, 6 Feb 2000 15:45:40 -0500 Subject: [Edu-sig] pedagogy, programming environments, and readings In-Reply-To: <200002061735.LAA27652@africa.cs.rice.edu> Message-ID: <000401bf70e3$21789160$e6a0143f@tim> I think David Scherer's reply to this was excellent; just adding some glosses: [Matthias Felleisen] > ... > 2. You're not the first to discuss the merits of tail-call > optimizations in a pedagogic context. Study some of the recent > pattern literature on OO design and then consider why tail-call > optimizations are essential. Don't shoot from the hip with lots > of and and . Unless, of course, you have > too much time at your hands. If I didn't know better, I'd say I was the target of light sarcasm here. No sarcasm in return: An atomsphere of s is simply more inviting than one permeated with implied s and s. One plain fact is that a technical debate (yes, it is debatable) about the merits of tail optimizations would be of no interest whatsoever to the majority of people on this SIG -- and another plain fact is that the vast majority of programming languages do fine without it (you may wish to insist that they're not really "doing fine", but don't expect to get very far with that among native speakers <0.5 wink>). > ... > 5. Nobody (as far as I can tell) has raised the question how you > want to differ from the rest of the world. What value do you add? > Playing with worlds? Yes, Pappert has suggested it. Has anyone > checked whether he and his team have done anything about it? > (They did.) What is new about Pythin's pedagogy vs the prevailing, > argh, C++ pedagogy? Etcetc. (At least some of) your views are available in the essays linked to from the bottom of: http://www.cs.rice.edu/CS/PLT/Teaching/material.shtml If I had to pick one sentence from Guido's http://www.python.org/doc/essays/cp4e.html to illustrative the difference, I'd choose this: We're looking forward to a future where every computer user will be able to "open the hood" of their computer and make improvements to the applications inside. That is, enabling "just folks" to "get real stuff done". That's an extremely ambitious vision, and CP4E is indeed (as you rightly point out) far from articulating a concrete plan for making it a reality. It appears to be a key difference in philosophy, though (I see no echo of it in your writings), and one with some predictable consequences for the directions CP4E will take. > My goal is not to be negative. I am only suggesting that you study > what exists, clarify where you want to go, and advertise why your > ideas and (future) curriculum is better than what's out there. No argument there, although not everyone on this SIG is (or even "should be") interested in extended literature searches. > While we, the outsiders, discuss, the rest of the world gets > entrenched into the next fashion wave and we will have to battle it. Python has always been more about cooperating with the prevailing paradigms than with overthrowing them. If your goal is to enable everyone to get under their vehicles' hoods, and "almost everyone" drives a mid-70's car, then ... Python is subversive in that sense -- not unlike the British comedy troupe in whose honor it's named . it's-more-important-to-just-start-a-thing-than-to-be-sure- every-detail-is-optimal-ly y'rs - tim From slitt@troubleshooters.com Sun Feb 6 21:06:03 2000 From: slitt@troubleshooters.com (Steve Litt) Date: Sun, 06 Feb 2000 16:06:03 -0500 Subject: [Edu-sig] Quick and simple In-Reply-To: <3.0.6.32.20000204152934.00ade450@pop.pacificnet.net> References: <484206184.949671978@MUON.PC.CC.CMU.EDU> Message-ID: <3.0.6.32.20000206160603.008d64a0@pop.pacificnet.net> Two facts I have not seen disputed on this mailing list: * More of the populace needs to learn how to program * Present day Python is the best existing language in which to teach. So why not just make an alpha-test little textbook and carriculum using present day Python. Recommend an existing simple editor (notepad in Windows, pico??? in Linux). Include a few edit/compile/run/record_errormessage scripts to shift all thinking activities to actual program design. Get it used in a few places and constantly improve it. As feedback comes pouring in, we'll have much more information on all the issues being vehimently discussed. If use of editors and other present day Python properties lock out six year olds, that's regretable but not a show stopper. If we can interest and train high school students today, and over time provide material to include younger and younger students, we've done our job well. Thanks Steve Steve Litt Webmaster, Troubleshooters.Com http://www.troubleshooters.com slitt@troubleshooters.com From bas@andrew.cmu.edu Sun Feb 6 21:10:20 2000 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Sun, 06 Feb 2000 16:10:20 -0500 Subject: [Edu-sig] Programming for everybody for non-CS purposes Message-ID: <624303.3158842220@hejmo.rem.cmu.edu> I really liked what Dave Scherer said about computing for everybody, which is the flavor of CP4E that interests me. I have nothing against improving CS education, it's just not all there is in the world, and apparently there's no shortage of people interested in working on that. The CP4E issue goes beyond issues of teaching programming and computer science. One of Dave's examples was "if educators could write educational software..." In the history of educational software at the college level, many theorists claimed that the ideal development model was for faculty to feed pedagogical ideas to programmers to implement. This was supposed to provide the efficiency and quality of the industrial production line, with useful division of labor. But mostly it led to mediocre materials, produced at very high cost (due to the inefficiencies of communication between educators who didn't understand the medium and programmers who didn't understand education). Where possible, it is much better for the people most concerned to be able to do the programming themselves, with the programmers providing the tools to make that feasible. Years ago the theorists pooh-poohed having faculty themselves write educational software with the sarcastic analogy, "You obviously wouldn't want to waste a professor's time on typesetting a textbook." This sarcasm was tool-conditioned: now the tools permit professors to typeset their own textbooks. It's a lot of work, but having total control of the production process is terrific and can lead to higher quality. (Actually, it used to be a lot of work anyway dealing with editors and illustrators and typewritten drafts and secretaries and...) Bruce Sherwood From jason@crash.org Sun Feb 6 22:13:01 2000 From: jason@crash.org (Jason L. Asbahr) Date: Sun, 06 Feb 2000 16:13:01 -0600 Subject: [Edu-sig] a modest proposal II Message-ID: <3.0.32.20000206155659.00e418a0@mail112.pair.com> At 06:03 PM 2/4/00 -0500, Paul Fernhout wrote: >A Smalltalk teaching product called LearningWorks >http://learningworks.neometron.com/ includes specially designed starter >browsers (and even limited debuggers!) where for example a student >learns programming by sending Smalltalk messages to a square in a window >connected to the browser. Please look at the pictures here for some >ideas: That's the subject of the video I mentioned in a previous post, LearningWorks. Thanks for posting that, Paul! The CP4E goal of enabling people to get under the hood and hack is very exciting. That is the attraction of Python for a lot of developers, the "glue" aspect. But calling it glue doesn't give Python enough credit -- Python is an elegant tool which allows one to focus more on the problem domain, on the ends rather than on the means. And since there is a constantly expanding set of subsystems harnessed by Python (sockets, OpenGL, XML, Numerical, CORBA, databases), Python becomes a natural and common facility for building and customizing solutions which combine and utilize other functional systems. [1] I find myself running into limitations on the systems I use every day (Eudora, Palm Pilot, Visual Studio, my alarm clock, my stereo) and thinking, "if this system was exposed to me in Python, *I could fix it*". In addition to being an elegant language, Python is a very practical language, which extremely valuable for a project like CP4E. I hope to see Python evolve to be a better language over time (P3k), but certainly for our purposes, it's pretty much there. Assuming the ultimate point of CP4E is to empower individuals in an increasingly technological society, any discussion of the educational aspects of teaching programming should keep in mind that value is that the young programmers can actual *do something* with what they are learning. Hence the value of the virtual world approach, the numeracy approach, the 3D graphics approach. IMHO, anything else is secondary. So, anyway, the forum here is new, but very dynamic, lots of signal, relatively little noise. It may be necessary to split the discussion eventually into more focused email groups, but if it happens, I for one expect to subscribe to all of them. :-) Cheers, Jason Asbahr Origin Systems, Inc. jasbahr@origin.ea.com [1] The open source nature of Python and the Python community also has significant value. It's not just free (as in beer), but it's all open. The community creates a network effect, each new system developed or harnessed becomes available to the general group, which finds new ways to use, extend, and combine. This is extremely powerful, and (again IMHO) the driving force behind Python and, potentially, CP4E. From tim_one@email.msn.com Mon Feb 7 06:42:09 2000 From: tim_one@email.msn.com (Tim Peters) Date: Mon, 7 Feb 2000 01:42:09 -0500 Subject: [Edu-sig] Stop the insanity -- no more case sensitivity discussion! In-Reply-To: <200002061358.IAA17309@eric.cnri.reston.va.us> Message-ID: <000c01bf7136$74e4fd40$152d153f@tim> [Guido] > ... > Now, let's go back to our educational focus... Hmm. I'm not sure how to tell a relevant topic from noise. The thing that makes Usenet unbearable at times is a combination of flame wars and endless meta-discussion (like my very post here, for which I apologize even as I write it <0.3 wink>). Case-sensitivity is neither of those; its role seemed entirely on-topic, and it was particularly interesting to see informed challenges to the oft-cited Alice position on this. OK: I've found a foolproof way to tell the difference. A topic that *seems* appropriate *is* -- until Guido sends a msg with "no more!" in the subject line . hundreds-of-people-thousands-of-opinions-ly y'rs - tim From ulf.engstrom@b2b-link.com Mon Feb 7 08:26:18 2000 From: ulf.engstrom@b2b-link.com (Ulf Engstrøm) Date: Mon, 07 Feb 2000 08:26:18 CET Subject: [Edu-sig] Classes and learning (Was:Age groups) Message-ID: <20000207072618.13883.qmail@hotmail.com> I've been programming for quite some years and I've been through a couple of OO languages. I could get it working and thought I understood. When I learned Python (first with Guido's tutorial and then with Learning Python) I finally did understand for sure. The conclusion I took from my own learning was that either: * It took me that long to really understand * It's highly dependent on the language you do it in and the tutorial you learn it from I think mostly the second one, that makes most sence for me. But when we then here the opinions from others; Gerrit thought it was hard even with Python, but did however get it, and others that got it immediately from any OO-language. I believe that with the right way of teaching it anyone can understand it (left or right-brained, and btw I have to say I think most ppl here are left-brainers, but don't flame me over this one) and use it, but it can't be forced on the Everyone and it'll have to take some time. It's sure not the first thing to learn. And when you're gonna learn it it's important with a lot of examples, classes are kinda abstract for most people, but with examples it make sence. Regards Ulf Engstrøm (mail) ulf.engstrom@b2b-link.com (phone) +47 6676 5863 (fax) +47 6676 5861 (web) http://www.b2b-link.com >That's funny. My experience was quite different. When I first saw >objects and classes it was like a relevation from God. They seemed >intuitively obvious and the answer to my prayers. I wonder if this > is a >right brain/left brain thing or something. ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com From smorris@nexen.com Mon Feb 7 16:17:37 2000 From: smorris@nexen.com (Steve Morris) Date: Mon, 7 Feb 2000 11:17:37 -0500 (EST) Subject: [Edu-sig] Lets work on the adgenda In-Reply-To: <000c01bf7136$74e4fd40$152d153f@tim> References: <200002061358.IAA17309@eric.cnri.reston.va.us> <000c01bf7136$74e4fd40$152d153f@tim> Message-ID: <200002071617.LAA03476@brocade.nexen.com> Tim Peters writes: > [Guido] > > ... > > Now, let's go back to our educational focus... > > Hmm. I'm not sure how to tell a relevant topic from noise. If true maybe that's what we should be talking about. I can offer some suggestions. o - If the word education comes up infrequently in the discussion it is a topic probably better discussed elsewhere. o - The more technical the subject the less likely it will be of value to a general discussion of python in education. The topic of whether case (in)sensitivity is needed is "on point." The issues of how it should be implemented or its impact on the installed base of python software etc. etc. are clearly "off point." They are important topics but more relevent to the technical python community. I've seen this happen often on other lists. Everybody wants to contribute but most don't have anything unique to say. A subject that everyone recognizes comes up and all the lurkers jump in with both feet beating the subject to death. Case sensitivity is an example. We all type. We all have a shift key on our keyboard. We all have an opinion on the proper use of case. We all care about it. We don't need to understand anything about education to talk about upper case and lower case. It is not the subject so much that causes the problem as its over-discussion, swamping more central business. Here in a new group the overriding topic should be setting up an adgenda and charter. To do that we need to try out some issues, finding which have meat, which have relevence to the subscriber base. Unlike Mr Terry "walk out in a huff" we need to have some patience with each other while we work this out. I'd like to see people posting their list of ideas about what they think should be the adgenda of this discussion group, trying not to get too deep yet in the details of how the discussion should go. So far we have had some pretty focused requests for various on the ground support for packaging, lesson plans etc. We have also had some longer term discussion of what we might like in a perfect world. What else? How do we move forward? Where do we want to go? Does anyone want to volunteer to go through the archives and try to extract potential adgenda topics from previous posts? It seems to me there's juice in there already. If we can make a list then we can start prioritizing. We need a keeper of the list who will collect ideas and repost the list to the list once in a while. Volunteers? I would volunteer but I am too biased and inflamatory to be neutral and neutrality would be important in this role. Personally I think a good way to focus our thinking is to think in terms of what work needs to be done and how that work should progress. We should be defining projects big and small, short term and long, and recruiting people to work on them. If we don't actually do anything edu-sig will become a waste of time and bits. We should create a community of people helping each other use python in education. From skip@mojam.com (Skip Montanaro) Mon Feb 7 18:17:10 2000 From: skip@mojam.com (Skip Montanaro) (Skip Montanaro) Date: Mon, 7 Feb 2000 12:17:10 -0600 Subject: [Edu-sig] Is a SIG the right type of forum for Python-in-education discussions? Message-ID: <200002071817.MAA19084@beluga.mojam.com> I don't want to start a meta discussion that will quickly be deemed off-topic, but the thought has occurred to me that perhaps a SIG is not the correct sort of mailing list for this topic. In general, my understanding is that a Python-oriented SIG should try and identify a set of specific tasks fairly quickly, then work toward fulfilling those tasks, and go out of existence when either the tasks are complete or the group becomes inactive. I sense that there will be lots of interesting discussion about education- related topics that won't directly affect the Python distribution. If you are unfamiliar with what a Python SIG is supposed to look like, check out the Python SIGs page at http://www.python.org/sigs/ I'm not suggesting that an education-related mailing list for Python is a bad idea. I expect there is a place in the community for such a beast. I suggest we create a charter for the group and see what it looks like. If it looks like a SIG, fine, we march off with our charter and conquer the world. If not, perhaps another email-based forum (edu-list@python.org?) would be worthwhile to support ongoing interest in the use of Python in an educational setting. Skip Montanaro | http://www.mojam.com/ skip@mojam.com | http://www.musi-cal.com/ 847-971-7098 "Languages that change by catering to the tastes of non-users tend not to do so well." - Doug Landauer From guido@python.org Mon Feb 7 19:27:34 2000 From: guido@python.org (Guido van Rossum) Date: Mon, 07 Feb 2000 14:27:34 -0500 Subject: [Edu-sig] Is a SIG the right type of forum for Python-in-education discussions? In-Reply-To: Your message of "Mon, 07 Feb 2000 12:17:10 CST." <200002071817.MAA19084@beluga.mojam.com> References: <200002071817.MAA19084@beluga.mojam.com> Message-ID: <200002071927.OAA18730@eric.cnri.reston.va.us> Skip, I have no bandwidth here to elaborate (my plane leaves in a few minutes) but for me, a SIG is totally appropriate -- that's why I created it. --Guido van Rossum (home page: http://www.python.org/~guido/) From kuncej@mail.conservation.state.mo.us Mon Feb 7 22:56:07 2000 From: kuncej@mail.conservation.state.mo.us (Jeffrey Kunce) Date: Mon, 07 Feb 2000 16:56:07 -0600 Subject: [Edu-sig] Rational Division Message-ID: >> So, what does "E" think? Does 2/3=3D=3D0 or does 2/3=3D=3D1 >> or does 2/3=3D0.66..67 or does 2/3=3D=3D2/3?=20 >In E, there are two operators for division: > 2 / 3 yields 0.666666 > 2 _/ 3 yields 0 Leave it to me to try to be cute and wind up obscuring my point. Leave it to Ping to dig up a language called "E" I meant "Everyone" as in CP4*E* :-) Some people have been saying that "Everyone" thinks 2/3=3D=3D0.6666 Others say that 2/3 is obviously 0 I was suggesting that perhaps "Everyone" thinks 2/3=3D=3D2/3 It should be tested, of course, by asking a subset of "Everyone" But this is similar to the case-sensitive issue, and Guido has spoken. I stand by my general point, though. Programmers don't have a clue about what "Everyone" thinks or needs. If we pretend we do, CP4E will have all the credibility of a Star Trek convention. --Jeff From orla_redbird@crosswinds.net Tue Feb 8 00:09:43 2000 From: orla_redbird@crosswinds.net (Gordon Worley) Date: Mon, 07 Feb 2000 19:09:43 -0500 Subject: [Edu-sig] More on age Message-ID: Many of you seem to be ignoring the studies of psychologist (unless m= ost of you are previously unfamilier with the studies that I'm about = to mention). While my HS book likes to be broad in mentioning studie= s (i.e. it doesn't give any way to learn about the specific experimen= ts that it reads about), it happen to list the develop of cognative f= unctions according to age. Skipping a few ages, it has been found th= at people can generally not abstract information until they are circa= 12 years old. Trust me, this is the truth, because I began programm= ing in 2nd grade and for a long time was largely unsuccessful because= I was programming by patterning. By that I mean that I knew what to= type by taking old code and changing a thing or two to make it do wh= at I wanted. When I did program new code, it was because I remembere= d the old code and just reimplimented it with slightly different synt= ax. I started trying to learn Java in 7th grade, and still didn't un= derstand it all until I made it to 9th, because I was a=20 The difference may seem trivial to some of you, but consider that unt= il one can abstract, programming abilities will always limited to wha= t one has already seen coded (this is not entirely true, it is possib= le to intuitively combine patterns to get new patterns and to just ha= ppen to, by accident, create new code). For example, my first Java p= roject was to create a simple sketching program. The book I was usin= g provided plenty of good patterns to look at for how to develop the = drawing space, the drawing events, and the GUI. Making a space to sk= etch in and then making sketching happen was easy, since the book pra= ctically did it for me. The GUI, on the other hand, was considerably= more complicated to design. I had no problems when I did exctly wha= t the book said to and then changed it to fit my program, but in tryi= ng to developing a new interface that would be specific to the functi= ons that I could impliment in my program, my attempts were disatoriou= s. This was not a case of inability to code or lack of=20 What this all comes around to is that, while you can try to teach sub= 12 year olds how to program, results will always be limited. In addi= tion, it is very important to spell things out *exactly* to the young= er age group, because they will not make those abstract connectiosn l= ike their slightly older counterparts will. If you say to a class of= young children that a list can contain any type of variable, you nee= d to show them an example of every variable class being used as a lis= t item. In a similar way, it is necessary to show that spam + grail = =3D grail + spam and in the fuction spam(arga, argb, argc), arga, arb= , and argc can have any name, but must have the correct type of data = in them. Trust me, if you show every instance you can think of and g= ive lots of sample code, young children will do fine, but if you star= t to assume that they can suddendly jump from spam(arg), arg is numbe= r to spam(gra), gra also has to be a number. - Gordon Worley http://www.crosswinds.net/~orla_redbird/ mailto:orla_redbird@crosswinds.net From tim_one@email.msn.com Tue Feb 8 06:42:31 2000 From: tim_one@email.msn.com (Tim Peters) Date: Tue, 8 Feb 2000 01:42:31 -0500 Subject: [Edu-sig] Rational Division In-Reply-To: Message-ID: <000201bf71ff$ad48ece0$d92d153f@tim> [Jeffrey Kunce] >>> So, what does "E" think? Does 2/3==0 or does 2/3==1 >>> or does 2/3=0.66..67 or does 2/3==2/3? [Ka-Ping Yee] >> In E, there are two operators for division: >> 2 / 3 yields 0.666666 >> 2 _/ 3 yields 0 [Jeffrey Kunce] > Leave it to me to try to be cute and wind up obscuring my point. > Leave it to Ping to dig up a language called "E" > I meant "Everyone" as in CP4*E* :-) Heh heh -- this is Nerd Comedy of Errors at its finest . > Some people have been saying that "Everyone" thinks 2/3==0.6666 > Others say that 2/3 is obviously 0 > I was suggesting that perhaps "Everyone" thinks 2/3==2/3 > It should be tested, of course, by asking a subset of "Everyone" I don't buy into this. Python's closest predecessor (ABC) *was* designed to be maximally unsurprising (via iterative user testing and redesign), and ended up a self-contained universe, thoroughly isolating its users even from their native filesystem ("too quirky"). Python tries to regularize the mess that is the "real computing world", but doesn't try to deny or hide its existence. CP4E's goals seem much more in tune with that latter. > But this is similar to the case-sensitive issue, and Guido has spoken. Yes, and in harmony with Steve Morris's good suggestions, I'll just list the alternatives and ask that followup rants be directed to comp.lang.python (or me; I've played "corporate numeric apologist" for enough HW vendors that I feel obliged to take this on as pennance ...): 1. 2/3 is 0. Like C, Fortran and Python today. Unlike real life outside computer languages. 2. 2/3 is 0.666... but not exactly ("binary floating point"). Like Perl. Vulnerable to excruciatingly subtle correctness surprises. 3. 2/3 is 2/3 ("rationals"). Like ABC (and what newbie testing there determined *was* least surprising). Also like DrScheme (but not all flavors of Scheme). Vulnerable to memory-use and timing surprises. 4. 2/3 is 0.666... but using decimal floating-point. Like REXX, hand calculators, and paper-and-pencil math. Much in common with #2, but under #2 0.1 is not exactly one tenth (you don't need testing to discover *that's* confusing -- I've been explaining that one to frustrated newbies and professionals(!) for 20-some years). 5. 2/3 is 2/3, and sin(asin(2/3)) is 2/3 exactly, and exp(log(2/3)) is 2/3 exactly, ... "the constructive reals". I'm not aware of any general-purpose language that offers these (they're slow, and e.g. testing for equality is undecidable). If anyone has another in mind, let me know! I'll keep a list. > I stand by my general point, though. Programmers don't have a clue > about what "Everyone" thinks or needs. If we pretend we do, CP4E > will have all the credibility of a Star Trek convention. Well, if you want to teach someone how to cook, don't spend too much time asking eaters what they imagine appropriate tools for the job may be <0.5 wink>. They're going to have to learn about weights, measures, temperature, time, portion management, and how to read the 10,000 cookbooks that already exist. You ask *cooks* how to cook -- eaters can tell you what tastes good, but don't have a clue about what it takes to accomplish that (note that each of the 5 above comes with its own set of major drawbacks, which simply aren't obvious at first). One way to "make learning easy" is to (as in the recent Dijkstra quote) infantalize the subject matter. If that's what CP4E becomes, why bother ... computers-in-practice-are-harder-than-computers-in-theory-ly y'rs - tim From wware@world.std.com Tue Feb 8 12:58:20 2000 From: wware@world.std.com (Will Ware) Date: Tue, 8 Feb 2000 07:58:20 -0500 (EST) Subject: [Edu-sig] Rational Division Message-ID: <200002081258.HAA10745@world.std.com> Regarding rational division (and extensible, one imagines, to the issue of case sensitivity), Tim Peters wrote: <<< One way to "make learning easy" is to (as in the recent Dijkstra quote) infantalize the subject matter. If that's what CP4E becomes, why bother ... >>> The principle of minimal surprises is laudable, but zero surprises is unattainable. Perhaps there should be a budget of, say, a half-dozen surprises. Two have been used up, four are left for future issues. I found learning easiest when the subject matter had some kind of organizing principle. This was easy to find in math and science, and would have been easy in a programming class if one had been available, but I couldn't find one in history or English. The English language is full of irregular verbs and awkward spellings, yet we expect even the dummies to stumble through it more or less successfully. Maybe Everybody has a slightly larger capacity for surprises than one might think. -- I can picture in my mind a world without war, a world without hate. And -- -- I can picture us attacking that world, because they'd never expect it. -- Will Ware - N1IBT - wware@world.std.com From gward@cnri.reston.va.us Tue Feb 8 13:14:58 2000 From: gward@cnri.reston.va.us (Greg Ward) Date: Tue, 8 Feb 2000 08:14:58 -0500 Subject: [Edu-sig] More on age In-Reply-To: ; from orla_redbird@crosswinds.net on Mon, Feb 07, 2000 at 07:09:43PM -0500 References: Message-ID: <20000208081457.A1196@cnri.reston.va.us> On 07 February 2000, Gordon Worley said: > Many of you seem to be ignoring the studies of psychologist (unless > most of you are previously unfamilier with the studies that I'm about > to mention). While my HS book likes to be broad in mentioning studies > (i.e. it doesn't give any way to learn about the specific experiments > that it reads about), it happen to list the develop of cognative > functions according to age. Skipping a few ages, it has been found > that people can generally not abstract information until they are > circa 12 years old. Interestingly, this lack of ability is not limited to the pre-12-year-old set. You don't have to spend much time on comp.lang.* to realize that many, many people out there who are trying to program (some of them, it seems, for money) who have a very limited ability for abstract thinking and seem to construct most of their code as you say you did before grade 9 -- ie. by example and cut 'n paste. Just an observation -- and, by-the-by, probably the best argument in favour of CP4E! Greg From gerrit@nl.linux.org Tue Feb 8 14:21:40 2000 From: gerrit@nl.linux.org (Gerrit Holl) Date: Tue, 8 Feb 2000 15:21:40 +0100 Subject: [Edu-sig] Rational Division In-Reply-To: <000201bf71ff$ad48ece0$d92d153f@tim>; from tim_one@email.msn.com on Tue, Feb 08, 2000 at 01:42:31AM -0500 References: <000201bf71ff$ad48ece0$d92d153f@tim> Message-ID: <20000208152140.A3249@stopcontact.palga.uucp> Tim Peters wrote on 949970551: > 1. 2/3 is 0. Like C, Fortran and Python today. Unlike real life outside > computer languages. > > 2. 2/3 is 0.666... but not exactly ("binary floating point"). Like Perl. > Vulnerable to excruciatingly subtle correctness surprises. > > 3. 2/3 is 2/3 ("rationals"). Like ABC (and what newbie testing there > determined *was* least surprising). Also like DrScheme (but not all flavors > of Scheme). Vulnerable to memory-use and timing surprises. > > 4. 2/3 is 0.666... but using decimal floating-point. Like REXX, hand > calculators, and paper-and-pencil math. Much in common with #2, but under > #2 0.1 is not exactly one tenth (you don't need testing to discover *that's* > confusing -- I've been explaining that one to frustrated newbies and > professionals(!) for 20-some years). > > 5. 2/3 is 2/3, and sin(asin(2/3)) is 2/3 exactly, and exp(log(2/3)) is 2/3 > exactly, ... "the constructive reals". I'm not aware of any general-purpose > language that offers these (they're slow, and e.g. testing for equality is > undecidable). > > If anyone has another in mind, let me know! I'll keep a list. 2/3 is 0 rest 1. That's what I learned when I was 7, 8 years old. However, returning a tuple for 2/3 might break some existing code :) regards, Gerrit. -- Homepage: http://www.nl.linux.org/~gerrit -----BEGIN GEEK CODE BLOCK----- http://www.geekcode.com Version: 3.12 GCS dpu s-:-- a14 C++++>$ UL++ P--- L+++ E--- W++ N o? K? w--- !O !M !V PS+ PE? Y? PGP-- t- 5? X? R- tv- b+(++) DI D+ G++ !e !r !y -----END GEEK CODE BLOCK----- moc.edockeeg.www//:ptth From pdx4d@teleport.com Tue Feb 8 17:15:41 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Tue, 08 Feb 2000 09:15:41 -0800 Subject: [Edu-sig] More re "Python Notation" In-Reply-To: <20000208152140.A3249@stopcontact.palga.uucp> References: <000201bf71ff$ad48ece0$d92d153f@tim> <000201bf71ff$ad48ece0$d92d153f@tim> Message-ID: <3.0.3.32.20000208091541.0072d2e8@pop.teleport.com> I meant to shut up for a week and concentrate exlusively on writing Xbase for money, but this edu-sig is just too=20 interesting -- can't resist... Math notations assume human "parcers" -- increasingly=20 numerate readers as the training progresses. A lot of=20 work goes into getting those humans "programmed" to read=20 without stumbling. Software engineers typically have two "clients" for their=20 output, a stupid but extremely fast and efficient machine on the one hand, and the "naive user" on the other. =20 The progammer is the mediator, writing all sorts of error=20 checking into the code, trying to anticipate what that "naive user" might do (or a malicious hacker) and trying=20 to protect the integrity of the application (keep it from=20 crashing and/or becoming hopelessly confused). Some of what I'm doing with Python flies in the face of=20 all this "reflex conditioning" on the part of programmers. I'm not trying to make robust code that runs on expensive=20 computers, where crashes mean big bucks, angry clients,=20 loss of jobs. Rather, I'm going back to the "trained human readers" paradigm=20 (not naive). They're reading Python as an alternative way=20 to express some ideas, such as:=20 * how to generate Pascal's Triangle using expressions=20 with factorial in them=20 * how to spit out the number of spheres in a triangular,=20 square, cubic, half-octahedral or cuboctahedral packing =20 I've posted some code for all of the above in earlier posts,=20 except for this last, which I'll give here: def cubocta(L): # L is number of layers in a cuboctahedral packing # Returns cumulative number of spheres return (10.0/3.0)*L**3 + 5*L**2 + (11.0/3.0)*F + 1 In action: >>> cubocta(1) 13.0 >>> cubocta(0) 1.0 >>> cubocta(2) 55.0 >>> cubocta(100) 3383701.0 Notice: I don't check for negative numbers (which in this case would actually work -- but have no geometric interpretation=20 in this context -- i.e. are "meaningless"). L is supposed to=20 be "the number of layers around a nuclear sphere" and is a whole=20 number. In my classroom context, it may be assumed that students=20 simply know this. We aren't going to clutter the function with=20 a lot of error trapping. Here's a web page with an animated GIF showing a growing=20 cuboctahedron, plus other animations showing how this relates to crystallography. I did these GIFs using Java + Povray,=20 but could have done them using Python + Povray (I just=20 hadn't written oop7.html yet): http://www.inetarena.com/~pdx4d/ocn/xtals101.html Although math books include the concept of "domain of a function"=20 (as one subscriber pointed out by private email), the economy=20 of expressions like n!/k!(n-k)! depend on our _not_ cluttering=20 the notation with a lot of redundant "error checking" to make=20 sure the archetypal "naive reader" doesn't substitute -10,=20 Root(2), or a character string for n or k. =20 In a "for humans only" text, you've codified the "domain" of=20 factorial elsewhere, probably in a different book, at a different=20 grade level. Now you just assume all this "context sensitivity"=20 on the part of your readers -- something software engineers=20 have rarely felt their workaday world allowed them to assume=20 (machines don't do context, and the naive users need to have=20 their errors trapped). So, as a classroom-focused math teacher, my bias is different=20 from the software engineer's. The Python I write is for human=20 readers to scan and comprehend, much as they learn to scan=20 and comprehend those "crypto-compressed" math notations we=20 already expect them to learn (a lot of geeky greek letters,=20 like SIGMA, PHI, PI, THETA). =20 Plus Python has the added benefit of being machine-interpreted=20 out the back -- so you can set up these interactive situations=20 with a computer that offer immediate feedback and reinforcement. =20 Every time you test an expression or short function definition,=20 you get rewarded with a response (kind of like having a text=20 book with "answers in the back" -- you can immediately confirm=20 your understanding, or lack thereof). So, now that I've set up all this context, I will conclude by=20 appending a real life post to the Association of Mathematics=20 Teacher Educators (AMTE) listserv. I don't mention Python by=20 name, but you'll see how I'm practicing this very philosophy=20 in that context: ------------------------------------------------ Archived at the Math Forum=20 thread =3D http://forum.swarthmore.edu/epigone/amte/belgandjy ------------------------------------------------ Subject: Re: substitution Author: Kirby Urner Date: Sun, 30 Jan 2000 16:36:19 -0800 > =3D Sally =3D Kirby > For another example with perhaps makes is clearer,=20 > f(x)=3Dx^2, g(x)=3Dx+1, find f=B0g(x) and g=B0f(x). (The symbol =B0 is=20 > a degree sign on my keyboard, the closest I can come to the=20 > composition symbol, but it might not be that on others' > screens.) When this is first introduced at least half of=20 > the students will give me f=B0g(x)=3Dx^2+1 AND g=B0f(x)=3D(x+1)^2. When doing composition of functions, I might have a student perform the role of x + 1. "Whenever someone gives you a number, your job is to simply add 1 to it and hand it back." =20 Sally takes that job. We test it out a few times. Looks like=20 she's got the hang of it. Sally(x) =3D x + 1 Frank's job is to multiply a number by itself and return the=20 result. We do a little job training to make sure he's got it=20 down. Fred(x) =3D x * x So let's say I start with 3 and hand it to Sally. I get back 4. Now I take my 4 and hand it to Frank. I get back 16. Suppose I go in the reverse order. I start with 3 again, get back 9=20 from Frank and then 10 from Sally. Different answer. Order matters. Or we could talk about other operations, besides those dealing with numbers. =20 Sally paints anything she's given the color red. Frank paints green polka dots on whatever he's given. =20 So if I give this toy horse to Sally first, then Frank, I get=20 back a red horse with green polka dots. But what happens if=20 I give it to Frank first and then Sally? Again, order matters. Frank(Sally(horse)) --> red horse w/ green dots Sally(Frank(horse)) --> horse is completely red (dots=20 painted over) If my class has access to an interactive command line (as per=20 earlier posts re my favored model of a math class), they could=20 explore composition of functions by writing two definitions=20 and taking g(f(x)) vs f(g(x)) -- no need for the little circle=20 symbol I don't think, or we can show them that later (it's=20 somewhat redundant). I'd expect students to make up their=20 own functions and test the outcomes of composition. And again (as per my last post), I'd like to *move away*=20 from:=20 (a) the idea that operations are always about numbers (real=20 or otherwise) and=20 (b) the convention of using single letters for method and variable names On the contrary, I want my students to: (a) see "operations" as more generic than "number functions" (b) get in the habit of using longer strings to name their variables and operations In the example below, I follow my own advice: >>> 'A'*3 =20 'AAA' [Note: when used with a characters, the operators * and +=20 mean 'repeat' and 'concatenate' respectively. This exercise presumes students are already quite familiar with this=20 behavior.] >>> def Sally(input): return input * 3 =09 >>> def Frank(input): return "CA"+input =09 =09 >>> Frank("T") 'CAT' >>> Sally("T") 'TTT' >>> Frank(Sally("T")) 'CATTT' >>> Sally(Frank("T")) 'CATCATCAT' In the exercise given: f(x)=3Dx^2, g(x)=3Dx+1 f=B0g(x)=3D ? I might write an alternative next to it, such as: temp =3D g(x) answer =3D f(temp) This makes it clearer that the output of the innermost function is the input of the enclosing function. Or I might=20 use concentric circles, with g inside of f (I've seen text=20 books that do this). I'm sure other list members have tried many of these ideas (plus many more), with varying degrees of success. Sometimes it's just the notation that's confusing, and switching=20 to some other notation, while keeping all the ideas intact, clears=20 up some conceptual confusions. Then you can go back to the original=20 notation, with more confidance that the concepts are well-anchored. Kirby =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D None of this means that I'm "against" using Python in other ways (e.g. to teach computer programming). It's a great segue into all kinds of other patterns of usage. But I=20 just wanted to be clearer about my model, which owes a lot to Iverson's APL. APL is the first programming language=20 I ever learned, and it was love at first sight. And APL, as some of you know, was originally a chalk board notation. =20 It was designed for sophisticated human readers, _plus_ it=20 had the advantage of being executable in silicon circuits. Just amazing. Kirby From kuncej@mail.conservation.state.mo.us Tue Feb 8 17:52:46 2000 From: kuncej@mail.conservation.state.mo.us (Jeffrey Kunce) Date: Tue, 08 Feb 2000 11:52:46 -0600 Subject: [Edu-sig] Rational Division Message-ID: [Tim Peters] > I don't buy into this. Python's closest predecessor (ABC) *was* = designed to > be maximally unsurprising (via iterative user testing and redesign), and > ended up a self-contained universe, thoroughly isolating its users even = from > their native filesystem ("too quirky"). Python tries to regularize the = mess > that is the "real computing world", but doesn't try to deny or hide its > existence. CP4E's goals seem much more in tune with that latter. I'm not sure that CP4E's goals are that well defined. There were a lot of proponents for "Everyone" being virtually everyone. The Alice people are proceeding on that premise, and they are the ones who brought up the case and division issues. My opinion is that CP4E should concentrate, initially, on serving those=20 who already *want* to learn or teach programming, but who are frustrated because of lack of resources and because of the mess you refer to. From this POV, I think python is pretty darn good just as it is --Jeff From fstajano@uk.research.att.com Tue Feb 8 22:45:27 2000 From: fstajano@uk.research.att.com (Frank Stajano) Date: Tue, 08 Feb 2000 22:45:27 +0000 Subject: [Edu-sig] Rational Division In-Reply-To: <20000208152140.A3249@stopcontact.palga.uucp> References: <000201bf71ff$ad48ece0$d92d153f@tim> <000201bf71ff$ad48ece0$d92d153f@tim> Message-ID: <4.2.2.20000208223924.00bd7cc0@localhost> At 2000-02-08 15:21 +0100, Gerrit Holl wrote: >2/3 is 0 rest 1. That's what I learned when I was 7, 8 years old. I won't question what you learnt when you were little, and indeed different primary schools in different parts of the world may follow very different systems; but at mine they would have failed me in arithmetic unless I upgraded that answer to 0 rest 2 ;-) Frank (http://i.am/filologo.disneyano/) http://www.uk.research.att.com/~fms/ From Gerrit Wed Feb 9 07:14:09 2000 From: Gerrit (Gerrit Holl) Date: Wed, 9 Feb 2000 08:14:09 +0100 Subject: [Edu-sig] Rational Division In-Reply-To: <4.2.2.20000208223924.00bd7cc0@localhost>; from fstajano@uk.research.att.com on Tue, Feb 08, 2000 at 10:45:27PM +0000 References: <000201bf71ff$ad48ece0$d92d153f@tim> <000201bf71ff$ad48ece0$d92d153f@tim> <20000208152140.A3249@stopcontact.palga.uucp> <4.2.2.20000208223924.00bd7cc0@localhost> Message-ID: <20000209081409.B957@stopcontact.palga.uucp> Frank Stajano wrote on 950046327: > At 2000-02-08 15:21 +0100, Gerrit Holl wrote: > >2/3 is 0 rest 1. That's what I learned when I was 7, 8 years old. > > I won't question what you learnt when you were little, and indeed different > primary schools in different parts of the world may follow very different > systems; but at mine they would have failed me in arithmetic unless I > upgraded that answer to 0 rest 2 ;-) Oops! 0 rest 2, of course. regards, Gerrit. -- Homepage: http://www.nl.linux.org/~gerrit -----BEGIN GEEK CODE BLOCK----- http://www.geekcode.com Version: 3.12 GCS dpu s-:-- a14 C++++>$ UL++ P--- L+++ E--- W++ N o? K? w--- !O !M !V PS+ PE? Y? PGP-- t- 5? X? R- tv- b+(++) DI D+ G++ !e !r !y -----END GEEK CODE BLOCK----- moc.edockeeg.www//:ptth From Gerrit Wed Feb 9 16:32:25 2000 From: Gerrit (Gerrit Holl) Date: Wed, 9 Feb 2000 17:32:25 +0100 Subject: [Edu-sig] Classes and learning (Was:Age groups) In-Reply-To: <20000207072618.13883.qmail@hotmail.com>; from b2blink@hotmail.com on Mon, Feb 07, 2000 at 08:26:18AM +0100 References: <20000207072618.13883.qmail@hotmail.com> Message-ID: <20000209173225.A1416@stopcontact.palga.uucp> Ulf Engstrøm wrote on 949908378: > I think mostly the second one, that makes most sence for me. But when we > then here the opinions from others; Gerrit thought it was hard even with > Python, but did however get it, and others that got it immediately from any > OO-language. It depends on the person. > I believe that with the right way of teaching it anyone can understand it > (left or right-brained, and btw I have to say I think most ppl here are > left-brainers, but don't flame me over this one) What does right-brained or left-brained mean? -- Homepage: http://www.nl.linux.org/~gerrit -----BEGIN GEEK CODE BLOCK----- http://www.geekcode.com Version: 3.12 GCS dpu s-:-- a14 C++++>$ UL++ P--- L+++ E--- W++ N o? K? w--- !O !M !V PS+ PE? Y? PGP-- t- 5? X? R- tv- b+(++) DI D+ G++ !e !r !y -----END GEEK CODE BLOCK----- moc.edockeeg.www//:ptth From Fredrik Lundh" Gerrit Holl wrote: > > I believe that with the right way of teaching it anyone can = understand it=20 > > (left or right-brained, and btw I have to say I think most ppl here = are=20 > > left-brainers, but don't flame me over this one) > What does right-brained or left-brained mean? picking a random URL: http://www.funderstanding.com/learning_theory_how8.html (I actually tested my brain in the mid-eighties, using a clever little device created by some swedish researchers. I was the only whole-brained programmer they'd ever stumbled upon ;-) From Fredrik Lundh" Message-ID: <03bd01bf7350$ebd5d2a0$34aab5d4@hagrid> I wrote: > (I actually tested my brain in the mid-eighties, using a clever > little device created by some swedish researchers. I was the > only whole-brained programmer they'd ever stumbled upon ;-) and before more people accuse me of "brain snobbery", let me point out that the device in question only measured the difference between the two halves, not the magnitude... might-have-been-temporarily-braindead-ly yrs /F Brain: Pinky, Are You Pondering What I'm Pondering? Pinky: I think so, Brain, but me and Pippi Longstocking... I mean, what would the children look like? From pdx4d@teleport.com Thu Feb 10 02:01:35 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Wed, 09 Feb 2000 18:01:35 -0800 Subject: [Edu-sig] Going Graphical: Where Python Meets Descartes In-Reply-To: <03bd01bf7350$ebd5d2a0$34aab5d4@hagrid> References: <00d701bf7325$c67984a0$34aab5d4@hagrid> Message-ID: <3.0.3.32.20000209180135.007335d4@pop.teleport.com> Here's another good approximation of where I'm thinking to go with "Python notation" in the context of a prototypical math class. In USA K-12, we're mostly working with calculators in early 2000, with relatively few kids having access to an interactive command line (aka an REPL environment). The text books don't have much beyond obsolete BASIC, if that, and nothing about the object oriented paradigm. Whereas some language gurus posting here have advocated forming a united front against the hegemony of C/C++ (nevermind for the moment that Python is written in C++), I have a slightly different, perhaps complementary focus: helping math teachers move beyond their graphing calculators into the world of full-fledged computers. This move from calculators to computers is likewise a move "beyond flatland" into fully spatial geometry, and to a broader treatment of symbolic operations, with a greater range of data structures and operations making it into the standard curriculum.[1] These lesson plans are about showing how one can leverage Python and other tools (e.g. Povray), along with pre-existing K-12 content (in this example coordinate geometry), to achieve a usefully synergetic result. Students learning enough Python to scan/write code such as included below will be gaining insight into both computing and mathematics at the same time, in the context of an inter- active, self-reinforcing environment conducive to further play and self-directed exploration. The teacher in such a classroom will need to know enough Python to keep students moving along towards their goals, but need not be a top-level Python guru. A good grasp of the underlying mathematics remains the more important qualification for successful communication of this content, plus experience in various time-tested methods of pedagogy. Kirby 4D Solutions [1] See: http://www.inetarena.com/~pdx4d/ocn/trends2000.html =========== Another Lesson Plan (first draft): Going Graphical: Where Python Meets Descartes by Kirby Urner, Oregon Curriculum Network Ver. 1.0, Feb 09, 2000 Originally posted to edu-sig@python.org Coming soon: web version Concepts typically introduced in K-12 include many relating to coordinate geometry. Renaissance painters figured out a lot of this stuff, in their efforts to master the art of painting in perspective. Descartes brought a lot of their methods together in the context of his "I think therefore I am" philosophy, giving us the Cartesian coordinate system. Considering the contributions by the art schools to this heritage, it's appropriate that we will be bringing more color into our graphics than 1900s text books typically permitted (more perspective, too). A vector is an object with magnitude and direction, typically shown as an arrow in Cartesian space. Vector addition involves placing two such arrows tip-to-tail, to get a third: their vector sum. (a,b,c) + (d,e,f) = (a+d,b+e,c+f). def __add__(self,addvector): # add a vector to this object (self) # return a new vector newcoords=[0,0,0] for i in range(3): newcoords[i]=addvector.coords[i] + self.coords[i] return Vector(newcoords) Likewise, we can scale a vector, meaning cause it to grow or shrink without changing its orientation. Or, if we apply a negative scalar, the operation of negation will cause our arrow to flip, and point 180 degrees oppositely to its original direction. So to scale by 2 is to double a vector's length, whereas to scale it by -0.5 is to flip it by 180 degrees, and shrink it to 1/2 its original magnitude. (a,b,c) * s = (as,bs,cs). def __mul__(self,scalar): # scale and this vector (self) by scalar # return a new vector newcoords=[0,0,0] for i in range(3): newcoords[i]=scalar * self.coords[i] return Vector(newcoords) Let's look at Vectors as a class of object. Here's a complete class template for our vector objects: class Vector: def __init__(self,arg): # initialize a vector at an (x,y,z) tuple (= arg) self.coords = arg def __mul__(self,scalar): # scale and this vector (self) by scalar # return a new vector newcoords=[0,0,0] for i in range(3): newcoords[i]=scalar * self.coords[i] return Vector(newcoords) def __add__(self,addvector): # add a vector object to this object (self) # return a new vector newcoords=[0,0,0] for i in range(3): newcoords[i]=addvector.coords[i] + self.coords[i] return Vector(newcoords) def length(self): # return this vector's length sum = 0 for i in range(3): sum = sum + self.coords[i]**2 return sum ** 0.5 [ Note that in saying "complete" I don't mean we can't further add to and enhance our vectors. Dot and cross products are examples of additional operations we might usefully define. "Complete" means "in working condition" -- even if we have plans to brainstorm lots of enhancements ] Let's see our Vector objects in action: >>> from coords import Vector >>> v1 = Vector((1,0,0)) >>> v2 = Vector((0,2,1)) >>> v3 = v1 + v2 >>> v3.coords [1, 2, 1] >>> v1.length() 1.0 >>> v2.length() 2.2360679775 >>> v3.length() 2.44948974278 >>> v4 = v1 * 10.0 >>> v4.coords [10.0, 0.0, 0.0] Now we'd like to "paint" our vectors. We'll use the freeware ray tracing program known as POV-ray (www.povray.org) for this purpose. Once again, we can choose to look at a Povray file (.pov extension) as an object. You instantiate it with a file name... >>> from povray import Povray >>> myfile = Povray("sine.pov") then feed vectors to its two write methods: writecyl and writepoint. For example: >>> i = 0.75 >>> point = Vector((i,math.sin(i),0)) >>> myfile.writepoint(point) >>> posx = Vector((3,0,0)) >>> myfile.cylcolor = 'Green' >>> myfile.writecyl(posx) >>> myfile.writecyl(posx * -1.0) myfile.writecyl(vector) draws a slender cylinder from (0,0,0) to our vector tip: def writecyl(self,v1): # write cylinder from (0,0,0) to v1.coords tip = tuple(v1.coords) self.file.write(("cylinder{<0, 0, 0>" + ",<%s, %s, %s>," % tip + " %s pigment {color %s} no_shadow}\n" % (self.cylradius, self.cylcolor))) [ Here we're looking inside the povray.py module (gives the class template for a Povray object) ] myfile.writesph(vector) just puts a little sphere at the vector tip, a graphical point. def writepoint(self,v1): # write sphere at v1.coords center = tuple(v1.coords) self.file.write(("sphere{<%s, %s, %s>, " % center + " %s pigment {color %s} no_shadow }\n" % (self.sphradius, self.sphcolor))) All these write operations end generating a povray text file with a lot of instructions for the ray tracing engine. Here's an excerpt from 'parabola.pov': cylinder{<0, 0, 0>,<0, 0, 3>, 0.02 pigment {color Cyan} no_shadow} cylinder{<0, 0, 0>,<0.0, 0.0, -3.0>, 0.02 pigment {color Cyan} no_shadow} sphere{<-1.5, 2.25, 0>, 0.02 pigment {color Red} no_shadow } sphere{<-1.49, 2.2201, 0>, 0.02 pigment {color Red} no_shadow } Now that we have all this infrastructure in place, we have the wherewithall to start doing some serious graphics -- more sophisticated than any graphing calculator can do. For example, we might want to start building a little "functions library" for showing favorite text book graphs, such as parabola(x) = sin(x) or sinewave(x) = x^2 Here's some Python for doing both: def sinewave(): # graph a sine wave from -pi to pi myfile = Povray("sine.pov") xyzaxes(myfile) # include multi-color xyz axes i = - math.pi while (i < math.pi): point = Vector((i,math.sin(i),0)) myfile.writepoint(point) i = i+0.01 myfile.close() def parabola(): # graph a parabola from -2.0 to 2.0 myfile = Povray("parabola.pov") xyzaxes(myfile) # include multi-color xyz axes i = - 1.5 while (i < 1.5): point = Vector((i,i**2,0)) myfile.writepoint(point) i = i+0.01 myfile.close() Note that both functions invoke an xyz axis function, to draw green/orange/cyan xyz axes (part of our functions library): def xyzaxes(file): posx = Vector((3,0,0)) file.cylcolor = 'Green' file.writecyl(posx) file.writecyl(posx * -1.0) posy = Vector((0,3,0)) file.cylcolor = 'Orange' file.writecyl(posy) file.writecyl(posy * -1.0) posz = Vector((0,0,3)) file.cylcolor = 'Cyan' file.writecyl(posz) file.writecyl(posz * -1.0) Below is a command line session, wherein we simply execute these functions. Python 1.5.2 (#0, Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)] on win32 Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam >>> import functions >>> functions.sinewave() >>> functions.parabola() The output of these two functions may be viewed with your web browser at: http://www.inetarena.com/~pdx4d/ocn/graphics/sinewave.gif http://www.inetarena.com/~pdx4d/ocn/graphics/parabola.gif Kirby From orla_redbird@crosswinds.net Thu Feb 10 03:03:30 2000 From: orla_redbird@crosswinds.net (Gordon Worley) Date: Wed, 9 Feb 2000 22:03:30 -0500 Subject: [Edu-sig] Re: Rational Division Message-ID: This isn't really a problem. It's just a lack of knowledge about syntax. It's not intuitive (because they don't teach it this way in school), but it makes sense once you know about it. Oh yeah, here's it (taken from a Python interpreter session): >>> 2/3 #returns number of times can be divided into 0 >>> 2%3 #modulus, returns remainder 2 >>> 2.0/3.0 #decimals make them floats 0.666666666667 As you can see, there is a way to do all the behaviors that might be expected, it just takes an appropriate knowledge of the syntax to do it. Just as it is necessary to know the syntax for control statements, it is also necessary to know the proper syntax for preforming basic arithmetic. - Gordon Worley http://www.crosswinds.net/~orla_redbird/ mailto:orla_redbird@crosswinds.net From wilson@visi.com Thu Feb 10 04:14:00 2000 From: wilson@visi.com (Timothy Wilson) Date: Wed, 9 Feb 2000 22:14:00 -0600 (CST) Subject: [Edu-sig] Going Graphical: Where Python Meets Descartes In-Reply-To: <3.0.3.32.20000209180135.007335d4@pop.teleport.com> Message-ID: On Wed, 9 Feb 2000, Kirby Urner wrote: > Here's another good approximation of where I'm thinking to go > with "Python notation" in the context of a prototypical math > class. May I ask at what grade level this lesson is aimed? Or perhaps more precisely, what level of programming and math experience? -Tim -- Tim Wilson | Visit Sibley online: | Check out: Henry Sibley H.S. | http://www.isd197.k12.mn.us/ | http://www.zope.org/ W. St. Paul, MN | | http://slashdot.org/ wilson@visi.com | | http://linux.com/ From samschul@pacbell.net Thu Feb 10 04:15:31 2000 From: samschul@pacbell.net (sam schulenburg) Date: Wed, 09 Feb 2000 20:15:31 -0800 Subject: [Edu-sig] Re: Edu-sig digest, Vol 1 #15 - 4 msgs References: <20000209170044.BAA471CDA5@dinsdale.python.org> Message-ID: <000801bf737d$78f399c0$2018aace@samintel> ----- Original Message ----- From: To: Sent: Wednesday, February 09, 2000 9:00 AM Subject: Edu-sig digest, Vol 1 #15 - 4 msgs > Send Edu-sig mailing list submissions to > edu-sig@python.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://www.python.org/mailman/listinfo/edu-sig > or, via email, send a message with subject or body 'help' to > edu-sig-request@python.org > > You can reach the person managing the list at > edu-sig-admin@python.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Edu-sig digest..." > > > Today's Topics: > > 1. More re "Python Notation" (Kirby Urner) > 2. RE: Rational Division (Jeffrey Kunce) > 3. Re: Rational Division (Frank Stajano) > 4. Re: Rational Division (Gerrit Holl) > > --__--__-- > > Message: 1 > Date: Tue, 08 Feb 2000 09:15:41 -0800 > To: edu-sig@python.org > From: Kirby Urner > > <000201bf71ff$ad48ece0$d92d153f@tim> > Subject: [Edu-sig] More re "Python Notation" > > > I meant to shut up for a week and concentrate exlusively > on writing Xbase for money, but this edu-sig is just too=20 > interesting -- can't resist... > > Math notations assume human "parcers" -- increasingly=20 > numerate readers as the training progresses. A lot of=20 > work goes into getting those humans "programmed" to read=20 > without stumbling. > > Software engineers typically have two "clients" for their=20 > output, a stupid but extremely fast and efficient machine > on the one hand, and the "naive user" on the other. =20 > > The progammer is the mediator, writing all sorts of error=20 > checking into the code, trying to anticipate what that > "naive user" might do (or a malicious hacker) and trying=20 > to protect the integrity of the application (keep it from=20 > crashing and/or becoming hopelessly confused). > > Some of what I'm doing with Python flies in the face of=20 > all this "reflex conditioning" on the part of programmers. > I'm not trying to make robust code that runs on expensive=20 > computers, where crashes mean big bucks, angry clients,=20 > loss of jobs. > > Rather, I'm going back to the "trained human readers" paradigm=20 > (not naive). They're reading Python as an alternative way=20 > to express some ideas, such as:=20 > > * how to generate Pascal's Triangle using expressions=20 > with factorial in them=20 > * how to spit out the number of spheres in a triangular,=20 > square, cubic, half-octahedral or cuboctahedral packing =20 > > I've posted some code for all of the above in earlier posts,=20 > except for this last, which I'll give here: > > def cubocta(L): > # L is number of layers in a cuboctahedral packing > # Returns cumulative number of spheres > return (10.0/3.0)*L**3 + 5*L**2 + (11.0/3.0)*F + 1 > > In action: > > >>> cubocta(1) > 13.0 > >>> cubocta(0) > 1.0 > >>> cubocta(2) > 55.0 > >>> cubocta(100) > 3383701.0 > > Notice: I don't check for negative numbers (which in this > case would actually work -- but have no geometric interpretation=20 > in this context -- i.e. are "meaningless"). L is supposed to=20 > be "the number of layers around a nuclear sphere" and is a whole=20 > number. In my classroom context, it may be assumed that students=20 > simply know this. We aren't going to clutter the function with=20 > a lot of error trapping. > > Here's a web page with an animated GIF showing a growing=20 > cuboctahedron, plus other animations showing how this relates > to crystallography. I did these GIFs using Java + Povray,=20 > but could have done them using Python + Povray (I just=20 > hadn't written oop7.html yet): > > http://www.inetarena.com/~pdx4d/ocn/xtals101.html > > Although math books include the concept of "domain of a function"=20 > (as one subscriber pointed out by private email), the economy=20 > of expressions like n!/k!(n-k)! depend on our _not_ cluttering=20 > the notation with a lot of redundant "error checking" to make=20 > sure the archetypal "naive reader" doesn't substitute -10,=20 > Root(2), or a character string for n or k. =20 > > In a "for humans only" text, you've codified the "domain" of=20 > factorial elsewhere, probably in a different book, at a different=20 > grade level. Now you just assume all this "context sensitivity"=20 > on the part of your readers -- something software engineers=20 > have rarely felt their workaday world allowed them to assume=20 > (machines don't do context, and the naive users need to have=20 > their errors trapped). > > So, as a classroom-focused math teacher, my bias is different=20 > from the software engineer's. The Python I write is for human=20 > readers to scan and comprehend, much as they learn to scan=20 > and comprehend those "crypto-compressed" math notations we=20 > already expect them to learn (a lot of geeky greek letters,=20 > like SIGMA, PHI, PI, THETA). =20 > > Plus Python has the added benefit of being machine-interpreted=20 > out the back -- so you can set up these interactive situations=20 > with a computer that offer immediate feedback and reinforcement. =20 > Every time you test an expression or short function definition,=20 > you get rewarded with a response (kind of like having a text=20 > book with "answers in the back" -- you can immediately confirm=20 > your understanding, or lack thereof). > > So, now that I've set up all this context, I will conclude by=20 > appending a real life post to the Association of Mathematics=20 > Teacher Educators (AMTE) listserv. I don't mention Python by=20 > name, but you'll see how I'm practicing this very philosophy=20 > in that context: > > ------------------------------------------------ > Archived at the Math Forum=20 > thread =3D http://forum.swarthmore.edu/epigone/amte/belgandjy > ------------------------------------------------ > > Subject: Re: substitution > Author: Kirby Urner > Date: Sun, 30 Jan 2000 16:36:19 -0800 > > > =3D Sally > =3D Kirby > > > For another example with perhaps makes is clearer,=20 > > f(x)=3Dx^2, g(x)=3Dx+1, find f=B0g(x) and g=B0f(x). (The symbol =B0 is=20 > > a degree sign on my keyboard, the closest I can come to the=20 > > composition symbol, but it might not be that on others' > > screens.) When this is first introduced at least half of=20 > > the students will give me f=B0g(x)=3Dx^2+1 AND g=B0f(x)=3D(x+1)^2. > > When doing composition of functions, I might have a student > perform the role of x + 1. "Whenever someone gives you a number, > your job is to simply add 1 to it and hand it back." =20 > > Sally takes that job. We test it out a few times. Looks like=20 > she's got the hang of it. Sally(x) =3D x + 1 > > Frank's job is to multiply a number by itself and return the=20 > result. We do a little job training to make sure he's got it=20 > down. Fred(x) =3D x * x > > So let's say I start with 3 and hand it to Sally. I get back 4. > Now I take my 4 and hand it to Frank. I get back 16. Suppose > I go in the reverse order. I start with 3 again, get back 9=20 > from Frank and then 10 from Sally. Different answer. Order > matters. > > Or we could talk about other operations, besides those dealing > with numbers. =20 > > Sally paints anything she's given the color red. > > Frank paints green polka dots on whatever he's given. =20 > > So if I give this toy horse to Sally first, then Frank, I get=20 > back a red horse with green polka dots. But what happens if=20 > I give it to Frank first and then Sally? Again, order matters. > > Frank(Sally(horse)) --> red horse w/ green dots > Sally(Frank(horse)) --> horse is completely red (dots=20 > painted over) > > If my class has access to an interactive command line (as per=20 > earlier posts re my favored model of a math class), they could=20 > explore composition of functions by writing two definitions=20 > and taking g(f(x)) vs f(g(x)) -- no need for the little circle=20 > symbol I don't think, or we can show them that later (it's=20 > somewhat redundant). I'd expect students to make up their=20 > own functions and test the outcomes of composition. > > And again (as per my last post), I'd like to *move away*=20 > from:=20 > > (a) the idea that operations are always about numbers (real=20 > or otherwise) and=20 > (b) the convention of using single letters for method and > variable names > > On the contrary, I want my students to: > > (a) see "operations" as more generic than "number functions" > (b) get in the habit of using longer strings to name their > variables and operations > > In the example below, I follow my own advice: > > >>> 'A'*3 =20 > 'AAA' > > [Note: when used with a characters, the operators * and +=20 > mean 'repeat' and 'concatenate' respectively. This exercise > presumes students are already quite familiar with this=20 > behavior.] > > >>> def Sally(input): > return input * 3 > =09 > >>> def Frank(input): > return "CA"+input > =09 > =09 > >>> Frank("T") > 'CAT' > >>> Sally("T") > 'TTT' > >>> Frank(Sally("T")) > 'CATTT' > >>> Sally(Frank("T")) > 'CATCATCAT' > > In the exercise given: > > f(x)=3Dx^2, g(x)=3Dx+1 > > f=B0g(x)=3D ? > > I might write an alternative next to it, such as: > > temp =3D g(x) > answer =3D f(temp) > > This makes it clearer that the output of the innermost > function is the input of the enclosing function. Or I might=20 > use concentric circles, with g inside of f (I've seen text=20 > books that do this). > > I'm sure other list members have tried many of these ideas > (plus many more), with varying degrees of success. > > Sometimes it's just the notation that's confusing, and switching=20 > to some other notation, while keeping all the ideas intact, clears=20 > up some conceptual confusions. Then you can go back to the original=20 > notation, with more confidance that the concepts are well-anchored. > > Kirby > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > None of this means that I'm "against" using Python in other > ways (e.g. to teach computer programming). It's a great > segue into all kinds of other patterns of usage. But I=20 > just wanted to be clearer about my model, which owes a lot > to Iverson's APL. APL is the first programming language=20 > I ever learned, and it was love at first sight. And APL, > as some of you know, was originally a chalk board notation. =20 > It was designed for sophisticated human readers, _plus_ it=20 > had the advantage of being executable in silicon circuits. > Just amazing. > > Kirby > > > > > --__--__-- > > Message: 2 > Date: Tue, 08 Feb 2000 11:52:46 -0600 > From: "Jeffrey Kunce" > To: > Subject: RE: [Edu-sig] Rational Division > > [Tim Peters] > > > I don't buy into this. Python's closest predecessor (ABC) *was* = > designed to > > be maximally unsurprising (via iterative user testing and redesign), and > > ended up a self-contained universe, thoroughly isolating its users even = > from > > their native filesystem ("too quirky"). Python tries to regularize the = > mess > > that is the "real computing world", but doesn't try to deny or hide its > > existence. CP4E's goals seem much more in tune with that latter. > > I'm not sure that CP4E's goals are that well defined. There were a lot > of proponents for "Everyone" being virtually everyone. The Alice people > are proceeding on that premise, and they are the ones who brought up > the case and division issues. > > My opinion is that CP4E should concentrate, initially, on serving those=20 > who already *want* to learn or teach programming, but who are frustrated > because of lack of resources and because of the mess you refer to. > From this POV, I think python is pretty darn good just as it is > > --Jeff > > > > > > --__--__-- > > Message: 3 > Date: Tue, 08 Feb 2000 22:45:27 +0000 > To: gerrit@nl.linux.org, Tim Peters > From: Frank Stajano > Subject: Re: [Edu-sig] Rational Division > Cc: edu-sig@python.org > > <000201bf71ff$ad48ece0$d92d153f@tim> > > At 2000-02-08 15:21 +0100, Gerrit Holl wrote: > >2/3 is 0 rest 1. That's what I learned when I was 7, 8 years old. > > I won't question what you learnt when you were little, and indeed different > primary schools in different parts of the world may follow very different > systems; but at mine they would have failed me in arithmetic unless I > upgraded that answer to 0 rest 2 ;-) > > Frank (http://i.am/filologo.disneyano/) http://www.uk.research.att.com/~fms/ > > > > --__--__-- > > Message: 4 > Date: Wed, 9 Feb 2000 08:14:09 +0100 > From: Gerrit Holl > To: Frank Stajano > Cc: Tim Peters , edu-sig@python.org > Subject: Re: [Edu-sig] Rational Division > Reply-To: Gerrit > Tim Peters , edu-sig@python.org > > Frank Stajano wrote on 950046327: > > At 2000-02-08 15:21 +0100, Gerrit Holl wrote: > > >2/3 is 0 rest 1. That's what I learned when I was 7, 8 years old. > > > > I won't question what you learnt when you were little, and indeed different > > primary schools in different parts of the world may follow very different > > systems; but at mine they would have failed me in arithmetic unless I > > upgraded that answer to 0 rest 2 ;-) > > Oops! > 0 rest 2, of course. > > regards, > Gerrit. > > -- > Homepage: http://www.nl.linux.org/~gerrit > -----BEGIN GEEK CODE BLOCK----- http://www.geekcode.com > Version: 3.12 > GCS dpu s-:-- a14 C++++>$ UL++ P--- L+++ E--- W++ N o? K? w--- !O > !M !V PS+ PE? Y? PGP-- t- 5? X? R- tv- b+(++) DI D+ G++ !e !r !y > -----END GEEK CODE BLOCK----- moc.edockeeg.www//:ptth > > > > --__--__-- > > _______________________________________________ > Edu-sig mailing list > Edu-sig@python.org > http://www.python.org/mailman/listinfo/edu-sig > > > End of Edu-sig Digest_______________________________________________ > Edu-sig mailing list > Edu-sig@python.org > http://www.python.org/mailman/listinfo/edu-sig From pdx4d@teleport.com Thu Feb 10 06:03:03 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Wed, 09 Feb 2000 22:03:03 -0800 Subject: [Edu-sig] Going Graphical: Where Python Meets Descartes In-Reply-To: References: <3.0.3.32.20000209180135.007335d4@pop.teleport.com> Message-ID: <3.0.3.32.20000209220303.0076ace0@pop.teleport.com> >May I ask at what grade level this lesson is aimed? Or perhaps more >precisely, what level of programming and math experience? > >-Tim > The intended audience for this content is K-12 math teachers (with earlier grade educators listening in mainly to see what might be ahead for some of their kids -- and plan accordingly). Then it's up to the teachers themselves to decide where, if anywhere, to slot it in (i.e. their own adapted versions of the material). Some self-starter students habitually lurk on my teacher trainer channels and snarf content, but for the most part I'm not speaking directly to them. I'm addressing other educators and then leaving it up to the workaday front liners to figure out if this is curriculum they can use, and how. Given the regimentation imposed by standards and test-based curricula, I have few illusions that faculties are at liberty to innovate freely, even when the content is exciting and relevant (as I think mine is -- like any good salesperson, I believe in my products). Plus of course there's the perennial hardware hurdle. Here in Portland, we have some math classrooms with computer screen projectors (e.g. Winterhaven in the Brooklyn district), but that's still a long way from being the norm. In any case, what I encourage teachers to realize is they have with in reach the ways and means to show parents and students alike that current standards are obsolete. In other words, as those closest to the content, teachers are able to band together to collaboratively generate curriculum so obviously superior to what's in the standardized tests, that they have a chance to get out from under those who would legislate from afar. But in some contexts, that's just an empty pipe dream, I realize. I'm appending a recent related post (to the AMTE listserv) for context. Kirby PS: this is likely a longer answer than you needed. Forgive me for bouncing off your post, taking the opportunity to restate some long term themes... ============ Date: Tue, 01 Feb 2000 22:35:59 -0800 To: amte@esunix.emporia.edu From: Kirby Urner Subject: Re: One Size Fits All > = Ralph = Kirby > Whether strictly local control of schools would always lead to >better education than State control is something to argue about. There >are some efficiencies of scale to consider, too. At any rate, we have >many models, differing from State to State, and that is a good thing. USAers are very used to nationwide franchise operations, like McDonalds and KFC. You could have these largish, well-established curricula that have a toe-hold in many communities (like Montessori is available in most cities at least). This would have the advantages of scale, but not make a geographic unit (a state) so much a governing factor. That'd put more curricula at my disposal, within a radius of X miles. This maybe sounds far-fetched, but I think a lot of universities are chomping at the bit to offer more K-12 content, leveraging their already considerable expertise. The break-even point for such investments usually dictates a wider circulation for their courseware than just the local public and/or private schools. Enter distance learning. But also enter whole philosophies of education to which faculties feel variously attracted or repulsed. Consider the Jesuits -- known for providing strong curriculum, and operative just about everywhere (e.g. Father Mackey in the Royal Kingdom of Bhutan). There's no reason the public education system couldn't nurture such seed beds of new thinking (without any specific religious affiliation), the exponents of which would travel throughout the USA. For example, I'd like to see these DrScheme people at Rice doing more trainings in our neck of the woods (Silicon Forest). Why aren't my tax dollars at work to that end? Kirby From djmitche@cs.uchicago.edu Fri Feb 11 02:05:04 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Thu, 10 Feb 2000 20:05:04 -0600 (CST) Subject: [Edu-sig] Introductions In-Reply-To: <20000203155039.71475.qmail@hotmail.com> Message-ID: Well, 125 messages later (Eek) I guess it's time to introduce myself. I am an undergraduate at the University of Chicago, concentrating in Mathematics with a specialization in Computer Science. I have worked with children of all ages in myriad capacities, but the most interesting for the present discourse is the Earn-A-Computer program last summer, in which I taught Python and HTML to about 10 inner-city youth. For various reasons unrelated to the educationanal process, the program didn't last long, but in the process I learned a great deal about teaching, about children (ages 9-12), and about teaching programming to children. My High School had no computer science courses -- it offered a minimal computer lab, and all of the lab attendants / school technology specialists had only one of the following skills: (a) knowledge and skills relating to computers, (b) the ability to relate to youth. So I ended up teaching the programming courses there. :) Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From djmitche@cs.uchicago.edu Fri Feb 11 02:44:13 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Thu, 10 Feb 2000 20:44:13 -0600 (CST) Subject: [Edu-sig] On case sensitivity In-Reply-To: <3.0.3.32.20000204091523.007678a0@pop.teleport.com> Message-ID: On Fri, 4 Feb 2000, Kirby Urner wrote: > If case sensitivity is a big problem for non-CS Alice programmers, my > first response would be to front load the intro with plenty of > warnings to students that they'll likely introduce bugs by forgetting > about such sensitivity. But I wouldn't make the sensistivity go away > necessarily, as this would encourage laziness and bad habits. This sounds reasonable, and in truth I agree, but there are many such issues that we would 'front load', and they all contribute to the learning curve on the first day of class. However, after a week or so, most students are comfortable with such things. Perhaps, rather than change the language, we should devise some system wherein the early examples and assignments can be made all-lower-case to ease the burden on the users (just don't capitalize anything!) and later more advanced capitalization can be introduced. I also think that debugging is a VERY VERY VERY important part of learning to program. As programmers, all of us are aware that we spend at least 50% of our time debugging our programs. As a novice user, with only a shallow comprehension of the program, debugging can be an extremely daunting task. So far (and I'm only on message 40 of 126) I haven't heard a thing about it. Mr. Rossum's ideas about building lots of intelligence into IDLE to catch syntax errors and notify the user in an appropriate manner will help here. But we should also be sure to include in the lesson plans a section on "what can go wrong" -- discuss infinite loops, off-by-one, etc. and perhaps do some in-class demonstrations of the debugging process. Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From djmitche@cs.uchicago.edu Fri Feb 11 02:13:10 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Thu, 10 Feb 2000 20:13:10 -0600 (CST) Subject: [Edu-sig] Getting it going In-Reply-To: <20000204083411.A376@stopcontact.palga.uucp> Message-ID: On Fri, 4 Feb 2000, Gerrit Holl wrote: > * changes to Python like case insensitivity In my experience, more relevant changes include flexibility in punctuation. This can range from a relaxation of the grammar to improved parser warnings regarding substitution of '.' for ',' etc. > * how to explain things in books, lik a variable is a box with a > sticker on it, a dictionairy is a... a class is a... I think that trying to decide on one central explaination for such concepts is a self-defeating effort. Although I found the above explaination of variables to be the most effective, not all of my students understood it this way. As educators we must present students with many related ways of looking at a concept and let them pick and choose their own means of understanding it. It is only after studing computers and programming for several years that one gains the perspective to be able to synthesize all the viewpoints. > > which books are good for teaching > > and what books we can write? (I'm interested either way:) > > I'd love to see such a book. And because it's for kids, translating is > important. I want to help with the book. I think I'm the youngest one > here who learned programming as a kid, *almost* with python. I tried > to learn Python first, but didn't understand it. After a Logo like > language, learning what variables and lists are, I did understand it. Books are crucial, but kids learning in school will not learn from a book -- learning is much more effective when it comes through multiple channels (blackboard, overhead demonstrations, gesticulations, pictures, manipulatives, etc), and we need to support all of the available channels if we want to be maximally successful. Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From djmitche@cs.uchicago.edu Fri Feb 11 02:50:57 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Thu, 10 Feb 2000 20:50:57 -0600 (CST) Subject: [Edu-sig] Age groups In-Reply-To: Message-ID: On Fri, 4 Feb 2000, Hank Fay wrote: > When I think of "classes" and 5 year olds, I think of a visual scene > (e.g., a trail in an outdoors setting) that has various challenges > (e.g., a ledge that needs to be jumped to). To get through the trail, > the youngster has to "drop" one object on another, in order to extend > the properties of the object to be able to surmount the challenges. > A dice roll would determine whether you got to "buy" Michael Jordan's > legs for your object, e.g. In other words, take the concepts of > subclassing, and put them in the world of the 5-year old. The visual approach is absolutely necessary. However, I think one of the more confusing aspects of the first step into programming (and, at 5, into life in general) is the notion of sequence. Look at any K - 1st grader's homework (I assistant teach Kindergarten). You'll see a lot of sequencing and cause-and-effect worksheets. These concepts are difficult for a child, and the worksheets are usually non-interactive (most are a series of pictures, and the student must draw lines from each picture to the next in the sequence). Now imagine that we allow a student to drag-and-drop 'steps' into a 'program', then click 'go' to see the program do its thing. Suddenly they can see the effects of their sequencing, and experiment until they get it right. Students at this age also get most of their encouragement from having 'done something themselves' -- the biggest bribe I have for mine is letting them take a message down the hall to the office -- and building a 'program' to do something will give them a big, motivating thrill. Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From jason@crash.org Fri Feb 11 05:01:19 2000 From: jason@crash.org (Jason L. Asbahr) Date: Thu, 10 Feb 2000 23:01:19 -0600 Subject: [Edu-sig] Age groups Message-ID: <3.0.32.20000210230106.00966320@mail112.pair.com> At 08:50 PM 2/10/00 -0600, Dustin wrote: > >Now imagine that we allow a student to drag-and-drop 'steps' into a >'program', then click 'go' to see the program do its thing. Suddenly they >can see the effects of their sequencing, and experiment until they get it >right. Great idea, Dustin! It sounds a lot like the Lego Mindstorms robotic kit programming environment -- but a truly visual Python IDE. A window to the side could show the actual text of the program that they are assembling, with correct case usage of course. ;-) "Syntax errors" could be shown in the graphical environment with large blinking red arrows, and if the IDE is smart enough, it could suggest alternate orderings or constructions. There is no reason why the text window couldn't also be edited, which would affect the graphical representation as it text was recognized. Outside library modules could be imported into the environment, allowing students to program actually useful -- or at least effective -- software, performing tasks like reading mail from a remote server, printing out 2D and 3D graphics, or other interesting hands-on activities. Anyone remember the BASIC programming cartridge for the Atari 2600? It came with a unique push button controller with button like "for" and, of course, "goto". Anyway, building such a visual programming environment for Python seems to me to be an excellent near term goal for the CP4E crowd. There are R&D aspects to it, no commercial IDE vendor would be likely address this market, and learners could smoothly transition from visual representation and manipulation to actual textual programming. As long as it is open source, we could start simply, with modest goals, and expand the system over time. Heck, students themselves could expand the system as their final project in class. :-) Could such a system be added to IDLE? Jason Asbahr Origin Systems, Inc. jasbahr@origin.ea.com From djmitche@cs.uchicago.edu Fri Feb 11 06:07:27 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Fri, 11 Feb 2000 00:07:27 -0600 (CST) Subject: [Edu-sig] Age groups In-Reply-To: <019501bf6f94$28e1c1b0$07000100@elite> Message-ID: On Fri, 4 Feb 2000, John Glossner wrote: > > > 2) Early Education (5-7 year old) > > > > I think it's still to early to teach kids who can't read programming. > > > My just barely 6 year old is fully able to read. > She is also extremely computer literate. But she is by far the exception, not the rule. I think that a core part of the CP4E curriculum is that it brings to the educational table a piece of the equality that is so unique to the online world. We need to target all students, not just the bright ones. And hitting them with programming involving reading at 6 (Kindergarten) will blow away the vast majority of kids. > > > 3) Elementary Education (8-10 year old) > > > > You can start here. The concept of variables, lists and functions can > > be explained. Dictionairies too, I think. Classes will probably be only > > for the very smart ones. > > > I can tell you from experience that it is very difficult > to keep their interest. My son complains why does he have > to learn this binary arithmetic stuff. Why can't I just > make Ash's Pokemon battle Gary? And let's talk about the > current literature available to them. It is impossible > for them to take any of the Python books and just start > reading them. There is too much background that they > assume. These books are excellent for programmers but > not ok for kids. Why does he have to learn binary arithmetic? For the most part, Python is high-level enough that bits are irrelevant.. However, as for books, I wholeheartedly agree. I learned BASIC from some book with lots of worksheets in it and clowns and cute decorations all over it. So long ago I can't remember what the name was. But it worked! Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From djmitche@cs.uchicago.edu Fri Feb 11 07:28:50 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Fri, 11 Feb 2000 01:28:50 -0600 (CST) Subject: [Edu-sig] Lets work on the adgenda In-Reply-To: <200002071617.LAA03476@brocade.nexen.com> Message-ID: I am agreeable to keeping charters and agendas and whatnot for the SIG. With, of course, the consent and blessing of Mr. Rossum. I think it is crucial that we add a dash of focus to this list which is so obviously packed with ideas and good thinking and potential. I think we all have our biases, and I will admit I have mine. If there is general approval I will try to make my biases explicit so that you all can expect and deal with them. Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From gherman@darwin.in-berlin.de Fri Feb 11 10:12:31 2000 From: gherman@darwin.in-berlin.de (Dinu C. Gherman) Date: Fri, 11 Feb 2000 11:12:31 +0100 Subject: [Edu-sig] Lets work on the adgenda References: Message-ID: <38A3E08F.BCF29CF@darwin.in-berlin.de> Dustin James Mitchell wrote: > > I am agreeable to keeping charters and agendas and whatnot for the SIG. > With, of course, the consent and blessing of Mr. Rossum. I think it is > crucial that we add a dash of focus to this list which is so obviously > packed with ideas and good thinking and potential. > > I think we all have our biases, and I will admit I have mine. If there is > general approval I will try to make my biases explicit so that you all can > expect and deal with them. After so many excellent ideas have been posted to this forum there should definitly be some focussing activity leading to a real agenda. If I dare add some more concrete items I'd opt for the following to be at least considered as potential candidates, listed here in no particular order. - Definition of CP4E target groups more precize than just 'everybody'. - Collection and analysis of requirements (language, tools, documentation) of existing and potential Python users in different application domains. - Evaluation of language/syntax changes to Python for reaching a wider programming audience. - Evaluation of the need for some (additional) 'downsized' version of Python, say, MiniPython (or MontiPython, to avoid copyright issues), if not even PythonScript. - Evaluation of existing text-books with the goal of adapting them to Python instead of other languages. - Implementation of additional development/usage tools needed for other target groups. - Evaluation of improvements to existing Python distribu- tions for existing and new target groups. - Generation of (domain-specific?) tutorials and text- books based on the experience made by this forum's members. - Underlining the fact that CP4E, as Python, is a 'world movement' and not tied to an American or angle-saxon audience like K-12 or the like. - Based on the previous item, considering other languages than English right from the start. So long, Dinu -- Dinu C. Gherman ................................................................ "The thing about Linux or open software in general is that it actually tries to move software from being witchcraft to being a science," [...] "A lot of the programs you see today are actually put together by shamans, and you just take it and if the computer crashes you walk around it three times... and maybe it's OK." (Linus Thorvalds, LinuxWorld 2000, NYC) From daved@empiricdesign.com Fri Feb 11 14:17:55 2000 From: daved@empiricdesign.com (Dave Demko) Date: Fri, 11 Feb 2000 09:17:55 -0500 Subject: [Edu-sig] Age groups References: Message-ID: <005601bf749a$dc9c9c60$4964a8c0@einstein> For what it's worth, I gave my 8-year-old son his first taste of Python with the proven "steal this code" approach. We started with a working Tkinter script with buttons calling a function that displayed text in a widget. He already could read and do basic on-screen editing (typing, copy-and-paste). We didn't discuss concepts like scope and parameter passing, but just started copying and modifying code. Soon he was changing the widget colors and printing his own messages to the screen. I think the lesson is that Piaget was right: make the material conform to the student's cognitive developmental level. For 8-10 year olds, that means keeping things concrete and emphasizing the "how" over the more abstract "why." You might say they start off more as language users than programmers (in the same way that I'm a computer user and not a chip designer). Children at this age are not ready for abstractions, but they learn well by seeing things work. Treat the program as a machine, and let the students adjust the input and watch the output change. The quick code-and-run cycle with Python helps qu ite a lot in this regard. Dave Demko Empiric Design, Inc. ----- Original Message ----- From: "Dustin James Mitchell" To: "Edu-Sig" Sent: Friday, February 11, 2000 1:07 AM Subject: Re: [Edu-sig] Age groups > On Fri, 4 Feb 2000, John Glossner wrote: > > > > > 2) Early Education (5-7 year old) > > > > > > I think it's still to early to teach kids who can't read programming. > > > > > My just barely 6 year old is fully able to read. > > She is also extremely computer literate. > > But she is by far the exception, not the rule. I think that a core part > of the CP4E curriculum is that it brings to the educational table a piece > of the equality that is so unique to the online world. We need to target > all students, not just the bright ones. And hitting them with programming > involving reading at 6 (Kindergarten) will blow away the vast majority of > kids. > > > > > 3) Elementary Education (8-10 year old) > > > > > > You can start here. The concept of variables, lists and functions can > > > be explained. Dictionairies too, I think. Classes will probably be only > > > for the very smart ones. > > > > > I can tell you from experience that it is very difficult > > to keep their interest. My son complains why does he have > > to learn this binary arithmetic stuff. Why can't I just > > make Ash's Pokemon battle Gary? And let's talk about the > > current literature available to them. It is impossible > > for them to take any of the Python books and just start > > reading them. There is too much background that they > > assume. These books are excellent for programmers but > > not ok for kids. > > Why does he have to learn binary arithmetic? For the most part, Python is > high-level enough that bits are irrelevant.. > > However, as for books, I wholeheartedly agree. I learned BASIC from some > book with lots of worksheets in it and clowns and cute decorations all > over it. So long ago I can't remember what the name was. But it worked! > > Dustin > > --------------------------------------------------------------------- > | Dustin Mitchell )O( | > --------------------------------------------------------------------- > > > _______________________________________________ > Edu-sig mailing list > Edu-sig@python.org > http://www.python.org/mailman/listinfo/edu-sig > From jelkner@yorktown.arlington.k12.va.us Fri Feb 11 13:36:47 2000 From: jelkner@yorktown.arlington.k12.va.us (Jeffrey Elkner) Date: Fri, 11 Feb 2000 08:36:47 -0500 Subject: [Edu-sig] Learning from a book... In-Reply-To: References: Message-ID: <00021109202800.01633@tpaine.yorktown.arlington.k12.va.us> I completely agree with Dustin. In fact, books are probably more "crucial" for teachers than they are for students, but in any case having good textbooks is a necessary but not sufficient condition for getting Python into schools. We also need the other kinds of support materials that Dustin lists. A really good example of kind of materials that we need is the livewires materials that Richard Crook and Gareth McCaughan sent me. I am using them in my classroom now and they are proving very effective. The Open Book Project (http://yhslug.tux.org/obp) will have those materials up within a week. Livewires also has some nice training materials at: http://www.livewires.org.uk/python.html Perhaps Guido could include these on the edu-sig page? Thanks jeff On Thu, 10 Feb 2000, Dustin James Mitchell wrote: > Books are crucial, but kids learning in school will not learn from a book > -- learning is much more effective when it comes through multiple > channels (blackboard, overhead demonstrations, gesticulations, pictures, > manipulatives, etc), and we need to support all of the available channels > if we want to be maximally successful. > > Dustin From rlatimer@mirage.tjhsst.edu Fri Feb 11 19:50:17 2000 From: rlatimer@mirage.tjhsst.edu (Randy Latimer) Date: Fri, 11 Feb 2000 14:50:17 -0500 (EST) Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: Message-ID: Dustin - just wanted to say that I like your discussions. I'm Randy Latimer...I've been teaching computer science in high school since the early 80's, Pascal for years, now C++ and some Java. I looked at some languages with alternative styles way back in the 80's - Lisp, Prolog, Logo - taught them some in high school, but these languages didn't catch on. The AP College Board pretty much dictates the main language we teach. I tried to introduce C++ in the early 90's, but it was too soon, the college board didn't switch to C++ until 98 or so, and that's when the high school curriculum moved from Pascal to C++. At what age do we introduce programming, and what language?...obviously not a simple answer, depends who you talk to. Rice Univ. has been working on introducing Scheme, I think it's the same kind of thing as introducing Python as an intro language. I know Scheme/Lisp pretty well, new to Python. Randy From pdx4d@teleport.com Fri Feb 11 14:59:18 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 11 Feb 2000 06:59:18 -0800 Subject: [Edu-sig] Lets work on the adgenda In-Reply-To: <38A3E08F.BCF29CF@darwin.in-berlin.de> References: Message-ID: <3.0.3.32.20000211065918.007399b0@pop.teleport.com> > - Evaluation of language/syntax changes to Python for > reaching a wider programming audience. Although I think Python will change in some of its "under the hood" aspects (e.g. maybe garbage collection), I think these highly technical design issues are being discussed in comp.lang.python by top-level Python gurus (including some posting here). Why rehash such material in this edu-sig? Isn't that redundant? On the other hand, if we trully think really basic changes to syntax are required (e.g. changes in case sensitivity, division syntax or whatever), then maybe we've decided Python is _not_ suitable to this job of making computer languages more accessible to more people. Perhaps it's time to disband? Twas fun while it lasted. My own agenda is to look for (and contribute) useful ideas about how to enchance the curriculum using Python in its present form, minus any reliance on vaporware suggested by people who will not be doing the real work themselves (I've learned from experience not to put many eggs in vaporware baskets). Pointers to web pages with working source code are always welcome. Thanks Jeff, http://www.livewires.org.uk/python.html looks like a valuable resource. > - Evaluation of the need for some (additional) 'downsized' > version of Python, say, MiniPython (or MontiPython, to > avoid copyright issues), if not even PythonScript. We'll inevitably be using a scaled back version, because we will not be importing every module in every lesson (plus we will be writing and importing modules of our own design). I don't see the need to develop a pared down Python for teaching purposes when its highly modular design gives us that already. > - Evaluation of existing text-books with the goal of > adapting them to Python instead of other languages. Personally, I'm not waiting for text books to catch up, and think the web has superceded dinosaur mass-published text books in many classrooms. Lots of teachers are doing their own web sites these days -- a very positive sign. >- Underlining the fact that CP4E, as Python, is a 'world > movement' and not tied to an American or angle-saxon > audience like K-12 or the like. K-12 does not mean "anglo-saxon" -- Americans are way more ethnically diverse than that. But I agree we should not be focussing on the USA curriculum exclusively. Speaking more autobiographically, my own network extends to places like Kuala Lumpur and Maseru (I went to high school in the Philippines, elementary school in Italy), plus I clerk the AFSC program committee behind Portland's UVKrew [1]. I am happy to see Python making inroads elsewhere (and only _some_ communities in the USA will be able to keep up -- and not necessarily the mostly anglo-saxon ones). Of course Python itself is from the Netherlands originally, with a hyperlink across the channel to Anglo culture via Monty Python's Flying Circus. Kirby [1] http://www.geocities.com/uvkrew/ From fstajano@uk.research.att.com Fri Feb 11 15:29:58 2000 From: fstajano@uk.research.att.com (Frank Stajano) Date: Fri, 11 Feb 2000 15:29:58 +0000 Subject: [Edu-sig] Lets work on the adgenda In-Reply-To: <38A3E08F.BCF29CF@darwin.in-berlin.de> References: Message-ID: <4.2.2.20000211152503.00c71ba0@localhost> At 2000-02-11 11:12 +0100, Dinu C. Gherman wrote: >- Underlining the fact that CP4E, as Python, is a 'world > movement' and not tied to an American or angle-saxon > audience like K-12 or the like. > >- Based on the previous item, considering other languages > than English right from the start. This is a very good point. In fact, one of the features of APL was the heavy-duty use of those weird ideograms (that needed a special keyboard and charset, to be sure) instead of keywords taken from English. A bit like mathematical symbols, which were their inspiration. Not that I'm necessarily advocating this for Neopython, but while we're still in the brainstorming mood... In particular English speakers (especially those who can't properly speak any other language) should be aware of the shock and barrier that a non-English-speaking kid faces when confronted with a piece of script where all the control words are incomprehensible gibberish. Then, suddenly, the "Python looks just like natural language" argument no longer holds. Frank (http://i.am/filologo.disneyano/) http://www.uk.research.att.com/~fms/ From slitt@troubleshooters.com Fri Feb 11 15:52:12 2000 From: slitt@troubleshooters.com (Steve Litt) Date: Fri, 11 Feb 2000 10:52:12 -0500 Subject: [Edu-sig] Lets work on the adgenda In-Reply-To: <3.0.3.32.20000211065918.007399b0@pop.teleport.com> References: <38A3E08F.BCF29CF@darwin.in-berlin.de> Message-ID: <3.0.6.32.20000211105212.00915770@pop.pacificnet.net> At 06:59 AM 02/11/2000 -0800, Kirby Urner wrote: [clip] >On the other hand, if we trully think really basic changes >to syntax are required (e.g. changes in case sensitivity, >division syntax or whatever), then maybe we've decided >Python is _not_ suitable to this job of making computer >languages more accessible to more people. Perhaps it's >time to disband? Twas fun while it lasted. But of course disbanding would be irresponsible of us to do, Kirby. Because I think we're both of the opinion that disbanding would either gravely delay "programming for everyone" while people argue about the best language to use and how to change it, or it would allow an opportunistic group to sneak in with a language to meet their agenda (Visual Basic -- what do you want to learn today :-). In the past few weeks of discussion there has been no proposed change to Python with a clear majority, which says to me that for the time being our best course is to go with the Python we have today -- the Python that attracted most of us here in the first place. We can build a curriculum, textbooks, teachers guide, schedule etc around that Python, and offer it to people (I don't remember ever hearing this initiative was only for children) of an age to assimilate it. Once we've secured our ground in that age group, and once we have experience and feedback, we may choose to modify the curriculum or even the language, if it's obvious we should do so. I move we use present day Python as the centerpiece of the initiative, and begin designing our curriculum and materials. Do I hear a second? Steve Steve Litt Webmaster, Troubleshooters.Com http://www.troubleshooters.com slitt@troubleshooters.com From djmitche@cs.uchicago.edu Fri Feb 11 19:22:01 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Fri, 11 Feb 2000 13:22:01 -0600 (CST) Subject: [Edu-sig] Lets work on the adgenda In-Reply-To: <3.0.6.32.20000211105212.00915770@pop.pacificnet.net> Message-ID: On Fri, 11 Feb 2000, Steve Litt wrote: > I move we use present day Python as the centerpiece of the initiative, and > begin designing our curriculum and materials. Do I hear a second? Seconded. --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From djmitche@cs.uchicago.edu Fri Feb 11 19:25:50 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Fri, 11 Feb 2000 13:25:50 -0600 (CST) Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: Message-ID: Oh my, you bring up a point that hasn't been raised yet. That is, how do we try to teach Python when the APs are in C++? It seems we'd have little hope of changing the AP's when they've only so recently switched to C++, and since C++ has a vocal backing in the business community. Perhaps, then, for the time being, we need to target Python in the earlier grades and construct a gentle changeover to C++ in the AP courses? What are our options here? Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From smorris@nexen.com Fri Feb 11 20:42:08 2000 From: smorris@nexen.com (Steve Morris) Date: Fri, 11 Feb 2000 15:42:08 -0500 (EST) Subject: [Edu-sig] Lets work on the adgenda Message-ID: <200002112042.PAA29354@brocade.nexen.com> Dustin James Mitchell writes: > On Fri, 11 Feb 2000, Steve Litt wrote: > > > I move we use present day Python as the centerpiece of the initiative, and > > begin designing our curriculum and materials. Do I hear a second? > > Seconded. I move that we setup a subgroup with this as the goal. I think it is a bad idea to say that is all that we will do and that everyone with different interests should just get off the list and go away. From djmitche@cs.uchicago.edu Fri Feb 11 20:55:36 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Fri, 11 Feb 2000 14:55:36 -0600 (CST) Subject: [Edu-sig] Lets work on the adgenda In-Reply-To: <200002112042.PAA29354@brocade.nexen.com> Message-ID: On Fri, 11 Feb 2000, Steve Morris wrote: > > > I move we use present day Python as the centerpiece of the initiative, and > > > begin designing our curriculum and materials. Do I hear a second? > > > > Seconded. > > I move that we setup a subgroup with this as the goal. I think it is a > bad idea to say that is all that we will do and that everyone with > different interests should just get off the list and go away. As long as I and the others on this list who are interested and motivated to establish a Python-based curriculum have a forum in which to do so, I'm not overly concerned with exactly what that forum is called. Do others have an opinion on this matter? What other topic would then be discussed in this SIG? Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From rlatimer@mirage.tjhsst.edu Sat Feb 12 02:26:53 2000 From: rlatimer@mirage.tjhsst.edu (Randy Latimer) Date: Fri, 11 Feb 2000 21:26:53 -0500 (EST) Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: Message-ID: Dustin, From my experience here in Fairfax County, VA, it's very difficult to get the high school CS teachers to support a language other than the one currently in use by the APCS board. The best that I've been able to do is to introduce a second language at the end of the school year, and let some of the "advanced" students work on it. BUt by that time, there's usually little interest by the students in taking on another language, unless it's one with alot of "press" such as Java. I guess trying to introduce students to programming earlier than high school is alot like the use of Logo in the 80's (I still have all the old texts). There's a book called Mindstorms that proposes teaching Logo early on. It's a tough process trying to get teachers to use a new curriculum. You need a strong set of materials and good teacher training and something that tells the teachers that there's a benefit for them to take the time to learn a "new" way. Anyway, I think this is a great discussion. Randy On Fri, 11 Feb 2000, Dustin James Mitchell wrote: > Oh my, you bring up a point that hasn't been raised yet. That is, how do > we try to teach Python when the APs are in C++? It seems we'd have little > hope of changing the AP's when they've only so recently switched to C++, > and since C++ has a vocal backing in the business community. > > Perhaps, then, for the time being, we need to target Python in the earlier > grades and construct a gentle changeover to C++ in the AP courses? What > are our options here? > > Dustin > > --------------------------------------------------------------------- > | Dustin Mitchell )O( | > --------------------------------------------------------------------- > > > _______________________________________________ > Edu-sig mailing list > Edu-sig@python.org > http://www.python.org/mailman/listinfo/edu-sig > From djmitche@cs.uchicago.edu Fri Feb 11 21:21:38 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Fri, 11 Feb 2000 15:21:38 -0600 (CST) Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: Message-ID: On Fri, 11 Feb 2000, Randy Latimer wrote: > It's a tough process trying to get teachers to use a new > curriculum. You need a strong set of materials and good teacher > training and something that tells the teachers that there's > a benefit for them to take the time to learn a "new" way. So in light of this and the AP problem, do we have any hope of introducing Python at the High School level, or would our interests (CP4E, not Py4E) be better served by developing a sensible, effective, well-supported environment in which to teach C++? Is there anything else we can do to gain wider acceptance of our ideas? Could we offer alternatives to the APs? Is there any process by which we could appeal to the AP board to add Python as a possible language? Thanks for your insights! Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From pdx4d@teleport.com Fri Feb 11 21:39:56 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 11 Feb 2000 13:39:56 -0800 Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: References: Message-ID: <3.0.3.32.20000211133956.00769ab8@pop.teleport.com> At 09:26 PM 02/11/2000 -0500, Randy Latimer wrote: >Dustin, > From my experience here in Fairfax County, VA, it's very difficult >to get the high school CS teachers to support a language other than >the one currently in use by the APCS board. My approach has been to look at Python as one more useful tool when it comes to teaching mathematics. Computers, not just calculators, deserve a place in our average math class. Students need better graphing capability and more exposure to symbolic operations than today's calculators provide. It's a mark of serious over-specialization that we draw such an artificial line between "numeracy" and "computer literacy". Just because I want to program a computer, doesn't mean I want to be a computer programmer (speaking generally -- in actual fact I pay some of my bills by writing Xbase). For me, CP4E means using Python in a non-CS context. Kirby Related posts: http://www.python.org/pipermail/edu-sig/2000-February/000096.html http://www.python.org/pipermail/edu-sig/2000-February/000117.html (note, the 2nd post is bedeviled with lots of =20s which makes it hard to read -- I hate it when that happens) From pdx4d@teleport.com Fri Feb 11 21:43:55 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 11 Feb 2000 13:43:55 -0800 Subject: [Edu-sig] Lets work on the adgenda Message-ID: <3.0.3.32.20000211134355.007214d8@pop.teleport.com> >> I move that we setup a subgroup with this as the goal. I think it is a >> bad idea to say that is all that we will do and that everyone with >> different interests should just get off the list and go away. > >As long as I and the others on this list who are interested and motivated >to establish a Python-based curriculum have a forum in which to do so, I'm >not overly concerned with exactly what that forum is called. Do others >have an opinion on this matter? What other topic would then be discussed >in this SIG? > >Dustin My sense is we've already covered this ground. We have: (a) people commited to developing exciting new Python- related learning tools, perhaps even making core enhancements to Python itself and (b) people ready to develop new curriculum using the existing tools, not waiting for any new developments (but happy to make use of whatever stuff the (a) people come up with). And probably the majority fall somewhere between (a) and (b). So what's the problem? Looks like a party to me. Speaking for myself, I'm clearly inclined in the (b) direction. I simply don't have the time or level of Python experience to be a member of the (a) team at this time. But I'm certainly OK with (a)s and (b)s sharing the same SIG. However, I don't want to waste people's time just sitting back and pumping out a lot of "good ideas" I'm not prepared to work on myself. Probably any of us could do so endlessly, without much effort -- not what I'd consider an especially valuable activity. So I guess there's another way to categorize is this: (i) those willing to do some work, either as a developer or a user of already existing assets (ii) those willing to talk about work they'd like other people to do, but without any real commitment to doing it themselves Every results-oriented list attracts a complement of (i)s and (ii)s. We gradually sort out who's in what category and move on from there. Kirby From djmitche@cs.uchicago.edu Fri Feb 11 21:46:24 2000 From: djmitche@cs.uchicago.edu (Dustin James Mitchell) Date: Fri, 11 Feb 2000 15:46:24 -0600 (CST) Subject: [Edu-sig] Lets work on the adgenda In-Reply-To: <3.0.3.32.20000211132239.007449a4@pop.teleport.com> Message-ID: OK then. I propose we take a hierarchical approach to our agenda, then. We have as our current structure the following: I. New & Improved Tools 1. IDLE 2. Language changes II. Curricular Development The questions are: (a) Should we split the SIG along these lines? (b) How should we subdivide (II) above? Now, my opinions: (a) I think that, for the benefit of discussion crossover, we should keep the two discussions in the same forum, at least until the email load gets unbearable. (b) I have two thoughts on subdividing II: - Divide it by age (PS-K, 1-2, 3-4, 5-6, 7-8, 9-10, 11-12, college, adult); or - Divide it by material type (books, teaching aids, lesson plans, teacher education resources, sample assignments, etc.) Although in light of Mr. Urner's recent post, perhaps we need to first distinguish the dimension of purpose: math, math/cs, cs, or programming? Comments are welcome. Guido: if I set up some sort of web page to track development of our agenda and work done on it, can I get a link to it from the SIG page? Dustin --------------------------------------------------------------------- | Dustin Mitchell )O( | --------------------------------------------------------------------- From skip@mojam.com (Skip Montanaro) Fri Feb 11 22:08:52 2000 From: skip@mojam.com (Skip Montanaro) (Skip Montanaro) Date: Fri, 11 Feb 2000 16:08:52 -0600 (CST) Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: References: Message-ID: <14500.34932.767584.8935@beluga.mojam.com> Randy> BUt by that time, there's usually little interest by the students Randy> in taking on another language, unless it's one with alot of Randy> "press" such as Java. Though the Python community has done little or nothing to promote itself, it seems to be getting more and more press these days. Whether or not it's the right kind or of sufficient volume, I don't know. Still, I wouldn't consider lack of press a long-term impediment to adoption. I think your observations about teachers' avoidance of something new (especially if there is no curriculum available to support it) is going to be more of a problem. Maybe the way to introduce it initially is through computer clubs. (Schools do have computer clubs, yes?) Another possible hook is to get Zope installed and use it as the way to manage student-created web sites. Once they want to do more than create flat pages, you yank hard to set the hook... Skip Montanaro | http://www.mojam.com/ skip@mojam.com | http://www.musi-cal.com/ "Languages that change by catering to the tastes of non-users tend not to do so well." - Doug Landauer From smorris@nexen.com Fri Feb 11 23:24:36 2000 From: smorris@nexen.com (Steve Morris) Date: Fri, 11 Feb 2000 18:24:36 -0500 (EST) Subject: [Edu-sig] Hello from a CS Teacher Message-ID: <200002112324.SAA29532@brocade.nexen.com> Kirby Urner writes: > My approach has been to look at Python as one more useful > tool when it comes to teaching mathematics. Computers, not > just calculators, deserve a place in our average math class. > Students need better graphing capability and more exposure > to symbolic operations than today's calculators provide. > > It's a mark of serious over-specialization that we draw > such an artificial line between "numeracy" and "computer > literacy". > > Just because I want to program a computer, doesn't mean I > want to be a computer programmer (speaking generally -- > in actual fact I pay some of my bills by writing Xbase). > For me, CP4E means using Python in a non-CS context. I strongly agree. CS curricula work is important and probably will give the most benefit in the shortest time but the long term goal articulated by Guido in his CP4E proposal was to enable the routine use of programming as a tool for people who would otherwise be non programmers. The "Everyone" in CP4E doesn't mean that everyone should go into programming as a career. Instead Guido was suggesting that programming should be a basic tool like language and math available to most people. Here is my cut on a possibly worthwhile project: Math and science curricula are obvious starting points and several people here have talked about existing efforts. Simulation models are probably the most fruitful area to consider for basic physics and give a good example of the kind of thing I am suggesting. By this I mean the students define initial conditions of objects and watch what happens to them. They then change initial conditions and try again, observing the differences. I have seen static programs which simulate a predetermined set of behaviors over a small set of parameters selected with sliders and the like. Adding a programming language to expand the range of experimentation would increase the learning opportunities by allowing more arbitrary specification of time varying parameters or parameters that change based on various conditions. In an ideal world the student would be able to set up conditions and conduct experiments that the teacher never though of. In case I am be too abstract let me describe an explicit example: Consider a programming simulation world that follows simple newtonion laws of motion. Include gravity as an option for interest. Throw in elastic and inelastic collisions for good measure. This world would allow simulation of air table experiments, simple parabolic motion and orbital dynamics. Throw in the Bernoulli principal and kids could simulate the behavior of various pitching techniques (sliders etc.) and perhaps even simulate an airplane wing. The initial package would be a general computer simulation environment with basic behaviors built in and various output techniques (3D displays, tables of coordinates for further processing etc.) On top of the basic simulation model (which is written once) would be various predefined worlds aimed at specific lesson plans. These world would be defined by python programs and packages. Once the simulator is written (that's the hard part) the process of generating a specific set of interesting objects (in python) would be relatively simple. Basic sets would be packaged with the system. Others would develop and share interesting packages and advanced students would create their own. The point is to do the hard part (simulation and 3D representation) once and let the users (students AND educators) experiment and play. Now I could just as well have specified a similar system for investigating wave dynamics or simple machines or optics. This suggests to my thrifty programming soul that there might be another more basic layer, i.e. a generalized simulation engine packaged with a 3D viewer. The first 4 layers of implementation would look something like: python + simulation engine + mechanics + orbital dynamics + 3D representation | | | + air table | | | + parabolic motion of projectiles | + optics + refraction | | | + reflection | + other simulation worlds The 5th layer is the code written by the student. In my diagram each layer is built on top of and uses the facilities of the one to the left. Python would be the implementation language of choice at each layer (including the student layer) unless performance issues drive a different choice. The point is to factor the problem space of things wanting to be taught using software to reduce duplication of effort. It is easier to recruit help to create a simulation engine if many people stand to gain for many end uses. It is then easier to solve a particular curriculum problem if most of the basic compunents already exist. It is the sharability that I am trying to suggest. Maybe it should be broken down differently. Lots of people have solved parts of this problem for specific classroom applications. I think it is time to generate common tools that are easier to port/steal for other problems. I know I am talking about a moderately big project (although not as big as you might think, and much of it might already be available) with a longer payback cycle and will likely get snide comments about vaporware, however I think it is worth some thought. It will certainly never happen if it doesn't get discussed. If it gets beyond discussion into some specific proposals I am willing to help. From pdx4d@teleport.com Sat Feb 12 00:59:48 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 11 Feb 2000 16:59:48 -0800 Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: <200002112324.SAA29532@brocade.nexen.com> Message-ID: <3.0.3.32.20000211165948.00768dd8@pop.teleport.com> Steve Morris writes: >I know I am talking about a moderately big project (although not as >big as you might think, and much of it might already be available) >with a longer payback cycle and will likely get snide comments about >vaporware, however I think it is worth some thought. It will certainly >never happen if it doesn't get discussed. If it gets beyond discussion >into some specific proposals I am willing to help. I don't have any problem with such brainstorming myself -- sounds like you'd be able to make a serious dent in such a project. Another approach is to use Python code to dissect this whole notion of object-based simulations. Write some simple "cave paintings" that give the _idea_ of how a simulation is designed and built, one that actually runs somehow -- but doesn't do anything super fancy. Then turn to other off-the-shelf software for the jazzier simulations, including even SimCity and SimAnt. Maybe view a documentary on airplane design and see how real engineers use a combination of computer models, wind tunnel experiments or whatever it is they do. After all, we're just physics students here, not airplane engineers. Bernoulli's principle is what's important to us, not the nitty gritty of real world wing design. In this scenario, the role of Python is to "sketch" ideas about simulations, about objects, to provide clear windows into a world of much greater complexity. But you maybe don't actually need to write any new "bouncing molecules" application -- because maybe you find Java applet that does this already and play with that. On the other hand, I think what students _really_ need to understand (and don't, for the most part) is that "collision detection" is a generic problem which many have tackled. So learn enough relevant concepts to be able to poke around in a website like: http://www.win.tue.nl/cs/tt/gino/solid/ Get the flavor of that world, the fact that we have all these algorithms already out there. The goal is really _reading comprehension_: the ability to scan websites such as the above and not disconnect, not throw up your hands and say "oh god, I'll _never_ understand _any_ of this". On the contrary, you're getting more confidant around this kind of stuff by the day (our curriculum is working). My sense is that we're already awash in exciting, usable software. There's just a ton of stuff out there. What's missing is a graduated, user-friendly on-ramp that makes a lot of this stuff clear _conceptually_. The bottleneck is not in the raw materials department, but in the lack of good, clear curriculum materials which take advantage of our embarrassment of riches. We're awash in goodies, but at a loss about how to integrate them _conceptually_ -- because over-specialized approaches have such a strangle-hold these days. I think Python has the potential to help us elucidate what's going on in the guts of our simulations, whether or not those simulations are actually written in Python or not. Plus, as a kind of algorithm-specifying notation, we can write very simple executables to spell out a lot of basic math ideas. For example, below is something I wrote just now to generate a list of prime numbers. It's the age-old Sieve of Eratosthenes (circa 200 BC). We teach this stuff anyway. I'm sure others posting to this list have done lots of similar experiments. It'd be good to start building a library of modules that classroom teachers and/or home-schoolers (of any age group) could use (in part simply as examples to get them going -- as more teachers warm to the idea of Python in the classroom, they'll start "rolling their own"). I'm looking for ways to get the snowball rolling. Then it'll just get bigger as it gathers momentum. Kirby MODULE: seive.py primes = [2] # dynamic list of primes def get2nb(nbprimes): # return list of primes # nbprimes = number of primes to list global primes # keep at module level for re-use # chop the list if already longer than we need if len(primes)>nbprimes: primes = primes[:nbprimes] # start with highest prime so far i = primes[-1] while len(primes) n: # stop trying to divide by break # lower primes when p**2 > n return verdict In action: >>> reload(seive) >>> seive.get2nb(10) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] >>> seive.get2nb(5) [2, 3, 5, 7, 11] >>> seive.get2nb(30) [2, 3, 5, 7, 11, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109] From pdx4d@teleport.com Sat Feb 12 01:31:41 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Fri, 11 Feb 2000 17:31:41 -0800 Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: References: <3.0.3.32.20000211165948.00768dd8@pop.teleport.com> Message-ID: <3.0.3.32.20000211173141.0076b0a0@pop.teleport.com> At 07:07 PM 02/11/2000 -0600, Dustin James Mitchell wrote: >On Fri, 11 Feb 2000, Kirby Urner wrote: > >> while len(primes)> if addprime(i): primes.append(i) >> # skip even numbers (only 2 is prime) >> if i==2: i=i+1 >> else: i=i+1 > >Shouldn't the latter be i=i+2, to go to the next odd number? > Dustin -- Yes, exactly, good eye! The algorithm still worked, but less efficiently. Below is a variant which computes all prime numbers _up to a maximum_ i.e. get2max(). With this one in place, I'm able to do getfactors(), which lists all the prime factors of a number. I also threw in isprime(), which answers whether any number is a prime number (1 means yes, 0 means no). Action: >>> seive.getfactors(10981) [79, 139] >>> seive.isprime(99901) 1 >>> seive.getfactors(30012) [2, 2, 3, 41, 61] >>> 2*2*3*41*61 30012 I'm not claiming this is the most efficient or super-elegant implementation of getfactor(). If others have pointers as to how to improve these examples (to put Python in a good light), I'm happy to hear them. But I'm not looking for a lot of error checking on the passed parameters. Yes you can crash these algorithms if you pass out-of-context values, but no, I'm not interested in cluttering up the code based on the "naive user from hell" model. Kirby primes = [2] # dynamic list of primes def get2max(maxnb): # return list of primes # maxnb = number not to exceed on list global primes # keep at module level while primes[-1]>maxnb: primes = primes[:-1] i=primes[-1] while i<=maxnb: if addprime(i): primes.append(i) if i==2: i=i+1 else: i=i+2 return primes def isprime(n): global primes # keep at module level retval = 0 primes = get2max(n) if n in primes: retval = 1 return retval def getfactors(n): global primes # keep at module level # return list containing prime factors of a number primefactors = [] primes = get2max(n) while not (n in primes): for i in primes: if n%i == 0: # no remainder primefactors.append(i) n = n/i break primefactors.append(n) return primefactors From jason@crash.org Sat Feb 12 06:37:34 2000 From: jason@crash.org (Jason L. Asbahr) Date: Sat, 12 Feb 2000 00:37:34 -0600 Subject: [Edu-sig] Age groups Message-ID: <3.0.32.20000211102449.00921e80@mail112.pair.com> Replying to myself: >It sounds a lot like the Lego Mindstorms robotic kit programming >environment -- but a truly visual Python IDE. Speaking of which, the last few weeks I've had a strong desire for a system that would integrate with my IDE and with my UML design tool, a system that could track interactively what classes, methods, and attributes I'm typing in the editor, store them in a meta-code repository, and present the changes in the UML diagram. Of course, such a system would generate new classes, methods, and attributes in the repository and out to the editor from changes made in the UML model. "Round trip engineering" solutions currently on the market aren't anywhere close to being this integrated (but I'm be curious to hear from users who love their RTE solution...) The IDE-for-kids system mentioned in my previous post is similar to the above description, but rather than using UML abstractions, the focus is on kid-friendly representations of lower level code steps. However, the interactive, integrated nature is the same. A great idea mentioned on this list earlier was to present learners with partially completed solutions, or simple working solutions (classes), which they would modify and extend as part of learning about the system. It strikes me that, stealing a model from Mathematica, an IDE-for-Kids could load and save project "worksheets", which could contain multimedia data and meta-data about the project in addition to the base source code. This model has been used to create some amazing eduware in the Mathematica market. Teachers could assemble worksheet projects and submit them to the PythonForge for others to download, use, modify, and resubmit. (Blue sky: the network-friendly nature of Python could be leveraged to build automatic evaluation and grading features into the worksheets...) I hope this discussion isn't perceived by some readers as vaporware. I for one intend it as an initial requirements generation and scoping discussion for project(s) that can advance the cause of CP4E. If enough developers are interested and enough educators feel one of these proposed projects would be useful, the next step is to begin analysis and design phases, with iterative prototypes to give the community something to actually play with and evaluate. Eventually (we're talking personal life goal here), I'd love to merge my interest in education with my interest in building persistent virtual worlds. The systems we are building in Ultima Online 2 would make extremely engaging educational micro-worlds. That's not our (Origin's) goal or audience right now, but that doesn't mean it won't ever be. :-) Cheers, Jason Asbahr Origin Systems, Inc. jasbahr@origin.ea.com From jelkner@umd5.umd.edu Sat Feb 12 16:44:37 2000 From: jelkner@umd5.umd.edu (Jeffrey Elkner) Date: Sat, 12 Feb 2000 11:44:37 -0500 Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: References: Message-ID: <00021212010300.01076@robeson.elkner.net> On Fri, 11 Feb 2000, Dustin James Mitchell wrote: > So essentially you're using Python up to but notincluding the AP class? Yes, most high schools do not offer AP as the first programming course. There is usually a prior course which is a prerequisit. I think Python's first point of entry into the curriculum will be as a first course language in both high schools and middle schools. > So in light of this and the AP problem, do we have any hope of introducing > Python at the High School level, or would our interests (CP4E, not Py4E) > be better served by developing a sensible, effective, well-supported > environment in which to teach C++? Is there anything else we can do to > gain wider acceptance of our ideas? Could we offer alternatives to the > APs? Is there any process by which we could appeal to the AP board to add > Python as a possible language? C++ is a TERRIBLE language for CP4E! And we should not let the collegeboard dictate how we should teach (they have far too much power as it is ;-) The APs will be in C++ for the forseable future. I personally do not see that as a problem. The AP course is aimed at future CS majors. I want our first year course to reach way beyond that limited population. I have been arguing to anyone who will listen that Python is the language of choice for someone who wants to use programming as a tool but not necessarily as a career. We now have a second year course for students who want more programming but not on the AP track. Many of these students will be learning more Python in year 2. For those students who do want to major in computer science and who do plan on taking the AP exam, the ought to learn more than one language anyway. C++ will be a good learning experience for them, made better by the fact that they will already have a high level understanding of modern programming concepts through their experience with Python ;-) > Does anyone have a source for examples of developed curricula in any area? > Something upon which we could model the structure of our curriculum? Here is the collegeboard's apcsc site, for starters: http://www.collegeboard.org/ap/computer-science/ jeff From hank@prosysplus.com Sat Feb 12 04:54:10 2000 From: hank@prosysplus.com (Hank Fay) Date: Fri, 11 Feb 2000 23:54:10 -0500 Subject: [Edu-sig] Age groups In-Reply-To: Message-ID: Dustin, I think we're in the same ballpark on this. I think having stuff happen right away is better for lower age groups (< 5 or 6 depending on the kid), as conscious thinking about the future is a skill developed over time. Some kids have it at 3 or 4; others get it at 7 or 8; and some people never get it at all. Hank http://www.prosysplus.com > -----Original Message----- > From: Dustin James Mitchell [mailto:djmitche@cs.uchicago.edu] > Sent: Thursday, February 10, 2000 9:51 PM > To: Hank Fay > Cc: Dirk-Ulrich Heise; edu-sig@python.org > Subject: RE: [Edu-sig] Age groups > > > On Fri, 4 Feb 2000, Hank Fay wrote: > > > When I think of "classes" and 5 year olds, I think of a visual scene > > (e.g., a trail in an outdoors setting) that has various challenges > > (e.g., a ledge that needs to be jumped to). To get through the trail, > > the youngster has to "drop" one object on another, in order to extend > > the properties of the object to be able to surmount the challenges. > > A dice roll would determine whether you got to "buy" Michael Jordan's > > legs for your object, e.g. In other words, take the concepts of > > subclassing, and put them in the world of the 5-year old. > > The visual approach is absolutely necessary. However, I think one of the > more confusing aspects of the first step into programming (and, at 5, into > life in general) is the notion of sequence. Look at any K - 1st grader's > homework (I assistant teach Kindergarten). You'll see a lot of sequencing > and cause-and-effect worksheets. These concepts are difficult for a > child, and the worksheets are usually non-interactive (most are a series > of pictures, and the student must draw lines from each picture to the next > in the sequence). > > Now imagine that we allow a student to drag-and-drop 'steps' into a > 'program', then click 'go' to see the program do its thing. Suddenly they > can see the effects of their sequencing, and experiment until they get it > right. > > Students at this age also get most of their encouragement from having > 'done something themselves' -- the biggest bribe I have for mine is > letting them take a message down the hall to the office -- and building a > 'program' to do something will give them a big, motivating thrill. > > Dustin > > --------------------------------------------------------------------- > | Dustin Mitchell )O( | > --------------------------------------------------------------------- > From jelkner@umd5.umd.edu Sat Feb 12 17:02:58 2000 From: jelkner@umd5.umd.edu (Jeffrey Elkner) Date: Sat, 12 Feb 2000 12:02:58 -0500 Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: <14500.34932.767584.8935@beluga.mojam.com> References: <14500.34932.767584.8935@beluga.mojam.com> Message-ID: <00021212115601.01076@robeson.elkner.net> Hi All! We should all take great joy in the fact that we are in the right place at the right time. Python is currently undergoing a qualitative shift in its user base, and that trend will not only continue but grow stronger in the next few years. If anyone has any doubts about this, just consider the number of new Python books that have been appearing lately. I am also completely confident that Python will make its way into schools. There simply isn't a language anywhere better suited to use in schools than Python is. We all have the good fortune to be part of this exciting process and to help it along. So let's get to it! Yes, computer clubs is one way that Python might make its way into schools (which is to say that students themselves will bring it in through the back door). Zope is another way. We shouldn't limit ourselves to one approach. jeff On Fri, 11 Feb 2000, Skip Montanaro wrote: > Though the Python community has done little or nothing to promote itself, it > seems to be getting more and more press these days. Whether or not it's the > right kind or of sufficient volume, I don't know. Still, I wouldn't > consider lack of press a long-term impediment to adoption. I think your > observations about teachers' avoidance of something new (especially if there > is no curriculum available to support it) is going to be more of a problem. > > Maybe the way to introduce it initially is through computer clubs. (Schools > do have computer clubs, yes?) Another possible hook is to get Zope > installed and use it as the way to manage student-created web sites. Once > they want to do more than create flat pages, you yank hard to set the > hook... From matthias@rice.edu Sat Feb 12 17:27:09 2000 From: matthias@rice.edu (Matthias Felleisen) Date: Sat, 12 Feb 2000 11:27:09 -0600 (CST) Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: <20000212170040.6AC8C1CE03@dinsdale.python.org> (edu-sig-request@python.org) References: <20000212170040.6AC8C1CE03@dinsdale.python.org> Message-ID: <200002121727.LAA01335@africa.cs.rice.edu> As some of you know, the TeachScheme! project has been following exactly the path suggested by Jeffrey Elkner: - develop pre-AP material - train teachers to deploy it at that level - work with them to convince principals and admins that teaching language A before B is okay (most believe you must teach C++ in pre-AP courses). We have trained many teachers, we have tested the material as low as 5th grade (it works), we have great comments from all kinds of teachers (comp sci, math, bio, physics). Some teachers have provided their students with material on maintaining Web trees, CGI scripts, email, etc. So students have even gone on from here doing more than plain school stuff. Questions, comments, proposals: 1. If you are a teacher, come visit our workshop: http://www.cs.rice.edu/CS/PLT/Teaching/Workshops/ See for yourself. No, I won't mind if you take the best of our ideas and use them for Python later (with acknowledgement). But if that's your primary goal, contact us as you sign up. 2. If you believe in C4PE, why not Scheme4PE? Is there an advantage of Python over DrScheme? What can we learn from you? I do like the world idea, and it was a part of our first proposal BUT it was shot down big time by some educrats. Perhaps they couldn't imagine it in the classroom. Anything else? -- Matthias From: Jeffrey Elkner To: "PythonEDU" Subject: Re: [Edu-sig] Hello from a CS Teacher Date: Sat, 12 Feb 2000 11:44:37 -0500 Cc: Dustin James Mitchell On Fri, 11 Feb 2000, Dustin James Mitchell wrote: > So essentially you're using Python up to but notincluding the AP class? Yes, most high schools do not offer AP as the first programming course. There is usually a prior course which is a prerequisit. I think Python's first point of entry into the curriculum will be as a first course language in both high schools and middle schools. > So in light of this and the AP problem, do we have any hope of introducing > Python at the High School level, or would our interests (CP4E, not Py4E) > be better served by developing a sensible, effective, well-supported > environment in which to teach C++? Is there anything else we can do to > gain wider acceptance of our ideas? Could we offer alternatives to the > APs? Is there any process by which we could appeal to the AP board to add > Python as a possible language? C++ is a TERRIBLE language for CP4E! And we should not let the collegeboard dictate how we should teach (they have far too much power as it is ;-) The APs will be in C++ for the forseable future. I personally do not see that as a problem. The AP course is aimed at future CS majors. I want our first year course to reach way beyond that limited population. I have been arguing to anyone who will listen that Python is the language of choice for someone who wants to use programming as a tool but not necessarily as a career. We now have a second year course for students who want more programming but not on the AP track. Many of these students will be learning more Python in year 2. For those students who do want to major in computer science and who do plan on taking the AP exam, the ought to learn more than one language anyway. C++ will be a good learning experience for them, made better by the fact that they will already have a high level understanding of modern programming concepts through their experience with Python ;-) > Does anyone have a source for examples of developed curricula in any area? > Something upon which we could model the structure of our curriculum? Here is the collegeboard's apcsc site, for starters: http://www.collegeboard.org/ap/computer-science/ jeff From slitt@troubleshooters.com Sat Feb 12 18:56:43 2000 From: slitt@troubleshooters.com (Steve Litt) Date: Sat, 12 Feb 2000 13:56:43 -0500 Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: <3.0.3.32.20000211165948.00768dd8@pop.teleport.com> References: <200002112324.SAA29532@brocade.nexen.com> Message-ID: <3.0.6.32.20000212135643.012119e0@pop.pacificnet.net> At 04:59 PM 02/11/2000 -0800, Kirby Urner wrote: Kirby -- your program worked nicely on my Red Hat box. I'd like to try writing a program that outputs music through the computer case's built in speaker. Does anyone know of a python command to output a frequency to the built in speaker, or do you know an OS call to do it? Thanks Steve Steve Litt Webmaster, Troubleshooters.Com http://www.troubleshooters.com slitt@troubleshooters.com >MODULE: seive.py > >primes = [2] # dynamic list of primes > >def get2nb(nbprimes): > # return list of primes > # nbprimes = number of primes to list > > global primes # keep at module level for re-use > > # chop the list if already longer than we need > if len(primes)>nbprimes: primes = primes[:nbprimes] > > # start with highest prime so far > i = primes[-1] > > while len(primes) if addprime(i): primes.append(i) > # skip even numbers (only 2 is prime) > if i==2: i=i+1 > else: i=i+1 > > return primes > >def addprime(n): > # internal seive to check whether a number is prime > > verdict = 1 # default is "yes, add to list" > > for i in primes: > if (i==n) | (n%i == 0): # is prime or no remainder > verdict = 0 # so we _don't_ want to add > break > if i**2 > n: # stop trying to divide by > break # lower primes when p**2 > n > > return verdict > >In action: > >>>> reload(seive) > >>>> seive.get2nb(10) >[2, 3, 5, 7, 11, 13, 17, 19, 23, 29] >>>> seive.get2nb(5) >[2, 3, 5, 7, 11] >>>> seive.get2nb(30) >[2, 3, 5, 7, 11, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, >53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109] > > > >_______________________________________________ >Edu-sig mailing list >Edu-sig@python.org >http://www.python.org/mailman/listinfo/edu-sig > From tim_one@email.msn.com Sat Feb 12 20:19:03 2000 From: tim_one@email.msn.com (Tim Peters) Date: Sat, 12 Feb 2000 15:19:03 -0500 Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: <00021212010300.01076@robeson.elkner.net> Message-ID: <000301bf7596$6882a5c0$7c2d153f@tim> [Jeffrey Elkner] > ... > C++ is a TERRIBLE language for CP4E! I'd say it's a terrible *first* (even second) language for any purpose whatsoever: its artificial complexities, both syntactic and semantic, are staggering. They exist for good reasons, but those have to do with maintaining compatibility with C, and with squeezing the very last drop of "performance" out of the machine. In some contexts, those are crucial (e.g., I work in commercial speech recognition, which pushes the limits of what PC HW can do, and the combo of C++ and hand-optimized assembler is our only realistic choice today). But for a newbie? Yuck. Bad, bad idea. > ... > The AP course is aimed at future CS majors. Eiffel would be a vastly better choice for them if OO is in vogue; else Scheme or Haskell. All three took extreme care to get "everything exactly right" from a theoretical POV, and CS majors need that (especially if they're going on to graduate studies). > I want our first year course to reach way beyond that limited > population. I have been arguing to anyone who will listen that > Python is the language of choice for someone who wants to use > programming as a tool but not necessarily as a career. Yes, Python excels at "getting stuff done, and quickly". This is also important for people who program for a living, and Python remains the most generally *useful* language in my professional toolkit. You couldn't regret teaching Python to anyone, as it's something they'll actually use the rest of their lives, no matter what direction they take. Invite your board to read comp.lang.python for a while: it's the most eclectic lang group on Usenet, from "theory heads" debating the fine points of continuations, thru parents teaching their kids how to write a database to keep track of Beanie Baby collections, to professional programmers on the bleeding edge of new web apps. Then study comp.lang.{eiffel, scheme, c++, ...}. The Python community is the very antithesis of a cult . > We now have a second year course for students who want more programming > but not on the AP track. Many of these students will be learning > more Python in year 2. For those students who do want to major in > computer science and who do plan on taking the AP exam, the ought to > learn more than one language anyway. Definitely. > C++ will be a good learning experience for them, The complexities of C++ are best left to professional programmers; for a CS major, the best lesson to learn from C++ may be how painful "backward compatibility" and "speed at any cost" can become. But you could teach that in one lesson, by putting up lots of examples of incomprehensibly obscure C++ and laughing a lot . > made better by the fact that they will already have a high level > understanding of modern programming concepts through > their experience with Python ;-) There is a rational subset of C++ that corresponds to what comes naturally in Python -- add "virtual" to everything and avoid some of the C++ features Stroustrup himself regrets adding (like the "protected" keyword). Much of C++'s OO story is artificially strained due to the desire to make a C++ class the same (by default) as a C struct. So you have to go out of your way to add "noise words" to C++ to get it to act the way every other OO language acts by default. The part of C++ that "makes good OO sense" is largely the part they will have picked up without artificial strain from Python. I think that's a long-winded way of agreeing with you here. if-c++-is-the-answer-the-question-is-not-newbie-material-ly y'rs - tim From tim_one@email.msn.com Sat Feb 12 20:19:18 2000 From: tim_one@email.msn.com (Tim Peters) Date: Sat, 12 Feb 2000 15:19:18 -0500 Subject: [Edu-sig] Lets work on the adgenda In-Reply-To: <3.0.3.32.20000211065918.007399b0@pop.teleport.com> Message-ID: <000a01bf7596$70cb9e80$7c2d153f@tim> [Kirby Urner] > Although I think Python will change in some of its "under > the hood" aspects (e.g. maybe garbage collection), I think > these highly technical design issues are being discussed > in comp.lang.python by top-level Python gurus (including > some posting here). Why rehash such material in this > edu-sig? Isn't that redundant? Even worse, it would drive away the people (i.e., educators) who really matter here. Python developers need feedback on what is and isn't working, and educators need feedback on what's feasible, but I believe we can keep that at a very high (& infrequent) level on this SIG. > On the other hand, if we trully think really basic changes > to syntax are required (e.g. changes in case sensitivity, > division syntax or whatever), then maybe we've decided > Python is _not_ suitable to this job of making computer > languages more accessible to more people. Perhaps it's > time to disband? Twas fun while it lasted. Yes, it *was* fun . But if C++ is being taught now (brrrrr), the notion that perfection is a prerequisite is absurd. > ... > We'll inevitably be using a scaled back version, because > we will not be importing every module in every lesson > (plus we will be writing and importing modules of our > own design). I don't see the need to develop a pared > down Python for teaching purposes when its highly modular > design gives us that already. Good point! The core language is relatively small, but there are still things you're not going to want to teach at first (e.g., operator overloading, metaclasses, __getattr__ hooks, ...). You never bump into those things by accident, though, so simply don't teach them and they won't get in the way. or-if-they-do-that's-educational-too-ly y'rs - tim From bas@andrew.cmu.edu Sat Feb 12 20:52:24 2000 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Sat, 12 Feb 2000 15:52:24 -0500 Subject: [Edu-sig] Physics simulations Message-ID: <1182971954.950370744@HYPERON.REM.CMU.EDU> Concerning physics simulations: There is a long history going back over 30 years of physicists writing simulations of physical phenomena for students to play with. I claim that mostly this by itself has had little pedagogical value. The Ph.D. physicist learned a lot from the simulation, but the introductory student didn't have the background to ask or address interesting questions using the tool. One exception to this gloomy assessment is the situation where the instructor assigns carefully articulated tasks for students to work on using the simulation as a tool. It is attractive to imagine that just sitting the student down in front of a wonderful simulation will lead to learning, but in most cases it doesn't. I also want to draw people's attention to the fact that there already exists a widely used general simulation package, called "Interactive Physics." Using a graphical interface, an instructor can set up something as complicated as a tumbling tower of blocks, and instrument the simulation with graphs and meters to display velocity, energy, etc. There is a player that students can use to run these instructor-prepared simulations. There is a third-party cooperative effort to share setups. So all of this already exists. Many physics teachers have gone beyond the gee-whiz to incorporate this tool into their teaching in a sensible and thoughtful way. An important distinction can be made between simulations and visualizations. A simulation is always somewhat suspect, because it necessarily leaves out some aspects of the real world. This is why many instructors appropriately reject replacing lab experiences with simulations. Visualizations normally are not subject to this problem. For example, my colleague Ruth Chabay has produced QuickTime movies showing electric and magnetic fields in three-dimensional space. We use these movies as lecture-demonstration tools to help students visualize the 3D aspects of fields. There is no issue here of inadequacy of the model, because the movies don't simulate physical processes; rather they teach about the vector representation used by physicists to reason about fields. You can see or download these movies at http://cil.andrew.cmu.edu/emi.html A rather different use of Python that interests our group is to have students write their own computer models from scratch, rather than merely manipulating parameters in someone else's computer model. Currently in our modern mechanics curriculum (and to a lesser extent in our electricity and magnetism curriculum) we have students write programs in our cT programming language, with no black boxes. Many of the programs that the students write are numerical integrations of Newton's second law. Here is the guts of a typical student-written program for integrating the equations of motion for a planet going around a stationary star (initial conditions would be set by the student's program before entering this loop): while 1: r = sqrt(x**2+y**2) F = G*M*m/r**2 Fx = F*x/r Fy = F*y/r px = px+Fx*dt py = py+Fy*dt x = x+(px/m)*dt y = y+(py/m)*dt plot a disk at x,y This is the simplest possible, crude integration algorithm. We have students progressively cut the step size dt until the behavior doesn't change. Today's computers are fast enough that this is adequate for our purposes: we don't have to teach fancy Runge-Kutta techniques. In merely two 50-minute periods we teach the students a subset of cT adequate for writing these and related programs, and they immediately get a spacecraft to the Moon, followed by orbits, spring-mass motion, etc., all with 2D graphical output in the form of visualizing the actual motion as well as graphs of energy, etc. We can't afford to spend more than two periods teaching the language, because this is a physics course, not a programming or computer science course. A sizable minority of our freshman college science students have never written a computer program before, and many of the others have never written a program with graphics output. The goal, largely met, is to teach students the value of computer modeling, and to fix clearly in their minds the fundamental nature of the "Newtonian synthesis" -- that knowledge of positions and momenta at this moment let you predict new positions and momenta a moment dt into the future, and iterate. This view of Newtonian mechanics does not come across in the traditional mechanics curriculum, which is dominated by known motions (blocks sliding down inclines) from which something about the forces is inferred, so that open-ended prediction of motion into the future plays a minor role. We have glimpsed the possibilities of teaching Python rather than cT in those two 50-minute periods, with the possibility of students getting 3D output for free! Python, like cT, has a simple surface syntax, without lots of extra semicolons, braces, etc., and with meaningful indentation. As an existence proof we have written Python programs that look sufficiently similar to the cT programs that our students have successfully written that we can be confident that brief instruction would be sufficient to get them into computer modeling right away. Python offers us three important things that we can't get from cT as it stands, and we don't feel that cT is an adequate base to get there from here. The first is 3D graphics. Dave Scherer, a computer science sophomore at Carnegie Mellon, is developing an engine that lives as a separate thread from the student's Python program and continually (many times a second) updates a picture of the current positions of objects whose positions the student is calculating (he uses OpenGL as the underlying engine). The effect is that the student would write a purely computational program, with no graphics statements, and for free get an animated 3d display. And also for free, the graphics window lets you move the mouse to view the scene from any position. The second thing Python offers is object orientation. The student creates objects such as sun = sphere() and earth = sphere() and then computes their motions. This doesn't necessarily lead into teaching the student to create classes, but it takes some first steps in the student's education about OOP, because the student thinks about the display objects as objects, for which we have some evidence that this is advantageous. In contrast, in cT an animation is produced by erasing a disk here and plotting a disk there, and the disk is just pixels on the screen, not an object that cT remembers anything about. Students are sometimes puzzled that they can't change a position merely by changing x and y, or that a ball plows through a wall on the screen because those pixels aren't being considered by anyone. The third thing Python offers is the possibility of writing vector operations as single statements rather than as two (or three) separate statements. We probably wouldn't start students this way, but at some point during the course it may be appropriate to have them write something like earth.position = earth.position + (earth.momentum/m)*dt rather than writing earth.x = earth.x + (earth.px/m)*dt earth.y = earth.y + (earth.py/m)*dt earth.z = earth.z + (earth.pz/m)*dt The possible value in this is that it is a powerful idea to think of vectors as single entities, not merely as two (or three) separate quantities. OUR GROUP In alphabetic order, let me introduce our Carnegie Mellon group. We think we can make a real contribution to one aspect of CP4E, that of enabling students in a physics course to write their own 3D graphics programs. We are studying a variety of issues that must be addressed to make Python plus 3D viable for science students who have not programmed before. These issues include making more robust and easy to use an integrated development environment and the installation procedure, as well as the purely 3D issues. We realize that if we address these problems we may serve wider needs than our own, but we find it useful to take a very narrow focus (the novice-programmer physics students) in order to make progress. I should mention for completeness that our focus is rather different from that of Randy Pausch at Carnegie Mellon. In Pausch's course on creating virtual worlds, students use Python to control 3D models. Our focus is rather on physics students writing simulations in the context of 3D scientific visualization. David Andersen System designer in CIL (Center for Innovation in Learning). Wrote much of the system software for the PLATO computer-based education system at the University of Illinois in the 70's and 80's, including major contributions to the TUTOR authoring language. Initiator of the MicroTutor language (1977). For the last ten years has been further developing and maintaining the cT programming language (which is a granddaughter of TUTOR and a daughter of MicroTutor). Extensive cross-platform experience, including Windows, Macintosh, and Unix/Linux. Ruth Chabay Ph.D. physical chemist, senior research scientist in CIL and Department of Physics. Contributed to the PLATO system software in the 70's. Has written award-winning and commercial educational software in chemistry and physics, including 3D visualizations of electric and magnetic fields, and of the ball-and-spring model of a solid. Co-author with Bruce Sherwood of a new textbook for introductory university physics incorporating computer modeling. Devised a very rapid introduction of computer modeling for physics students. Regularly teaches physics courses at Carnegie Mellon in which computing plays a major role. Ari Heitner Ian Peters David R Scherer Ari, Ian, and Dave are sophomores at Carnegie Mellon. Ari and Dave are majoring in computer science, and Ian is a double major in physics and computer science. They all come from the excellent Thomas Jefferson High School in Alexandria VA. Dave Scherer is the person who introduced Python to us and proposed building a novice 3D graphics computing environment on top of Python. Dave and Ari were members of the TJ team that built "Fire and Darkness," a 3D computer game that won the national prize last year at the First Independent Games Festival. All three of the students were in our physics course last year and had experience with student computer modeling of physical phenomena. Dave is rapidly developing a module that runs in parallel to Python, updating the screen with often enough to give smooth 3D animations, with user mouse actions enabling change of point of view of the scene. His module talks to OpenGL. Programs using Dave's module don't make explicit graphics calls but simply update screen positions of objects such as spheres and curves. Bruce Sherwood Ph.D. physicist, a principal research scientist in CIL and professor in the Department of Physics. Contributed to the PLATO system software in the 70's, including in particular contributions to the TUTOR and MicroTutor languages. Has written award-winning and commercial educational software in physics. Initiated the development of the cT programming language. Has written book and on-line software documentation. Co-author with Ruth Chabay of a new textbook for introductory university physics incorporating computer modeling. Regularly teaches physics courses at Carnegie Mellon in which computing plays a major role. From pdx4d@teleport.com Sun Feb 13 11:26:50 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Sun, 13 Feb 2000 03:26:50 -0800 Subject: [Edu-sig] Using Python to teach math In-Reply-To: <3.0.6.32.20000212135643.012119e0@pop.pacificnet.net> References: <3.0.3.32.20000211165948.00768dd8@pop.teleport.com> <200002112324.SAA29532@brocade.nexen.com> Message-ID: <3.0.3.32.20000213032650.00726928@pop.teleport.com> Here's a new web page with some embedded Python. Mostly math, with Python used in that context (as an alternative notation). The page isn't about teaching Python per se, but the examples given are syntactically simple enough to promote learning. See: http://www.inetarena.com/~pdx4d/ocn/numeracy0.html Kirby From smorris@nexen.com Mon Feb 14 14:17:20 2000 From: smorris@nexen.com (Steve Morris) Date: Mon, 14 Feb 2000 09:17:20 -0500 (EST) Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: <000301bf7596$6882a5c0$7c2d153f@tim> References: <00021212010300.01076@robeson.elkner.net> <000301bf7596$6882a5c0$7c2d153f@tim> Message-ID: <200002141417.JAA24598@brocade.nexen.com> Tim Peters writes: > [Jeffrey Elkner] > > ... > > C++ is a TERRIBLE language for CP4E! > > I'd say it's a terrible *first* (even second) language for any purpose > whatsoever: its artificial complexities, both syntactic and semantic, are > staggering. I hate C++ but think you overstate it. C++ is a good language for getting a job in CS. Let's not forget that there is a real world out there. On the other hand I completely agree that Python is one of the best languages to teach non CS people and kids. From rlatimer@mirage.tjhsst.edu Mon Feb 14 20:28:51 2000 From: rlatimer@mirage.tjhsst.edu (Randy Latimer) Date: Mon, 14 Feb 2000 15:28:51 -0500 (EST) Subject: [Edu-sig] CS teacher In-Reply-To: Message-ID: Message from a CS Teacher - I'd be happy to try to "sell" good curriculum ideas in languages like Python or Scheme to other CS teachers in the county I work in. BUT - Traditionally, like I've said, it's very hard to get most teachers to take the time to teach something new UNLESS they have the equipment, software, and good lesson plans with which to implement the new ideas. Teachers also need a strong reason why they should make the effort in the first place. Time for training is also an issue. If you want to plan a similar curriculum in another language, here's a brief outline of the classes now: 1st year CS: basic i/o, file reading/writing, conditionals, loops, arrays, structures/classes, arrays of structs/classes, a little recursion 2nd Years CS (APCS) - data structures, stacks, queues, linked lists, trees, study of algorithms - like sorting algorithms, study of a large program development- Case Study, more recursion Does the choice of language dictate what goes into the curriculum? probably...the above curriculum grew out of many years of: BASIC/FORTRAN (70's) --> Pascal (80's & 90's) --> C++ (late 90's) LOGO tried to make inroads as a newer, different style, graphics oriented language in the 80's. It had a little effect, but seemed to die out. At this point, it seems to me like Java is the "most popular" choice for 2nd language, probably because it's so similar to C++, does OOP, has graphics, and you can do web programming. I don't know much about Python, but Scheme would be a very different programming style from the traditional. (Good or bad?? who knows) Randy Latimer From pdx4d@teleport.com Mon Feb 14 16:11:01 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Mon, 14 Feb 2000 08:11:01 -0800 Subject: [Edu-sig] CS teacher In-Reply-To: References: Message-ID: <3.0.3.32.20000214081101.00748e14@pop.teleport.com> > If you want to plan a similar curriculum in another language, here's a >brief outline of the classes now: > 1st year CS: basic i/o, file reading/writing, conditionals, loops, >arrays, structures/classes, arrays of structs/classes, a little recursion > 2nd Years CS (APCS) - data structures, stacks, queues, linked lists, >trees, study of algorithms - like sorting algorithms, study of a large >program development- Case Study, more recursion Just keep in mind that some of us are not using Python in a CS context, even while phasing it in to the standard curriculum. For example: http://www.inetarena.com/~pdx4d/ocn/numeracy0.html (which I just recently completed -- next comes vector algebra). I'm teaching math-science. From my point of view, Python is just another useful notation. You don't even need a computer to read what its doing, but best if you have one, as, unlike pencil and paper algorithms, Python's are self-executing. Kirby From rlatimer@mirage.tjhsst.edu Mon Feb 14 22:08:20 2000 From: rlatimer@mirage.tjhsst.edu (Randy Latimer) Date: Mon, 14 Feb 2000 17:08:20 -0500 (EST) Subject: [Edu-sig] CS teacher In-Reply-To: <3.0.3.32.20000214081101.00748e14@pop.teleport.com> Message-ID: Kirby - Are you using Python in a classroom situation? How do you handle student access to a computer? Here in my county, the schools tend to have a computer lab for the CS classes, and a generic lab for math/science. The teachers have to sign up for computer lab time. It's great if the students have the computer immediately available. In the school I'm at now, we're talking about how to get other departments more involved with programming...Sounds like what you're doing with Python. Are you doing it on your own, or are other teachers getting involved? Randy From pdx4d@teleport.com Mon Feb 14 20:06:23 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Mon, 14 Feb 2000 12:06:23 -0800 Subject: [Edu-sig] CS teacher In-Reply-To: References: <3.0.3.32.20000214081101.00748e14@pop.teleport.com> Message-ID: <3.0.3.32.20000214120623.0074def8@pop.teleport.com> At 05:08 PM 02/14/2000 -0500, you wrote: >Kirby - Are you using Python in a classroom situation? How do you handle >student access to a computer? Here in my county, the schools tend to have >a computer lab for the CS classes, and a generic lab for math/science. >The teachers have to sign up for computer lab time. It's great if the >students have the computer immediately available. My focus is teachers. I recently used an InFocus projector (courtesy of the State of Oregon) to screen content directly from a computer, while circulating copies of my printed materials. Some of our districts have computers in the math class, including projectors (Winterhaven in Brooklyn is an example). > In the school I'm at now, we're talking about how to get other >departments more involved with programming...Sounds like what you're doing >with Python. Are you doing it on your own, or are other teachers getting >involved? > Randy Other teachers are getting involved. But I have a head start. It's nothing new to have programming mixed with math content. Many math text books (e.g. McGraw-Hill) have included BASIC or Logo -- these were not for CS courses in particular, although I'm sure they could have been used that way (I don't know in this case, as I was in McGraw-Hill, not in the classroom -- although I do have some years of classroom experience). Kirby From jason@crash.org Tue Feb 15 01:51:35 2000 From: jason@crash.org (Jason L. Asbahr) Date: Mon, 14 Feb 2000 19:51:35 -0600 Subject: [Edu-sig] Carnegie Mellon's new MS in Entertainment Technology Message-ID: <3.0.32.20000214195123.00991330@mail112.pair.com> This may be of interest to the edu-sig readers, from Randy Pausch posted to the SIGCHI list... Jason Asbahr Origin Systems, Inc. jasbahr@origin.ea.com >X-Persona: >X-Envelope-To: >Date: Sat, 12 Feb 2000 18:51:35 -0500 >From: Randy Pausch >Subject: Carnegie Mellon's new MS in Entertainment Technology >Sender: "ACM SIGCHI General Interest Announcements (Mailing List)" > >X-Sender: pausch@ux6.sp.cs.cmu.edu >Approved-by: rlamck@US.IBM.COM >To: CHI-ANNOUNCEMENTS@ACM.ORG >Reply-to: Randy Pausch > >For Immediate Release: > >Carnegie Mellon Offers New "Masters of Entertainment Technology " Degree > Applications Due: March 15, 2000 > More Information at: http://etc.cmu.edu > >Carnegie Mellon University's new Entertainment Technology Center (ETC) has >established a two-year Masters of Entertainment Technology degree, jointly >offered by the College of Fine Arts and the School of Computer Science. >The ETC program focuses on creating new processes, tools and visions for >storytelling and entertainment. > >The ETC is headed by two co-directors: Don Marinelli, Professor in the >School of Drama, and Randy Pausch, Professor of Computer Science and HCI. >"Our masters in entertainment technology addresses the issues inherent in >the new interactive media that are driving the entertainment industry," >says Pausch. Specifically, how we share control of an experience between >the ahead-of-time authors and the audience/user/guest/player is an >intellectually deep question." Marinelli adds, "The interdisciplinary >nature of this degree is what makes it so daring and innovative. We want >to take the creativity of the arts and fuse it with the technologists who >are making new media forms." > >Students enrolled in the program will be immersed in a cutting edge, >collaborative environment and will work in areas that include virtual >reality, location-based entertainment, entertainment-based e-commerce, >theme park design, digital animation, CD- and DVD-ROM, authoring, video >games and robotics. > >The ETC will admit a mix of students so that each incoming class will be >roughly half technologists and half artists. Says Pausch, "We are looking >for students who are very good at something--anything from computer >programming to theater lighting to clay sculpting to digital animation." >The curriculum includes internship potentials with a variety of >entertainment companies such as Walt Disney Imagineering, Industrial Light >and Magic, Dreamworks Interactive, Microsoft, and Kodak, among others. > >More information and application materials are available at > >http://www.etc.cmu.edu > > > >--------------------------------------- >Randy Pausch, pausch@cs.cmu.edu, http://www.randypausch.com/ >Associate Professor of HCI, Computer Science, and Design >School of Computer Science, Carnegie Mellon University >5000 Forbes Avenue, Pittsburgh, PA, 15213-3891 >voice=412/268-3579, fax=(801) 991-9434 >--------------------------------------- > > From tim_one@email.msn.com Tue Feb 15 03:22:15 2000 From: tim_one@email.msn.com (Tim Peters) Date: Mon, 14 Feb 2000 22:22:15 -0500 Subject: [Edu-sig] Hello from a CS Teacher In-Reply-To: <200002141417.JAA24598@brocade.nexen.com> Message-ID: <000d01bf7763$db2a18a0$66a2143f@tim> [Tim] > I'd say it's [C++] a terrible *first* (even second) language for > any purpose whatsoever: its artificial complexities, both syntactic > and semantic, are staggering. [Steve Morris] > I hate C++ I love C++ -- for example, it payed for the computer I'm typing this on . > but think you overstate it. Did you see the "*first* (even second)" part? C++ is about as baroque as languages get; there are much gentler ways to learn the essentials, and having learned them it's comparatively easy to learn how to "spell them" in C++. For much the same reasons, I wouldn't teach a kid how to swim by tossing them into the deep end of the pool. > C++ is a good language for getting a job in CS. Let's not forget > that there is a real world out there. This is a Python SIG -- it's all about the real world. > On the other hand I completely agree that Python is one of the best > languages to teach non CS people and kids. Programming in the real world is increasingly about getting disparate systems to work with each other, and Python may be the most practical "glue language" there is. Do the posters on comp.lang.python strike you as being unemployed <0.9 wink>? don't-prepare-for-last-decade's-jobs-unless-you-want-to-do- maintenance-work-ly y'rs - tim From pdx4d@teleport.com Tue Feb 15 09:11:22 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Tue, 15 Feb 2000 01:11:22 -0800 Subject: [Edu-sig] More math-teaching with Python In-Reply-To: <3.0.3.32.20000214120623.0074def8@pop.teleport.com> References: <3.0.3.32.20000214081101.00748e14@pop.teleport.com> Message-ID: <3.0.3.32.20000215011122.0074dc4c@pop.teleport.com> I've got a 2nd section of Python-related curriculum on the web at http://www.inetarena.com/~pdx4d/ocn/numeracy1.html This page, Getting Inventive with Vectors, spells out my technique for generating simple graphics. I use Python to write .pov files for the popular, cross-platform ray tracer, POV-ray (www.povray.org). One question is whether this technique will spread, to teachers and their students. Many colleagues of mine do something similar with Java + Povray, but I'm a pioneer doing this with Python, at least in my neck of the woods (this may be old hat to others). Whereas my previous section: http://www.inetarena.com/~pdx4d/ocn/numeracy1.html was a functional programming application (all the number series function defs in series.py), for vectors I start getting into class and objects (no subclasses though). Note, when it comes to virtual worlds (a thread on this list), the ActiveWorlds back end is certainly one to consider. It's already being used for educational purposes, and permits users to gather as avatars and chat in real time. The downside is it isn't very cross-platform. Several of my colleagues have put a lot of time populating various ActiveWorlds with interesting content -- although again, mostly of this work has not involved any Python to my knowledge. Kirby Curriculum writer Oregon Curriculum Network From pdx4d@teleport.com Tue Feb 15 09:23:20 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Tue, 15 Feb 2000 01:23:20 -0800 Subject: [Edu-sig] More math-teaching (fix ++) Message-ID: <3.0.3.32.20000215012320.007477c8@pop.teleport.com> > Whereas my previous section: > > http://www.inetarena.com/~pdx4d/ocn/numeracy1.html ^^^^^^^^^^^^^^ http://www.inetarena.com/~pdx4d/ocn/numeracy0.html Oops. Regarding ActiveWorlds (AW), if you want to see more of what's already been done, check out some of these URLs: http://www.inetarena.com/~pdx4d/ocn/graphics/awedu.gif http://inetarena.com/~pdx4d/images/awstruck2.jpg (recent) Basically, you need to output in .rwx format, much as I'm doing already in .pov and .wrl (vrml) formats. Kirby PS: http://www.inetarena.com/~pdx4d/ocn/struck.html is another example of Java + Povray synergy (also Java + VRML). These are the kinds of projects my colleagues (e.g. Gerald de Jong of BeautifulCode and Karl Erickson of Novel Memetics) have been pioneering. From mpjohans@pcu.helsinki.fi Tue Feb 15 12:13:56 2000 From: mpjohans@pcu.helsinki.fi (Mikael Johansson) Date: Tue, 15 Feb 2000 14:13:56 +0200 (EET) Subject: [Edu-sig] Python error messages In-Reply-To: <3.0.3.32.20000213032650.00726928@pop.teleport.com> Message-ID: Hello all! I've been following this list for a while now, but must admit I've been a bit happy with the D-key in pine :-) So this might have come up already, altough I didn't find any references in the archives. If this is the case, kick me! I'm using Python as the programming language when introducing our university students to make small chemistry-related proggies. Most of them have never programmed before, and I must say the reception of Python has been good; seems quite easy to get into it, even if there is no separate programming course. The excersises are just part of ordinary (physical) chemistry courses and the students have to learn the basics of programming in about 2 hours. Which they apparently do! Anyway, the biggest problem the students seem to have when programming on their own, is to find their programming errors (bugs). And almost everyone has said that the error messages Python produces are cryptic. And I must agree, they are not that descriptive. So better error messages would be a very good way to make the learning process even easier, without compromising any compatibility with earlier code. For the interested, the excersises and solutions can be found at http://www.helsinki.fi/~mpjohans A word of warning though, they are in swedish :-) Have a nice day, Mikael Johansson University of Helsinki Department of Chemistry mikael.johansson@helsinki.fi From guido@python.org Tue Feb 15 12:20:28 2000 From: guido@python.org (Guido van Rossum) Date: Tue, 15 Feb 2000 07:20:28 -0500 Subject: [Edu-sig] Python error messages In-Reply-To: Your message of "Tue, 15 Feb 2000 14:13:56 +0200." References: Message-ID: <200002151220.HAA23021@eric.cnri.reston.va.us> > Anyway, the biggest problem the students seem to have when programming on > their own, is to find their programming errors (bugs). And almost everyone > has said that the error messages Python produces are cryptic. And I must > agree, they are not that descriptive. So better error messages would be a > very good way to make the learning process even easier, without > compromising any compatibility with earlier code. Mikael, This is good information. It would be even better if you could recall and post some examples of code written by students that elicited cryptic (in their eyes) error messages. Do you have any examples? Even if you have to reconstruct samples from memory it would be helpful! Others too -- if you see a poorly worded or otherwise undecipherable (for a beginner) error coming from Python, let me know! --Guido van Rossum (home page: http://www.python.org/~guido/) (Yes, I'm back. Glad we're all still on speaking terms. :-) From mpjohans@pcu.helsinki.fi Tue Feb 15 12:58:34 2000 From: mpjohans@pcu.helsinki.fi (Mikael Johansson) Date: Tue, 15 Feb 2000 14:58:34 +0200 (EET) Subject: [Edu-sig] Python error messages In-Reply-To: <200002151220.HAA23021@eric.cnri.reston.va.us> Message-ID: On Tue, 15 Feb 2000, Guido van Rossum wrote in a reply to me: > > Anyway, the biggest problem the students seem to have when programming on > > their own, is to find their programming errors (bugs). And almost everyone > > has said that the error messages Python produces are cryptic. And I must > > agree, they are not that descriptive. So better error messages would be a > > very good way to make the learning process even easier, without > > compromising any compatibility with earlier code. > > Mikael, > > This is good information. It would be even better if you could recall > and post some examples of code written by students that elicited > cryptic (in their eyes) error messages. Do you have any examples? > Even if you have to reconstruct samples from memory it would be > helpful! Well, this is fresh in mind from yesterday: T=500 # Temperature (K) l=350 # Wavelength (nm) ro=(8*pi*h*c)/(l**5)*(1/(exp(h*c/(l*k*T))-1)) in the above example h, c and k have their normal SI-values. Anyway, this produces a "OverflowError: integer pow()" which can be quite misleading when there is no pow() on the line (** instead). Other overflow errors like "math range error" can also be hard to get. (For the interested: The error in the above code was to give the wavelength in nm, instead of m, and the code calulates the energy density at a given temp and wavelength for black-body radiation according to the Planck distribution function) The "best" example from yesterday was however "number coercion failed" which I was unable to reproduce right now, don't remember what needed to be fixed. Other common comfusing error messages state that there is something wrong with a line of code when in fact the error is somewhere else, like on the preceding line. There are more (and even better) examples, but my memory is, sad enough, exactly what it used to be :-) I'll post more when I have something to say. Have a nice day, Mikael J. From gward@cnri.reston.va.us Tue Feb 15 14:40:35 2000 From: gward@cnri.reston.va.us (Greg Ward) Date: Tue, 15 Feb 2000 09:40:35 -0500 Subject: [Edu-sig] Python error messages In-Reply-To: <200002151220.HAA23021@eric.cnri.reston.va.us>; from guido@python.org on Tue, Feb 15, 2000 at 07:20:28AM -0500 References: <200002151220.HAA23021@eric.cnri.reston.va.us> Message-ID: <20000215094033.D9567@cnri.reston.va.us> On 15 February 2000, Guido van Rossum said: > Others too -- if you see a poorly worded or otherwise undecipherable > (for a beginner) error coming from Python, let me know! At the risk of contributing to another geek-oriented thread (as opposed to educator-oriented), let me just say that my least-favourite Python error message is "SyntaxError: invalid syntax", which somehow manages to be both overly terse and redundant at the same time. As long as I'm picking nits without making any constructive contribution, how about: >>> 4 + "foo" Traceback (innermost last): File "", line 1, in ? TypeError: number coercion failed ...wouldn't it be nicer to say "can't add string and number"? (I'm coming at this from a usability perspective, not from an implementation perspective -- which means I'm allowed to make unrealistic requests!) And when I reverse the arguments, I get a somewhat more useful message: >>> "foo" + 4 Traceback (innermost last): File "", line 1, in ? TypeError: illegal argument type for built-in operation ...but it would be nice to know *which* built-in operation is causing the problem, e.g. "illegal argument type for addition operation". Come to think of it, shouldn't that be "illegal argument types"? After all, both string and integer are legal argument types for addition -- it's just the combination that's illegal. It might be a useful exercise for someone to hang onto "first pass" Python programs written by novices to see what kind of errors happen most frequently, which error messages are most confusing, and work on those. Greg From kuncej@mail.conservation.state.mo.us Tue Feb 15 19:01:51 2000 From: kuncej@mail.conservation.state.mo.us (Jeffrey Kunce) Date: Tue, 15 Feb 2000 13:01:51 -0600 Subject: [Edu-sig] Python error messages Message-ID: >Anyway, the biggest problem the students seem to have when programming on >their own, is to find their programming errors (bugs).=20 Simply rewriting the error messages would be an incomplete solution. The programming environment should really help the programmer pinpoint the error's location and its context. In other words, I think a a good = GUI=20 debugger would be useful. --Jeff From guido@python.org Tue Feb 15 18:55:34 2000 From: guido@python.org (Guido van Rossum) Date: Tue, 15 Feb 2000 13:55:34 -0500 Subject: [Edu-sig] Python error messages In-Reply-To: Your message of "Tue, 15 Feb 2000 13:01:51 CST." References: Message-ID: <200002151855.NAA25004@eric.cnri.reston.va.us> > Simply rewriting the error messages would be an incomplete solution. > The programming environment should really help the programmer pinpoint > the error's location and its context. In other words, I think a a good GUI > debugger would be useful. Agreed. For example, the latest version of IDLE (to be announced) reports syntax errors by highlighting the offending token in the source code. Of course, we could go further, e.g. by doing the same for runtime errors. It also has a GUI debugger (which needs to be greatly improved before it can be called "good" :-). --Guido van Rossum (home page: http://www.python.org/~guido/) From bas@andrew.cmu.edu Tue Feb 15 19:15:18 2000 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Tue, 15 Feb 2000 14:15:18 -0500 Subject: [Edu-sig] Exponentiation should float Message-ID: <1436345894.950624118@MUON.PC.CC.CMU.EDU> > ro=(8*pi*h*c)/(l**5)*(1/(exp(h*c/(l*k*T))-1)) > > Anyway, this produces a "OverflowError: integer pow()" which can be quite > misleading when there is no pow() on the line (** instead). Just as division should normally trigger a floating-point operation, so also exponentiation should trigger a floating-point operation. This shouldn't be an error. Bruce Sherwood From ping@lfw.org Tue Feb 15 19:34:58 2000 From: ping@lfw.org (Ka-Ping Yee) Date: Tue, 15 Feb 2000 13:34:58 -0600 (CST) Subject: [Edu-sig] Exponentiation should float In-Reply-To: <1436345894.950624118@MUON.PC.CC.CMU.EDU> Message-ID: On Tue, 15 Feb 2000, Bruce Sherwood wrote: > > ro=(8*pi*h*c)/(l**5)*(1/(exp(h*c/(l*k*T))-1)) > > > > Anyway, this produces a "OverflowError: integer pow()" which can be quite > > misleading when there is no pow() on the line (** instead). > > Just as division should normally trigger a floating-point operation, so > also exponentiation should trigger a floating-point operation. This > shouldn't be an error. It doesn't have to go to floating-point because the answer can clearly be expressed as a whole number when the arguments are whole numbers. I think a better answer would be for it to go automatically to long integer. (There has been some discussion recently on the developer's list about unifying integers and long integers so that such promotion and demotion happens behind the scenes, and no one needs to ever worry about that pesky "L" suffix again. I think this would be very nice.) -- ?!ng From guido@python.org Tue Feb 15 20:10:09 2000 From: guido@python.org (Guido van Rossum) Date: Tue, 15 Feb 2000 15:10:09 -0500 Subject: [Edu-sig] IDLE 0.5 released Message-ID: <200002152010.PAA25420@eric.cnri.reston.va.us> After a delay of nearly half a year, I've finally released IDLE 0.5. I'll quote from the README after listing the URL: http://www.python.org/idle/ (Dear edu-sig members, please don't fill the edu-sig mailing list with detailed feedback on IDLE -- please use the newsgroup or the Python Bugs List. Discussion of requirements for adaptation of IDLE in education are welcome; please first check the TODO list (http://www.python.org/idle/idle-0.5/TODO.txt) to see if I've already thought of your request.) FEATURES IDLE has the following features: - coded in 100% pure Python, using the Tkinter GUI toolkit (i.e. Tcl/Tk) - cross-platform: works on Windows and Unix (on the Mac, there are currently problems with Tcl/Tk) - multi-window text editor with multiple undo, Python colorizing and many other features, e.g. smart indent and call tips - Python shell window (a.k.a. interactive interpreter) - debugger (not complete, but you can set breakpoints, view and step) USAGE [...] IDLE requires Python 1.5.2, so it is currently only usable with a Python 1.5.2 distribution. (An older version of IDLE is distributed with Python 1.5.2; you can drop this version on top of it.) COPYRIGHT IDLE is covered by the standard Python copyright notice (http://www.python.org/doc/Copyright.html). FEEDBACK For feedback, please use the Python Bugs List (http://www.python.org/search/search_bugs.html). --Guido van Rossum (home page: http://www.python.org/~guido/)

IDLE 0.5 - the Integrated DeveLopment Environment for Python in Python. (15-Feb-2000) From bas@andrew.cmu.edu Tue Feb 15 21:38:13 2000 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Tue, 15 Feb 2000 16:38:13 -0500 Subject: [Edu-sig] Exponentiation should float In-Reply-To: Message-ID: <1444920754.950632693@MUON.PC.CC.CMU.EDU> The problem is that exponentiation goes, well, exponential. So it is real easy for this operation to give a result too large even for long integers. A more general statement would be that if there is overflow on integer exponentiation, the operation should be repeated with a floating result. --On Tuesday, February 15, 2000, 1:34 PM -0600 Ka-Ping Yee wrote: > It doesn't have to go to floating-point because the answer can > clearly be expressed as a whole number when the arguments are > whole numbers. I think a better answer would be for it to go > automatically to long integer. (There has been some discussion > recently on the developer's list about unifying integers and > long integers so that such promotion and demotion happens behind > the scenes, and no one needs to ever worry about that pesky "L" > suffix again. I think this would be very nice.) From pdx4d@teleport.com Tue Feb 15 22:08:56 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Tue, 15 Feb 2000 14:08:56 -0800 Subject: [Edu-sig] More math-teaching Message-ID: <3.0.3.32.20000215140856.0072d1fc@pop.teleport.com> To edu-sig@python.org FYI, memo sent earlier today Kirby PS: for more re 'Math Trek' (mentioned below), see http://home.att.net/~mathtrek/ ======================= To: Ivars Peterson Science Writer MAA columnist Fr: Kirby Urner Curriculum writer Oregon Curriculum Network Howdy Ivars -- Just wanted to bring your attention (if you have any to spare) to some very recent curriculum writing I've just web-published: http://www.inetarena.com/~pdx4d/ocn/numeracy0.html http://www.inetarena.com/~pdx4d/ocn/numeracy1.html I consider these pages good summary examples of how K-12 math could be rekindled with interesting and challenging new content. Many educators already share my intention to include more exposure to computer languages in K-12 math (we were doing this at McGraw-Hill in the early '80s). I see computer language as an alternative way of expressing math-related ideas in human-readable -- yet machine-executable -- form. The software engineers have finally gotten us to the point where we're able to _clarify_ math concepts using their codes, not just further obscure them behind a lot of machine-specific verbiage. Thanks again for getting 'Math Trek' out there. I'm looking forward to 'Math Trek 2'. From what you've said about it so far, it sounds like it'll make a very useful addition to my working syllabus. Kirby PS: I'm reading your 'Jazzing Up Euclid's Algorithm' at http://www.maa.org/mathland/mathtrek_2_14_00.html -- we probably share the notion that "numeracy" and "computer literacy" are not wide-apart, entirely separate goals. From gward@cnri.reston.va.us Tue Feb 15 22:24:18 2000 From: gward@cnri.reston.va.us (Greg Ward) Date: Tue, 15 Feb 2000 17:24:18 -0500 Subject: [Edu-sig] Exponentiation should float In-Reply-To: <1444920754.950632693@MUON.PC.CC.CMU.EDU>; from bas@andrew.cmu.edu on Tue, Feb 15, 2000 at 04:38:13PM -0500 References: <1444920754.950632693@MUON.PC.CC.CMU.EDU> Message-ID: <20000215172418.F10054@cnri.reston.va.us> On 15 February 2000, Bruce Sherwood said: > The problem is that exponentiation goes, well, exponential. So it is real > easy for this operation to give a result too large even for long integers. > A more general statement would be that if there is overflow on integer > exponentiation, the operation should be repeated with a floating result. Arrgghh, here we go again with another geek thread. But, being a geek, I just have to jump in: the whole point of long integers is that they *can't* overflow. I just got Python to compute 2**50000, and after a noticeable delay it spat back a several-thousand-digit number at me. Given enough time, I expect it could calculate 2**(2**50000) ... ummm... I'm doing it now, and it looks like there's no memory leak, so it probably *could* do it. I'll get back to you in a few years with the result. ;-) Anyways, there's no way you could do that with floating point math. You run out of accuracy much faster with floats than with long ints. So your argument is backwards: exponentiation of integers wants to fallback to longints when the result gets too big for ints, because floats don't have enough bits either. Greg -- Greg Ward - software developer gward@cnri.reston.va.us Corporation for National Research Initiatives 1895 Preston White Drive voice: +1-703-620-8990 Reston, Virginia, USA 20191-5434 fax: +1-703-620-0913 From tim_one@email.msn.com Wed Feb 16 05:55:21 2000 From: tim_one@email.msn.com (Tim Peters) Date: Wed, 16 Feb 2000 00:55:21 -0500 Subject: [Edu-sig] Exponentiation should float In-Reply-To: <1444920754.950632693@MUON.PC.CC.CMU.EDU> Message-ID: <000f01bf7842$68e6e400$b7a0143f@tim> Telegraphically: On almost all platforms, Python floats are IEEE-754 doubles, which have a maximum (positive finite) value a little less than 2L**1024 (a little more than 300 decimal digits, but only about 15 of which are accurate: at most the leading 53 bits are accurate). Python longs have no such restrictions on either maximum magnitude or precision; they can-- if needed --grow to fill your machine's whole memory. So integer exponentiation should not float (can easily overflow to floating infinity, and even more easily lose information). The subtleties of floating-point are substantial <0.1 wink, which is *not* exactly a tenth of a wink in IEEE-standard floating arithmetic>. "floating-point-for-everybody"-is-a-non-starter-ly y'rs - tim From mpjohans@pcu.helsinki.fi Wed Feb 16 15:02:23 2000 From: mpjohans@pcu.helsinki.fi (Mikael Johansson) Date: Wed, 16 Feb 2000 17:02:23 +0200 (EET) Subject: [Edu-sig] Python error messages In-Reply-To: <200002151855.NAA25004@eric.cnri.reston.va.us> Message-ID: Hello all! On Tue, 15 Feb 2000, Guido van Rossum wrote: > > Simply rewriting the error messages would be an incomplete solution. > > The programming environment should really help the programmer pinpoint > > the error's location and its context. In other words, I think a a good GUI > > debugger would be useful. > > Agreed. For example, the latest version of IDLE (to be announced) > reports syntax errors by highlighting the offending token in the > source code. Of course, we could go further, e.g. by doing the same > for runtime errors. It also has a GUI debugger (which needs to be > greatly improved before it can be called "good" :-). Very good points came up, and also some good=bad error messages that I failed to come up with yesterday. Error highlighting is very useful. I'm also glad to see that IDLE under windows now can emulate stdin, so that raw_input():s can be used directly from within IDLE so the students don't have to open a DOS-box and try to navigate in it to find their .py:s. But to stick to the "error messages" topic, is there anywhere any nice compilation of python error messages with a bit longer description of the error and possible causes? I think it would ease the decryption of the error messages. Have a nice day, Mikael J. From pdx4d@teleport.com Thu Feb 17 08:40:03 2000 From: pdx4d@teleport.com (Kirby Urner) Date: Thu, 17 Feb 2000 00:40:03 -0800 Subject: [Edu-sig] Finishing touches: Python web pages In-Reply-To: <3.0.3.32.20000215140856.0072d1fc@pop.teleport.com> Message-ID: <3.0.3.32.20000217004003.0078a9c0@pop.teleport.com> I've decided to limit it to three instead of four sections -- talking about this evolving piece showing Python in a math curriculum context: http://www.inetarena.com/~pdx4d/ocn/numeracy0.html http://www.inetarena.com/~pdx4d/ocn/numeracy1.html http://www.inetarena.com/~pdx4d/ocn/numeracy2.html Enjoying the new IDLE by the way. Thank you Guido! Makes Python all the more teachable, to have those syntax tool tips, other goodies. I noticed while doing the above web pages that it makes a lot of sense to color-code Python source and even shell window stuff the way IDLE does -- really adds to readability -- except here I'm between

 tags in HTML.

I invite others doing code snippets on the web to 
do the same -- maybe you do already (URLs?).  And 
maybe someone has already written a Python module 
that parses .py files into HTML with  
tags added, to mimic IDLE-style color coding?  Or
does the new IDLE have a "Save as HTML" option that
I missed ?  Certainly would make code-sharing
via web pages an easier part of our routines, no?

These web pages clearly exhibit what I was talking
about in my earlier posts re how we might be using
Python today, with no further enhancements, and in
a non-CS context.  The math stuff I'm doing is K-12,
not anything super advanced.  So we cover it anyway,
in the average workaday classroom, mostly with 
calculators as the "high technology" of choice these 
days (sad).

My approach in no way needs to be seen as rain on anyone 
else's parade.  Many other ideas for using Python (or
other languages) to promote the goals of CP4E have been 
floated here, and I'm looking forward to learning more 
about them as time goes on.

In the meantime, any feedback is welcome regarding
what I've exhibited so far.  Those of you promoting
Python in whatever walks of life, feel free to show
and/or link to my materials as evidence of CP4E's 
doability.  

I'll certainly be checking the edu-sig archives from 
time to time, even if I soon become less active as a 
poster.  I'm feeling a sense of completion here (is my 
work done?) and the need to tackle something new.

Kirby




From ajs@ix.netcom.com  Fri Feb 18 16:02:33 2000
From: ajs@ix.netcom.com (Arthur Siegel)
Date: Fri, 18 Feb 2000 11:02:33 -0500
Subject: [Edu-sig] Finishing touches: Python web pages
References: <3.0.3.32.20000217004003.0078a9c0@pop.teleport.com>
Message-ID: <001101bf7a29$92837600$6ee06dd1@eiconyc>

I am anxious to share with the EDU-SIG a "dynamic geometry" application I
have developed (am developing) in Python.

I believe if to be quite on point to the foucs of the SIG.

It depends upon PyOpenGL,  and David Ascher's gltt extension (for true type
text under OpenGL), a customized (deprecated) version of IDLE, uses Pynche
and of course Tk.

As a standalone app (including all necessary Python dll's and libs) it runs
about 1.5meg zipped.

I run it under WIN98 and have not tried it cross platform.

I have no web presence - and am looking for suggestions on getting out to
the EDU-SIG.





From pdx4d@teleport.com  Fri Feb 18 16:55:28 2000
From: pdx4d@teleport.com (Kirby Urner)
Date: Fri, 18 Feb 2000 08:55:28 -0800
Subject: [Edu-sig] Numeracy + Computer Literacy: more upgrades
In-Reply-To: <001101bf7a29$92837600$6ee06dd1@eiconyc>
References: <3.0.3.32.20000217004003.0078a9c0@pop.teleport.com>
Message-ID: <3.0.3.32.20000218085528.0077c15c@pop.teleport.com>

I realized my 3rd section on even/odd, prime/composite
numbers was using way more inefficient Python than 
necessary.

My isprime(n) function was invoking get2max(n), which 
lists all primes up to and including n.  Not required,
as we already see in sieve(n) -- just check prime divisors 
up to the 2nd root of n, and you'll know if you're dealing
with a prime.  And you don't even have to go that far
-- we're done the moment any prime so far divides evenly 
(the primes list is at the module level, and so persists 
between function calls).

So isprime(n) takes advantage of this, and computes _only_ 
the minimal number of new primes necessary, if any, to 
reach a verdict on n's primehood.

We're talking _serious_ improvement in speed here.  Used
to be that pascalpack(26) was about all I had patience 
for (checks Pascal's Triangle for primes to row 26). 
I'd go for coffee.  Now even pascalpack(64) runs very 
quickly (seconds).  Sheesh.  (Pascal's Triangle actually
contains precious few primes, and these are relatively 
low numbers in the next to first/last columns, so pushing
get2max to find all primes up to those _huge_ interior
numbers -- which all fail quickly in the new isprime() 
-- was maddness, just _maddness_ :-D).[1]

Also fun: I was able to come up with a recursive function 
for finding the prime factors of a number:

def getfactors(n):
   # return list containing prime factors of a number
   if isprime(n) or n==1: return [n]
   else: 
       for i in primes:
           if n%i == 0: # no remainder
               n = n/i
               return [i] + getfactors(n)

Usage:

>>> primes.getfactors(28)
[2, 2, 7]
>>> primes.getfactors(400562313)
[3, 17, 19, 479, 863]
>>> 3*17*19*479*863
400562313

Short and sweet!

Probably old hat for you Schemers out there, who do just about 
everything imaginable using recursion.  But for me, this was 
a breakthrough.

So, yes, I've had to modify 

  http://www.inetarena.com/~pdx4d/ocn/numeracy2.html 

to reflect these improvements, and upload the improved 
source code.

Kirby

[1] what I'd like to do next is upgrade that page to 
take into account more of what Jim Nugent is studying:
Pascal's Triangle with +1 or -1 added to the terms --
which gives you lots of primes (except he's using 
Pascal's Tetrahedron):

http://www.twne.com/jnugent/math/Article2.htm




From pdx4d@teleport.com  Fri Feb 18 17:51:26 2000
From: pdx4d@teleport.com (Kirby Urner)
Date: Fri, 18 Feb 2000 09:51:26 -0800
Subject: [Edu-sig] "dynamic geometry" application
In-Reply-To: <001101bf7a29$92837600$6ee06dd1@eiconyc>
References: <3.0.3.32.20000217004003.0078a9c0@pop.teleport.com>
Message-ID: <3.0.3.32.20000218095126.03d5fe14@pop.teleport.com>

At 11:02 AM 02/18/2000 -0500, Arthur Siegel wrote:
>I am anxious to share with the EDU-SIG a "dynamic geometry" application I
>have developed (am developing) in Python.
>
>I believe if to be quite on point to the foucs of the SIG.

Could you write more about it?  What does it do?  Short of 
loading a lot of software, I'd like to get a sense of what 
you've been working on.

A few screen shots with URLs might be nice (you don't have
to do a whole website just to get JPEGs stored out there 
somewhere).

Kirby



From fig@oreilly.com  Fri Feb 18 18:27:26 2000
From: fig@oreilly.com (Stephen R. Figgins)
Date: Fri, 18 Feb 2000 10:27:26 -0800
Subject: [Edu-sig] Harmonica and CP4E
Message-ID: <200002181827.KAA16695@rock.west.ora.com>

I was describing my experience learning to play harmonica to a friend
this morning.  I was comparing a couple of books one an older book on
Ron 'n Blues Harmonica by Jon Gindick, and also the Mel Bay book You
Can Teach Yourself Harmonica. 

I started with the Mel Bay book, but there was a lot of focus on what
the notes were and how to hold you tounge.  I was finding it very
challenging.  I switched to Gindick's book.  He started out by telling
a story about when Adam and Eve first learned music, and continued
with stores of Stone, a caveman harmonica player.  The stories were
silly, but the writing was extremely encouraging.  He was covering
some advanced theory stuff on I-IV-V chord progressions and how to
play harmony with them.  He explained cross-harp, straight-harp and
slant harp methods, how to progress through a set of notes to
improvise sounds.  How to bend the three hole.  How to pucker out a
single note.

The topics were advanced, but the approach simple and inspiring, fun
to learn.  Glindick starts you out with three simple chords and four
basic harmonizing notes, and gets you experimenting with rhythms,
length of notes, basic riffs.  It has been a blast.  Can't say I am
very good yet, but about a day of the Glindick book has taken me
further along than about a week of struggling with the Mel Bay book.

The friend with whom I was describing this pointed out that
intermediate and advanced players tend to forget the passion part that
got them into it in the first place.  They think about all the things
that are important to know, and when teaching have a tendency to focus
on those things.  He suggested this was true of any art.  It's a
tendency toward drill and structure.  We agreed that this was probably
the most damaging thing you can do to the young artist.  You kill
their inspiration by trying to teach them all the fundamentals.  If
instead you give them a lot of slack, they have more room for play.
You increase the chance that they might make a mistake, but that opens
them up to new questions, new opportunities for learning.  

I was struck by how similar Glindick's approach and the Wilderness
Awareness School's approach were.  Inspiration and storytelling,
encouragement, a sense of play.  They build excitement while teaching.
And the voice used in the instruction is not that of the reserved
teacher, but that of the involved mentor.  They sound like someone on
the inside, passionate about your success, friendly, accessable.

Something to consider when teaching CP4E.

Stephen R. Figgins
fig@oreilly.com




From fig@oreilly.com  Fri Feb 18 19:03:20 2000
From: fig@oreilly.com (Stephen R. Figgins)
Date: Fri, 18 Feb 2000 11:03:20 -0800
Subject: [Edu-sig] Harmonica and CP4E
In-Reply-To: Your message of "Fri, 18 Feb 2000 10:27:26 PST."
 <200002181827.KAA16695@rock.west.ora.com>
References: <200002181827.KAA16695@rock.west.ora.com>
Message-ID: <200002181903.LAA19457@rock.west.ora.com>

>Ron 'n Blues Harmonica by Jon Gindick

Hey!  I invented a new form of music.  Must have named it after my
dad, Ron.

That was supposed to be Rock 'n Blues.  

Stephen


From ajs@ix.netcom.com  Fri Feb 18 19:06:14 2000
From: ajs@ix.netcom.com (Arthur Siegel)
Date: Fri, 18 Feb 2000 14:06:14 -0500
Subject: [Edu-sig] "dynamic geometry" application
References: <3.0.3.32.20000217004003.0078a9c0@pop.teleport.com> <3.0.3.32.20000218095126.03d5fe14@pop.teleport.com>
Message-ID: <001101bf7a43$3b753dc0$2f80b8cd@eiconyc>

It allows one to create relationships in 3d space between geometric
"primitives" -points,lines,circles, spheres,etc. - by way of  simple Python
scripts. Points on the initial figure created can then be picked and moved,
but all defined relationships follow. It's more sophisticated functions -
the uses of arrays of points and lines for example, can be used to explore
concepts of Projective Geometry in 3d space.

The coding is pretty straight-forward.

Educationally, I think it would be a great way of making concrete the
relationship of synthetic and analytic geometries, while exploring
programming concepts at the same time.

It can also be seen as its own kind of "drawing" tool, simply to explore and
enjoy the aesthetics of geometric relationships in 3d space.

There are lots of tools for visualizing 3d constructions, and a few tools
for drawing dynamic geometric constructions - but I am not aware of a simple
tool that combines the real-time dynamics, and the preservation of
relationships in 3d space defined in straight-forward and traditional
geometric terms.

I am neither an advanced programmer nor a sophisticated mathematician.  But
I do believe I may have stumbled into a quite good combination
of form and function by applying Python to this effort.  I suspect it would
not be accomplishable other than by Python - certainly not in a
straightforward, simple and transparent way.

Which is why I am hoping it will find some interest here.




----- Original Message -----
From: "Kirby Urner" 
To: 
Cc: 
Sent: Friday, February 18, 2000 12:51 PM
Subject: [Edu-sig] "dynamic geometry" application


> Could you write more about it?  What does it do?  Short of
> loading a lot of software, I'd like to get a sense of what
> you've been working on.
>
> A few screen shots with URLs might be nice (you don't have
> to do a whole website just to get JPEGs stored out there
> somewhere).
>
> Kirby
>
>
> _______________________________________________
> Edu-sig mailing list
> Edu-sig@python.org
> http://www.python.org/mailman/listinfo/edu-sig



From mike_miller@acm.org  Sun Feb 20 05:04:31 2000
From: mike_miller@acm.org (Michael Miller)
Date: Sat, 19 Feb 2000 23:04:31 -0600
Subject: [Edu-sig] My experience teaching Python
Message-ID: <38AF75DE.A8D06DCD@acm.org>

I recently designed and taught a short introductory course in computer
programming for a  community college in eastern Iowa, US. This course is
intended to give students an introduction to the college's accelerated
programming sequence of courses. The students in these classes are
typically nontraditional, many looking for a career, and often have full
time jobs outside of class.

We chose Python as the language for this first course for reasons that
should be familiar to readers of this list. We gave each student a copy
of the Lutz and Ascher Learning Python book.

The result was mixed, but still a success considering that this was the
very first time we had taught the class this way. About half the class
would have been at sea the whole course if we had used C or C++; using
Python, at the end everyone could write at least a simple program and
see it work in IDLE or the interpreter.

We will make these changes in the next offering of this class:

- some how-to handouts on using IDLE
- a book in addition to Learning Python; along the lines of "Thinking
Like a Computer Scientist" or "Simple Program Design."

-=- Mike Miller





Return-Path: 
Delivered-To: edu-sig@python.org
Received: from smtp7.atl.mindspring.net (smtp7.atl.mindspring.net [207.69.128.51])
	by dinsdale.python.org (Postfix) with ESMTP id 4A4001CFB1
	for ; Mon, 21 Feb 2000 11:02:22 -0500 (EST)
Received: from oemcomputer (nyc-ny68-45.ix.netcom.com [209.109.225.237])
	by smtp7.atl.mindspring.net (8.9.3/8.8.5) with SMTP id WAA04866;
	Sat, 19 Feb 2000 22:42:38 -0500 (EST)
Message-ID: <001f01bf7b54$84b53280$ede16dd1@oemcomputer>
From: "Arthur Siegel" 
To: "Kirby Urner" 
Cc: 
References: <3.0.3.32.20000217004003.0078a9c0@pop.teleport.com><3.0.3.32.20000218095126.03d5fe14@pop.teleport.com> <3.0.3.32.20000218132024.0396f7f4@pop.teleport.com>
Subject: Re: [Edu-sig] "dynamic geometry" application
Date: Sat, 19 Feb 2000 22:42:30 -0500
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_NextPart_000_001C_01BF7B2A.9AA1C880"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2615.200
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200
Sender: edu-sig-admin@python.org
Errors-To: edu-sig-admin@python.org
X-BeenThere: edu-sig@python.org
X-Mailman-Version: 1.2 (beta 1)
Precedence: bulk
List-Id: Python in education 

This is a multi-part message in MIME format.

------=_NextPart_000_001C_01BF7B2A.9AA1C880
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit


----- Original Message -----
From: Kirby Urner 
To: Arthur Siegel 
Cc: 
Sent: Friday, February 18, 2000 4:20 PM
Subject: Re: [Edu-sig] "dynamic geometry" application


> At this point in time, I'd be most interested in seeing
> screen shots though, since I don't feel ready to digest
> complicated source code.  I'd like to develop an under-
> standing the gist of your technique (without trying to
> comprehend an entire application).  If you want to share
> any "cave painting" snippets that give me a feel for your
> strategy, I bet others besides me would be interested.

I have attached a few output pictures from PyGeo and the full Python scripts
that created them. The scripts run from an IDE for the app which is a scaled
down and customized verisonof IDLE.

I am by the way quite interested in what you are doing with scripting
to PovRay, though I haven't had a chance yet to explore it in any depth.

It was PovRay that ignited my initerst in 3d graphics originally,
and I had hoped to get around to building an interface between PovRay and
my PyGeo app.  Looks like you may have done a lot of it for me already.

I member of the Edu-sig group has offered me space to make the app available
for download.  Hopefully, it will be up in a few days.




------=_NextPart_000_001C_01BF7B2A.9AA1C880
Content-Type: text/plain;
	name="quadric.py"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="quadric.py"

p1=FreePosition(-30.0, -22.0, 3.0,name='p1',color=BLACK)
p2=FreePosition(-20,0.0,27.0,name='p2',color=BLACK)
p3=FreePosition(24.0,22.0,-2.0,name='p3',color=BLACK)
p4=FreePosition(4.,20.,11.,name='p4',color=BLACK)
p5=FreePosition(0.,27.0,10.,name='p5',color=BLACK)
p6=FreePosition(9.,-17.0,-6.,name='p5',color=BLACK)
p7=FreePosition(10.,1.0,-9.,name='p5',color=BLACK)
p8=FreePosition(16.,17.0,10.,name='p5',color=BLACK)
p1p2=Line(p1,p2,show=0)
p3p4=Line(p3,p4,show=0)
p5p6=Line(p5,p6,show=0)
p7p8=Line(p7,p8,show=0)
pp1p2=PointPencil(p1p2,density=40)
pp3p4=PointPencil(p3p4,density=40)
pp5p6=PointPencil(p5p6,density=40)
pp7p8=PointPencil(p7p8,density=40)
QuadricArray(p1p2,p3p4,pp5p6,color=(.9,.9,.9))
Transversal(p1p2,p3p4,p5,color=GREEN)
Transversal(p1p2,p3p4,p6,color=GREEN)
QuadricArray(p3p4,p1p2,pp7p8,color=BLUE)
QuadricArray(p5p6,p3p4,pp7p8,color=RED)
slate(axes=0,scale=30,width=640,height=480,fontsize=10)


------=_NextPart_000_001C_01BF7B2A.9AA1C880
Content-Type: text/plain;
	name="design.py"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="design.py"

A=3DFreePosition(-24.0,-12.,1.0,name=3D'A',color=3DRED)
C=3DFreePosition(31,-7.0,-12.0,name=3D'C',color=3DRED)
AC=3DLine(A,C,name=3D'AC',color=3DRED)
B=3DLineSlider(AC,(-7.,-14.0,-6.0),name=3D'B',color=3DORANGE)
Cp=3DFreePosition(11.0,7.0,7.0,name=3D"C'",color=3DRED)
Ap=3DFreePosition(-16.5,-3.5,16.,name=3D"A'",color=3DRED)
ApCp=3DLine(Ap,Cp,name=3D"A'C'",color=3DRED)
Bp=3DLineSlider(ApCp,(30.0,13.0,2.0),name=3D"B'",color=3DORANGE)
pmap=3DPointMap(AC,ApCp,B,Bp,density=3D60,color=3DORANGE,name=3D'pmap')
p1=3DFreePosition(-30.0,-25.,-17,name=3D'p1',color=3DGREEN)
p2=3DFreePosition(31,-17.0,9.0,name=3D'p2',color=3DGREEN)
p3=3DFreePosition(17,-11.0,-14.0,name=3D'p3',color=3DGREEN)
ccirc=3DCircumCircle(p1,p2,p3,style=3DFILL,precision=3D100)
tri=3DTriangle(A,C,Ap)
tri1=3DTriangle(A,Cp,Ap,color=3DRED)
plane=3DPlane(p1,p2,p3,name=3D'plane',color=3DGREEN,scale=3D10,alpha=3D.3=
)
FreePosition(-35,30.0,-15.0,name=3D'O',color=3DCYAN)
bz1=3DBezierCurve((p1,p2,p3,A,C),color=3DWHITE)
bz2=3DBezierCurve((A,C,p3,p1,p2),color=3DGREEN)
bz3=3DBezierCurve((p3,C,p3,A,p1),color=3DBLUE)
proj1=3DProjection((pmap,AC,ApCp,bz1,ccirc),plane,O,name=3D'proj1',color=3D=
YELLOW)
lw1=3DFreePosition(-35.0,-35.,0.0,name=3D'lw1',color=3DGREEN)
lw2=3DFreePosition(-35.0,0.0,35.0,name=3D'lw2',color=3DGREEN)
lw3=3DFreePosition(18.0,26.0,0.0,name=3D'lw3',color=3DGREEN)
lw=3DPlane(lw1,lw2,lw3,name=3D'lw',color=3D(0.48627,0.71765,1.0),scale=3D=
20)
orig=3DFreePosition()
proj2=3DProjection((proj1,),lw,orig,color=3DWHITE)
proj3=3DProjection((proj2,),plane,O,color=3DGREEN)
Sphere(O,A,style=3DLINES,color=3D(1.0,0.2549,0.15294))
slate(axes=3D'no',scale=3D50,width=3D800,height=3D600,bgcolor=3D[.9,.9,1.=
])

------=_NextPart_000_001C_01BF7B2A.9AA1C880
Content-Type: image/jpeg;
	name="pascal3d.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="pascal3d.jpg"

/9j/4AAQSkZJRgABAQEASABIAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAIBgYHBgUI
BwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy
/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIy/8AAEQgB4AJYAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgME
BQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEV
UtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3
eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh
4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALUR
AAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDTh
JfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJ
ipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz
9PX29/j5+v/aAAwDAQACEQMRAD8A9PooorrJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACsjxFr0Xh/T452ge4ubiZLW0t0IUzTP91Nx4UcHLHoAepwDr1zfjPRbz
V9PsJrBUkutMv4dQjt3baLgx5/d7v4SQeCQRnGfUJ7AT6Z4gluNeudC1KzSz1KKEXUaxTGaOaEnb
vVtqkENlSrAdiMjpu1yumaZqF745ufEt5Zvp8KWA0+C2ldHkkG/zGkbYxVRn5QMknBJxwD1VCAKK
KKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRJcRSPsVsn+dSMAVIPQjmvCovHmo6P4wv7sF7
yzaZkWFpG2hA+AU9DjPbvXp5dls8cp+z3ivvOHFVMTCpD2SXL9q++62+V31PdqKo6Rq9lrmmxX9h
KJIJB+KnupHYir1edOEoScZKzR3bhRRRUgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBi+LdRXS
/DF9ctEZvk2eWCQWB4bpzwu48dACa8sl8Nwr4d8HSXMQVb5pLeeU9jMSYm6/w53fhXQ/FrUCYbHS
YZtsz7ptgXJckiNR7Ah5P++a2PHmkKnw7eC3DFtNWKSEjqNmBn/vnNfS5fJ4WjR1s6sn91uVf+lX
/wCGMZ+835HF+HptV8MS3l3bRvLLYSeVrGn5yXTtOn4dfpno3Hrumanaaxp0N9YzCWCUZVh29QR2
I9K4nxBM2nz6R4+sIj5UkMaahEv8cDgEN7kZH5L2FF3BJ4NvB4i0JDceHrwCS9s4uRGDz5sY7DHb
+mNs42Eccoztab282t4Pz6xfVNJhF8unQ9BoqvY31rqVlDeWcyzW8y7kkXoR/Q+3arFfOyi4uz0a
NgooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFVNUvk0vSbu/kAK28LykE4zgZx+PSnGLlJRW7A8qvpX
8Q/F6CIKjQQ3qxozYJX7OpZ19QCzH2PHpXrF/aJqGnXVlIcJcRPExHYMCD/OvJ/hjp7yeLHuriNj
LDYiWR2PWSZtyt+MZr2CvbzuSpVqdGm/gil8+/3WM6eqbfU4z4fPHqvgCOwvE8wQmWzuEbuMn5f+
+WAqLwZPLo+oXvg3UW3m2zLZO4/11ux6e+M/zH8NP8Jn+z/GninR2f5WnW9iXtiQZb8sqPwqbx3p
dwbW28QaYManpLGZcf8ALSL+ND6jGePTI706jjLE1KEtI1bSXk2rp/jZ+XoJfCn2M28trr4eajJq
WnxvP4cuHzd2i8m2Y/xp7f8A6j2I7qzvLfULOK7tJlmt5V3I6ngiq+l6ja6/okF9CA9tdR5KMM+z
Kfocg/SuLnguvhxqLXlokk/hi5kzPAPmazY/xL/s/wD6jzgnBxeM/dz0rR0/xW6P+8unfbcr4dVs
eh0VFa3UF7axXNtKssEqhkdDkMDUteS007MsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK4f4p6glt4XjsTKI
zf3CRsxBO2NTuZuPTA/Ou4ryP4i6tI/jGGKBBKum2xJSSNGQu4LOGDcYMSn3z0r1clo+1xkX/Lr9
2342IqO0Tf8AhlArQ61qKsrCe98lCqlVMcYwuAScDDYxk4x1Nd7XNeALE2HgbSo2ADSRecSO+8lh
n8CK6WsMyqe0xdRra9vktF+Q4K0UcVqhOmfFTRrzKpFqVpJaOfVl+YfiSUFdrXF/ElGt9H0/WY4w
0mmX8U5P+znBH4nbXZqwZQykFSMgjoaeK9/D0avk4v8A7df+TQR0bRwmi58HeM5tBf5dK1Qm4sGP
3Y5P4o8/l/473Nd1JHHNE8UqK8bqVZGGQwPUEdxWD4x0Btf0No7c7NQt2E9nIDgrIvIGe2en5HtU
nhLX18ReH4bxhsuUzFcx4xslXrx78H8arE/7RSWKXxLSXr0fzX4rzFHR8pzTpcfDjUDLH5k/hW6k
+dOWaxc9x3KH/PON3fRSxzwpNC6yRSKGR1OQwPIIPpSTwRXVvJBPGskMilXRxkMD1BrgY5bn4cag
tvOZJ/C1zJ+6kOWaycnofVT/APX653V/v8f+nq/8nX/yX/pXrufD6HoVFNjkSaJJYnV43AZWU5DA
9CD3FOrzCwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKAEJCgkkADkk185anftrep306+fvv7gyQhZcqSX2Rqy46hPMA/
3vTr7X471P8AsrwZqUykeZLH5EY7kv8ALx7gEn8K8n8I2P2nxZpVsroE+2+Y6pnafs6fK/8AwIlv
xzX1fD8FRoVcVJen/bqu/wBPuMKurUT3a2t47S1htohiOFFjQegAwKloor5Rtt3ZuZPijTv7V8L6
nZBdzyW7bFz1cDK/+PAVX8FX39o+DNJuM5P2dYyfUp8h/Va3q4n4d4shruh/N/xL9QfZn/nm33f/
AEEn8a76fv4Kcf5Wn8no/wAeUl6SR21cHf8A/FG+OY9THyaRrTCK6/uxT/wuewB5/wDHj6V3lZ2u
6Nb6/otzptzwky4D4yUbsw+hrPB140p2qfBLR+nf1T1XoEldaGjUN3aQX1pLa3USywSqVdGGQwrm
vAusT3mmzaTqRxqulv8AZ5wTkuo+6/vkDGe+M966us69GeHquDeq6/k167oad1c89tri6+HOopY3
ryT+Gbl8W9w3JtGP8Le3/wCsdxXoCOsiK6MGRhlWU5BHqKivbK21Gyls7yFZreVdrxsOCP8APeuG
srq6+H2ox6XqUrz+Hbh9tnevybZj/wAs3PYe/wCPqB2ySx8eZfxVuv5vNf3u667rUn4fQ9AopAQQ
CDkHoRS15ZYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU
UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR
RQAUUUUAFFFFABRRRQAUUUUAebfFLU9t1penq6gQ79QkDLkZQHywfYtuH4iqPw109h4k3MqMthpc
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
ajJ/qfD12B2M88KD9GY/pWhRRz01tD72/wBLC1M37b4ik+7YabCPV7p3P5BB/Ok8vxDL/rNUsoV9
ILMlv++mcj/x2tOin7a3wxS+V/zuFjK/sWSX/j71jVLjPUCcQj/yEFNLH4c0aNxIdOglkHSSdfNY
f8CbJrUoo+sVdlK3pp+QWQ1EWNAiKFUdABgCnUUViMK5Lx/o13rNjoyW2n/b0ttWgubm3yg3wqG3
DDkKc5xgnnNdbRSauBmaFb29tYultof9jIZCTb7IV3HA+fETMvtyc8fStOiigAooopgFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGLqWgf2j4m0P
WftPl/2X9o/c+XnzfNQL1zxjGehz7VtUUUgCiiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=

------=_NextPart_000_001C_01BF7B2A.9AA1C880
Content-Type: text/plain;
	name="pascal3d.py"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="pascal3d.py"

p1=FreePosition(9,-15,4,color=CYAN,fontcolor=GREEN)
cp1=FreePosition(-10,-20.,13.,name='A',color=CYAN)
p2=FreePosition(1,2.0,-22.0,color=CYAN)
circle=Circle(p1,cp1,p2,alpha=1,style=OUTLINE,color=BLUE,precision=50)
circle1=Circle(p1,cp1,p2,style=FILL,color=WHITE,alpha=.3,linewidth=2)
cp2=CircumPoint(circle,angle=20,name='B',color=RED)
cp3=CircumPoint(circle,angle=60,name='C',color=RED)
cp4=CircumPoint(circle,angle=190,name='D',color=RED)
cp5=CircumPoint(circle,angle=260,name='E',color=RED)
cp6=CircleSlider(circle,(8,-28,22),name='F',color=BLUE)
P=FreePosition(-2.0,29.0,12.0,name='O',color=CYAN,fontv=GeoTOP)
l1=Line(P,cp1,color=BLUE)
l2=Line(P,cp2,color=BLUE)
l3=Line(P,cp3,color=BLUE)
l4=Line(P,cp4,color=BLUE)
l5=Line(P,cp5,color=BLUE)
l6=Line(P,cp6,color=BLUE)
pl1=Line(cp2,cp4,name='pl1',color=BLACK,linewidth=2)
pl2=Line(cp1,cp5,name='pl2',color=BLACK,linewidth=2)
pl3=Line(cp2,cp6,name='pl3',color=BLACK,linewidth=2)
pl4=Line(cp3,cp5,name='pl4',color=BLACK,linewidth=2)
pl5=Line(cp3,cp6,name='pl5',color=BLACK,linewidth=2)
pl6=Line(cp1,cp4,name='pl6',color=BLACK,linewidth=2)
pip1=LineIntersect(pl1,pl4,color=GREEN)
pip2=LineIntersect(pl6,pl5,color=GREEN)
pip3=LineIntersect(pl2,pl3,color=GREEN)
p1a=FreePosition(22.0,14.,-9.0,color=PURPLE)
p2a=FreePosition(0.,7.0,6.0,color=PURPLE)
p3a=FreePosition(14.0,6.0,3.0,color=PURPLE)
planea=Plane(p1a,p2a,p3a,show=0)
cp1a=PlaneIntersect(planea,l1,name="A'",color=BLUE)
cp2a=PlaneIntersect(planea,l2,name="B'",color=BLUE)
cp3a=PlaneIntersect(planea,l3,name="C'",color=BLUE)
cp4a=PlaneIntersect(planea,l4,name="D'",color=BLUE)
cp5a=PlaneIntersect(planea,l5,name="E'",color=BLUE)
cp6a=PlaneIntersect(planea,l6,name="F'",color=BLUE)
pl1a=Line(cp2a,cp4a,color=DARKGRAY)
pl2a=Line(cp1a,cp5a,color=DARKGRAY)
pl3a=Line(cp2a,cp6a,color=DARKGRAY)
pl4a=Line(cp3a,cp5a,color=DARKGRAY)
pl5a=Line(cp3a,cp6a,color=DARKGRAY)
pl6a=Line(cp1a,cp4a,color=DARKGRAY)
ip1=LineIntersect(pl1a,pl4a,color=GREEN)
ip2=LineIntersect(pl6a,pl5a,color=GREEN)
ip3=LineIntersect(pl2a,pl3a,color=GREEN)
plinea1=Line(ip1,ip3,color=RED,linewidth=5)
plinea2=Line(ip2,ip3,color=RED,linewidth=5)
plinea3=Line(ip1,ip2,color=RED,linewidth=5)
plinea4=Line(pip1,pip3,color=RED,linewidth=5)
plinea5=Line(pip2,pip3,color=RED,linewidth=5)
plinea6=Line(pip1,pip2,color=RED,linewidth=5)
pcircle=Projection((circle1,circle),planea,P,color=BLACK,alpha=.2)

slate(axes=0,scale=35,bgcolor=[.8,.8,.9],width=600,height=480)


------=_NextPart_000_001C_01BF7B2A.9AA1C880
Content-Type: image/jpeg;
	name="quadric.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="quadric.jpg"

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
Foc4REQBERAEREAREQH/2Q==

------=_NextPart_000_001C_01BF7B2A.9AA1C880
Content-Type: image/jpeg;
	name="design.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="design.jpg"

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

------=_NextPart_000_001C_01BF7B2A.9AA1C880--



From pdx4d@teleport.com  Fri Feb 18 21:20:24 2000
From: pdx4d@teleport.com (Kirby Urner)
Date: Fri, 18 Feb 2000 13:20:24 -0800
Subject: [Edu-sig] "dynamic geometry" application
In-Reply-To: <001101bf7a43$3b753dc0$2f80b8cd@eiconyc>
References: <3.0.3.32.20000217004003.0078a9c0@pop.teleport.com>
 <3.0.3.32.20000218095126.03d5fe14@pop.teleport.com>
Message-ID: <3.0.3.32.20000218132024.0396f7f4@pop.teleport.com>

At 02:06 PM 02/18/2000 -0500, Arthur Siegel wrote:
>It allows one to create relationships in 3d space between geometric
>"primitives" -points,lines,circles, spheres,etc. - by way of  simple Python
>scripts. Points on the initial figure created can then be picked and moved,
>but all defined relationships follow. It's more sophisticated functions -
>the uses of arrays of points and lines for example, can be used to explore
>concepts of Projective Geometry in 3d space.

Sounds very interesting Arthur.

My approach has been to keep things simple in Python by 
having it write scripts intelligible to other programs 
which already know tons about 3D graphics. 

Students write simple Python commands and get .wrl or 
.pov files out the back, which then go to a VRML viewer 
(usually a web browser plug-in) or to POV-ray, a free, 
full-featured ray tracing engine.  This approach 
typifies what Python is good for:  acting as a "glue
language" in collaboration with more specialized 
apps.

What I give up, by going this route, is any trully "dynamic"
interface, i.e. students can't just grab stuff with a mouse
and twirl it in real time, or add edges/vertices by 
simply pointing and clicking (as they can in STRUCK, 
freeware written by my colleague, Gerald de Jong, in 
Java).

I presume because of your OpenGL add-in etc., that you're
somehow making Python do graphical updates in real time,
in response to user-generated events.  Personally, I don't 
know Tk well enough to know how this is done.  Seeing 
your program would probably teach me a lot.  

At this point in time, I'd be most interested in seeing 
screen shots though, since I don't feel ready to digest 
complicated source code.  I'd like to develop an under-
standing the gist of your technique (without trying to 
comprehend an entire application).  If you want to share 
any "cave painting" snippets that give me a feel for your 
strategy, I bet others besides me would be interested.

Mostly, what I'm wondering is whether students with a
modest grasp of Python would be able to abstract generic 
strategies and techniques from your tools -- what I'm trying 
to impart at my Oregon Curriculum Network, where all my 
source code is freely available and dissected in some 
detail for the benefit of Oregonians (and other lurkers).

Kirby
Curriculum writer
Oregon Curriculum Network




From pdx4d@teleport.com  Fri Feb 18 23:37:30 2000
From: pdx4d@teleport.com (Kirby Urner)
Date: Fri, 18 Feb 2000 15:37:30 -0800
Subject: [Edu-sig] "dynamic geometry" application
Message-ID: <3.0.3.32.20000218153730.0334e65c@pop.teleport.com>

At 02:06 PM 02/18/2000 -0500, Arthur Siegel wrote:
>It allows one to create relationships in 3d space between geometric
>"primitives" -points,lines,circles, spheres,etc. - by way of  simple Python
>scripts. Points on the initial figure created can then be picked and moved,
>but all defined relationships follow. It's more sophisticated functions -
>the uses of arrays of points and lines for example, can be used to explore
>concepts of Projective Geometry in 3d space.

Sounds very interesting Arthur.

My approach has been to keep things simple in Python by 
having it write scripts intelligible to other programs 
which already know tons about 3D graphics. 

Students write simple Python commands and get .wrl or 
.pov files out the back, which then go to a VRML viewer 
(usually a web browser plug-in) or to POV-ray, a free, 
full-featured ray tracing engine.  This approach 
typifies what Python is good for:  acting as a "glue
language" in collaboration with more specialized 
apps.

What I give up, by going this route, is any trully "dynamic"
interface, i.e. students can't just grab stuff with a mouse
and twirl it in real time, or add edges/vertices by 
simply pointing and clicking (as they can in STRUCK, 
freeware written by my colleague, Gerald de Jong, in 
Java).

I presume because of your OpenGL add-in etc., that you're
somehow making Python do graphical updates in real time,
in response to user-generated events.  Personally, I don't 
know Tk well enough to know how this is done.  Seeing 
your program would probably teach me a lot.  

At this point in time, I'd be most interested in seeing 
screen shots though, since I don't feel ready to digest 
complicated source code.  I'd like to develop an under-
standing the gist of your technique (without trying to 
comprehend an entire application).  If you want to share 
any "cave painting" snippets that give me a feel for your 
strategy, I bet others besides me would be interested.

Mostly, what I'm wondering is whether students with a
modest grasp of Python would be able to abstract generic 
strategies and techniques from your tools -- what I'm trying 
to impart at my Oregon Curriculum Network, where all my 
source code is freely available and dissected in some 
detail for the benefit of Oregonians (and other lurkers).

Kirby
Curriculum writer
Oregon Curriculum Network




From ajs@ix.netcom.com  Sun Feb 20 14:48:26 2000
From: ajs@ix.netcom.com (Arthur Siegel)
Date: Sun, 20 Feb 2000 09:48:26 -0500
Subject: [Edu-sig] "dynamic geometry" application
References: <3.0.3.32.20000217004003.0078a9c0@pop.teleport.com><3.0.3.32.20000218095126.03d5fe14@pop.teleport.com><3.0.3.32.20000218132024.0396f7f4@pop.teleport.com> <3.0.3.32.20000219201515.00700200@pop.teleport.com>
Message-ID: <001a01bf7bb1$8c76ffa0$dae16dd1@oemcomputer>

> http://www.inetarena.com/~pdx4d/ocn/oop.html is a seven chapter
> web publication which details my progress from Xbase, to Java,
> to Python.

I will definitely check it out.

> My approach is not to build applications, but simply to use IDLE
> as is, and Povray as is, with a few simple modules.  The idea
> is to have students understand all the guts -- nothing is hidden
> "under the hood".  Nothing up the sleaves...
>
> This isn't to say I'm not interested in alternative approaches.
> Just wanted to explain my technique.

To "sell" what I have attempted:

I have tried to layer the complexity in modules.

There is a top level module - PyElements - which contains most of the
simpler analytics on which the app runs. The simplicity of Python syntax
allows the module, I hope, to be transparent, and would allow the student to
follow the connection between graphical output and the analytics running it.

The matrix math is a level below the simpler analytics . It is in fact a
port to Python of the vecmath Java module that is distributed with Java3d.
As such the extensive Java documentation basically works for it, and it
should be accessible to the students looking into the analytics a bit
deeper.

Most of the GUI stuff which would be of programming interest only is
isolated in  separate modules.

> Edu-sig seems moribund.  I sent this last reply to the list as
> well (twice, as I didn't see it echo back the first time).
> The archives doesn't have any more messages in it since yours.
> I wrote to Guido about it, making enquiries.

This does seem like a private conversation.
Too bad. I think we are into some interesting and potentially significant
stuff.
How might we collaborate to generate some excitement??

> Thanks again for the screen shots and the .py modules.
> Gives me a much better sense of your project.  I think
> you're rather too modest saying you're not a Python
> guru.  Clearly you've done a lot with it.

Thanks for your interest and encouragement



From faassen@vet.uu.nl  Tue Feb 22 17:54:10 2000
From: faassen@vet.uu.nl (Martijn Faassen)
Date: Tue, 22 Feb 2000 18:54:10 +0100
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: <38AF75DE.A8D06DCD@acm.org>
References: <38AF75DE.A8D06DCD@acm.org>
Message-ID: <20000222185410.A875@vet.uu.nl>

Michael Miller wrote:
[describes intro computer science class]
> We will make these changes in the next offering of this class:
> 
> - some how-to handouts on using IDLE
> - a book in addition to Learning Python; along the lines of "Thinking
> Like a Computer Scientist" or "Simple Program Design."

I'll take this as an opportunity to discuss my own limited experience
with teaching Python to new programmers.

I've taken a look at Learning Python and it doesn't seem to have the right
structure if you're completely new to programming. My friend bought it 
and hasn't been too much use to her so far, though I expect it probably
will be later on.

I'll describe how I explained things to my friend (her 12 year old daughter
was also present during some sessions). Note that she only just got started
and therefore I can't promise this approach will work. I'll get a chance to
teach a number of other people starting next month, however, so I'll gather
more data then.

I described interactive mode first. Since my friend is moderately familiar
with command line environments this did not present too much of a problem
with her. I described the basic idea of some various types; strings and
integers, floats and longs. I didn't expect her to remember it all right
away, but at least it'd give her an idea of what's possible. I also
briefly mentioned lists.

I also introduced variables and assignments in the interactive mode. I paid 
special attention to the fact that you can basically use any word
(or number of words) as a variable. I also described some built in
functions such as int(), string() and float(). They are always there and
aren't too difficult to explain, so that was useful.

As I'm not much of an interactive mode user myself (though certainly it's
handy at times), I moved on to describe the editing environment. In my
case it was Emacs, which can be horrendously complicated. The basics are
pretty simple tough, and the python-mode is very nice (syntax highlighting
and easy way to run the code in the editor to see immediate results). The
menus under X helped a lot too. 

I showed how you can print stuff, such as the result of expressions.
After that, I introduced boolean expressions (perhaps I should've done
so already in the interactive mode). Then I moved on to 'if' statements, and
block based indentation.  All that was still pretty clear.

'for' loops presented more problems, though! I had quite a bit of difficulty
to explain that the for block gets executed for each element in the sequence,
and that the variable (for variable in foolist) refers to something else
each time in the execution. I need to think on a better way to express
things apparently-tricky thing.

I explained how to write a program that adds all numbers from 1 to 9 (or
any sequence of numbers, really), using the 'for' loop, and range(). This
was also pretty difficult to get across. The concept of an extra variable 'sum' 
that keeps the current sum while doing a loop is not something people hit
on by themselves!

After that I had them change the function to multiply instead of doing
additions (so you'd do factorials). Due to my explanation that you can
use basically any word for a variable, and also focusing on the idea that
you should use descriptive variables, my friend and her daughter automatically
started to change variables like 'sum' to 'product', and not only changed
the + to *. This was a rather nice thing to see, though I hope it wasn't
because they taught the computer actually understands what they call
these variables (I don't think they did think that though). Also tricky was
to change the starting value of '0' to '1' (otherwise the result is '0'), but
they both could figure this out for themselves.

I then turned the factorial program they had produced into a function.
In retrospect, I think I should've used the 'sum' program instead to 
produce a summing function, as it's probably conceptually easier to talk
about. Like in my explanation of the 'why' of looping (you don't want to
type 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9), I paid attention to the 'laziness'
issue: good programmers are lazy (in the right way), and don't want to
do boring stuff like lots of typing, and they definitely don't want to
do the same thing twice. This seemed to work well.

Still, I had some problems in making clear the concept of functions. I
started too difficultly by using the 'factorial' approach; I fell back
to a very simple function soon enough:

def simple():
   pass

I explained the difference between side effect and return value:

# return value
def simple1(a):
   return a

# side effect
def simple2(a):
   print a

# both
def simple3(a):
   print a
   return a

This turned out to be fairly tricky at first. The difference between
things like:

print simple1("hoi") 

and

simple2("hoi")

was not immediately clear. It got especially tricky when we saw:

print simple2("hoi")

The idea that Python returns 'None' when there is no return statement
came as a confusing surprise; I should probably have introduced 'None'
more early, but it's hard to motivate the existence of 'None' to a newbie,
which is an argument against discussing None too early.

The problem with the approach with 'simple' versus that of 'factorial' is
that 'simple' does demonstrate the mechanism of functions, but not the
*why* of it. 'factorial' is much more useful here. I still need to figure
out the right way to introduce the motivation for functions along with the
mechanism for functions without causing confusion on either.

What was useful (again in the lazy programming context) was the concept of
'recipe'. A function does not get executed just by it being there; it is
a recipe which you give to the computer. If you (daughter) give your
mother a cookie recipe that doesn't mean immediately your mom will go
and bake the cookies; you need to ask her to do so first. Unlike a mom,
a computer will always obey (as long as the recipe is right), unfortunately,
a computer is also very stupid so you have to be more detailed. :)

This analogy seemed to work pretty well.

That's about as far as I got this time. As you see you can spend lots of
time with the basics. This is not because the mechanisms of the basics
are generally hard to understand; they picked those up pretty well in 
general, though there were some problems. The problem is more one of
*why* these mechanisms are useful. What you can do with them, and how
you use them to do useful things. That's the real art of programming
(along with the importance of a well readable and maintainable program
structure).

I hope my observations were of any use to you all; I'll post more once I
have some more experience.

And-I-didn't-even-*talk*-about-case-sensitivity-to-them-yet-ly yours,

Martijn
 


From guido@python.org  Tue Feb 22 18:26:16 2000
From: guido@python.org (Guido van Rossum)
Date: Tue, 22 Feb 2000 13:26:16 -0500
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: Your message of "Tue, 22 Feb 2000 18:54:10 +0100."
 <20000222185410.A875@vet.uu.nl>
References: <38AF75DE.A8D06DCD@acm.org>
 <20000222185410.A875@vet.uu.nl>
Message-ID: <200002221826.NAA05379@eric.cnri.reston.va.us>

Great post from the trenches, Martijn!  Keep us informed about your
pupils' progress.  They seem to be the kind of audience that CP4E
wants to cater to: people without particularly strong math skills or
geek quotient.

--Guido van Rossum (home page: http://www.python.org/~guido/)


From pdx4d@teleport.com  Tue Feb 22 18:50:44 2000
From: pdx4d@teleport.com (Kirby Urner)
Date: Tue, 22 Feb 2000 10:50:44 -0800
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: <20000222185410.A875@vet.uu.nl>
References: <38AF75DE.A8D06DCD@acm.org>
 <38AF75DE.A8D06DCD@acm.org>
Message-ID: <3.0.3.32.20000222105044.0076bbf8@pop.teleport.com>

>I've taken a look at Learning Python and it doesn't seem to have the right
>structure if you're completely new to programming. My friend bought it 
>and hasn't been too much use to her so far, though I expect it probably
>will be later on.

I like your approach Michael.  Play in the interactive mode, show how
this can be used to test your understanding of the various operators
(sometimes I call them "toys" -- not in a deprecatory sense at all),
then go right into combining statements into function defs (programs).

This is a great segue from Logo (which many kids learn), which likewise
has the interactive command line, plus the short, atomic procedures.

A few comments:  

*  Those who can use IDLE will probably find it a lot easier than Emacs.  
   The newest IDLE even prompts for correct syntax, plus the stepwise 
   debugger (still rudimentary) gives beginners a fun way to watch simple 
   programs in action.

*  You can do a lot in interactive mode.  I like to show students that
   it's more fun to calculate at the command line than on a TI.  In 
   part because calculators don't have any savvy about alpha operations,
   like 3*"CAT" = "CATCATCAT".  Yet modern mathematics is a lot about
   symbolic manipulation beyond what we do with numbers.

*  Keep in mind that you, as a teacher, can pre-write simple modules 
   which, when loaded, do interesting things at the command line.  
   Then invite students to look at your code.  As another poster here
   mentioned, one way to learn programming is by learning to read 
   programs.  Like with any language, it's sometimes easier to scan
   stuff that's already "grammatically correct" (using your "recognition
   vocabulary") than to construct complete sentences yourself (which 
   requires "recall" -- more challenging than "recog").

If you haven't taken a peak, I invite you to check out my 3 part essay 
integrating learning Python within in a math class context.  The first 
section has really simple function defs, which then build in complexity 
(and move to object oriented) in the later pages:

   http://www.inetarena.com/~pdx4d/ocn/numerarcy0.html
   http://www.inetarena.com/~pdx4d/ocn/numerarcy1.html
   http://www.inetarena.com/~pdx4d/ocn/numerarcy2.html

... a fourth page is in the works.

My approach dovetails with yours, in that I'm focussing on the 
interactive command line at the start.  What's not explicit in these
pages is a lot of nuts and bolts about "types" (int, float, string),
which you get into, nor even data structures (list, tuple, dictionary).

This isn't because I'd want to skip any of this.  But first I want
to get students to "buy in" by seeing Python do a lot of relevant
work.  Then we start dissecting the code, and phasing in the nuts 
and bolts stuff using a more "and by the way" approach.  Start by
showing relevance, then get into the guts of programming.

I also like to stress that there's no "one right way" to implement
an algorithm (although, yes, some are more efficient).  That's
why I take pains to show recursive _and_ non-recursive ways of 
doing the same thing (factorial, for example).  Sometimes what 
you gain through recursion you trade away in decipherability.  
Other times, recursion is pretty elegant, and we hope students 
will appreciate this (especially if some of them are going to be 
CS majors someday, in which case we'll be turning them on to Scheme).

Kirby




From djmitche@cs.uchicago.edu  Tue Feb 22 20:10:05 2000
From: djmitche@cs.uchicago.edu (Dustin James Mitchell)
Date: Tue, 22 Feb 2000 14:10:05 -0600 (CST)
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: <20000222185410.A875@vet.uu.nl>
Message-ID: 

On Tue, 22 Feb 2000, Martijn Faassen wrote:

> 'for' loops presented more problems, though! I had quite a bit of difficulty
> to explain that the for block gets executed for each element in the sequence,
> and that the variable (for variable in foolist) refers to something else
> each time in the execution. I need to think on a better way to express
> things apparently-tricky thing.

I had the same troubles.  Anybody got any brainstorms on this one?

> After that I had them change the function to multiply instead of doing
> additions (so you'd do factorials). Due to my explanation that you can
> use basically any word for a variable, and also focusing on the idea that
> you should use descriptive variables, my friend and her daughter automatically
> started to change variables like 'sum' to 'product', and not only changed
> the + to *. This was a rather nice thing to see, though I hope it wasn't
> because they taught the computer actually understands what they call
> these variables (I don't think they did think that though). Also tricky was
> to change the starting value of '0' to '1' (otherwise the result is '0'), but
> they both could figure this out for themselves.

And that's a math issue, not a programming issue.  It's always nice to
cross people over that gap, because math like that (0 times anything is 0)
is something everyone is familiar with, and thus grounds the learning in
something familiar.

> That's about as far as I got this time. As you see you can spend lots of
> time with the basics. This is not because the mechanisms of the basics
> are generally hard to understand; they picked those up pretty well in 
> general, though there were some problems. The problem is more one of
> *why* these mechanisms are useful. What you can do with them, and how
> you use them to do useful things. That's the real art of programming
> (along with the importance of a well readable and maintainable program
> structure).

You picked a good set of basics to start with.  For some people, however,
who are 'innumerate', Python's string facilities can be useful -- use
looping over sequences to do various manipulations of words and
sentences...

> I hope my observations were of any use to you all; I'll post more once I
> have some more experience.

Yes, thank you.  THis kind of discussion is very helpful.

---------------------------------------------------------------------
|                         Dustin Mitchell                )O(        |
---------------------------------------------------------------------



From fig@oreilly.com  Tue Feb 22 20:30:42 2000
From: fig@oreilly.com (Stephen R. Figgins)
Date: Tue, 22 Feb 2000 12:30:42 -0800
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: Your message of "Tue, 22 Feb 2000 14:10:05 CST."
 
References: 
Message-ID: <200002222030.MAA17124@rock.west.ora.com>

>On Tue, 22 Feb 2000, Martijn Faassen wrote:
>
>> 'for' loops presented more problems, though! I had quite a bit of difficulty
>> to explain that the for block gets executed for each element in the sequence
>> and that the variable (for variable in foolist) refers to something else
>> each time in the execution. I need to think on a better way to express
>> things apparently-tricky thing.
>
>I had the same troubles.  Anybody got any brainstorms on this one?

Maybe the for loop problem you are having is because you didn't 
relate it to something the student can visualize. How about tying it to a
real world example?  While you might choose something else... let's
say you have three dolls [Meg, Sandy, Pug] and you want to tie ribbons
in each doll's hair... *for* each doll you will tie a ribbon.  You
line up the dolls and grabbing the first [Meg] you tie a ribbon in her
hair.  Done with Meg you grab the next doll and do the same thing.
When you have done this with all of the dolls, you move on to the next
thing you want to do.

Once they have that concept, you can tell them about using numbers and
testing for end conditions.

Stephen




From pdx4d@teleport.com  Tue Feb 22 20:36:29 2000
From: pdx4d@teleport.com (Kirby Urner)
Date: Tue, 22 Feb 2000 12:36:29 -0800
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: 
References: <20000222185410.A875@vet.uu.nl>
Message-ID: <3.0.3.32.20000222123629.0076d560@pop.teleport.com>

At 02:10 PM 02/22/2000 -0600, Dustin James Mitchell wrote:
>On Tue, 22 Feb 2000, Martijn Faassen wrote:
>
>> 'for' loops presented more problems, though! I had quite a bit of
difficulty
>> to explain that the for block gets executed for each element in the
sequence,
>> and that the variable (for variable in foolist) refers to something else
>> each time in the execution. I need to think on a better way to express
>> things apparently-tricky thing.
>
>I had the same troubles.  Anybody got any brainstorms on this one?

Maybe show 'em something like:

  >>> for i in ['I','am','learning','Python']: print i

  I
  am
  learning
  Python
      
>And that's a math issue, not a programming issue.  It's always nice to
>cross people over that gap, because math like that (0 times anything is 0)
>is something everyone is familiar with, and thus grounds the learning in
>something familiar.

Yes, I'm thinking math and computer language can help bootstrap 
one another.  CP4E = computer literacy + numeracy.

Kirby

PS:  Dumb typos in previous post of mine, in the URLs I gave 
for my on-line Python-learning essay:

    http://www.inetarena.com/~pdx4d/ocn/numeracy0.html
    http://www.inetarena.com/~pdx4d/ocn/numeracy1.html
    http://www.inetarena.com/~pdx4d/ocn/numeracy2.html

is what I _should_ have written.




From faassen@vet.uu.nl  Wed Feb 23 11:07:07 2000
From: faassen@vet.uu.nl (Martijn Faassen)
Date: Wed, 23 Feb 2000 12:07:07 +0100
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: <200002221826.NAA05379@eric.cnri.reston.va.us>
References: <38AF75DE.A8D06DCD@acm.org> <20000222185410.A875@vet.uu.nl> <200002221826.NAA05379@eric.cnri.reston.va.us>
Message-ID: <20000223120707.A2698@vet.uu.nl>

Guido van Rossum wrote:
> Great post from the trenches, Martijn!  Keep us informed about your
> pupils' progress.  They seem to be the kind of audience that CP4E
> wants to cater to: people without particularly strong math skills or
> geek quotient.

Thanks! Right, their geek quotient is fairly low, though I must admit
I know my friend through a MUD, so that's pretty geekish. Still..
Unfortunately my vacation is over and they're over in the
US, and I'm here again now. I'll try to keep it going through email, though,
but it'll be harder.

Still, I'll have some other students here shortly. The average 
'geek quotient' here is higher, though. It'll be interesting to compare.

Regards,

Martijn



From faassen@vet.uu.nl  Wed Feb 23 11:18:22 2000
From: faassen@vet.uu.nl (Martijn Faassen)
Date: Wed, 23 Feb 2000 12:18:22 +0100
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: <3.0.3.32.20000222105044.0076bbf8@pop.teleport.com>
References: <38AF75DE.A8D06DCD@acm.org> <38AF75DE.A8D06DCD@acm.org> <20000222185410.A875@vet.uu.nl> <3.0.3.32.20000222105044.0076bbf8@pop.teleport.com>
Message-ID: <20000223121822.B2698@vet.uu.nl>

Kirby Urner wrote:

> >I've taken a look at Learning Python and it doesn't seem to have the right
> >structure if you're completely new to programming. My friend bought it 
> >and hasn't been too much use to her so far, though I expect it probably
> >will be later on.
> 
> I like your approach Michael.

That's Martijn -- Michael is the guy whose thread I hijacked; my 
apologies to Michael!

> Play in the interactive mode, show how
> this can be used to test your understanding of the various operators
> (sometimes I call them "toys" -- not in a deprecatory sense at all),
> then go right into combining statements into function defs (programs).
> 
> This is a great segue from Logo (which many kids learn), which likewise
> has the interactive command line, plus the short, atomic procedures.
> 
> A few comments:  
> 
> *  Those who can use IDLE will probably find it a lot easier than Emacs.  
>    The newest IDLE even prompts for correct syntax, plus the stepwise 
>    debugger (still rudimentary) gives beginners a fun way to watch simple 
>    programs in action.

Probably true -- I myself am pretty unfamiliar with IDLE so far, though
(was just toying with it again yesterday), so I went with Emacs. For basic
editing both are fine, and I wasn't beyond that yet.

> *  You can do a lot in interactive mode.  I like to show students that
>    it's more fun to calculate at the command line than on a TI.  In 
>    part because calculators don't have any savvy about alpha operations,
>    like 3*"CAT" = "CATCATCAT".  Yet modern mathematics is a lot about
>    symbolic manipulation beyond what we do with numbers.

Yes, I showed things like this. You can do some amusing things there, which
will keep the students happy.

> *  Keep in mind that you, as a teacher, can pre-write simple modules 
>    which, when loaded, do interesting things at the command line.  

That's a good idea -- I'll try that approach.

>    Then invite students to look at your code.
[learning by studying other programs]
I did some of this, but it's probably good to put some more emphasis on this.

> If you haven't taken a peak, I invite you to check out my 3 part essay 
> integrating learning Python within in a math class context.
[snip]
>    http://www.inetarena.com/~pdx4d/ocn/numerarcy0.html
>    http://www.inetarena.com/~pdx4d/ocn/numerarcy1.html
>    http://www.inetarena.com/~pdx4d/ocn/numerarcy2.html

These links don't seem to work, unfortunately!

> My approach dovetails with yours, in that I'm focussing on the 
> interactive command line at the start.  What's not explicit in these
> pages is a lot of nuts and bolts about "types" (int, float, string),
> which you get into, nor even data structures (list, tuple, dictionary).
> 
> This isn't because I'd want to skip any of this.  But first I want
> to get students to "buy in" by seeing Python do a lot of relevant
> work.  Then we start dissecting the code, and phasing in the nuts 
> and bolts stuff using a more "and by the way" approach.  Start by
> showing relevance, then get into the guts of programming.

The problem in my case is that there's no 'relevance' as such yet; your
students are in a math class, mine are in a 'what's programming all about'
class and don't have clear goals yet.

[recursion versus procedural]

I hadn't gotten far enough yet to introduce those concepts. :)

Thanks for the feedback!

Regards,

Martijn


From faassen@vet.uu.nl  Wed Feb 23 11:29:05 2000
From: faassen@vet.uu.nl (Martijn Faassen)
Date: Wed, 23 Feb 2000 12:29:05 +0100
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: <200002222030.MAA17124@rock.west.ora.com>
References:  <200002222030.MAA17124@rock.west.ora.com>
Message-ID: <20000223122905.D2698@vet.uu.nl>

Stephen R. Figgins wrote:
[we have problems explaining for loops]
> Maybe the for loop problem you are having is because you didn't 
> relate it to something the student can visualize. How about tying it to a
> real world example?
[snip dolls example]
> Once they have that concept, you can tell them about using numbers and
> testing for end conditions.

That's a rather neat idea! I'll try that next time. :)

Regards,

Martijn



From faassen@vet.uu.nl  Wed Feb 23 11:27:37 2000
From: faassen@vet.uu.nl (Martijn Faassen)
Date: Wed, 23 Feb 2000 12:27:37 +0100
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: 
References: <20000222185410.A875@vet.uu.nl> 
Message-ID: <20000223122737.C2698@vet.uu.nl>

Dustin James Mitchell wrote:
> On Tue, 22 Feb 2000, Martijn Faassen wrote:
[snip]

[from sum to product]
> > Also tricky was
> > to change the starting value of '0' to '1' (otherwise the result is '0'), but
> > they both could figure this out for themselves.
> 
> And that's a math issue, not a programming issue.

I think it's also a programming issue. In math, you just *do* the product,
while in my loop example, the product was done in multiple steps:

compare:

# sum

# the simple math way
sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9

# the programming way
sum = 0
for i in range(1, 10):
    sum = sum + i

# product

# the simple math way
product = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9

# the programming way
product = 1
for i in range(1, 10):
    product = product * i

As you can see, doing it the math way doesn't even raise the 0 versus 
1 issue in this case, but doing it programmatically does.

> It's always nice to
> cross people over that gap, because math like that (0 times anything is 0)
> is something everyone is familiar with, and thus grounds the learning in
> something familiar.

That's true, of course. You can appeal to lots of the basic math skills of
people. My friend was amused by the idea that Python knew how to do
complicated additions already, while she has to spend lots of time 
teaching the same to her daughters. :)

> > That's about as far as I got this time. As you see you can spend lots of
> > time with the basics. This is not because the mechanisms of the basics
> > are generally hard to understand; they picked those up pretty well in 
> > general, though there were some problems. The problem is more one of
> > *why* these mechanisms are useful. What you can do with them, and how
> > you use them to do useful things. That's the real art of programming
> > (along with the importance of a well readable and maintainable program
> > structure).
> 
> You picked a good set of basics to start with.  For some people, however,
> who are 'innumerate', Python's string facilities can be useful -- use
> looping over sequences to do various manipulations of words and
> sentences...

Though I am rather dubious if it's worth or doable teaching programming to
people innumaterate to the extent that they don't know basic addition and
multiplication. Of course string and word manipulation is very interesting
too, and I did some basic string concatenation (to demonstrate different
types and the power of expression). I hadn't gotten to the more complicated
function calling though (i.e. string.split()). I still have to explain
'import' at this point! :)

Regards,

Martijn



From Robin.Friedrich@pdq.net  Wed Feb 23 16:44:39 2000
From: Robin.Friedrich@pdq.net (Robin Friedrich)
Date: Wed, 23 Feb 2000 10:44:39 -0600
Subject: [Edu-sig] My experience teaching Python
References: <38AF75DE.A8D06DCD@acm.org> <38AF75DE.A8D06DCD@acm.org> <20000222185410.A875@vet.uu.nl> <3.0.3.32.20000222105044.0076bbf8@pop.teleport.com> <20000223121822.B2698@vet.uu.nl>
Message-ID: <004a01bf7e1d$4ac5eda0$f25728a1@UNITEDSPACEALLIANCE.COM>

----- Original Message ----- 
From: Martijn Faassen 
To: Kirby Urner 
> >    http://www.inetarena.com/~pdx4d/ocn/numerarcy0.html
> >    http://www.inetarena.com/~pdx4d/ocn/numerarcy1.html
> >    http://www.inetarena.com/~pdx4d/ocn/numerarcy2.html
> 
> These links don't seem to work, unfortunately!

removing the extra r:
http://www.inetarena.com/~pdx4d/ocn/numeracy0.html
http://www.inetarena.com/~pdx4d/ocn/numeracy1.html
http://www.inetarena.com/~pdx4d/ocn/numeracy2.html




From pdx4d@teleport.com  Wed Feb 23 16:58:33 2000
From: pdx4d@teleport.com (Kirby Urner)
Date: Wed, 23 Feb 2000 08:58:33 -0800
Subject: [Edu-sig] My experience teaching Python
In-Reply-To: <20000223121822.B2698@vet.uu.nl>
References: <3.0.3.32.20000222105044.0076bbf8@pop.teleport.com>
 <38AF75DE.A8D06DCD@acm.org>
 <38AF75DE.A8D06DCD@acm.org>
 <20000222185410.A875@vet.uu.nl>
 <3.0.3.32.20000222105044.0076bbf8@pop.teleport.com>
Message-ID: <3.0.3.32.20000223085833.006bc174@pop.teleport.com>

>That's Martijn -- Michael is the guy whose thread I hijacked; my 
>apologies to Michael!

And mine to you.

>Probably true -- I myself am pretty unfamiliar with IDLE so far, though
>(was just toying with it again yesterday), so I went with Emacs. For basic
>editing both are fine, and I wasn't beyond that yet.

Yes, both are fine, and Emacs is a whole world unto itself (largely
unexplored by me), for those wanting to branch off in this direction 
(I look at the computer world as full of branch points -- people do 
"random walks" and end up traversing entirely different pathways, 
meeting up from time to time).

>>    like 3*"CAT" = "CATCATCAT".  Yet modern mathematics is a lot 
>>    about symbolic manipulation beyond what we do with numbers.
>
>Yes, I showed things like this. You can do some amusing things there, which
>will keep the students happy.

Great to share these amusements!  In my world, it's all about 
showing how computers have their distinct advantages over calculators 
-- one of which is this ability to work with strings.

Calculators completely dominate in math curricula in my neck of 
the woods, and teachers endless debate about their merits -- but 
without seriously considering the computer as an alternative.[1] 

Here's some text from an article I had published in FoxPro Advisor 
(an Xbase mag) in March of last year:

=====

  I live in Greater Portland, the Silicon Forest. Intel, Tektronics,
  Hewlett-Packard, and Symantec all nest in this area, and Microsoft,
  near Seattle, isn't far away.

  The high tech sector is now Oregon's biggest employer. Oregon is
  like an oil-rich state on the Persian Gulf, except our wealth,
  being know-how, is more invisible -- and more renewable.

  I bring up matters economic to give some background as to why 
  a "math makeover" might be taking hold here of necessity. 
  Our employers need computer literate, fast learners who aren't
  math phobic. But then, what is mathematics exactly? Judging
  from your average textbook, it's pretty much what we remember
  from our own K-12 careers (arithmetic, geometry, algebra, and
  calculus). But open a VFP manual and you see operators like
  DTOT(), ASORT() and PACK. More than just number crunching or
  even algebraic manipulation, our business world needs full-
  fledged symbolic processing.

  Business rules pertain to alphanumeric, not just numeric content,
  and our character sets are becoming increasingly international.
  Nor is it just businesses that need large data tables, relational
  structures, and class hierarchies. Scientists and engineers 
  work with the same tools. So why postpone much significant 
  exposure to all of this content until college? Why aren't we
  teaching VRML, XML and SQL in eighth grade? Certainly many 
  students are ravenous to learn this stuff, but when do their
  teachers have the time to learn it all themselves?

  [Kirby Urner, "Teaching Object-Oriented Programming
   with Visual FoxPro", FoxPro Advisor, Advisor 
   Communications Inc., March 1999]

=====

>> If you haven't taken a peak, I invite you to check out my 3 part essay 
>> integrating learning Python within in a math class context.
>[snip]
>>    http://www.inetarena.com/~pdx4d/ocn/numerarcy0.html
>>    http://www.inetarena.com/~pdx4d/ocn/numerarcy1.html
>>    http://www.inetarena.com/~pdx4d/ocn/numerarcy2.html
>
>These links don't seem to work, unfortunately!

Yeah, I goofed.  Guido has linked the above directly from the edu-sig 
page at python.org.  His link goes to:

       http://www.inetarena.com/~pdx4d/ocn/cp4e.html

       (see Numeracy + Computer Literacy series)

>Thanks for the feedback!
>

Sure.

>Regards,
>
>Martijn
>

Kirby

[1] http://archives.math.utk.edu/hypermail/mathedcc/feb99/0090.html




From kern@its.caltech.edu  Wed Feb 23 23:11:34 2000
From: kern@its.caltech.edu (Robert Kern)
Date: Wed, 23 Feb 2000 15:11:34 -0800 (PST)
Subject: [Edu-sig] Arthur Siegel's PyGeo is Up
Message-ID: 

I have put up Arthur Siegel's PyGeo code on my Starship account until his
own account gets set up.

http://starship.python.net/crew/kernr/PyGeo

Have fun!

--
Robert Kern
kern@caltech.edu

"In the fields of hell where the grass grows high
 Are the graves of dreams allowed to die."
  -- Richard Harter



From ajs@ix.netcom.com  Wed Feb 23 23:59:26 2000
From: ajs@ix.netcom.com (Arthur Siegel)
Date: Wed, 23 Feb 2000 18:59:26 -0500
Subject: [Edu-sig] Arthur Siegel's PyGeo is Up
References: 
Message-ID: <000501bf7e5a$0530bda0$92e36dd1@oemcomputer>

Thanks for your help, Robert.



From orla_redbird@crosswinds.net  Fri Feb 25 17:00:51 2000
From: orla_redbird@crosswinds.net (Gordon Worley)
Date: Fri, 25 Feb 2000 12:00:51 -0500
Subject: [Edu-sig] Basic RPN function
Message-ID: 

Since some of you seem to be using Python quite a lot for math 
related uses, I thought that some might be interested in an RPN 
(Reverse Polish Notation) interpreter that I have written in Python. 
There is no documentation and it is VERY alpha, but I think that some 
of you may find it interesting.  I'll be updating it soon, and plan 
to add an interactive mode as soon as I get the chance (hence the 
inclusion of a basic stack class that is currently unused).  You can 
get the goods at:



Just try playing around and feel free to submit code if you try to extend it.

Hope this is of interest to some, and not viewed as spam by too many of you.
-- 
- Gordon Worley
http://www.crosswinds.net/~orla_redbird/
mailto:orla_redbird@crosswinds.net


From jason@crash.org  Tue Feb 29 05:31:15 2000
From: jason@crash.org (Jason L. Asbahr)
Date: Mon, 28 Feb 2000 23:31:15 -0600
Subject: [Edu-sig] C++ As a First Language
Message-ID: <3.0.32.20000228232524.007945d0@mail112.pair.com>

Most readers have probably seen this already, but there is a 
fascinating interview with Stroustrup on Slashdot, in which
Bjarne asserts that, yes, indeed, C++ *is* a great first language. 
:-)

http://slashdot.org/article.pl?sid=00/02/25/1034222&mode=thread

Cheers,

Jason Asbahr
Origin Systems, Inc.
jasbahr@origin.ea.com



From tim_one@email.msn.com  Tue Feb 29 07:18:54 2000
From: tim_one@email.msn.com (Tim Peters)
Date: Tue, 29 Feb 2000 02:18:54 -0500
Subject: [Edu-sig] C++ As a First Language
In-Reply-To: <3.0.32.20000228232524.007945d0@mail112.pair.com>
Message-ID: <000801bf8285$3d0a2700$732d153f@tim>

[Jason L. Asbahr]
> Most readers have probably seen this already, but there is a
> fascinating interview with Stroustrup on Slashdot, in which
> Bjarne asserts that, yes, indeed, C++ *is* a great first language.
> :-)
>
> http://slashdot.org/article.pl?sid=00/02/25/1034222&mode=thread

His paper is at:

    http://www.research.att.com/~bs/new_learning.pdf

It's interesting reading, but is overwhelmingly concerned with why C++ can
be easier to teach than C, and C is really the only other language
considered.  Here's his first example:

int main()
{
    using namespace std; // gain access to standard library

    cout << "Please enter your first name:\n";
    string name;
    cin >> name;
    cout << "Hello " << name << ´\n´;
}

While equivalent C is truly a mess (mostly because you can't know in advance
how much space to allocate for "name"), it's prophetic that this first C++
example doesn't compile:  main is declared to return int but lacks a return
stmt.  My Python version compiled the first time :

name = input("Please enter your first name:")
print "Hello", name

although-at-this-level-you-may-as-well-teach-basic-ly y'rs  - tim




From guido@python.org  Tue Feb 29 14:55:50 2000
From: guido@python.org (Guido van Rossum)
Date: Tue, 29 Feb 2000 09:55:50 -0500
Subject: [Edu-sig] New mailing list for IDLE development
Message-ID: <200002291455.JAA05715@eric.cnri.reston.va.us>

As part of the CP4E project, we're planning to do major work on IDLE.
This includes an overhaul of the debugger, adding project management,
customization, and more.

We've created a new mailing list to discuss this work.  Jeremy and I
expect to do most of the work here at CNRI, but we welcome
contributions and design discussions.  We plan to carry out most of
our own discussions about IDLE on the list as well.  I'll post a more
detailed document about our plans to the list, once enough people have
signed up.

IDLE will continue to be part of the standard Python distribution.
Contributions will be treated the same way as regular contributions to
Python (see python.org/patches) but they will be discussed and should
be posted to the idle-dev mailing list.

To join the mailing list, go to

http://www.python.org/mailman/listinfo/idle-dev

See you there!

--Guido van Rossum (home page: http://www.python.org/~guido/)


From smorris@nexen.com  Tue Feb 29 15:35:43 2000
From: smorris@nexen.com (Steve Morris)
Date: Tue, 29 Feb 2000 10:35:43 -0500 (EST)
Subject: [Edu-sig] Stroustrup
In-Reply-To: <000801bf8285$3d0a2700$732d153f@tim>
References: <3.0.32.20000228232524.007945d0@mail112.pair.com>
 <000801bf8285$3d0a2700$732d153f@tim>
Message-ID: <200002291535.KAA04017@brocade.nexen.com>

Tim Peters writes:
 > [Jason L. Asbahr]
 > > Most readers have probably seen this already, but there is a
 > > fascinating interview with Stroustrup on Slashdot, in which
 > > Bjarne asserts that, yes, indeed, C++ *is* a great first language.
 > > :-)

Stroustrup is an interesting character but I would hate to have to
learn from him. To me the most interesting thing about his example is
that it depends on the operator overloading of "<<" and ">>" for
I/O. I find this interesting because this is a C++ convention, not a
basic C++ construct.

I think his example says a lot about the value of C++, i.e. C++ is a
complex and subtle language that allows one to build easy to use
tools. Once someone builds and makes available a string object that
uses the standard "convention" of ">>" and "<<" for I/O, only THEN it
is relatively easy to use.

In otherwords in C++ objects are frequently difficult to create, but
if done right they can be easy to use. This means that C++ basically
exists at two levels, the tool creation level and the tool use level.
The goal of C++ architecture and enhancements has always been to add
to the power of tool creation at the cost of elegence and simplicity
in the basic language. This makes it a good language for large
projects which can afford specialization. There can be special teams
of highly trained programmers which create wonderful objects for the
mere mortal to use.

The thing I am not mentioning is that it is just as easy to abuse C++
and create difficult to use classes and objects. In otherwords the
elegance of C++ I/O operation says absolutely nothing about the
inherent elegence (or lack of it) of C++. 

This is where I think C++ fails for a CP4E type of application. CP4E
needs a language that is elegent and simple as its basic property.
CP4E needs a language like geometry. The language itself should
present the equivalent of basis axioms that are completely and almost
obviously comprehensible. Everything else should build on that
basis. Complexity should come as a natural, stepwise progression.

In geometry there is nothing else besides axioms, the rules of logical
deduction, and what can be derived therefrom. Nothing else is
required. That is obviously the reason we teach it, as a model of
formal reasoning, particularly as a completely transparent model.

The elegence and transparency of geometry should be the metaphor for
the CP4E process and the metaphore should inform its choice of
language. 

Of course it already has :).