What makes computational open source software libraries successful

Software is the backbone of scientific computing. Yet, while we regularly publish detailed accounts about the results of scientific software, and while there is a general sense of which numerical methods work well, our community is largely unaware of best practices in writing the large-scale, open source scientific software upon which our discipline rests. This is particularly apparent in the commonly held view that writing successful software packages is largely the result of simply 'being a good programmer' when in fact there are many other factors involved, for example the social skill of community building. In this paper, we consider what we have found to be the necessary ingredients for successful scientific software projects and, in particular, for software libraries upon which the vast majority of scientific codes are built today. In particular, we discuss the roles of code, documentation, communities, project management and licenses. We also briefly comment on the impact on academic careers of engaging in software projects.

[1]  Martin Kronbichler,et al.  Algorithms and data structures for massively parallel generic adaptive finite element codes , 2011, ACM Trans. Math. Softw..

[2]  Randolph E. Bank,et al.  PLTMG - a software package for solving elliptic partial differential equations: users' guide 8.0 , 1998, Software, environments, tools.

[3]  Martin Kronbichler,et al.  High accuracy mantle convection simulation through modern numerical methods , 2012 .

[4]  Karl Fogel,et al.  Producing open source software - how to run a successful free software project , 2005 .

[5]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[6]  W. Bangerth,et al.  deal.II—A general-purpose object-oriented finite element library , 2007, TOMS.

[7]  Rüdiger Verfürth,et al.  A posteriori error estimation and adaptive mesh-refinement techniques , 1994 .

[8]  Bořek Patzák,et al.  Design of object oriented finite element code , 2001 .

[9]  G. G. Stokes "J." , 1890, The New Yale Book of Quotations.

[10]  Ben Collins-Sussman,et al.  Team Geek - A Software Developer's Guide to Working Well with Others , 2012 .

[11]  Message Passing Interface Forum MPI: A message - passing interface standard , 1994 .

[12]  Gerald M. Weinberg,et al.  Egoless Programming (Excerpt from the Psychology of Computer Programming, Silver Anniversary Edition). , 1998 .

[13]  John Shalf,et al.  The Cactus Framework and Toolkit: Design and Applications , 2002, VECPAR.

[14]  Matthew J. Turk How to Scale a Code in the Human Dimension , 2013, ArXiv.

[15]  Amy Henderson Squilacote The Paraview Guide , 2008 .

[16]  Mark M. Wilde,et al.  The information-theoretic costs of simulating quantum measurements , 2012, ArXiv.

[17]  Patrick Amestoy,et al.  Hybrid scheduling for the parallel solution of linear systems , 2006, Parallel Comput..

[18]  Benjamin S. Kirk,et al.  Library for Parallel Adaptive Mesh Refinement / Coarsening Simulations , 2006 .

[19]  Nelson L. Max,et al.  A contract based system for large data visualization , 2005, VIS 05. IEEE Visualization, 2005..

[20]  Zora Simic,et al.  Outliers: The Story of Success [Book Review] , 2009 .

[21]  Michael A. Heroux,et al.  TriBITS lifecycle model. Version 1.0, a lean/agile software lifecycle model for research-based computational science and engineering and applied mathematical software. , 2012 .

[22]  Eric Lease Morgan,et al.  Review of The Cathedral & the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary by Eric S. Raymond, Sebastopol, Calif.: O'Reilly, 1999 , 2000 .

[23]  Suely Oliveira,et al.  Writing Scientific Software: Tools , 2006 .

[24]  Hans Petter Langtangen,et al.  Computational Partial Differential Equations - Numerical Methods and Diffpack Programming , 1999, Lecture Notes in Computational Science and Engineering.

[25]  Susie Sell,et al.  A story of success , 2009 .

[26]  James D. Herbsleb,et al.  Scientific software production: incentives and collaboration , 2011, CSCW.

[27]  Wolfgang Bangerth,et al.  Data structures and requirements for hp finite element software , 2009, TOMS.

[28]  Eric S. Raymond,et al.  The cathedral and the bazaar - musings on Linux and Open Source by an accidental revolutionary , 2001 .

[29]  A. Bruaset,et al.  A Comprehensive Set of Tools for Solving Partial Differential Equations; Diffpack , 1997 .

[30]  Jack Dongarra,et al.  PVM: Parallel virtual machine: a users' guide and tutorial for networked parallel computing , 1995 .

[31]  Patrick Amestoy,et al.  A Fully Asynchronous Multifrontal Solver Using Distributed Dynamic Scheduling , 2001, SIAM J. Matrix Anal. Appl..

[32]  Al Geist,et al.  PVM (Parallel Virtual Machine) , 2011, Encyclopedia of Parallel Computing.

[33]  R. Verfiirth A posteriori error estimation and adaptive mesh-refinement techniques , 2001 .

[34]  GuermoucheAbdou,et al.  Hybrid scheduling for the parallel solution of linear systems , 2006 .

[35]  Tamara G. Kolda,et al.  An overview of the Trilinos project , 2005, TOMS.

[36]  Anders Logg,et al.  DOLFIN: Automated finite element computing , 2010, TOMS.

[37]  Andreas Dedner,et al.  A generic grid interface for parallel and adaptive scientific computing. Part II: implementation and tests in DUNE , 2008, Computing.

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

[39]  Dirk Gorissen,et al.  The Research Software Engineer , 2012 .

[40]  Kent L. Beck,et al.  Test-driven Development - by example , 2002, The Addison-Wesley signature series.

[41]  LeRoy Moore,et al.  Lowering the Bar , 2002 .

[42]  A. Logg Automating the Finite Element Method , 2007, 1112.0433.