【问题标题】:Why is Perl used so extensively in biology research? [closed]为什么 Perl 在生物学研究中被如此广泛地使用? [关闭]
【发布时间】:2011-02-01 09:36:15
【问题描述】:

作为一名学生,我在一家生物研究所担任支持人员,Perl 似乎无处不在。不是针对每个项目,但似乎这里超过一半的人在办公室/办公桌上/上都有几本 Perl 书籍。

为什么 Perl 在生物学中被如此广泛地使用?

【问题讨论】:

  • 大概是因为它是一种功能强大的解释性语言,而且它的存在时间比 python 还长?同样,大量的科学代码是用 fortran 编写的——当时它只是 编译语言。
  • 你问过和你一起工作的人吗?
  • @Poita_:好电话。当然,他们可能会说像 Paul 和我所做的那样——这只是我们使用的,里面写着东西......
  • 其他科学使用 FORTRAN 和游戏开发人员使用 C++ 的原因相同:现有库。
  • @Kevin:她应该使用 perltidy 和 perlcritic。

标签: perl bioinformatics biometrics


【解决方案1】:

Lincoln Stein 在他的文章中强调了 Perl 在生物信息学方面的一些优势: How Perl Saved the Human Genome Project.

根据他的分析:

我认为有几个因素是负责任的:

  1. Perl 非常适合对文本进行切片、切块、扭曲、绞拧、平滑、汇总和其他方式的处理。尽管现在生物科学确实涉及大量的数值分析,但大部分原始数据仍然是文本:克隆名称、注释、cmets、参考书目。甚至 DNA 序列也是类似文本的。相互转换不兼容的数据格式是文本修改和一些创造性的猜测相结合的问题。 Perl 强大的正则表达式匹配和字符串操作运算符以任何其他现代语言无法比拟的方式简化了这项工作。

  2. Perl 是宽容的。生物数据通常不完整,字段可能缺失,或者预期会出现一次的字段出现多次(例如,因为重复运行了一个实验),或者数据是手动输入的并且不完全符合预期的格式。 Perl 并不特别介意值是否为空或包含奇数字符。可以编写正则表达式来拾取和纠正数据输入中的各种常见错误。当然,这种灵活性也可能是一种诅咒。我将在下面详细讨论 Perl 的问题。

  3. Perl 是面向组件的。 Perl 鼓励人们在小模块中编写他们的软件,或者使用 Perl 库模块,或者使用经典的 Unix 面向工具的方法。使用管道、系统调用或套接字可以轻松地将外部程序合并到 Perl 脚本中。 Perl5 引入的动态加载器允许人们使用 C 例程扩展 Perl 语言,或者使整个编译库可用于 Perl 解释器。目前正在努力将世界上收集到的所有关于生物数据的智慧收集到一组称为“bioPerl”的模块中(在稍后将在 Perl 期刊上发表的一篇文章中进行了详细讨论)。

  4. Perl 易于编写且开发速度快。解释器不需要您提前声明所有函数原型和数据类型,新变量会根据需要自动生成,调用未定义函数只会导致需要该功能时出错。调试器与 Emacs 配合得很好,并允许舒适的交互式开发风格。

  5. Perl 是一种很好的原型设计语言。因为 Perl 又快又脏,所以在将新算法迁移到快速编译语言之前,在 Perl 中对新算法进行原型设计通常是有意义的。 有时事实证明 Perl 足够快,以至于不需要移植算法;更常见的是,可以用 C 编写算法的一个小核心,将其编译为动态加载的模块或外部可执行文件,然后将应用程序的其余部分留在 Perl 中(有关以这种方式实现的复杂基因组映射应用程序的示例,请参阅http://waldo.wi.mit.edu/ftp/distribution/software/rhmapper/)。

  6. Perl 是一种很好的 Web CGI 脚本语言,并且随着越来越多的实验室转向 Web 来发布他们的数据,Perl 的重要性也在增加。

【讨论】:

  • 哦,看起来不错。谢谢!
  • @mobrule :关于第 6 点,您的分析是从 2010 年开始的,还是从旧书中得到的???
  • 分析摘自链接文章,该文章来自 1996 年夏天。
  • 对不起,我没有阅读源代码...我想知道今天谁还在为大型网站做 cgi 脚本 ;-)
  • @Philippe:这已经很老了。 Bioperl 很早以前就问世并被广泛使用。出于许多相同的原因,我自己使用 python。
【解决方案2】:

真正的答案可能与 Perl 的关系比您想象的要少。发生的很多事情都是历史的偶然。在那个时候,Perl 很流行,Java 越来越流行,没有太多人关注 Python,而 Ruby 才刚刚起步。

