科学计算最佳实践
本文内容来自于:
Wilson G, Aruliah DA, Brown CT, Chue Hong NP, Davis M, et al. (2014) Best Practices for Scientific Computing. PLoS Biol 12(1): e1001745. http://doi.org/10.1371/journal.pbio.1001745
Software Carpentry (http://software-carpentry.org)
1. 为人编写程序,而不是为计算机
(a) 一个程序不应该要求它的读者一次在内存中保存多个事实。
(b) 使名称一致、独特且有意义。
(c) 使代码风格和格式一致。
2. 让电脑做事
(a) 使计算机重复任务。
(b) 将最近的命令保存在文件中以供重复使用。
(c) 使用构建工具来自动化工作流程。
3. 进行增量更改
(a) 小步工作,经常反馈和修正路线。
- Dropbox (http://www.dropbox.com)
(b) 使用版本控制系统。
- Git (http://git-scm.com)
- Subversion (http://subversion.apache.org)
- Mercurial (http://mercurial.selenic.com)
- GitHub (https:// github.com)
- BitBucket (https://bitbucket.org)
- SourceForge (http://sourceforge.net)
- Google Code (http://code.google.com)
(c) 将手动创建的所有内容放入版本控制。
4. 不要重复自己(或他人)
(a) 每条数据在系统中都必须有一个单一的权威表示。
(b) 模块化代码而不是复制和粘贴。
(c) 重用代码而不是重写它。
5. 为错误做好计划
(a) 向程序添加断言以检查其操作。
(b) 使用现成的单元测试库。
(c) 将错误转化为测试用例。
(d) 使用符号调试器。
6. 软件运行正常后才能进行优化
(a) 使用分析器来识别瓶颈。
(b) 用尽可能高级的语言编写代码。
7. 记录设计和目的,而不是机制
(a) 记录接口和原因,而不是实现。
(b) 重构代码而不是解释它是如何工作的。
(c) 在该软件中嵌入某个软件的文档。
- Javadoc
- Doxygen
- Sphinx
- knitr
- IPython Notebooks
8. 合作
(a) 使用合并前的代码审查。
(b) 在让新人跟上进度和处理特别棘手的问题时使用结对编程。
(c) 使用问题跟踪工具。
- GitHub include issue tracking tools
- Trac (http://trac.edgewall.org)