Programming assignments traditionally involve some problem analysis, algorithm design, and typing/testing code. While designing a new Level II course, I wanted to provide for a different way of thinking about problems and to integrate real-world context. I developed a two-part assignment on secure coding for database applications, specifically teaching students about SQL-injection attacks and how to defend against them. Instead of giving students a paragraph-long program description, I provided a couple of articles and links.
First, they write a paper, which forces the needed analysis (and the sources discuss algorithms and strategies--design). The coding is to demonstrate one or more of the defensive strategies in an existing program. This lessens the "busywork" and lets them apply what they've learned. It also should motivate testing or their code--they're protecting it from hackers!