PLOS Computational Biology上发表了《Ten Simple Rules for Effective Computational Research》,可以看成是《Ten Simple Rules for Reproducible Computational Research》(可复现的计算科学研究十条简单规则,以及自己的一些经验)的姊妹篇,本文结合我自己的经验对其阐述。
Look Before You Leap
动手前先看看有没有现成的软件或库,避免重复发明轮子。
多Google,在代码仓储网站(Github,SourceForge,GoogleCode)上面多搜搜。
Develop a Prototype First
先建立原型。
先设想好软件要实现什么功能,提供什么接口,并将问题进行细化,这样开展起来才能思路清晰,也方便团队分工。另外,也可以先用伪代码,或者高级语言(Matlab、R、Python、Perl等)快速开发一个简化版的原型,随后再用“低级语言”进行优化。
Make Your Code Understandable to Others (and Yourself)
增强代码的可读性。主要是说软件文档和代码风格的重要性。即使是自己写的代码,过段时间也可能不知所云了。
软件文档,大到整个项目的框架的详细介绍(最好用UML图描述),小到每个函数的功能、输入、输出、最后修改时间、Bug,还有变量和方法的命名规则。
良好代码风格也非常重要,每种语言都有各自约定俗成的代码风格,比如Python的强制缩进,Perl则可用Perltidy格式化代码,Golang自带的gofmt。
Don’t Underestimate the Complexity of Your Task
不要低估项目的复杂度。主要是说养成良好的工作日志书写习惯。
为每个项目书写规范的日志,可以让你更容易查错,也方便复用
Understand the Mathematical, Numerical, and Computational Methods Underpinning Your Work
使用数学和统计模型、坚实的计算方法来夯实你的工作。
这个不解释,太重要了。
Use Pictures: They Really Are Worth a Thousand Words
用图表将思想、结果可视化,一张图片胜过千言万语。
Version Control Everything
版本控制的重要性。
姊妹篇里也提到了:运用版本控制系统,如Subversion、Git和Mercurial。比如我在Github上托管了一些开源项目的代码,如果不便公开,实验室内部也可以自己搭建与Github类似的Gitlab。
湿实验也同样适用,尽量将每个版本都记录下来,方便回滚(Roll back)。因为你的方案有可能越改越差。。。
Test Everything
测试的重要性。
这个我是有血的教训的。一定要做单元测试,一步一步往下走! 否则后悔莫及,会浪费掉几天甚至所有的时间。且单元测试一定要完整。
发布模块的时候也要附带测试代码。
Share Everything
分享。
就像发表文章,代码也可以分享。试想如果没有那么多的人分享自己的数据、代码、软件、经验,你将什么都得重头开始,那整个科研、IT行业将无法像如今这样迅猛发展。
开放是互相交流和学习的机会。
Keep Going!
说说你的建议吧。