Gal-Ezer, Vilner, and Zur: "Teaching Algorithm Efficiency at CS1 Level". CSE, 14(), 2004. Describes a way to introduce big-O notation early: on each assignment, students are asked (a) what does this code do, (b) what's its big-O efficiency, and (c) write a function which performs the same task, but is more big-O efficient. The examples are simple, but the idea is intriguing. Though the authors don't draw attention to it, I particularly like the idea of giving the students working (if inefficient) code that they can use as an oracle when testing their (more efficient) solutions.
Ginat: "On Novice Loop Boundaries and Range Conceptions". CSE, 14(3), 2004. Looks at the mistakes beginning programmers make with loops, and why. This ought to be the first step toward fixing both the way we teach iteration, and the iteration constructs we put in our languages; it's a shame so few language designers do it.
Wolfe: "Why the Rhetoric of CS Programming Assignments Matters". CSE, 14(2), 2004. The prize of the bunch, this study examined how changes in the wording of assignments can affect student interest and satisfaction. The short answer: the more "relevant" the background to the assignment seems, the more engaged students will be.
Ala-Mutka: "A Survey of Automated Assessment Approaches for Programming Assignments". CSE, 15(2), 2005. Describes tools and approaches for auto-marking, from static style checkers to dynamic run-compare-and-profile engines. Lots of good ideas; even better is the fact that the thing Igor Foox is going to build this fall doesn't seem to have been invented elsewhere.
Pike, Dorward, Griesemer, and Quinlan: "Interpreting the Data: Parallel Analysis with Sawzall". Scientific Programming Journal, 13(4) (PDF). Describes a domain specific language (DSL) built by Google to do record-by-record data crunching. I understand the motivation; I just wonder when people will admit that they're reinventing Haskell piece by piece?