需要完成工作的人使用 Perl 并用 Perl 创建了一些库,其他人开始使用这些库。一旦人们开始使用对他们适度有用的东西,他们往往不会转换(经济学家称这些为“转换成本”)。从那里开始,更多的人开始使用它,因为很多其他人都在使用它。

今天可能不会发生同样的演变。我想说 Perl、Python 和 Ruby 都完全可以胜任这项任务。 mobrule quotes from Lincoln Stein 的所有内容都适用于今天的三者中的任何一个。如果今天每个人都必须从头开始,那么这些语言中的任何一种都可能成为每个人都使用的语言。

我注意到,从我自己的客户群(一个非常小且不具代表性的生物技术样本)中,推动许多生物材料编程的人似乎至少是支持的兼职系统管理员科学家们。科学家们担心科学并做了一些简单的编程,但 IT 支持人员正在为非科学部分做很多繁重的工作。 Perl 非常适合作为系统管理员工具,因为它是 Internet 的管道。

【讨论】:

  • 我倾向于不同意这里。 Perl 确实很有表现力,所以如果你主要关心的不是编程,而是完成工作,然后回到你真正的工作,那么语言的表现力有助于计算机像你一样思考,而更典型的语言更有帮助你像电脑一样思考。
  • 虽然 Ruby 和 Python 与 Perl 非常相似,但它们的正则表达式引擎并没有那么好。他们没有那么快,也不能做那么多“疯狂”的事情。这通常不是问题,因为如果您正在做一些非常疯狂的事情,那么语法可能更适合您,但是您必须教所有生物学家语法,递归下降解析等。
  • 虽然 Perl 可能有更强大的功能,但我发现大多数人在学习 Perl 时几乎没有使用任何东西。
  • @briandfoy:几乎所有语言都是如此。 C++ 比 Perl 更正确
  • 我同意@singingfish
【解决方案3】:

可能是因为 Perl 擅长处理字符串,而许多遗传学研究都涉及到长长的“ACTGCATG...”字符串的处理。只是猜测...

【讨论】:

  • 是什么让 Perl 非常擅长处理字符串?
  • 他们有一个非常好的正则表达式引擎,而且一直都有。 (Larry Wall 是 RE 引擎之神之一,是字符串操作的傻瓜。)
  • @Kevin:这就是 Larry Wall(Perl 的创造者)的初衷——成为一个病态折衷的垃圾列表者。 :)
  • @Donal:呵呵,我们都同时提到了拉里 :)
  • @Ether:你应该查一下“shub-niggurath”,看看我心目中的上帝是什么样的。首先确保房间光线充足。 ;-)
【解决方案4】:

我使用大量 Perl 来处理社会科学研究中的定性和定量数据。在快速完成任务(主要是文本)、在 CPAN 上查找库(不错的中心位置)以及通常只是快速完成任务方面,它无法超越。

Perl 也是出色的粘合剂,因此如果您有一些乐器记录,并且需要将它们粘合到数据分析例程中,那么 Perl 就是您的语言。

