[IAEP] Ideas for Teaching Python

Caryl Bigenho caryl at laptop.org
Mon Jan 14 22:09:57 EST 2013

Hi Steve, Gerald, and all…

I was enrolled in the MOOC Python course that ran simultaneously with the Stanford Venture Lab course Steve and I were both taking. After the first couple of weeks I found that trying to do both at once was too much, so I set aside Python for another time. However, I did do enough of it to realize they had some excellent resources that you might find useful with your students. 

One of these is Code Academy (http://www.codecademy.com). The lessons there are progressively more challenging and have the learner work on some of the things you have already mentioned. There are occasional bugs in the system, but most of the time it works quite well.

The textbook they were using was "How To Think Like A Computer Scientist" and the price is right… it's free (http://www.openbookproject.net/thinkcs/python/english2e/)

They also used a set of recorded lectures from a class as previously taught at MIT but, for your students, I don't think they would be as useful. Additional homework assignments to go with the lectures (and lecture notes) were also provided/used.

The biggest weakness I found in the course was the lack of human interaction. It was run by a machine and every week you would get a message sent by "The Machine" which told you was to be done in the next week. If you asked a question, there were a few humans tending the class, but it might take several weeks to get any kind of reply. Several of us from support gang, iaep, and olpc-SoCal were interested in being together in a study group, and asked to do that. But, instead, they put people into groups by time zone. By the time they got back to us telling it was ok and how to do it, I had stopped working on the class and I think the others had as well. (Did anyone on this list actually finish the course?)

If it were me, and I sort of wish it were, I would use the Code Academy along with selected parts of the text, giving simple assignments on the basics of a concept, then giving them some challenge assignments. This could be a lot of fun!
If you are using Sugar, you might also make use of the examples in Pippy to start and challenge them to modify them in clever ways.

Caryl (retired… former AP Computer Science teacher (when it was still all in Pascal!))
Date: Mon, 14 Jan 2013 20:31:38 -0500
From: sthomas1 at gosargon.com
To: gmanb5 at gmail.com
CC: iaep at lists.sugarlabs.org
Subject: [IAEP] Ideas for Teaching Python

I switched email subjects and figured I would keep this on the IAEP list (as I seem to get bounces from others). As a start, below is from an email I sent to one of the parents:

My approach in general is to try and catch kids doing something interesting and then name it and bring it to the attention of the whole class.  I look for kids passions and try and find ways to build on that.  I try not to explain everything to them, at the same time I can't expect them to re-create all we have learned throughout history without falling into the same traps and making the same mistakes.  So I also try and give them examples of "good literature" (via code walk throughs and explanations of concepts, trying to relate it to things they know).  Note: I often fail to acheive my goals, but I keep trying. Ideas and suggestions always welcome.

I also try to give some "step away from the computer and no one gets hurt" lessons. This is similar to the CS Unplugged stuff and "How to Program your parents" like what they do here.

Two exercises you can do with Jonathan which are from one of the classes he missed.  One involved asking them how to find a name in a phonebook, explaining how long it would take to go one by one through all the names.  Then asking them to rip the phonebook in half and throw away the half that doesn't have the name he is looking for (repeat) until you find the name.

Next is to play a version of "Guess my Number"  (where you tell them higher, lower or correct when they guess).  Play one game where the number is between 1-100.

Then have him make a table like the one below:
|        Numbers |       # Guesses | 
|            10  |                 ||           100  |                 |
|         1,000  |                 |
|        10,000  |                 |
|       100,000  |                 |
|     1,000,000  |                 |
| 1,000,000,000  |                 |
| 4,000,000,000  |                 |

And ask him to fill in How many guesses it would take to guess the number.  If he follows a pattern, compliment him on looking for and using a pattern (even if it's not the right one)

Then have him make a table like the one below:| Numbers | Maximum Guesses | 
|      2  |                 ||      3  |                 |
|      4  |                 ||      5  |                 |
|      6  |                 ||      7  |                 |
|      8  |                 ||      9  |                 |
|      10 |                 ||      11 |                 |
|      12 |                 ||      13 |                 |

Tell him you are "evil" and will change your number as often as possible and ask how many guesses it will take to find the answer.
At some point you can write down the list of numbers (pick an odd number, so he can pick the one exactly in the middle) and then ask okay how many left.  The goal is to make the invisible visible and show him how you are getting rid of ~1/2 each time.  Then ask him, how many for 16, 32, 64 (you get the idea).

Then ask him to look back at the first table once he figures it out how it works and ask again how many guesses.

Then ask what is similar between the phone book excercise and the "Guess my Number" excercise.

The key to focus on and repeat a few times is how you can take a simple set of steps and just keep repeating them to do amazing things.

(In response to a question from the parent about this email:)
Homework for this week:
1) Write your madlibs programs in python 3 and send them to me2) Go to www.udacity.com and sign up for CS101
3) Complete Unit 1:1-13 of CS101 and send me a screenshot showing completion4) When watching section 11 - Backus Naur Form, think about how it applies to our MadLibs game and also how it relates tot he syntax errors we got when coding (great job Colleen in recognizing and properly naming them).

Some of the Big Ideas we went over in class:We walked up and down "The Ladder of Abstraction"From 0 and 1 ==> 26 letters of the alphabet ==> words ==> sentences ... to trillions of words in published books
Using a few simple "first principle" building blocks we can create amazing thingsWhen working on a program or any project, think about what are the basic first principle ideas I can use to build powerful ideas

 what I meant by trying to teach them about the "Ladder of Abstraction"...

The main idea is levels of abstraction in programming.  I want them to start thinking about and hopefully seeing how you can walk up and down the ladder and how to find the appropriate first principle building blocks.  Ladder isn't a perfect analogy but I think its a good one to start with.

Note, I have the advantage of teaching an "after school" course to a small group of homeschoolers (and one "schooler") we meet once a week for about 90 minutes.

The Udacity CS101 has some great material to help me flip the classroom.   I also am looking at using 
How to Think Like a Computer Scientist - Runestone Interactive  which I like because of the way
it helps make the invisible (what's going on inside the computer) visible. Mark Guzdial made a comment on it saying it had a bit too much cognitive overload, but I don't know of any other one as good.  I would also suggest you check Mark's site for his (and his wife's) Python course  http://coweb.cc.gatech.edu/mediaComp-teach.  The book is ridiculously expensive (ie: it's a college textbook), but the slides are freely available and very well done.  They can give you some ideas.

One thing (along the lines) of Mark's course would be to have the kids create their own image editor's.  One of my former student's built his own in Python and it is motivating for kids.

My goals are to try and give kids multiple experiences (learn/experience ideas in multiple ways) with certain "big ideas" or concepts. I often fail, but keep trying.

Couple of questions about your course:1) how often do you meet2) how long are the class periods3) what kind of programming experience is expected of the students

On Mon, Jan 14, 2013 at 6:31 PM, Gerald Ardito <gmanb5 at gmail.com> wrote:

I am still trying to wrap my head about the key goals and projects. It would be great to share ideas.

IAEP -- It's An Education Project (not a laptop project!)
IAEP at lists.sugarlabs.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sugarlabs.org/archive/iaep/attachments/20130114/fdb5d5a2/attachment-0001.html>

More information about the IAEP mailing list