@article{10.1371/journal.pcbi.1003376, doi = {10.1371/journal.pcbi.1003376}, author = {Gewaltig, Marc-Oliver AND Cannon, Robert}, journal = {PLOS Computational Biology}, publisher = {Public Library of Science}, title = {Current Practice in Software Development for Computational Neuroscience and How to Improve It}, year = {2014}, month = {01}, volume = {10}, url = {https://doi.org/10.1371/journal.pcbi.1003376}, pages = {1-9}, abstract = {Almost all research work in computational neuroscience involves software. As researchers try to understand ever more complex systems, there is a continual need for software with new capabilities. Because of the wide range of questions being investigated, new software is often developed rapidly by individuals or small groups. In these cases, it can be hard to demonstrate that the software gives the right results. Software developers are often open about the code they produce and willing to share it, but there is little appreciation among potential users of the great diversity of software development practices and end results, and how this affects the suitability of software tools for use in research projects. To help clarify these issues, we have reviewed a range of software tools and asked how the culture and practice of software development affects their validity and trustworthiness. We identified four key questions that can be used to categorize software projects and correlate them with the type of product that results. The first question addresses what is being produced. The other three concern why, how, and by whom the work is done. The answers to these questions show strong correlations with the nature of the software being produced, and its suitability for particular purposes. Based on our findings, we suggest ways in which current software development practice in computational neuroscience can be improved and propose checklists to help developers, reviewers, and scientists to assess the quality of software and whether particular pieces of software are ready for use in research.}, number = {1}, }