A Data Programming CS1 Course at the University of Washington
This post originally appeared on the Software Carpentry website.
People who are interested in integrating Data Carpentry and Software Carpentry ideas into the undergraduate curriculum may enjoy reading Anderson et al's paper "A Data Programming CS1 Course" (*SIGCSE'15*, http://dx.doi.org/10.1145/2676723.2677309). From the abstract:This paper reports on our experience teaching introductory programming by means of real-world data analysis. We have found that students can be motivated to learn programming and computer science concepts in order to analyze DNA, predict the outcome of elections, detect fraudulent data, suggest friends in a social network, determine the authorship of documents, and more. The approach is more than just a collection of “nifty assignments”; rather, it affects the choice of topics and pedagogy.
This paper describes how our approach has been used at four diverse colleges and universities to teach CS majors and non- majors alike. It outlines the types of assignments, which are based on problems from science, engineering, business, and the humanities. Finally, it offers advice for anyone trying to integrate the approach into their own institution.
The first version of the course was run in the summer of 2012, and the discussion of how it has been adapted to different contexts since then is particularly interesting. Some schools mandated extra in-class programming to get students over their fear of writing the wrong code; others used online self-paced resources, and all provided students with considerable starter code for the first assignments, and less as the course went on. One site also had to make adjustments for the realities of its learners:
At Evergreen [State College], the difficulty of the material was challenging to students, some of whom worked multiple jobs or had to support families. These students could not devote their full attention to learning as much as younger students at traditional universities. To adapt the original data programming course, we only selected four of the assignments and subdivided each of those in half to create eight mini-assignments. Turn-in dates were flexible, and students were allowed to time-box their efforts (for example, 11 hours of outside time per week) to attempt as many problems as possible within that time. The extent to which students were able to complete assignments provided valuable data to adjust the difficulty of assignments for this demographic in the future.
If you come across similar experience reports, or have some of your own, we would welcome posts on this blog.