前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生物学家与计算机科学家合作的十条原则

生物学家与计算机科学家合作的十条原则

作者头像
生信菜鸟团
发布2020-11-03 15:43:52
5740
发布2020-11-03 15:43:52
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

这篇推文的译者是我们的读者凉皮,原文来自 Ten simple rules for biologists initiating a collaboration with computer scientists, 可以阅读原文查看阅读原文。如果你在和干实验或者湿实验同学合作的时候有什么感慨和心得欢迎留言。

生物学日益数字化,科学家每天都在产生海量数据,将分子转化为序列和文本文件。作为生物学家,您可能需要帮助分析所有这些数据,并且一而再再而三的考虑与计算机科学家合作。这个人可能接受过一些计算生物学方面的培训,但他们的主要关注点一直是计算机科学(computer science,CS),这里有一个挑战:如何与他们交谈?他们也许能够写出高效的代码,但他们往往不知道一些生物学的基础知识。当他们看你的分子时,他们中的一些人可能会在意识到生物之前只看到文本文件。另外,如果解释事情花了这么多时间,值得吗?您是否应该转而自行分析您的数据?或者,也许你已经注意到,今天所有那些闪闪发光的大papers代表着生物学和CS的巧妙融合。您已经找到了合作者,并希望了解如何与他们接洽。这10条简单的规则旨在提供帮助。

规则1:不要试图把他们变成生物学家

你可能高估了成功协作所需的理解水平。你的工作不是教给计算机科学家你在多年的生物学研究中学到的东西。你的工作是给他们提供直觉,让他们以正确的方式思考问题,并激励他们提出问题。有多种方法可以实现这一点。首先,画出概念。我的第一位科学导师爱德华·凯诺夫斯基(Eduard Kejnovsky)不知何故总是随身带着一支笔和一张纸,用图画解释一切。这非常有帮助,因为那些图画变成了我能记住的图像。其次,始终提供一系列合理的值来作为分析的基础。如果有几千条染色体是不行的,那么这些序列是什么呢?在您下载的变量调用格式(VCF)文件中,您应该观察到哪些等位基因频率?什么是基因,你期望看到的长度分布和内含子分布是什么?换句话说,作为一名生物学家,你对“某物有多少”是否有意义有着非常好的直觉。把这个直觉传下去,因为这不是计算机科学家可以轻易查找或阅读的东西。定义数据中可以预期的极值。帮助计算机科学家将这种直觉转化为带有警告的单元测试(当测试一小部分代码时)。至少,您的pipelines需要报告它们在数据中捕获的任何异常观察,而异常的定义必须由生物学家提供。随着项目的进展,重新检查您的定义,以确保相互理解。

规则2:不要评判知识差距

即使缺乏最基本的知识也是可以的。人们可以在不知道着丝粒是什么,也不了解减数分裂和有丝分裂之间的区别的情况下过上幸福的生活。如果您在了解您的合作者方面遇到重大差距,请暂停几秒钟,并考虑一下传达这一概念的最佳方式。不要装出惊讶的样子,不要表现出失望的样子,也不要表现出烦恼的样子。简单而冷静地解释这个概念。用类似“这有意义吗?”这样的问题来结束你的解释。和“你有什么问题吗?”到了讨论CS的时候,他们会报答的。记住,你们合作是为了相互补充,而不是为了竞争,所以你的合作者对你的学科没有深入的了解实际上可能是一件好事;它使他们成为了他们的学科的专家。

规则3:了解计算机如何以计算友好的方式存储数据和格式化信息

仅仅因为您下载了文件并不意味着它下载正确。由于多种原因,文件的完整性可能会受到影响:磁盘空间可能已用完,或者网络连接可能瞬间中断。确保文件完好无损的一种方法是使用所谓的散列。我们不是查看整个文件,而是生成文件的描述(通常是由字母和数字组成的字符串)。如果两个文件相同,则将以完全相同的方式描述它们。如果两个文件是不同的,那么意外地以相同的方式描述它们是非常非常不可能的。最流行的散列方式是运行md5sum(在Mac上是md5),只需键入“md5sum filename”即可。那你有的那个巨大的FASTQ文件呢?尝试更改“单个”字符并比较md5sum是否仍然相同(不是)。无论何时从数据库下载数据,或何时向协作者发送数据或从协作者接收数据,都可以使用此选项。对于计算机科学家来说,如果两个文件完全相同,则它们是相同的。尝试一下吧,在复制文件时,请学习使用rsync而不是cp/mv,这样您就不必担心关闭笔记本电脑或断电,因为此命令可以在中断后成功继续。

