Assessment and Retrieval Practice in a Code-Heavy Class
Some ideas for assessments that help students learn
This post is part of several discussing incorporating coding into class where learning to code is not the sole purpose. So far I have discussed live coding as an instructional approach. You can find posts on why I use live coding, how to set up to live code, and the nuts and bolts of running a live coding class session, and how to talk while live coding. This week I am moving on from live coding to discuss some assessment strategies.
Quizzes
We know retrieval practice is powerful for learning. I think we also know students hate quizzes. I think I have a way around this. I give lots of quizzes but if the students take them in class, they get two attempts and I tell them the answers in the second attempt. So if they are in class, they get all the points.
I think that for this approach to work, you have to be intentional about how you do it. Maybe most important is to tell the students WHY you are doing it. I always talk about what retrieval practice is and why it is important. I ask the students about a time they tried to go somewhere without using a mapping app on their phone. They can usually relate to the feeling that they don’t really know how to get somewhere until they’ve tried going there without instructions…. Or trying to RETRIEVE that information from memory.
So, I tell them we are going to do a lot of quizzes, they need to try the first attempt for it to help their learning, but I will immediately give them the answers for the second attempt. In a coding-based class, these quizzes are often questions about what syntax is correct, or which option has an error. It’s a great opportunity to get students to assess more lines of code and not just rely on me to help them figure out errors.
Activities
I don’t know what to call this, but activity seems pretty appropriate. In my live-coding through the course notes, if I get to a step that we have done several times in class, I ask the students to do it on their own. For example, we might be making a plot from some data. I’ll ask the students to do it, and then walk around, making sure to check and make sure everyone is making progress and isn’t stuck.
I think walking around is important. I’ve noticed that students’ willingness to ask questions seems to increase as my proximity to them increases.
We then go over the code and keep rolling. So it’s a little low-stress retrieval practice I hope. This is a nice approach when you need to buy some time in class as well. If someone has an issue with something where the solution isn’t obvious, I’ll often keep going a bit until we are at a chunk of code suitable for one of these activities. I’ll ask the class to try it on their own, and then go help the student that needs it.
Labs
We don’t have a lab section in any of my coding classes, but I like to have lab exercises anyway. Basically, I have a shell of an analysis with descriptions of how to do things. This looks exactly the same as the course notes we work through each day. I just ask the students to do it on their own. They can work together if they like. I just mill around through class answering questions, and the students turn the completed activity in after class. I prefer to do these in class rather than as homeworks, because I can be there to make sure students don’t go down dead-end rabbit holes trying to get unstuck on things.
I assign some similar activities as homeworks, but I try to save the more challenging ones for in-class work.
Testing
I love two-stage testing! I make a test that is the same as the course notes: questions or instructions, then blank code chunks. I give it to students at the end of a class. They get to do it as a take home exam. If we have class on Thursday, they have to turn it in by the end of Wednesday.
I grade the tests the morning of the Thursday class. But grading is fast! Since they will get a second attempt, I simply take points off where something is wrong, and maybe make a brief comment about why, but usually kind of vague. It’s part of the testing strategy that they have to figure out what was wrong in the second stage.
On the second day (Thursday in this case), they come into class and look at their graded tests. They have all class period to fix them. AND they can work together. I tell them class no one can leave until everyone turns in a perfect test. I think this encourages strong students to offer help to others, and it encourages students who need help to ask for it. I TELL the students that this is my intention. I talk about how asking for help is an important skill and I am trying to foster it with this approach. I’ve said it before and I’ll say it again and again, but I really really think it helps to tell students why you are doing what you are doing. Otherwise they may just assume you are doing things because it is easier for you, or to give them a hard time!
Grading the tests for the second time is super easy because they are all almost always perfect. Students’ scores are the average of the two attempts. I think if you counted just the second attempt they wouldn’t have as much drive to try to do well on the first one.
I think these strategies help students learn and get comfortable with the material AND give me an idea of how students are doing. That’s the goal, anyway!