组织生物信息学项目的最佳方式?

时间:2010-09-21 11:13:29

标签: workflow bioinformatics

我来自计算机科学。背景,但我现在正在做基因组学。

我的项目包括许多生物信息学,通常涉及:比对序列,比较序列之间的重叠等,以及各种基因组注释特征,来自不同类别的生物样本,时间过程数据,microarray,高 - 吞吐量排序("next-generation" sequencing,虽然它实际上是当前一代)数据,这种东西。

这种分析的工作流程与我在计算机科学研究中所经历的完全不同:没有UML和精心设计的对象闪耀着崇高的优雅,没有版本管理,没有适当的文档(通常没有文档),没有软件工程。

相反,每个人在这个领域所做的事情就是抄袭一个Perl脚本或AWK - 一个接一个接一个,通常是一次性使用。

我认为原因是输入数据和格式变化如此之快,问题需要尽快回答(截止日期!),项目组织似乎没有时间。

一个例子来说明这一点:假设你想写一个光线跟踪器。您可能会首先在软件工程中投入大量精力。然后编程,最后以一些高度优化的形式。因为您将使用不同的输入数据无数次使用光线跟踪器,并且会在未来几年内对源代码进行更改。因此,从头开始编写严格的光线跟踪器时,良好的软件工程是至关重要的。但是想象一下你想写一个光线跟踪器,你已经知道你将使用它来光线跟踪一张单张图片。而那张照片是在方格地板上的反射球体。在这种情况下,你会以某种方式一起破解它。生物信息学就像后一种情况一样。

您最终会得到具有不同格式的相同信息的整个目录树,直到您达到下一步所需的一种特定格式,以及名称为“tmp_SNP_cancer_34521_unique_IDs_not_Chimp.csv”的十几个文件,其中您没有一天后最轻微的想法为什么你创建了这个文件及其究竟是什么。

有一段时间我使用的是MySQL,但是现在生成新数据和更改格式的速度使得无法进行正确的数据库设计。

我知道有一篇文章涉及这些问题(Noble,W。S.(2009,July)。组织计算生物学项目的快速指南.PLoS Comput Biol 5(7),e1000424 +)。作者很好地总结了目标:

  

核心指导原则很简单:   有人不熟悉你的项目   应该能够看看你的   计算机文件和理解   详细说明你做了什么以及为什么。

嗯,这也是我想要的!但是我已经遵循了与作者相同的做法,我觉得这绝对是不够的。

记录您在Bash中发出的每一个命令,对它的确切原因进行评论,等等,只是单调乏味,容易出错。工作流程中的步骤太精细了。即使你这样做,弄清楚每个文件的用途,以及特定工作流程在哪个时间被中断,以及出于什么原因以及你继续在哪里,仍然是一项非常繁琐的工作。

(我不是在Taverna意义上使用“工作流程”一词;工作流程我只是指为达到特定目标而选择执行的步骤,命令和程序。)

如何组织生物信息学项目?

5 个答案:

答案 0 :(得分:12)

我是一个嵌入研究科学家团队的软件专家,虽然在地球科学领域,而不是生命科学领域。你写的很多内容对我来说都很熟悉。

要记住的一件事是,您在学习中学到的很多东西都是关于继续使用的工程软件。正如您所观察到的,研究科学家所做的很多事情都是关于一次性使用而且工程方法不适合。如果你想实现良好的软件工程的某些方面,你将不得不仔细挑选你的战斗。

在开始与任何战斗作斗争之前,您将不得不批判性地检查自己的想法,以确保您在学校学到的有关通用软件工程的知识对您当前的情况有效。不要以为它是。

在我的案例中,我选择的第一场战斗是源代码控制的实现。当你没有版本控制时,不难找到所有出错的例子:

  • 一些用户拥有数十个目录,每个目录都有不同版本的“相同”代码,只有大多数人所做的最独特的想法,或者为什么他们在那里;
  • 一些用户通过覆盖他们而无法记住他们所做的事情而失去了有用的修改;
  • 很容易找到人们正在研究应该是同一个程序但实际上在不同方向上不兼容的情况;
  • 等等等

一旦我收集了这些信息 - 并确保你保留了关于谁说了什么以及它们花费多少钱的好记录 - 用源代码控制来描绘一个更美好世界的图片变得相对容易。

接下来,好吧,接下来你必须选择自己的下一场战斗。但是,你必须在科学家和同事心中撒播的怀疑之一是“再现性”。如果科学实验不可重复,则无效;如果他们的实验涉及软件(他们总是这样做),那么仔细的软件工程对于再现性至关重要。其中很多都与数据来源有关,但这是另一天的主题。

答案 1 :(得分:6)

对于生物信息学特定的答案,您可能会对BioStar(生物信息学StackExchange 1.0网站)上的这两个问题感兴趣

答案 2 :(得分:1)

这里的部分问题是软件文档与发布文档之间的区别。

对于软件开发(和研究计划)设计,重要文档是结构性的和有意的。因此,对数据进行建模,为什么要做某事等等。我强烈建议您使用您在CS中学到的技能来记录您的研究计划。在长时间分析运行的同时,制定一份你想做的计划可以让你在多任务中获得很多自由。

另一方面,许多生物信息学工作都是分析。在这里,您需要将文档视为实验室笔记本,而不一定是项目计划。您希望记录您所做的事情,或者简要说明原因(例如,当您对数据进行故障排除时),以及输出和结果是什么。 我做的很简单。 首先,我从一个目录开始创建一个git repo。然后,每当我更改某个文件时,我都会将其提交给repo。尽可能地,我尝试以一种我可以放入我的git ignore文件的方式命名数据输出。 然后,尽可能地,我一次在一个项目的单个终端会话上工作,当我遇到一个暂停点时(比如当我有一组作业发送到网格时,我运行'历史| cut -c 8-'并将其粘贴到实验室备注文件中。然后编辑该文件以添加我所做的注释,并记住,将git add / commit行更改为git checkout(我有一个脚本可以执行此操作在提交消息上)。只要我在正确的目录中启动它,并且我的外部数据不会消失,这意味着我可以在以后重新创建整个过程。

对于任何稍微复杂的处理任务,我都会写一个脚本来做这件事,这样我的笔记本尽可能看起来很干净。一个近似值,辅助脚本可以被视为一个更大项目中的子程序,并且应该在内部记录到至少那个级别。

答案 3 :(得分:0)

您的问题是关于项目管理。糟糕的项目管理并非生物信息学所独有。我发现很难相信整个生物信息学行业都会受到糟糕的软件设计的影响。

关于压力......在这个世界上还有其他一些具有非常具有挑战性的最后期限的人,他们仍在使用良好的软件设计。

在许多情况下,遵循良好的软件设计并不会阻碍项目,甚至可能加速其设计和维护(至少从长远来看)。

现在问你真正的问题......你可以让你的经理重新设计代码的一小部分,这些代码对代码的其余部分没有影响,作为概念验证(POC),但是很难阻止一辆卡车如果他觉得“我们多年来一直这样工作 - 我们知道自己在做什么,而且我们不需要孩子教我们如何做我们的工作”,所以不要感到沮丧。学会像其他人一样工作,当你获得他们的信任时,你可以 偶尔做你的事(我希望你有时间和投入做正确的事)。

祝你好运。

答案 4 :(得分:-2)

您可以查看本文: "A quick guide to organizing computational biology projects"

这就是你要问的......