Archive for February 14, 2012
I just gave a midterm exam in my class on data structures using media computation. The results are disappointing, and have prodded me into trying something new: I made a worksheet.
Two of the problems on the midterm were tracing problems. One had a posterize method (reduces the possible number of colors in a picture), and I provided some RGB values for some sample pixels: What new RGB values will be in those pixels after this method executes? The second problem had three graphics images, and three programs: Which program generated which image? I had several people review the tracing problems — they weren’t trivial.
One of the problems was a code writing problem. I gave them the Sound methods for reverse() and for increaseVolume(). They were to write a new method that reversed the first half the sound, then increased the volume in the second half the sound. I literally expected them to copy the bodies of the two loops, and just tweak the ranges on the loops.
The average score on the two tracing problems (adding the percentages together and dividing by 200) was 96%. 15 of the 16 students in the class got over 90% on the two problems. The average score on the one writing problem was 75%. Five of the 16 students got less than 70% right. These students are quite good at reading code. Some of these students were unsuccessful writing code.
What happened? The research literature on CS education has lots of examples of how reading and writing skills develop separately. Pete Pirolli reported in the early 1980′s that, in several studies, Anderson’s lab at CMU found no correlation between reading and writing skills. Raymond Lister and his colleagues have written several papers about students having one or the other, but not both sets of skills. So, it’s not a surprising result, but it’s one that I need to address.
How? The students are working hard on programming assignments. Programming assignments are so heavy – they take so much time, they require so much effort. I do require students to do a weekly out-of-class quiz, often oriented around videos. This semester, two of the quiz assignments were to use Problets on for and while loops. That may have helped with the reading skills, but doesn’t seemed to have helped much with writing skills.
I decided that I needed to try out one of the ideas in CSLearning4U, that is more examples and more lighterweight practice. I made a worksheet for this week’s quiz. The worksheet has four completely worked out array manipulation programs (with outputs provided) and two more sound manipulation programs (for analogous actions as on the arrays), to make clear the connections. There are five more programs that are nearly complete, including all outputs, but with some blanks. The blanks are mostly where range manipulations would take place. The students have to complete the blanks. I’m offering two points each for the 10 blanks, where the first 10 points go towards the quiz grade and the second possible 10 points are bonus points toward the midterm exam.
I made very clear that there was no partial credit. The students get them right, or they don’t. I explicitly said that the smartest thing to do is to type in the program, then fill in the blanks such that the output is right. This is a lighterweight activity than programming from scratch.
This is unusual for me, and maybe for other higher-education CS teachers. Worksheets are very common in high schools, and even in higher-education in other STEM disciplines. I’ve seen physics labs and chemistry pre-labs in worksheet formats. I can’t remember seeing them in CS, but I’m sure that somebody has done them. What I’m doing here is something that K-12 teachers are taught to do: See a particular learning problem, then find or invent an activity to address that problem. This is the first time I’ve created a worksheet as that activity. In CS, we tend to assign some more programming to address a learning problem. I’m looking for something with less cognitive load: More example, and more lightweight practice.
I’m still figuring out how I’ll evaluate if this worked. My guess is that I’ll have a slightly more heavyweight version of this on next week’s quiz, e.g., I provide a partial program, with inputs and outputs specified, and I’ll ask them to fill in the rest of the program. That will give me a sense if they’re developing the writing skills I hope to see.
Here’s a cute story: Girlfriend of the founder of the website Instagram learns to program in Python in order to give her Valentine a new web tool to work with Instagram. From a computing education perspective, it wasn’t so sweet. The complexity of learning computing got in her way and ruined her secret. It’s just too darn hard.
And yes she also had to learn Photoshop to come up with the the three different designs, “It’s almost harder than Python,” she told me.
While the service ended up looking amazing, her plan to keep it a secret from Krieger didn’t work, mainly because of her frustration with working out bugs, “Something would take me an hour and a half and I knew that ten feet away is someone who could fix the same bug in ten seconds.” So she spilled the beans.