How to Professionally Develop Reusable Scientific Software—And When Not To

A critical challenge in scientific computing is balancing developing high-quality software with the need for immediate scientific progress. We present a flexible approach that emphasizes writing specialized code that is refactored only when future immediate scientific goals demand it. Our lazy refactoring technique, which calls for code with clearly defined interfaces and sharply delimited scopes to maximize reuse and integrability, helps reduce total development time and accelerates the production of scientific results. We offer guidelines for how to implement such code, as well as criteria to aid in the evaluation of existing tools. To demonstrate their application, we showcase the development progression of tools for particle simulations originating from the Glotzer Group at the University of Michigan. We emphasize the evolution of these tools into a loosely integrated software stack of highly reusable software that can be maintained to ensure the long-term stability of established research workflows.

[1]  John D. Hunter,et al.  Matplotlib: A 2D Graphics Environment , 2007, Computing in Science & Engineering.

[2]  Michael Engel,et al.  Massively parallel Monte Carlo for many-particle simulations on GPUs , 2012, J. Comput. Phys..

[3]  K Schulten,et al.  VMD: visual molecular dynamics. , 1996, Journal of molecular graphics.

[4]  Ian T. Foster,et al.  Globus Online: Accelerating and Democratizing Science through Cloud-Based Services , 2011, IEEE Internet Computing.

[5]  Sharon C. Glotzer,et al.  Scalable Metropolis Monte Carlo for simulation of hard shapes , 2015, Comput. Phys. Commun..

[6]  Nancy Wilkins-Diehr,et al.  XSEDE: Accelerating Scientific Discovery , 2014, Computing in Science & Engineering.

[7]  Sharon C. Glotzer,et al.  rowan: A Python package for working with quaternions , 2018, J. Open Source Softw..

[8]  Vyas Ramasubramani,et al.  signac - A Simple Data Management Framework , 2016, ArXiv.

[9]  Joshua A. Anderson,et al.  General purpose molecular dynamics simulations fully implemented on graphics processing units , 2008, J. Comput. Phys..

[10]  Pak Lui,et al.  Strong scaling of general-purpose molecular dynamics simulations on GPUs , 2014, Comput. Phys. Commun..

[11]  Ian M. Mitchell,et al.  Best Practices for Scientific Computing , 2012, PLoS biology.

[12]  Steve Plimpton,et al.  Fast parallel algorithms for short-range molecular dynamics , 1993 .

[13]  A. Stukowski Visualization and analysis of atomistic simulation data with OVITO–the Open Visualization Tool , 2009 .

[14]  Jeff Sutherland,et al.  Manifesto for Agile Software Development , 2013 .

[15]  Travis E. Oliphant,et al.  Python for Scientific Computing , 2007, Computing in Science & Engineering.

[16]  Danna Zhou,et al.  d. , 1934, Microbial pathogenesis.

[17]  Mauricio A. Saca Refactoring improving the design of existing code , 2017, 2017 IEEE 37th Central America and Panama Convention (CONCAPAN XXXVII).