% TODO: add StoddenVictoria2016a (Enhancing reproducibility for computational methods) % TODO: add MillmanKJarrod2011a (Python for Scientists and Engineers) % TODO: add vanderWaltStefan2011a (The NumPy Array: A Structure for Efficient Numerical Computation) % TODO: reference https://www.nsf.gov/pubs/2016/nsf16532/nsf16532.htm (Software Infrastructure for % Sustained Innovation (SI2: SSE & SSI)) % TODO: http://pubs.acs.org/doi/10.1021/cen-09535-scitech2 \chapter{Software} \begin{dquote} The following guidelines are to be used in the documentation of all software developed in the Wright group for the IBM 9000 computer. % These rules have arisen as a necessary consequence of the group's programming philosophy of writing software in the form of units which can be readily shared among a number of programmers. % The approach outlined here should help to avoid some of the confusion otherwise produced by several persons simultaniously developing and modifying shared software. % % Roger Carlson, Appendix 2.3, Software Development Guidelines \dsignature{Roger Carlson, ``Software Development Guidelines'' (1988) \cite{CarlsonRogerJ1988a}} \end{dquote} \clearpage % SOFTWARE IS PART OF SCIENCE Cutting-edge science increasingly relies on custom software. In their 2008 survey, \textcite{HannayJoErskine2009a} demonstrated just how important software is to the modern scientist. % \begin{ditemize} \item 84.3\% of surveyed scientists state that developing scientific software is important or very important for their own research. \item 91.2\% of surveyed scientists state that using scientific software is important or very important for their own research. \item On average, scientists spend approximately 40\% of their work time using scientific software. \item On average, scientists spend approximately 30\% of their work time developing scientific software. \end{ditemize} Despite the importance of software to science and scientists, most scientists are not familiar with basic software engineering concepts. % % TODO: demonstrate that `most scientists are not familiar with basic software engineering concepts' This is in part due to the their general lack of formal training in programming and software development. \textcite{HannayJoErskine2009a} found that over 90\% of scientists learn software development through `informal self study'. Indeed, I myself have never been formally trained in software development. % GOOD SOFTWARE MAKES SCIENCE EASIER AND FASTER % CHALLENGES IN SCIENTIFIC SOFTWARE DEVELOPMENT % scientific software---focused on extensibility Software development in a scientific context poses unique challenges. Many traditional software development paradigms demand an upfront articulation of goals and requirements. This allows the developers to carefully design their software, even before a single line of code is written. In her seminal 2005 case study \textcite{SegalJudith2005a} describes a collaboration between a team of researchers and a contracted team of software engineers. Ultimately % TODO: finish the discussion of SegalJudith2005a % TODO: segue to reccomendation of agile development practices: http://agilemanifesto.org/ % HDF5 % SELF-DESCRIBING DATA % OBJECT ORIENTED PROGRAMMING % SOURCE CONTROL AND VERSIONING % LICENSING AND DISTRIBUTION