最初,以一种与计算管道和软件包配合良好的方式格式化数据可能并不直观,但您可以遵循一些约定。例如,您的团队应该同意将染色体编号为数字或字母和数字的组合(1对ChR1)。这是生物信息学中无数误解的来源,特别是当重新运行一周前工作得很好但不知何故无法处理新数据的pipelines时。注意使用小写、大写以及单数和复数命名方案。再说一次,你测序的组织是来自睾丸(testis,单数)还是来自睾丸(testes,复数),对你来说可能会有一点不同,但会让你的合作者感到困惑。

丢失的数据不一定会丢失。由于多种原因而可能为空的空单元格和真正缺失的数据点(我们只是不知道)之间是有区别的。也许我们的合作者没有注意到我们的样本是男性还是女性,或者他们从哪个组织提取了DNA。这与空的单元格非常不同,因为我们还没有填充该信息,可以想象,因为我们将在将来发现该信息。另外,我们甚至根本不需要知道这些信息吗?这些是许多不同的场景,它们以不同的方式标记信息,这在分析过程中可能会变得很重要。例如,许多科学家结合测序数据集,但所有这些数据集是否都来自同一个人?当您看到关节数据中的细微差异时,这可能会变得很重要,因为一些差异可能是由于技术原因,而另一些差异可能是由于生物原因。因此,制定严格的指导方针,并保持一致。用NA、-或最糟糕的是空格标记丢失的数据对您来说可能都意味着相同的事情,但它们对您的计算机或与您合作的计算机科学家都不意味着相同的事情。是的,特别是收集人类的数据可能会变得杂乱无章,收集的信息永远不会完美,但你的笔记没有理由不完美!

最后,有什么比举出例子更友好的呢?生物学家方面的所有要求都必须带有示例或测试数据,这意味着给定输入的预期输出。这不需要是正式的;虽然这是理想的,但作为对照,您可以只提供您期望在输出中看到的基因列表和您从未期望在输出中看到的基因列表。计算机科学家将把这些例子变成可以重复运行的测试。这将确保即使在多次修改代码之后,特定的输入文件仍将生成特定的输出文件。

总而言之,选择一致的命名方案、仔细记录丢失的数据以及提供测试数据集都是实现“计算友好性”的良好步骤。

规则4:以便于协作的方式描述您的数据

CS有一个完整的领域来处理如何在数据库中存储信息,但是您现在可以做一些事情来促进其他人重用您的数据。首先,如果将数据存储在行中,那么所有表都需要有一个具有唯一标识符或键的列,并且该列需要是全局唯一的。如果你的样本被命名为猩猩,一旦你对另一只猩猩的数据进行排序,会发生什么?日期也可能很有帮助,例如,标记从2020年10月6日开始的序列运行,但即使在这里也需要小心,因为不同地区对时间戳的理解不同。在欧盟地区,上面的例子可能会被理解为2020年6月10日的序列,但在北美,它可能被解读为2020年10月6日。如果您的样品没有附带ID,请自己创建。这样,您就可以识别出所有使用过此特定样本的地方。

您的表应该以一种需要“最少的”专家知识才能理解的方式来描述。如果你所有的样本都有一栏描述它们是DNA还是RNA,不要在那栏里写任何其他东西!您可能会想写“细胞培养”或“流动分类材料”,因为对您来说,这些显然是DNA样本,但对于您的合作者来说,这并不明显。更糟糕的是,当他们使用这一栏将所有带有DNA的样本列入候选名单时,他们将错过这些特殊的行。相应地,如果我在写“计算机科学家与生物学家合作的10条简单规则”,我会说生物学家将不可预测的东西写进他们表格的单元格!在从表中取出任何值之前,查看所有值的总和是很重要的。不要复制信息并使用一致的分隔符也很重要,因为混用制表符、逗号和其他符号很少是个好主意。

