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

Workflow 组织生物信息学项目的最佳方式?,workflow,bioinformatics,Workflow,Bioinformatics,我来自计算机科学系。背景,但我现在在做基因组学 我的项目包括很多生物信息学,通常涉及:序列对齐,比较序列之间的重叠,以及各种基因组注释特征,来自不同类别的生物样本,时间过程数据,高通量测序(尽管实际上是当前一代)数据,这类数据 这种分析的工作流程与我在计算机科学学习期间所经历的完全不同:没有UML和经过深思熟虑设计的对象闪耀着崇高的优雅,没有版本管理,没有适当的文档(通常根本没有文档),根本没有软件工程 相反,在这个领域中,每个人都在编写一个Perl脚本或一行接一行,通常是一次性使用 我认为原因

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

我的项目包括很多生物信息学,通常涉及:序列对齐,比较序列之间的重叠,以及各种基因组注释特征,来自不同类别的生物样本,时间过程数据,高通量测序(尽管实际上是当前一代)数据,这类数据

这种分析的工作流程与我在计算机科学学习期间所经历的完全不同:没有UML和经过深思熟虑设计的对象闪耀着崇高的优雅,没有版本管理,没有适当的文档(通常根本没有文档),根本没有软件工程

相反,在这个领域中,每个人都在编写一个Perl脚本或一行接一行,通常是一次性使用

我认为原因是输入数据和格式变化太快,问题需要很快得到回答(截止日期!),以至于似乎没有时间组织项目

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

最后,您将得到一整棵目录树,其中包含不同格式的相同信息,直到达到下一步所需的特定格式,以及十几个名为“tmp_SNP_cancer_34521_unique_IDs_not_Chimp.csv”的文件一天之后,你根本不知道为什么要创建这个文件,它到底是什么

有一段时间我一直在使用which,但现在新数据生成和格式更改的速度太快了,无法进行正确的数据库设计

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

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

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

记录您在其中发出的每一个命令,并对其进行注释,说明您执行该命令的确切原因,等等,这些都非常繁琐且容易出错。工作流中的步骤过于细粒度。即使您这样做了,要弄清楚每个文件的用途、特定工作流在哪一点被中断、出于什么原因以及在哪里继续,仍然是一项极其繁琐的任务

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


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

你的问题是关于项目管理的。糟糕的项目管理并非生物信息学所独有。我发现很难相信整个生物信息产业都致力于糟糕的软件设计

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

在许多情况下,遵循一个好的软件设计并不会抑制项目,甚至可能加快其设计和维护(至少从长远来看)

现在谈谈你真正的问题。。。你可以让你的经理重新设计代码中对其他代码没有影响的小部分,作为概念证明(POC),但要阻止卡车继续行驶确实很难,所以如果他觉得“我们这样工作了很多年——我们知道我们在做什么,我们不需要孩子来教我们如何工作”,不要生气。学会像其他人一样工作,当你获得他们的信任时,你可以 偶尔做一次你的事情(我希望你有时间和奉献精神去做正确的事情)


祝你好运。

我是一个软件专家,加入了一个研究科学家团队,虽然是在地球科学领域,而不是生命科学领域。你写的很多东西我都很熟悉

要记住的一件事是,你在学习中学到的很多东西都是关于继续使用的工程软件。正如你所观察到的,科学家们所做的很多工作都是一次性的,工程方法并不合适。如果你想实现好的软件工程的某些方面,你必须仔细选择你的战斗

在你开始战斗之前,你必须批判性地检查你自己的想法,以确保你在学校学到的关于通用软件工程的知识适用于你目前的情况。不要以为是这样

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

  • 一些用户有几十个目录,每个目录都有不同版本的“同一”代码,只有最模糊的想法知道他们中的大多数人做了什么,这是唯一的,或者他们为什么会在那里
  • 一些用户已经失去了有用的修改,因为它们被覆盖了,并且无法记住它们所做的修改