I’m participating in a P2PU course that examines teaching programming to “free-range” students vs. teaching programming in more formal settings. I’ve long been fascinated by teaching methods, and, of course, focused on teaching in my dissertation. But back in those days, technology and programming were in support of another subject rather than a subject unto themselves. However, some of the same methods apply across subjects. We were asked to read a post by Greg Wilson that reflects on the use (or not) of research-based methods within an informal online context. The source of the research-based methods is an IES report that gives the following recommendations:
- Space learning over time. Arrange to review key elements of course content after a delay of several weeks to several months after initial presentation. (moderate)
- Interleave worked example solutions with problem-solving exercises.Have students alternate between reading already worked solutions and trying to solve problems on their own. (moderate)
- Combine graphics with verbal descriptions. Combine graphical presentations (e.g., graphs, figures) that illustrate key processes and procedures with verbal descriptions. (moderate)
- Connect and integrate abstract and concrete representations of concepts. Connect and integrate abstract representations of a concept with concrete representations of the same concept. (moderate)
- Use quizzing to promote learning.
- Use pre-questions to introduce a new topic. (minimal)
- Use quizzes to re-expose students to key content (strong)
- Help students allocate study time efficiently.
- Teach students how to use delayed judgments of learning to identify content that needs further study. (minimal)
- Use tests and quizzes to identify content that needs to be learned (minimal)
- Ask deep explanatory questions. Use instructional prompts that encourage students to pose and answer “deep-level” questions on course material. These questions enable students to respond with explanations and supports deep understanding of taught material. (strong)
Greg finds that meeting these recommendations within the online context is fairly difficult, given that there’s no clear way to assess student knowledge. Others, in comments, and elsewhere on the web, have suggested that tools exist to provide some of that capability, but whether that would work with “free-range” students is unknown. When learning is voluntary, how to you coerce students into doing things that you know would help them learn but which might turn them off? No idea.
So here’s my assessment of my own teaching and a little about my own learning, which I’ve done on my own for years.
1. Spread learning out over time. I try to do this in my classes. We basically are covering 3-4 main concepts, which were introduced within the first few weeks. I keep returning to things I said 6 weeks ago, trying to remind students of the basics. I could certainly do more assessments that aren’t the actual writing of programs. As it is, they will be assessed on the midterm and though they’ve been using these concepts in their programs, it’s a different thing to have to define them or otherwise discuss them. So, I think I do this informally, but perhaps students could benefit from a more formalized way of doing this.
Online/free-range students could easily be required to return to older material. I’ve never experienced this myself, though I’ve done it myself, redoing exercises and “relearning” concepts that I’ve already “learned”. It helps to re-do these things.
2. Interleave worked example solutions with problem-solving exercises. I probably don’t do this enough. There are examples in our book and we go over them and/or work through them together. I also code up my own examples and show them in class. I definitely think I need to do more with this as I think students would get a better sense of how to break down a problem. At the very least, I think we should go through early worked examples more slowly. I see some potential for students to present to the class, going through an example for the class. This could be done in class or online via a blog or class forum. I might try that.
As a student myself, I know I skim these too quickly and then when I’m trying to do similar problems, I don’t remember anything about how the problem was done.
3. Combine graphics with verbal descriptions. Mostly, I put a program up on the projector and then I talk students through it, so I guess I’m doing something okay. Other than programs, though, I don’t use many other graphics. I guess I could use flow charts or something.
I’ve never gotten verbal descriptions as a student myself. I’ve either learned from books or online and none of the online courses I’ve taken in programming have ever had lectures or audio. It’s all been reading about concepts, looking at sample programs, and then writing them yourself.
4. Connect and integrate abstract and concrete representations of concepts. Usually, we define a concept abstractly and then apply it. According to the research, students learning in this way should be able to apply the concept in different contexts. I’m not seeing that happen consistently. So perhaps I need to think about different ways to present concepts. Some CS Unplugged materials might help concretize some of what we’re doing. Perhaps the issue is that we’re too abstract. Definitely something to think about.
5. Use quizzing to promote learning. As I said above, I use no quizzes. I think it would be worthwhile to incorporate more. We do reading for the class, and I think quizzing at that point would be good as well as quizzing later to reinforce concepts would also be good.
6. Help students allocate study time efficiently. I’ve done this a little. When I return projects, I go over the concepts that people struggled with, in the hopes that students will go back over those concepts.
7. Ask deep explanatory questions. Coming from a humanities background, I think I do pretty well on this one. In class, I often ask students to explain what they’re doing and/or I ask them how they might solve something. For example, we were talking about how the cute little keepon robot works, and I got them thinking about how the very simple things they were doing right now could be expanded in that application. It was an aha moment for them.
Greg suggests the possibility of crowdsourcing/peer assessment. I’ve seen that work in my classes. And I’ve contributed to that in an online context. I think it’s about creating an environment where that’s encouraged. In formal settings, you can require it. Informally, I think it takes a moderator/teacher to model a peer-learning environment.
In general, keeping the research in mind as you plan and teach a course is probably a good idea, but I’m not sure I could incorporate all of these into my course. And I’m curious about how to meet these recommendations in project-based learning, which is my primary way of teaching.