I gave a midterm last week in my data structures class, where students did great on the code reading problems and pretty badly on the code writing problems. In most CS classes when I have a learning problem like this, I would tweak the next programming assignment to emphasize the problematic issues, and mention the key points in lecture. In this class, I already have weekly assignments, and I didn't want to wait a week until I could get students to focus on this. So, I made up a worksheet (short, constrained, set of exercises with mostly fill-in-the-blank, true/false, and multiple choice activities) as an out-of-class, weeklong quiz.
My worksheet had several completely worked out programs, because I am quite interested in the literature on worked examples as a powerful learning tool. There were several other programs with 1 to 3 lines left blank. The students were to complete those lines.
In talking with my colleagues here and elsewhere, and from the discussion on my blog, I get the sense that this is pretty unusual. Other disciplines use worksheets all the time, even in higher-education. Chemistry often has a "pre-lab" worksheet, and I've seen worksheets in both Physics and Mathematics classes. Worksheets are a "scaffolded" activity -- student work is guided and constrained, to help students succeed and focus on the learning issues. My students were "programming," but only a single line in the context of a mostly-complete program.
I learned from my colleague, Christine Alvarado from Harvey Mudd College (on sabbatical here at Georgia Tech this year), that they use worksheet activities quite often in their introductory course. They don't lecture throughout an entire class session. They lecture through about half, and then have students do a worksheet, and they discuss the results in class. The worksheets are only used to mark attendance, not for correctness. The goal is to encourage student learning and break up a long lecture.
Why don't we in computer science use learning tools like worksheets? Our most common pedagogical form in computer science education is apprenticeship. We might lecture or provide a textbook, but we expect that most of the real learning is going to occur in the hours when students are working their way through problems in an Integrated Development Environment (IDE). When the goal is to have students to function like experts and using tools like those of experts, then apprenticeship is an excellent approach. When we want our students to graduate and become top-notch software engineers and developers, those hours in front of Eclipse are well spent. But now we have students in computer science education who never want to be software developers.
As we broaden the audience for computing education, we need to broaden our pedagogical tools and approaches. Good old-fashioned worksheets can be part of our new toolbox. We need to think about new ways to scaffold student activities so that they learn efficiently, to meet the learning goals that make sense for them.