Teaching programming, conclusions

Last Monday was the last session of my short "Introduction to programming, with Python" class. Eight adults signed up, the course lasted for 5 weeks on Monday evenings and overall the impressions are positive. I made progress in places, and learnt how to improve in others.

Expanding

I didn't write last week, though my main thought at the time was that I would really like to expand the course. Likely it's linked to teaching such a nice crowd in such a nice atmosphere! I did know 3 people before they took the course, with helped get the banter started early on. Note to self: breaks are important for reasons mentioned before, but also because they enable students to chat together and get to know each other.

I wouldn't go about making the course longer without having the material ready beforehand though. Despite having a lot of material already for the first 3 sessions, I underestimated how exhausting teaching and preparing the material would wind up being. With the rest of "Life" in general filling many other evenings, I ended up with little breathing time and thinking time. Must prepare more!

Difficulty levels

Although I had taken the time to break down the exercises further than I did the first time, and spent more time on explaining file handling and a few string manipulation functions, rot13 ended up being waaay over everyone's head again. It breaks my heart but I think I will have to give up on that exercise for now! I love the idea because it brings every concept studied so far so nicely together. However going from 3-10 lines exercises to 25+ is too much of a leap. If I want to reintroduce rot13 I need to build up a better progression up to that level.

Something I'm thinking about trying in the meantime: give exercises with code partially written, and ask students to fill in the blanks. That way we can go straight to the interesting sections without getting bogged down with stuff that is not as relevant at that particular moment.

I introduced functions during the last session... Should I teach again over 5+ sessions I would reverse the topics of 4 and 5 to have more time to explain functions and solve more related exercises.

In general it's obvious people started having more issues from session 4 (confirmed by the feedback form and chit chats) and that the flow was not as good. The difficulty seems to start from the "For loop" exercises, studied the previous week, so I'll be going over them as well before teaching the course again.

Scheduling

This was the first time I had time to introduce functions. My initial assessment, after my first scheduling successes, that I had learnt how much to fit in one session was mistaken. It turns out that when teaching a concept for the first time I still seriously underestimate how much I take for granted (say, what is meant when I say to "call" the function), and therefore how long it will take to explain (...and to make up for the information I unintentionally left out).

Although I get some of the "details" of scheduling wrong, I still think I've gotten better at both guessing what will fit in 1 hour as well as how much new content I want to go through during one session (that's important too!). Perhaps I'll outline my next course in 1 hour increments.

I'm very happy with how sessions 1 to 3 went (so are the students, according to the feedback form!) -- although I could do with more very simple exercises for the first session, only using print/variables and perhaps user input. I'm guessing it went well because those are the concepts I taught previously and I was able to improve my initial explanations based on the feedback and misunderstandings of my first teaching experience. I had also taught session 4 and file handling, but it didn't go well because of the rot13 exercise, and my attempts to introduce the concepts in more depth and to break down the exercises were insufficient once again.

Student feedback

Disclaimer: There is obviously a bias to the feedback, in that although the form was anonymous I was in the same room, and by then the students knew me a little too!

Most people are happy, and the course either matched or exceeded their expectations, which is, yay \o/

My favourite questions is "3 words to describe the course". As before, very often it contains a mix of "challenging", "hard" together with "interesting" or "enjoyable". My goal exactly :o)

The leap in difficulty between the first 3 sessions and 4 & 5 came back several times (well, I did hand the feedback form after students had spent 1h making excruciatingly slow progress on rot13).

Surprisingly, there was a vote in favour of mandatory homework, to help keep the momentum in between sessions. I think I will try some version of that next time I teach to adults. Often the exercises for the next sessions were available beforehand, but that wasn't quite sufficient for people to find the time to look at them. I'm not sure if I would do it when teaching to high school teens again though, when I would be competing against all sorts of other boring and/or important homework assignments.

Someone mentioned wishing it was clearer how that stuff was used in other programs. That's something I'll think about so that it is, next time.

