推荐活动

专家推荐:经典生物信息学论文

首页 » 产业 » 行业 2015-08-12 生物通 赞(2)
分享: 
导读
加州大学戴维斯分校的C. Titus Brown近期在PLoS Biology杂志上发表了一篇经典论文:“Best Practices for Scientific Computing”,被不少本领域同行称为最佳软件开发实践指导指南,这篇文章不仅提到了程序运用的一个关键问题,也指出了程序员的一些基本概念,如给人写程序,而不是给计算机;只在软件能正确的工作后才可优化;文档里描述的应该是设计思路和目的,而不是技术细节等等。

今天的世界大不同,表现在生命科学研究领域,就是一切都开始进入了大数据时代,无论是DNA序列,显微图片,还是质谱数据,研究人员都越来越需要对这些庞大的信息进行收集、整合、处理和诠释。

近期The Scientist杂志联系了几位科学程序员,了解他们所使用的工具是什么,如果是菜鸟需要进行哪些训练等。

自动化与归档

加州大学戴维斯分校的C. Titus Brown近期在PLoS Biology杂志上发表了一篇经典论文:“Best Practices for Scientific Computing”,被不少本领域同行称为最佳软件开发实践指导指南,这篇文章不仅提到了程序运用的一个关键问题,也指出了程序员的一些基本概念,如给人写程序,而不是给计算机;只在软件能正确的工作后才可优化;文档里描述的应该是设计思路和目的,而不是技术细节等等。

其中还有一个基本准则就是让重复性的工作自动化,“让一切都自动化,”他说。换句话说,就是每次运行程序的时候不用手动输入参数,可以将参数输入到命令行脚本,自动执行程序。这样就能无误的操作数据,将数据从一个文件移动到另外一个文件,同时也可实现可重复性。

假设你在运行一个本地建模算法,“如果需要运行10遍,那么就可以写一个shell脚本,让它自动运行10遍。最好不要用手动输入,因为你有可能会忘了运行的内容,而且也有可能会漏掉部分内容,”Brown解释道,这些脚本也需要是版本控制程序,这样你可以将其与几周前的结果进行比对。

另外一个重要的方面就是不要忘记记录一切,Slaybaugh 说,在你的代码上加上批注,告诉同事也提醒你自己相关的内容。如果你计划与你的同事共享这些代码,那么可以用一种称为“doxygen” (www.stack.nl/~dimitri/doxygen)的工具进行记录。doxygen可以根据正确注释的各种语言源代码自动创建程序档案,或者研究人员也可以使用Jupyter Project (jupyter.org, 之前称为 the IPython Project),以在线注释的方式交换代码,数据和文件(Python、R 和其它语言)。

测试你的代码

Slaybaugh 为新手程序员提出了一个建议:开发一个测试包,其组成成分就是简单的一套能确保程序按你所想的那样进行操作的函数和数据。这样当你编写好自己的程序的时候,就能确保不会改变基底的运算法则,比如引入hard-to-track bug时,“你就能检测系统,看看是否能通过,”她解释道,这个过程就像是使用了基准线上的阴性和阳性对照。

Buffalo则说了一个简单的例子“假设你有一个函数(“add”) ,也就是加合两个数字,那么就可以设置一个“test_add”的函数来确保在程序改变的时候,2+3依然等于5。

附:Best Practices for Scientific Computing

文章要点(来自中国政法大学)

给人写程序,而不是给计算机。 1. 一个程序,对于阅读它的人来说,不应该要求读者一次性的在大脑里加载过多的背景/相关知识;2. 命名需要一贯、明确、有意义;3. 代码风格和格式要统一一致4. 软件开发中的各种工作都要分割成1小时左右的任务。

重复性的工作自动化。 1. 让计算机去做重复性的工作;2. 把最近使用过的命令存到一个文件里,以备复用;3. 使用编译工具来自动化系统流程。

用计算机做历史记录。 1. 用软件工具来自动跟踪计算机的工作。

逐步改进。 1. 每次做一小步,及时获得反馈,及时纠正。

使用版本控制。 1. 使用一个版本控制系统;2. 所有由手工创建的东西都要放到版本控制系统里。

不要重复自己(或他人)。 1. 系统中的每一段数据都要有一个权威的单一的存在;2. 代码应该模块化复用,而不是考来粘去3. 复用代码,而不是重写代码。

准备好对付错误的方法 1. 在程序中增加断言,检查它们的各种操作;2. 使用现成的单元测试框架;3. 测试程序时借鉴所有的可用的经验;4. 把bug做成测试用例;5. 使用一个有代码指令的调试工具。

只在软件能正确的工作后才可优化。 1. 使用监控工具找到瓶颈;2. 尽可能的用高级语言写程序。

文档里描述的应该是设计思路和目的,而不是技术细节。 1. 描述接口和原因,而不是实现;2. 重构代码,而不是注释解释运行原理;3. 引用其它程序时嵌入其它程序的文档协作 1. 代码合并前进行代码审查;2. 当帮带新成员或解决特别诡异的问题时使用结对编程维新旧代码。

(转化医学网360zhyx.com)

评论:
评 论
共有 0 条评论

    还没有人评论,赶快抢个沙发