Teaching Software Carpentry: Better Science through Science

Most scientists user software to help with their research, and many scientists write their own software to control experiments, analyze data, or simulate theoretical behavior. During their education, scientists may be trained in experiment design and numerical analysis, but training in software construction is usually limited to a single introduction to C or numerical methods course. While languages and algorithms are certainly fundamental, the lack of formal training in higher level software design skills leads to difficulty in generating robust, reproducible scientific software. The Software Carpentry organization has been leading workshops and teaching courses at institutions around the world introducing scientists to the basics of software development: version control, testing, data management, modular coding, . . . . Current workshops are two-day events with subject matter experts leading lectures with students (helped by knowledgeable assistants) following along on their personal computer. With limited time and resources, maximizing the demonstrable efficiency of instruction is important. I will discuss factor analysis and related methods for designing and analyzing pre- and post-workshop surveys to assess the effect of the workshop on student understanding.