36-350, Fall 2013: Self-Evaluation and Lessons Learned (Introduction to Statistical Computing)
Three-Toed Sloth 2014-01-06
Summary:
This was not one of my better performances as a teacher.
I felt disorganized and unmotivated, which is a bit perverse, since it's the third time I've taught the class, and I know the material very well by now. The labs were too long, and my attempts to shove the excess parts of the labs into revised homework assignments did not go over very well. The final projects were decent, but on average not as good as the previous two years.
I have two ideas about what went wrong. One is of course about kids these days (i.e., blaming the victims), and the other is about my own defects of character.
First, in retrospect, previous iterations of the course benefited from the fact that there hadn't been an undergraduate course here in statistical computing. This meant there was a large pool of advanced statistics majors who wanted to take it, but already knew a lot of the background materials and skills; the modal student was also more academically mature generally. That supply of over-trained students is now exhausted, and it's not coming back either — the class is going to become a requirement for the statistics major. (As it should.) So I need to adjust my expectations of what they know and can do on their own downward in a major way. More exactly, if I want them to know how to do something, I have to make sure I teach it to them, and cut other things from the curriculum to make room. This, I signally failed to do.
Second, I think the fact that this was the third time I have taught basically the same content was in fact part of the problem. It made me feel too familiar with everything, and gave me an excuse for not working on devising new material up until the last moment, which meant I didn't have everything at my finger's ends, and frankly I wasn't as excited about it either.
Putting these together suggests that a better idea for next time would be something like the following.
- They need to be drilled in interacting-with-the-machine skills, like how to use text editors (not word processors) and command lines. Therefore: require the use of RStudio, and that all assignments be turned in either in RMarkdown or Sweave. (This would be a bit hypocritical, since I normally don't use any of those myself, but I am not going to teach them my own Emacs-centric work habits.)
- Programming style (meaningful names, commenting, writing effect tests which are clearly separate from the main code, etc.) needs to be religiously enforced. Therefore: enforce it religiously, and make it an explicit part of the grading scheme. Grading rubrics need to be transparent about this.
- They need to learn to think through debugging, design, and re-design. Therefore: Devote some lectures to live examples of all these, with non-trivial code, and pair them with assignments.
- They need more practice with collaboration. (If nothing else this will help them see the importance of writing code others can read.) Therefore: Institute pair programming in labs, and/or require paired work on homework; rotate partners. (I'm not so sure about this requirement.)
- They need to learn about version control and collaboration tools. Therefore: at least one lecture on version control with git, and require its use on projects. (The start-up costs for learning git may be too harsh, but it's what I use and I really won't go through teaching myself something else.)
- They need me to walk them through linear regression (or at least lm) and the logic of maximum likelihood. Therefore: Add a lecture (and assignment) with a systematic demo of lm, formula, residuals, predict. Include at least one non-linear regression method as a contrast case.
- The in-class midterm exam consistently fails to give useful additional information about what they know and can do. Therefore: scrap it in favor of a mini-project.
- The final project needs a lot more scaffolding, or at least feedback. Therefore: have them start projects earlier, and require more interim reports from them.
- They need more concrete data-analytic examples earlier, they need to see the data-manipulation material earlier. Therefore: re-organize the lectures, putting off the classic computational-statistics topics of simulation and optimization towards the end. Chop off material as needed to fit the basics.
- The labs are too long and too poorly integrated with homework. (Also, they are sequenced to the current lectures, and there are too many copies of old solution sets circulating.) Therefore, throw out all the old assignments and write new ones. One student suggested making the labs not the beginning of a take-home assignment, but a chance to get feedbac