Several people mentioned wishing the course was longer or that they would sign up for a "level 2" follow-up to the course. Should I want to do this, I don't think it would happen in time for this particular instance. I have too much to do in the next couple of months, and waiting any longer we probably would have to start looking at the very basics again. That's unfortunate, though I'll keep thinking about it and possible alternatives.

I want to expand the course next time so we can look at a couple more concepts and spend more time on others, but I'm not convinced in general by the idea of teaching more courses levels... When does it stop? At some point one has to find a problem they want to solve for themselves and start programming on their own. Perhaps the course is a bit too self-contained at the moment. I should try to open up more possibilities, rather than solving in class every problem we encounter (well... or do it more gracefully to avoid the nasty feelings left from rot13!) Someone suggested giving links to websites with Python/programming exercises, which sounds like a great next step for people to explore.

Material

A succinct version of what we did is available here.


< Back to main >

About the preparation: I find the amount needed goes down on repeats of the same course, as I have previous years' material to draw on, as well as more experience.

An idea for a series of exercises that build up gradually but cover similar material to rot13:

(1) read a string from the user, and count the number of words in it by counting the number of spaces. This introduces treating a string as characters, and the idea of "fencepost" errors.
(2) extend this to handle multiple spaces between words, which introduces keeping state around a loop.
(3) now do the same for reading from a file.

But perhaps that's not sufficiently much simpler than rot13?
#1. Posted by John (Website) on Tue 28 Sep 2010, 16:25

Thanks John, those are very nice ideas as stand-alone exercises that also build on top of each other, exactly the kind of things I'm looking for! Thank you. #2. Posted by jpichon (Website) on Wed 29 Sep 2010, 9:17

I agree with you, the introduction of concepts is in general highly underestimated. I learning with the my class mates Processing at the moment. A lot of them had there last math class 10 years ago. So there is a need to refresh the vocabulary and concepts before you start. If you not sure if everybody knows what the new concept is about you might like to ask "Can someone (or a specific student) put into her or his own words the point I've just made?" (Advise from http://www.usask.ca/gmcte/drupal/?q=node/219)

Preparation time, what helped you here in preparing the class? What advise would you give someone that likes to prepare a class?

The "Fill the blankets" is a good approach, since you can adjust how much information you think the class needs to get a start.

Homework
What might be an idea is a handout with a short definition of the new concepts. I wonder if it makes a different's to start two classes per week rather then having homework at all. I would say, that you like to make progress you need to it on a regular base. How you engage someone to do so, is a tough question. I looking forward to hear more of your teaching experience with homework.

Teaching for next level
I think if you get your students so far that they like to learn more about Python and developing, you did a fantastic job.
If they know how to use sources like online reference than they have the right tools to develop there knowledge. Maybe one of the homework could be to find out more about loops etc and present it to the class.
#3. Posted by Jane on Fri 15 Oct 2010, 23:23

Thanks for the very thoughtful reply and link, Jannette!

With regard to preparation time, I'd say the tip is to prepare as much as you can (ideally everything) beforehand. Because you will have to modify as you start teaching and begin to understand better what works or not, so it should a bit easier to manage if you don't have to prepare and write up new stuff at the same time.

The reason I don't prepare handouts for a class is that, despite my best efforts I still find it hard to know in advance how much material we will truly cover (and sometimes I forget things too! Like int()!) For my previous course I used to bring a handout about the previous week, so people could refresh their mind and it gave me a chance to explain a bit differently if it wasn't so clear the first time. We didn't have Internet access though, so I replaced that with the website page the 2nd time.

Two classes per week would be too exhausting for everyone I think, teacher included. Maybe that second one could be done online or through IRC for questions about exercises or something. I might try it sometime, but it sounds like such a huge time investment, when few students even managed to show up once a week for 5 weeks :)
#4. Posted by jpichon (Website) on Sat 23 Oct 2010, 23:04

Hello! This text is normally hidden with CSS. If you can see this, you'll also see two additional fields with no label on the form. Leave them as is, as those are aimed at catching form-filling spam bots. Thank you!

    Name: (or OpenID Sign in with OpenID)
      Email: (Not published)
        Website:
          Comment:
           

          < Back to main | Up >