I just finished teaching my new Python Programming course at UW. It was a great experience and I was very lucky to have a fantastic group of students.

They showed up for class, they worked hard and they asked me tons of great questions. Preparing and teaching this course was a lot of work, way more than I expected, but it was also very rewarding. Now that I have a little time to reflect on the experience, I’ve captured a list of the most valuable lessons I’ve learned.

  • Do your homework – When you’re a student, if you don’t prepare adequately, you suffer. But when a teacher slacks off, the entire class suffers. This one should be obvious but it’s absolutely critical that you come to every class fully prepared. That means having lecture notes ready to present, making the notes available before class so students can follow along during class, grading the last week’s quiz and homework, and having the next homework assignment ready to go.
  • Don’t be afraid to have fun – I love this quote from Tara Ploughman: “The less confident you are, the more serious you have to act.”. If you know your stuff (and you should, if you’re teaching) then take it easy, don’t worry about getting stumped (at some point you will) and enjoy yourself. Students want to be entertained as well as taught. So, relax and let your natural personality and sense of humor show through.
  • Form project teams – Organize your students into small groups (3-4 students per group works well for programming assignments) for in-class projects. Students will tend to sit together with their friends so avoid forming groups based on proximity – generate your groups randomly by counting off. Small group work provides three significant benefits:
    • It builds peer support networks.
    • It gives students an opportunity to share ideas and learn from each other.
    • It gives your class some variety (no one wants to hear you talk for the entire class).
  • Use a moodle – Moodle is an amazing (and free) web-based software package, which automates just about everything you can think of related to course administration. I setup a moodle for my class and students used it to access my online lecture notes, take weekly quizzes, submit their homework assignments and ask me questions. I used it to automatically administer and grade quizzes, answer questions, share notes and other material, and track attendance and grades. Thanks to moodle, my course was paper-less, efficient, and environmentally friendly.
  • Give students a mandatory (but short) weekly quiz – Using the moodle, I posted a new 20-question multiple choice quiz every week. The quizzes were short enough that the students didn’t feel overwhelmed taking a new quiz each week and it gave me (and them) an easy way to assess how they were progressing after each lesson.
  • Sneak a feedback question into every quiz – I had a diverse group of students – some were experienced computer professionals and others had never written a line of code. The last question in every one of my weekly quizzes was: So far, the pace of this course is… Choose one answer.
    • a. too slow for me
    • b. just about right
    • c. too fast for me

This gave me direct and concrete feedback, week in and week out, about how my students were feeling about the pace of the course. I knew that a small minority would always feel bored or lost but I always tried to hit a sweet spot where >80% of my students felt the pace was just about right.

  • Make yourself available – In addition to holding regular office hours, I gave students my email address and invited them to use it whenever they got stuck on a homework assignment or had questions. I also made rapid email response a high priority. This might sound like an onerous burden but it really wasn’t – I was able to answer most email queries in just a few minutes. Many students never needed (or never bothered asking for) extra help. But beginning programmers are prone to getting stuck in a dead end and, with just a few minutes of email time, I was often able to nudge them in the right direction.
  • Give in-class challenges – Every so often I would throw a challenge slide into my lecture notes, with topics like “Find the Bugs in this Code” or “What’s Wrong with this Algorithm?”. For example, I used the following slide to reinforce Python string syntax:

For each of the following strings tell me if they are legal or illegal in Python (bonus points for naming the movie)…

  • ‘Go ahead, make my day.’
  • “There’s no place like home.”
  • ‘Frankly my dear, I don’t give a damn’
  • ‘Say “hello” to my little friend’
  • “You\’re gonna need a bigger boat”
  • ‘”You talkin’ to me?”‘
  • ‘Fasten your seatbelts, it\’s going to be a bumpy night’
  • ”’Striker: “Surely you can’t be serious!” Rumack: “I am serious… and don’t call me Shirley.””’
  • “You had me at “hello””

My students seemed to enjoy this combination technical challenge and trivia quiz – it made the exercise a lot more fun.

  • Maintain a “Hall of Fame” – Every week I made a point of publicizing the names of students who achieved a 100% score on their first attempt of the weekly quiz (the moodle kept track of this data for me). I called it the “Weekly Quiz Hall of Fame” and maintained a cumulative list of inductees. I think the students found this to be fun. People enjoy the thrill of seeing their name in lights and this gave students a little extra incentive to do well on my quizzes.
  • Do student-led homework walk-throughs – Each week, after grading the previous week’s homework, I would choose one submission which I found to be exemplary and I would ask the author to walk us through their code in class. This achieved several goals:
    • It gave selected students recognition for excellent work.
    • It gave students an opportunity to describe their code (and the thought process behind it) in their own words, peer to peer.
    • It added a little variety to each lesson, so, again, I didn’t have to do all the talking.

After each class, I would post the selected student’s homework submission on the moodle so that everyone could study it in detail.

I was fortunate to have had an experienced teacher named Zoe Holbrook auditing my class. Zoe served as an unofficial mentor to me and several of the ideas above were suggested by her. I’m very grateful for the insights and wisdom she generously shared with me.