首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组织生物信息学项目的最佳方法?

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

Stack Overflow用户
提问于 2010-09-21 11:13:28
回答 3查看 4.6K关注 0票数 20

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

我的项目包括很多生物信息学,通常涉及:调整序列、比较序列之间的重叠等,以及不同类别的生物样本、时间过程数据、微阵列、高通量测序(“下一代”测序,虽然实际上是目前的一代)数据,这类数据。

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

相反,每个人在这个领域所做的都是逐个删除一个Perl-脚本或AWK-一行,通常用于一次使用。

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

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

在达到下一步所需的一种特定格式之前,整个目录树都会以不同的格式显示相同的信息,还有十几个文件的名称,比如"tmp_SNP_cancer_34521_unique_IDs_not_Chimp.csv“,一天后您根本不知道为什么要创建这个文件,以及它到底是什么。

有一段时间,我使用了MySQL,这很有帮助,但是现在生成新数据和改变格式的速度是如此之快,以至于无法进行适当的数据库设计。

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

核心指导原则很简单:不熟悉您的项目的人应该能够查看您的计算机文件,并详细了解您所做的事情和原因。

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

记录您在Bash中发出的每一个命令,注释它的确切原因,等等,都是乏味和容易出错的。工作流过程中的步骤太细了。即使您这样做,找出每个文件是为了什么,在什么时候某个特定的工作流被中断,出于什么原因,以及您继续的位置,仍然是一项极其繁琐的任务。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-21 12:15:59

我是一个软件专家,嵌入在一个研究科学家的团队里,尽管我在地球科学,而不是生命科学。你写的很多东西我都很熟悉。

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

在你开始战斗之前,你必须仔细检查你自己的想法,以确保你在学校里学到的关于通用软件工程的知识对你目前的情况是有效的。别以为是的。

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

  • 有些用户有几十个目录,每个目录都有不同版本的“相同”代码,而对于大多数用户所做的是唯一的,或者为什么他们在那里,只有最模糊的想法;
  • 一些用户由于覆盖它们而失去了有用的修改,并且无法记住他们所做的事情;
  • 这是很容易找到的情况下,人们工作的工作应该是相同的程序,但实际上是发展不相容的不同方向;
  • 等等

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

接下来你必须选择你自己的下一场战斗。但是,你必须在你的科学家-同事的头脑中播下怀疑的种子之一是“可复制性”。如果科学实验是不可复制的,则科学实验是无效的;如果它们的实验涉及软件(而且总是如此),那么仔细的软件工程对于可再现性是必不可少的。这其中有很多是关于数据来源的,但这是另一天的话题。

票数 12
EN

Stack Overflow用户

发布于 2010-10-19 17:05:24

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

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

另一方面,许多生物信息学的工作都是分析。在这里,您需要像对待实验室笔记本一样对待文档,而不一定是项目计划。您希望记录您所做的事情,或者简短地评论原因(例如,当您正在排除数据故障时),以及输出和结果是什么。我所做的相当简单。首先,我从一个目录开始并创建一个git。然后,每当我更改某个文件时,我就将其提交给回购程序。我尽量将数据输出命名为可以放到git忽略文件中的方式。然后,我尽可能一次为一个项目做一个终端会话,当我到达一个停顿点时(比如当我将一组作业发送到网格时,我会运行'history \cut -c 8‘并将其粘贴到一个实验室记录文件中。然后,我编辑文件,为我所做的工作添加注释,并记住,将git add/commit行更改为git签出(我有一个基于提交消息的脚本)。只要我在正确的目录下启动它,并且我的外部数据不会消失,这就意味着我可以在以后重新创建整个过程。

对于任何稍微复杂的处理任务,我都会编写一个脚本来完成,这样我的笔记本就会看起来尽可能干净。近似地说,助手脚本可以看作是大型项目中的一个子例程,并且应该在内部记录到至少这个级别。

票数 1
EN

Stack Overflow用户

发布于 2010-09-21 11:57:31

你的问题是关于项目管理的。糟糕的项目管理并不是生物信息学所独有的。我很难相信生物信息学的整个行业都被误认为是糟糕的软件设计。

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

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

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

祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3759723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档