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.

links

social