This paper is a must read for scientists who write software as part of their research, but are not themselves software engineers. I’m not going to repeat the paper, but list some major points that should be kept in mind when developing scientific software alongside research.
- Write programs for humans, not computers.
- Automate as much as possible, especially repetitive tasks.
- Use the computer to record history.
- Make incremental changes, with constant revision and evolution.
- Use a version control tool.
- Don’t repeat yourself or others. It’s ironic that I’m repeating this message from the paper.
- Plan for mistakes in your software or its output.
- Optimize your software after you have it working correctly.
- Document the design and purpose of your software, not its mechanics.
- Collaborate with others.
An article in Scientific American about the vital role of software in science. Here’s the abstract:
Missing source code can allow bad science to slip through the cracks and means extra headaches for scientists who want to closely follow up on new studies or check for errors
An article  in the science journal Nature, making a case for releasing software used to produce results of scientific papers. For people who don’t have access to Nature, the abstract of the article should sum up its main thesis:
Scientific communication relies on evidence that cannot be entirely included in publications, but the rise of computational science has added a new layer of inaccessibility. Although it is now accepted that data should be made available on request, the current regulations regarding the availability of software are inconsistent. We argue that, with some exceptions, anything less than the release of source programs is intolerable for results that depend on computation. The vagaries of hardware, software and natural language will always ensure that exact reproducibility remains uncertain, but withholding code increases the chances that efforts to reproduce results will fail.
 D. C. Ince, L. Hatton, and J. Graham-Cumming. The case for open computer programs. Nature, 482:485–488, 2012. DOI: 10.1038/nature10836