This week’s post is about an article published in Nature by Zeeya Merali entitled “Why Scientific Computing Does Not Compute.” (Nature, 467, 775; October 14, 2010) (Nature, 467, 775; October 14, 2010). Merali develops a compelling case that most scientists teach themselves computing and this seriously compromises the quality of scientific software. As I found out myself in my younger days as an astronomy postdoc, we teach ourselves just enough to be dangerous. Merali quotes a survey by Greg Wilson (Toronto, Canada) that revealed whereas 45% of researchers spent more time writing code than they did 5 years writing code, but only 34% saw the need for more formal training and only 47% had a good understanding of testing.
So what to do? Wilson himself created an excellent on-line training class, Software Carpentry, to teach scientists the necessary software engineering skills, including version control, testing and validation. The U.K Software Sustainability Institute was established to advise researchers on constructing quality, reusable code. I was a member of a workshop which strongly endorsed the creation a corresponding organization in the U.S.
Yet I think we are missing an important part of the solution: per an earlier post, I think scientists should be required to have formal instruction in computing and software engineering in graduate school. They should be expected to meet a minimum acceptable standard for graduation, just as they do for their major. And this instruction should emphasize that quality software starts with specification and design and ends with delivery and documentation; coding is just one part of the job. Courses such as Software Carpentry would make an excellent starting point for designing classes.