科学计算最佳实践

2021-06-07
#Experiences #Notes

本文内容来自于:

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) 小步工作,经常反馈和修正路线。

(b) 使用版本控制系统。

(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) 使用问题跟踪工具。