![](https://secure.gravatar.com/avatar/ed50c1770d1c7ae1f219022f7b9ac39a.jpg?s=120&d=mm&r=g)
Hello everyone, I'm new to this group, so forgive me if I bring up topics already addressed here or babble on a bit! I've signed up because I'm a programmer who has become addicted to Python and think it's a great introductory programming language. I really believe Guido van Rossum is right that it is an ideal first programming language, not just because it's clean code but because at the conceptual level it's abstract enough that things just work like they should. I've often written a Python script only to think "I'm done?" because I'm so used to sweating all the low-level details or dealing with cryptic syntax errors. I also think Guido is right in saying that programming is a skills everyone should learn. I know colleagues who spend much of their time doing repetitive tasks, taking hours or days to do something that a computer could do in seconds or minutes. The problem is, of course, that most of the "learn programming" books out there are not really that good, IMHO. They may teach you to write code in C/Java/Python but they don't teach you how to design a program. They don't teach you how to abstract a problem and break it down; in short, they don't teach you to "think like a programmer." In my experience, learning programming that way can take years. You have to just keep writing bad programs over and over, picking up small lessons about good program design from each failure. It's hard to recommend programming to a colleague or friend knowing it will take them so long to learn how to do it. I think there has to be a better way. So first I'd like to throw out a couple questions, if you don't mind me picking your collective minds: 1) Are there any "best practices" about how to teach programming? What works, and what doesn't? 2) I've read the CP4E project is dormant. Is there any interest in the Python community for reviving this, or have suitable replacement projects sprung up? 3) Is there anyone out there who has had experience teaching Python, or even another language for that matter? I'd be interested in knowing if people agree with the points I mentioned above. Since I've taken your time and asked these questions, I might as well give something back. =) Below is a link to, IMHO, a very interesting Introductory C++ Programming course. The entire course is designed as a simulation, where the learner assumes the role of an employee at a new programming company and receives tasks that start out easy and get more and more difficult. The learner receive "emails" from the "boss" giving them their assignment. The interesting thing is that there is a completely integrated help system. If the learner doesn't feel comfortable with completing a task, the software will point the learner to relevant documents and examples to help get them up to speed. I haven't taken the course (it is quite expensive!) but it certainly seems an innovative way of teaching programming. I thought you all may like to see it. The link is: http://www.as.columbia.edu/exec/guest/courses/course_icplus_overview.cfm You can take a "tour" of the course environment by clicking on "view course demonstration". Worth a click, IMO. Sorry to bother you all with so many questions on my first post, and thanks for taking the time out to read this! Kevin Ollivier
![](https://secure.gravatar.com/avatar/0b95fbe71ee4dc43d1b738901dee1f41.jpg?s=120&d=mm&r=g)
On Wed, 13 Jun 2001, Kevin & Masako Ollivier wrote: Hi!
Hello everyone,
1) Are there any "best practices" about how to teach programming? What works, and what doesn't?
I'd like to have an answer to it! My personal experience is that it doesn't matter how to teach programming, what to use (a programming calculator or a supercomputer), when to teach (at what grade from 6 to ...), etc. What really does matter is: your student must be highly motivated to learn! If the motivation remains for some time (from 3-12 months, this differs for different people), s/he will suddenly realise that s/he is able to program. After this, the teacher has to treat such person differently: instead of feeding her/his motivation, he must supply good problems to empower student's intellectual muscles, and, at the same time, try to make student's skills/knowledge as systematic as possible. Sincerely yours, Roman A.Suzi -- - Petrozavodsk - Karelia - Russia - mailto:rnd@onego.ru -
![](https://secure.gravatar.com/avatar/5d43dc2116a479537ae037a1f5f01536.jpg?s=120&d=mm&r=g)
Hi Roman, Yeah, I think you are right about the motivation issue! Most of the people I know who are successful at what they do are highly motivated. In fact, they are able to pick new skills up with or without any formal training - they are constantly exploring new areas and trying to learn more about whatever it is they're interested in. The question then becomes: How do you motivate students? =) Can you, or do you just hope you get a motivated crowd who is ready to learn? Thanks for your input! Kevin ----- Original Message ----- From: "Roman Suzi" <rnd@onego.ru> Cc: <edu-sig@python.org> Sent: Thursday, June 14, 2001 1:28 AM Subject: Re: [Edu-sig] Brainstorming and a neat link
On Wed, 13 Jun 2001, Kevin & Masako Ollivier wrote:
Hi!
Hello everyone,
1) Are there any "best practices" about how to teach programming? What works, and what doesn't?
I'd like to have an answer to it!
My personal experience is that it doesn't matter how to teach programming, what to use (a programming calculator or a supercomputer), when to teach (at what grade from 6 to ...), etc.
What really does matter is: your student must be highly motivated to learn!
If the motivation remains for some time (from 3-12 months, this differs for different people), s/he will suddenly realise that s/he is able to program. After this, the teacher has to treat such person differently: instead of feeding her/his motivation, he must supply good problems to empower student's intellectual muscles, and, at the same time, try to make student's skills/knowledge as systematic as possible.
Sincerely yours, Roman A.Suzi -- - Petrozavodsk - Karelia - Russia - mailto:rnd@onego.ru -
_______________________________________________ Edu-sig mailing list Edu-sig@python.org http://mail.python.org/mailman/listinfo/edu-sig
![](https://secure.gravatar.com/avatar/b5382bf4e3f9461925479be712ca7435.jpg?s=120&d=mm&r=g)
# -----Original Message----- # # Yeah, I think you are right about the motivation issue! Most of # the people I # know who are successful at what they do are highly motivated. In # fact, they # are able to pick new skills up with or without any formal training - they # are constantly exploring new areas and trying to learn more about whatever # it is they're interested in. # # The question then becomes: How do you motivate students? =) Can you, or do # you just hope you get a motivated crowd who is ready to learn? # We hope for motivated students and use techniques such as Reinforcement Schedules and anything else we can think of to encourage motivation. And teachers should maintain their enthusiasm as much as possible, because students model after teachers in many and unpredictable ways. Communicate a vision of what they are accomplishing, because a clearly expressed idea seems to take on an inertia of its own. And establish learning-oriented routines, because a well-cultivated habit can prevent many dilemmas before they even happen. But I could be wrong, Rob "Perl is worse than Python because people wanted it worse." Larry Wall (Creator of Perl), 14 Oct 1998 Useless Python: http://www.lowerstandard.com/python/
![](https://secure.gravatar.com/avatar/5d43dc2116a479537ae037a1f5f01536.jpg?s=120&d=mm&r=g)
# -----Original Message----- # # Yeah, I think you are right about the motivation issue! Most of # the people I # know who are successful at what they do are highly motivated. In # fact, they # are able to pick new skills up with or without any formal training -
----- Original Message ----- From: "Rob Andrews" <rob@jam.rr.com> To: "Kevin Ollivier" <kevino@tulane.edu>; "Roman Suzi" <rnd@onego.ru> Cc: <edu-sig@python.org> Sent: Thursday, June 14, 2001 10:40 PM Subject: RE: [Edu-sig] Brainstorming and a neat link they
# are constantly exploring new areas and trying to learn more about whatever # it is they're interested in. # # The question then becomes: How do you motivate students? =) Can you, or do # you just hope you get a motivated crowd who is ready to learn? #
We hope for motivated students and use techniques such as Reinforcement Schedules and anything else we can think of to encourage motivation. And teachers should maintain their enthusiasm as much as possible, because students model after teachers in many and unpredictable ways. Communicate a vision of what they are accomplishing, because a clearly expressed idea seems to take on an inertia of its own. And establish learning-oriented routines, because a well-cultivated habit can prevent many dilemmas before they even happen.
Sounds like a plan to me. I really agree with you on the issue with teachers, I remember a couple of teachers who themselves REALLY liked their subject, and their excitement spread to the class, almost like a virus. (You know, the pre-computer kind.) I really wonder why more professors aren't like that... What do you mean by "learning-oriented routines"? That's a new term for me.
But I could be wrong,
*Now* you tell me! =) (j/k) Kevin
![](https://secure.gravatar.com/avatar/b5382bf4e3f9461925479be712ca7435.jpg?s=120&d=mm&r=g)
# -----Original Message----- <snip /> # What do you mean by "learning-oriented routines"? That's a new # term for me. # # > But I could be wrong, # # *Now* you tell me! =) (j/k) # # Kevin # # Routines of any kind have a kind of built-in reinforcement, and I was thinking along the lines of training the students also in the habitual practice of successful learning. I was referring in general to any routine that directly supports the learning process. Rob "Perl is worse than Python because people wanted it worse." Larry Wall (Creator of Perl), 14 Oct 1998 Useless Python: http://www.lowerstandard.com/python/
![](https://secure.gravatar.com/avatar/0b95fbe71ee4dc43d1b738901dee1f41.jpg?s=120&d=mm&r=g)
On Thu, 14 Jun 2001, Kevin Ollivier wrote: Hi, Kevin,
Hi Roman,
Yeah, I think you are right about the motivation issue! Most of the people I know who are successful at what they do are highly motivated. In fact, they are able to pick new skills up with or without any formal training - they are constantly exploring new areas and trying to learn more about whatever it is they're interested in.
The question then becomes: How do you motivate students? =) Can you, or do you just hope you get a motivated crowd who is ready to learn?
I am sorry for I can't really answer this question. Most of the time I hope for the motivated crowd, because I feel it unnecessary to teach programming to unmotivated people... * Usually we had 2 students per machine ('cause there are not so many machines available ;-) Recently I got to know that XP (eXtreeme Programming) is new cool technique which uses this approach ;-) Sincerely yours, Roman Suzi -- _/ Russia _/ Karelia _/ Petrozavodsk _/ rnd@onego.ru _/ _/ Friday, June 15, 2001 _/ Powered by Linux RedHat 6.2 _/ _/ "UFO's are real: the Air Force doesn't exist." _/
![](https://secure.gravatar.com/avatar/76cc07d74b487d4bf4541d675faea2f1.jpg?s=120&d=mm&r=g)
Roman writes:
My personal experience is that it doesn't matter how to teach programming, what to use (a programming calculator or a supercomputer), when to teach (at what grade from 6 to ...), etc.
What really does matter is: your student must be highly motivated to learn!
Finding what motivates can be the hard part. One of the things we discussed in an art of mentoring class I took from the Wilderness Awareness School was how we learn best when we are excited, particularly when our adrenelin is flowing. This is one reason memories of frightening events are so vivid. But you don't have to frighten your students into learning, any excitement will do. One key to mentoring is to teach to a student's passions, whatever they are. What we learned in Art of Mentoring was how to profile students, and how to use those profiles to manipulate them into learning. My teachers called this Coyote Teaching, because it involves some trickery. After you find what hooks them, you draw that out, don't give them what they want right away, but dangle it before them some, dragging them through things they might otherwise have avoided. Excite their passions and manipulate them into the right situations and they will pretty much learn on their own. My teachers called this, "creating a vacuum," the empty gap between what they know and what they want to know. Coyote teaching works best one on one, but you could also use it in a small classroom if you can figure out some common passions your students have. Individual projects will also give you an opportunity to tailor things to each student. -Stephen
![](https://secure.gravatar.com/avatar/94b4fff8f879a44af1f18fc5340309d3.jpg?s=120&d=mm&r=g)
My own approach to Python teaching, for those new to this list, is to establish it in the context of material that's already required in most schools i.e. in the midst of mathematics teaching. A new math + computer science hybrid would come to displace the mostly computerless math taught in most schools today. This is currently impractical as math classrooms don't have computers. Mostly it's the homeschoolers with access to the internet who already have the necessary tools. Of course many people consider math boring, and/or difficult, but my feeling is an interactive computer language like Python is the secret magic ingredient that transforms a dull subject into a more interesting and relevant one for a lot of people. Plus it takes a subject which sometimes has a hard time connecting to the real world, and swaps in a better springboard to applications and future career options. Since edu-sig is a lot about computer science teachers looking for ways to replace C or Visual Basic or Java with Python, in already- existing courses, I'm mostly posting in other contexts, trying to spread the gospel of Python to the math teaching community more directly, talking up why a general purpose programming language is a better thing to be teaching than a specialized high end graphing calculator language such as the TI's, or even Mathematica's -- not that it's either/or (we can always do both). However, I draw a lot of inspiration from edu-sig, and come here to whine and complain when I only get cold shouldered by math teachers, who simply don't want to hybridize with an alien discipline, even though various great mathematicians were very into inventing computing machinery to the extent permitted by the technology of their day. The division of numeracy into math on one side of the fence and computer science on the other, especially at the introductory level, is a symptom of over-compartmentalization, over-specialization. A Renaissance approach is to integrate what is artifically kept separate, in order to foster synergy (new wholesome developments, way cooler than what any of the parts considered alone would predict). The thing about computer games is that if they're 3D, vs. a flat panel tableux, they probably feature 3D rotation of objects. This requires some linear algebra or even quaternions. Plus there's this newfangled thing in the pipeline called Clifford Algebra, which is making headway as a new source of algorithms. All these topics have many applications in gaming, and represent some of the main areas covered in mathematics courses. So getting more of the math behind computer games into math class, in tandem with the computer power it takes to play with these gizmos, is something of a priority in the kind of curriculum writing I do and share via the web. Another topic I get into a lot is cryptography, because here we have a lot of great historical narratives intersecting with plenty of interesting math. "Math through storytelling" along with "math through programming" are headings under which a file a lot of the major trends and reforms I consider most encouraging, and do my little part to encourage. None of these ideas are particularly novel or revolutionary of course. A lot of writers have adopted similar strategies. This is just the latest chapter in a long story, with the novelty having a lot to do with the fact that before, we didn't have Python, but now we do. That changes things. For example, having easy access to the extended mathematical routines (big number algorithms), which wasn't available in Turbo Pascal (for example), makes it much easier to explore the connections between number theory and group theory -- in ways that don't require college-level background and training, nor years and years of prior programming experience. Python brings all this within range of high or middle schoolers. I'm of course not saying that Python is the *only* language suitable for this approach. There are others. It's just that we've come a long way since the 1980s, when I pondered these questions from the 28th floor of the McGraw-Hill building in Rockefeller Center, Avenue of the Americas, New York City (right across from my favorite sushi bar). Everything I worked for back then is way more doable today, thanks to Guido et al. The spread of hardware, sophisticated operating systems, and the distribution networks has been phenomenal, and has everything to do with their affordability and ease of use. Now, teachers in many walks of life, spread around everywhere, can engage in collaborative curriculum writing and idea testing so easily. Students can ascend the learning curve more quickly, if at all motivated to do so, and turn around to begin teaching themselves. I'm excited by the increasing levels of literacy, including numeracy, that I sense in so many subcultures and communities. Kirby Curriculum writer Oregon Curriculum Network http://www.inetarena.com/~pdx4d/ocn/
participants (6)
-
Kevin & Masako Ollivier
-
Kevin Ollivier
-
Kirby Urner
-
Rob Andrews
-
Roman Suzi
-
Stephen R. Figgins