【讨论】:

    【解决方案5】:

    Perl 似乎是生物信息学的首选语言 - 甚至有一个关于这个主题的 O'Reilly 标题:Beginning Perl for Bioinformatics

    【讨论】:

    • 没错!但为什么?! :) 也许我会看看能不能找到那本书的副本,因为它可能有介绍性章节来解释我的问题的答案。
    【解决方案6】:

    Perl 在处理文本方面非常强大,并且几乎存在于每个 Linux/Unix 发行版中。在生物信息学中,不仅序列数据很容易用Perl操作,而且大多数生物信息学算法都会输出某种文本结果。

    然后,像 EBI 这样最大的生物信息学中心有那个伟大的人 Ewan Birney,他领导了 BioPerl 项目。该库为每种流行的生物信息学算法的结果提供了大量解析器,并用于处理主要序列数据库中使用的不同序列格式。

    然而,如今,Perl 并不是生物信息学家使用的唯一语言:与序列数据一起,实验室产生越来越多不同类型的数据类型,而其他语言更常用于这些领域。

    例如,R 统计编程语言广泛用于微阵列和 qPCR 数据(以及其他)的统计分析。再说一次,为什么我们这么多使用它?因为它为此类数据提供了出色的库(请参阅bioconductor 项目)。

    现在谈到 Web 开发,CGI 并不是当今最先进的技术,但了解 Perl 的人可能会坚持下去。在我的公司虽然它不再使用了...

    我希望这会有所帮助。

    【讨论】:

      【解决方案7】:

      Perl 基本上强制非常短的开发周期。这就是完成任务的开发。

      足以胜过 Perl 的缺点。

      【讨论】:

      • Perl 如何强制缩短开发周期?
      • 我认为他的意思是,“允许”。它如何允许较短的开发周期?库和最小样板。你写的代码解决了你的问题;它不会重新发明轮子或存在安抚编译器(你好,java)。
      • 嗯,“允许”通常意味着您进行编辑并立即运行结果。没有先验的需要编译、链接等。
      【解决方案8】:

      生物信息学主要处理文本解析,而 Perl 是最适合这项工作的编程语言,因为它是为字符串解析而设计的。正如 O'Reilly 的书(Beginning Perl for Bioinformatics)所说,“凭借 [Perl] 高度发达的检测数据模式的能力,Perl 已成为最流行的生物数据分析语言之一。”

      【讨论】:

        【解决方案9】:

        这似乎是一个相当全面的回应。然而,也许缺少的一件事是大多数生物学家(也许直到最近)根本没有太多的编程经验。 Perl 的学习曲线低于编译语言(如 C 或 Java),但 Perl 在文本处理方面仍然提供了大量特性。那么如果运行时间更长怎么办?生物学家绝对可以处理这个问题。实验室实验通常需要一小时或更长时间才能完成,因此多等几分钟来完成数据处理并不会杀死他们!

        请注意,我在这里谈论的是出于必要而进行编程的生物学家。我知道有一些非常熟练的程序员和计算机科学家也使用 Perl,这些 cmets 可能不适用于他们。

        【讨论】:

          【解决方案10】:

          人们错过了DBI,这是一个 Perl 抽象数据库接口,它使使用生物信息数据库变得非常容易。

          还有one-liner 角度。您可以在 Perl 的一行中编写一些东西来重新格式化数据,然后使用 -pe 标志将其嵌入到命令行中。许多使用AWKsed 的人都转向了Perl。即使在完整的程序中,文件 I/O 的编写也非常容易和快速,与周围的任何工程语言相比,文本转换的表现力也很高。使用 Java 甚至 Python 进行一次性文本转换的人只是懒得学习另一种语言。 Java 尤其高度依赖 JVM 实现及其 I/O 性能。

          至少您知道 Perl 的速度有多快或多慢,比 C I/O 稍慢。不要学grepcutsedAWK;只需学习 Perl 作为您的命令行工具,即使您不使用它生成大型程序。在 CGI 方面,Perl 有很多更好的 Web 框架,例如 CatalystMojolicious,但绝对来自 CGI 和生物信息学这两个互联网最早的重度用户之一。

          【讨论】:

            【解决方案11】:

            与其他语言相比,Perl 非常容易学习。它可以充分利用正在成为大数据的生物数据。它可以处理大数据并在处理数据管理和所有类型的 DNA 编程方面表现出色,由于 Perl、Python 和 Ruby 等语言,生物学的自动化变得很容易。对于那些了解生物学但不知道如何用其他编程语言进行编程的人来说,这很容易。

            【讨论】:

              【解决方案12】:

              就我个人而言,我知道这会让我过时,但这是因为我首先学习了 Perl。我被要求获取 FASTA 文件并与其他 FASTA 文件混合。当我四处询问时,Perl 是推荐的工具。

              当时我上过几门计算机科学课程,但我对编程并不是很了解。

              Perl 被证明相当容易学习。一旦我将regular expressions 记入脑海,我就会在一天内解析并制作新的 FASTA 文件。

              正如已经建议的那样,我不是程序员。我是一名生物化学专业的毕业生,在实验室工作,我犯了一个错误,即设置了一个每个人都可以看到我的 Linux 服务器。这是一个全天的项目。

              不管怎样,Perl 成了我在实验室需要做的任何事情的首选。它很棒,易于使用,超级灵活,其他实验室的其他 Perl 人员我们和我很像。

              所以,简而言之,Perl 易于学习、灵活且宽容,它满足了我的需求。

              当我真正进入生物信息学领域后,我开始学习 R、Python 甚至 Java。 Perl 并不擅长帮助创建可维护的代码,主要是因为它非常灵活。现在我只是使用这种语言来完成工作,但 Perl 仍然是我最喜欢的语言之一,比如初吻之类的。

              重申一下,大多数生物信息学人员只是通过拼凑东西来学习编码,而大多数时候你只是想为principal investigator (PI) 找到答案,所以你不能花几天时间在代码设计上. Perl 在获得答案方面非常出色,它可能不会再工作了,如果你在六个月后看到它,你将无法理解你自己的代码中的任何内容;但是如果你现在需要一些东西,那么即使我现在主要使用 Python,它也是一个不错的选择。

              我希望这能给你一个生活过的人的答案。

              【讨论】:

                猜你喜欢
                • 2010-11-02
                • 2013-09-06
                • 1970-01-01
                • 1970-01-01
                • 2010-11-10
                • 1970-01-01
                • 1970-01-01
                • 2018-04-29
                • 1970-01-01
                相关资源
                最近更新 更多