总之,以合乎逻辑的、连贯的方式描述您的数据,并确保您的合作者开始使用这些数据时不需要内部人员或专家知识。

规则5:了解是否应该加速代码(以及如何加速)

“过早优化是万恶之源”[1]是“CS”中最著名的语录之一。虽然有些事情您不应该妥协,比如记录您的代码,但是您的脚本真的有必要在5分钟而不是15分钟内完成吗?此脚本多久运行一次,由多少人运行?如果您加快速度,它们将累计节省多少时间?在优化任何东西之前,我建议查看xkcd[2]的这本出色的指南。请注意,本指南假定您正在优化的是您的时间,而不是一个算法,但这是一个很好的起点,可以让您直观地了解权衡取舍。

假设您决定确实要加快代码的速度。有些并行化是自然且相当简单的,例如按染色体运行脚本。在这种情况下,如果底层数据在统计上是独立的,通常没有理由“不”并行运行它。另一种选择是让您的代码与多个中央处理单元(CPU)一起工作,但我不建议将此作为第一个措施,因为如果做得不好,可能会损害结果的完整性。对于许多应用程序来说,将数据拆分成批处理并使用相同的脚本并行运行它们,然后合并结果是一个很好的选择。

作为生物学家,您可能也听说过一些编程语言比其他编程语言更快。然而,在日常科学中,我坚信可读性和再现性比速度更重要。与速度更快的低级C代码相比,其他科学家可能更愿意重用您的高级Python代码。请注意,在这里,我不是在谈论可能会由同样多的用户运行数千次的软件。我指的是您的研究结果附带的代码,它很可能是已建立的pipelines和自定义脚本的组合。因此,不要在未经深思熟虑的情况下从事以加速为目标的协作。

规则6:考虑概念和受众,而不是编程语言

本质上,CS是关于概念和抽象的,而不是关于任何编程语言的。许多计算机科学家并不真正关心在任何特定语言中的实现。在与计算机科学家合作时,不要强求您的实现想法。相反,要传达您想要看到的产品范围及其背后的概念。生物学家有时过于执着于某些解决方案(C++是快速的,SQL是必要的),以至于他们可能会退后一步,转而考虑他们最初的目标,这对他们来说可能是一种挑战。

你可能听说过“off-by-one error”是生物信息学中最常见的错误之一。为什么?其中一个原因是生物学家通常从1开始计数,而计算机科学家则被训练从0开始(所以第二个位置指向第三个元素)。为了有效协作,您需要了解基于0的间隔和基于1的间隔、半开放间隔和开放间隔之间的区别,并且在任何时候共享任何类型的间隔数据时,都需要沟通您使用的是哪种间隔数据。常用的间隔格式是.bed(从0开始)和.gff(从1开始),您甚至可以选择在特定项目中仅使用其中的1个。同样,两种流行的编程语言Python和R也倾向于分别从0和1开始编号。

总而言之,选择一个问题而不是技术,但是当你选择一项技术时,要了解它的警告。

规则7:目标是透明性和重现性,在每个阶段共享您的代码

不要等到最终产品出来后才开始与计算机科学家合作,或者敢于向他们展示你的pipelines。许多生物学家都有意识地分享他们的代码,通常会试图将分享推迟到最后的发表前时刻。然而,这已经太晚了。代码可以存储在特殊的存储-命名存储库-中,并且可以在私有组中“立即”访问。私人存储库通常对学术机构是免费的,并且可以逐步改进,直到发布日期切换为公共存储库。一些科学家甚至选择立即公开他们的代码,以刺激合作,并在公共领域拥有他们想法的有形证据。有时,不分享的原因是对代码的“不完美”程度感到尴尬。实际上,所有生物学家在与计算机科学家分享他们的代码时都有这种感觉。代码审查(其他人检查您的代码并指出不一致和错误)不应该是一种令人不舒服的做法,而应该像在CS和工程中一样成为一个标准过程。学会感激有人愿意查看您的代码并对其进行测试。你不会发表一篇你是唯一读过它的人的论文,为什么脚本可以呢?

