My last course to teach Python to beginners ended Monday last week and wow, am I behind in writing up the post-mortem :)
This time I taught the basics of programming with Python to a group of 6 adults, mostly PhD students either in political sciences or mechanical engineering. Nearly all of them had used some statistical/domain-specific language before, such as R or Matlab, which had a greater impact on the course than I anticipated. I taught in the students' University and thus was able to donate all the proceeds to Python Ireland, woohoo! To an awesome PyCon Ireland conference this October!
Progress isn't linear
The first and most important lesson, for me, was that progress isn't a linear thing and I really let the first session influence the pace too much. On the first day, we went through the material in a blink and I found myself short on exercises and concerned about the amount of new content that would be required for the rest of the course.
However, this day 1 effect happened because people were already familiar with the basics of programming, and they had no problem mapping what they knew to Python. I didn't realise this though, and stepped on the gas from that point on, failing to adjust properly until several weeks later. It was brought to my attention later on that actually students could have used more time and depth to understand several new concepts (that's where it helps to have a friend as part of your students, they'll mention it even if in passing!)
Which reminds me: note to self, completely redo the way you introduce for loops.
Initially, I was also a bit disappointed because I enjoy guiding students through the ah-ha! moments of figuring out programming and it felt like people already knew everything. I was wrong here as well, there may not have been any in the first session but there were plenty of satisfying ah-ha moments as we went on with the course.
As usual, I started crashing toward the end of the course ; preparing and refining material and exercises always takes a ton of personal time and when the course ended I was much looking forward to having time again to work on my own projects (...till the next course, as usual! I never learn ;))
Preparations are really the most time- and mind-consuming aspect of teaching. Even for the existing material, there's always a bit of work to try and adapt the exercises to topics that might interest current students or make lessons flow better. With the pace we were going at, I didn't have everything ready beforehand either. On the minus side, this costs time and means the lessons can be less polished. On the plus side, it usually means the lessons are better suited to the level and interests of the class.
This is probably another reason why it took a bit of time to sit down and write this all up. Overall, on the scale of happiness and knowledge the students appear satisfied with the course. Some comments on how to improve the course somewhat confused me. I think once again some felt I was guiding too much. However this time I'm really happy with how we learnt to use and navigate the Python documentation and I think that's the best thing I can teach for students to become independent. At that beginner level, I'm afraid I'm not sure what more to do unless I'm offered specific suggestions. There was another piece of feedback about still not being sure where to start if wanting to create a new program. Something I'd like to experiment with in the future is to start by giving a big project at the beginning of a course, and then along the weeks with various exercises we start solving it bit by bit, and hopefully that would give students a fairer idea on how to break down problems into manageable tasks. I need to think about it.
Some of the feedback wondered about the point of some of the exercises, which is very valid criticism. When I create a new lesson and associated batch of exercises, the ratio of suck tends to be high. It's quite difficult to find small self-contained exercises, that touch only on the necessary specific concepts without going all over the place! I need to hunt for more.
Overall I'm happy with how it went and will of course teach again in the future. I'm disappointed with the way I presented the material at times though. I think I need to do more public speaking and general talks, to stop letting myself become intimidated when I speak for a while and no one's looking my way or interested (or awake!)... as opposed to the pleasant interactions of helping students debug their programs. Maybe a lightning talk on teaching programming? ;)
Update: Oh, and I forgot to mention I received homework this time! This is so cool. It came from students who had a project on the side they wanted to solve with Python. Hope I helped :)