What makes a good programming assignment?
Part of the accepted practice of educating is providing students with assignments that exercise the knowledge and skills they are learning. It is generally accepted that these assignments are more beneficial to the students if they are interested and engaged by them; I don’t know of scientific investigation of this assumption, but the intuition is that the more engaging the assignment the more constant and intent focus is applied, the harder the student works at the tasks provided, and hence the more learning occurs per hour invested.
If you are in a field where there are many more jobs than there are people trained to fill them (true of almost all computing fields) there is another reason to want interesting assignments: they are perceived to increase recruitment and retention.
This begs the question, what assignments are interesting and to whom? James Cohoon has asked several hundred student questions such as “how interested would you be in an assignment based on X” for various X and tracked responses by gender and ethnicity James P. Cohoon and Luther A. Tychonievich (2011) “Analysis of a CS1 Approach for Attracting Diverse and Inexperienced Students to Computing Majors” The 42nd ACM Technical Symposium on Computer Science Education (SIGCSE’11) Dallas, TX. pp. 165–170. DOI: 10.1145/1953163.1953217. . He found that for some Xs (like “rocket payload”) male students reported much more interest than females, and vice versa for other Xs (such as “photo mosaics”).
In a recent semester we gave students an assignment to program sudoku, a task they had almost all ranked as very interesting in advance. But as students did the work we found there was very little interest or engagement. In general, we find actual engagement tends to follow projects with a large scope for individual creativity and projects generating “cool” output at every step along the way.
So what makes a good programming assignment? How do you find projects with high pedagogical content that are interesting to all of the students? If the fun is tangential to the learning (as, for example, as “make a pretty picture using graphics library X”) is that better, worse, or the same as a more tedious assignment that has the learning objectives embedded throughout? Is it worse to have a project that sounds exciting but turns out to be dull or a project that sounds every bit as dull as it actually is?
Should programming be taught like algebra? You don’t do word problems because they are fun, you do them because they are important to know how to do. Is that how programming should be too?
What makes a good programming assignments?