不要通过电子邮件发送您的代码;相反,请提供到您正在使用的存储库的链接,并按提交ID或日期引用特定版本,这样您就不会有包含50个不同版本的您正在编写的代码的文件夹。现在,向存储库提交代码可以通过浏览器中的图形界面方便地完成,因此您甚至不需要打开终端就可以做到这一点。如果有疑问,请向您的合作者寻求帮助。为了使协作更加顺利,可以使用多种工具,如git (GitHub (https:// github.com)或Bitbucket (https://bitbucket.org)),Jupyter (https://jupyter.org; iPython, https://ipython.org)notebooks, Rmarkdown (https://rmarkdown.rstudio.com), Galaxy (https://galaxyproject.org), snakemake (https://snakemake.readthedocs.io), nextflow (https://www.nextflow.io)和LaTeX (https://www.latex-project.org) (and Overleaf; https://www.overleaf.com)。如果这些听起来不堪重负,而且你不确定投入时间学习其中任何一个是否值得,那就参加(在线)研讨会或研讨会,或者在别人提到它们时注意一下。

虽然所有这些工具都将使您的研究更具重现性,但请注意,真正的重现性并不是使用定义的pipeline为非常特定的输入获得非常特定的输出。套用István Albert的话说,真正的生物学应该对软件版本或关于参数或随机种子的次要决策相当不可知[3],理想情况下,结果应该稍后在独立的数据集上进行验证,以避免多重测试问题[4]。

总之,尽早、公开并经常共享您的代码。

规则8:了解每个学科的长处和局限性

CS和生物学在如何处理抽象和复杂性[5]、处理问题的方式以及“感兴趣的”问题上是不同的。CS教师和CS学生通常不会做CS研究来帮助人们解决他们的生物研究问题。相反,他们希望发明新的CS,就像生物学家希望发现新的生物学一样。生物学家应该明白计算机科学家的目标是从这次合作中得到什么--这通常不是做更多编程或回答他们的生物学问题的机会。就像运行另一个聚合酶链式反应(PCR)对生物学家来说不是特别有意义一样,编写另一个在数据格式之间转换的简短脚本对CS人员来说也不是特别有意义。以工具的形式实现的一段新颖的CS可以与一篇将其应用于真实数据的生物学论文同时出版。请注意,计算机科学家发表的文章有所不同,主要是以会议的形式进行,这是(通常相当简明的)推动该领域的交流。相反,生物学论文往往有许多合著者提供不同的专业知识,有时还会提供过多的补充材料。

计算机科学家有着源远流长的开源传统,而生物学家往往依赖于专有的方法和知识。在关于“如何”和“何时”共享数据、协议和代码的讨论中,这些世界观相互冲突。计算机科学家通常倾向于开放科学的概念;正如MartinČech曾经说过的那样,“你不能关起门来建立社区。”

生物学家经常处理实验错误(和“嘈杂的”数据),而计算机科学家通常没有处理这些错误的经验。因此,对于任何给定的实验,交流生物和技术复制的定义以及对假阳性和假阴性的解释是有利的。计算机科学家接受了更好的培训,以便正式定义每个实验和模型的条件和限制,只要有可能,就应该给予他们这样做的空间。

建立生物学家和计算机科学家的共同目标和个人目标,了解每个学科的优势和局限性,同时达成理解和接受,并制定如何将每项贡献记入帐上的计划,对达成合作大有裨益,而且从长远来看,这是至关重要的。

规则9:沟通如何验证您的协作结果

你们的合作会有什么结果?你将如何验证计算机科学家将产生的数据?尽早确定这一点很重要,这样合作者才能清楚地了解湿实验室验证的可能性和可行性。你只对少数几个自信十足的候选人感兴趣吗?你能验证数以百计的调查结果吗?讨论这一点也可能增加合作中的个人投资,因为对计算机科学家来说,验证自己的发现通常是令人满意的。

正如编写是一个迭代的改进过程,与计算机科学家的联合项目开发也是如此。在每一次迭代中,流水线都被改进,直到获得令人满意的输出,并且有希望是可重现的。起初,生物学家甚至可能无法完全定义他们所请求的pipeline的参数,但会根据数据指导他们的决定。其他时候,需要验证中间结果,这需要时间和精力。最初的pipeline很少能满足所有未来的应用,因此长期合作是有利的。

质量控制是每个pipeline的重要组成部分,需要生物学家和计算机科学家共同开发,以解决预期的生物变异和数据处理过程中可能出现的错误(例如,正向/反向链处理不当)。一位计算机科学家可能会建议进行一些额外的实验,以校准pipeline,这些实验似乎对生物学家没有什么好处。其他时候,生物学家可能会选择让计算机科学家对经过测试的假设视而不见,这样他们就不会偏向某个特定的结果。

最后,因为管道可以无限期地改进,所以强调进度的往返性质、沟通最终产品的特征以及讨论将要执行的验证类型都是设置初始期望的好方法。

规则10:不要因为什么是“真正的”科学而卷入战争

这可能是所有规则中最重要的一条。你可以触摸和操纵的东西,例如,用棍子戳或者在显微镜下观察,都是令人惊叹的。然而,有一整套实验室只做硅生物学(in silico biology)的研究。当已故的詹姆斯·泰勒进入约翰·霍普金斯大学(JHU)生物系时,他做的第一件事就是从他的新实验室空间移走了不必要的湿实验椅。他不需要他们成为可再生性和开放科学的捍卫者。如果科学发生在电脑或长椅上,它就不再是真实的了。我们都习惯于处理看不见摸不着的东西,为什么计算驱动的生物学会是个例外呢?

这个问题很重要,因为不被认为从事真正生物学研究的计算机科学家不能被认为是真正从事生物学研究的计算机科学家。生物学家产生数据,但需要计算知识来分析数据。没有生物学专业知识,就没有数据;没有计算专业知识,就没有分析;但准确地说,这就是协作的美妙之处,幸运的是,共享的第一作者正在越来越多地认识到这一点。虽然您当然可以外包一些典型的计算问题(考虑差异基因表达分析或基因组组装),但以不同的方式对待您的合作者是至关重要的。计算机科学家不是为你工作,而是和你一起工作。相反,要认识到跨学科研究的价值。

跨学科协作可能会令人沮丧、乏味,并且充满误解。然而,这也可能是最令人惊叹和最令人满意的科学之旅-“如果”你把一群对学习持正确态度的人和来自互补背景的人结合在一起。计算机科学家会问你一些你从未想过的令人兴奋的问题。这是因为他们没有像你那样在多年的循序渐进的学习过程中学习生物。他们的知识被分割成数千个松散连接的片段,特别是当他们放大到这些松散的连接时,他们会问你这个领域里没有人知道答案的问题。这是一次狂野而值得的旅行,也是你可以准备好的。希望这10条简单的规则能帮助你系好安全带接受它。

致谢

我要感谢马丁·切赫和埃德蒙多·托雷斯-冈萨雷斯对本文的反馈,以及拉胡尔·维杰斯纳、威尔弗里德·吉布莱和陈迪的评论。最后,感谢所有和我一起成功违反规则1的生物学家。

References

  1. Knuth DE. Structured Programming with go to Statements. ACM Comput Surv 1974; 6:261–301.
  2. Munroe R. Is it Worth the Time? Retrieved from xkcd https://xkcd.com/1205/
  3. Albert I. The Biostar Handbook. eBook. 2020. https://www.biostarhandbook.com
  4. Altman N, Krzywinski M. P-values and the search for significance. Nat Methods 2017; 14:3–4.
  5. Lazebnik Y. Can a biologist fix a radio?—Or, what I learned while studying apoptosis. Cancer Cell 2002; 2:179–182. https://doi.org/10.1016/s1535-6108(02)00133-2 PMID: 12242150
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 规则1:不要试图把他们变成生物学家
  • 规则2:不要评判知识差距
  • 规则3:了解计算机如何以计算友好的方式存储数据和格式化信息
  • 规则4:以便于协作的方式描述您的数据
  • 规则5:了解是否应该加速代码(以及如何加速)
  • 规则6:考虑概念和受众,而不是编程语言
  • 规则7:目标是透明性和重现性,在每个阶段共享您的代码
  • 规则8:了解每个学科的长处和局限性
  • 规则9:沟通如何验证您的协作结果
  • 规则10:不要因为什么是“真正的”科学而卷入战争
  • 致谢
  • References
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档