我作为一名学生在生物研究所担任支持人员,Perl 似乎无处不在。不是针对每个项目,但似乎这里超过一半的人在办公室/办公桌上/上都有几本 Perl 书籍。
为什么 Perl 在生物学中被如此广泛地使用?
我作为一名学生在生物研究所担任支持人员,Perl 似乎无处不在。不是针对每个项目,但似乎这里超过一半的人在办公室/办公桌上/上都有几本 Perl 书籍。
为什么 Perl 在生物学中被如此广泛地使用?
Lincoln Stein 在他的文章中强调了 Perl 对生物信息学的一些可取之处: Perl 如何拯救了人类基因组计划。
从他的分析来看:
我认为有几个因素是负责任的:
Perl 非常适合对文本进行切片、切块、扭曲、绞拧、平滑、总结和其他方式的修改。尽管现在生物科学确实涉及大量的数字分析,但大多数原始数据仍然是文本:克隆名称、注释、评论、参考书目。甚至 DNA 序列也是类似文本的。相互转换不兼容的数据格式是文本修改和一些创造性的猜测相结合的问题。Perl 强大的正则表达式匹配和字符串操作运算符以任何其他现代语言无法比拟的方式简化了这项工作。
Perl 是宽容的。生物数据通常不完整,字段可能缺失,或者预期会出现一次的字段出现多次(例如,因为重复运行了一个实验),或者数据是手动输入的并且不完全符合预期的格式。Perl 并不特别介意值是否为空或包含奇数字符。可以编写正则表达式来拾取和纠正数据输入中的各种常见错误。当然,这种灵活性也可能是一种诅咒。我将在下面详细讨论 Perl 的问题。
Perl 是面向组件的。Perl 鼓励人们在小模块中编写他们的软件,或者使用 Perl 库模块,或者使用经典的 Unix 面向工具的方法。使用管道、系统调用或套接字可以轻松地将外部程序合并到 Perl 脚本中。Perl5 引入的动态加载器允许人们使用 C 例程扩展 Perl 语言,或者使整个编译库可用于 Perl 解释器。目前正在努力将世界上收集到的所有关于生物数据的智慧收集到一组称为“bioPerl”的模块中(在稍后将在 Perl 期刊上发表的一篇文章中进行了详细讨论)。
Perl 易于编写,开发速度快。解释器不需要您提前声明所有函数原型和数据类型,新变量会根据需要出现,对未定义函数的调用只会在函数被调用时导致错误需要。调试器与 Emacs 配合得很好,并允许舒适的交互式开发风格。
Perl 是一种很好的原型语言。因为 Perl 又快又脏,所以在将新算法迁移到快速编译语言之前,在 Perl 中对新算法进行原型设计通常是有意义的。有时事实证明 Perl 足够快,以至于不需要移植算法;更常见的是,可以用 C 编写算法的一个小核心,将其编译为动态加载的模块或外部可执行文件,然后将应用程序的其余部分留在 Perl 中(有关以这种方式实现的复杂基因组映射应用程序的示例,请参阅http://waldo.wi.mit.edu/ftp/distribution/software/rhmapper/)。
Perl 是一种很好的 Web CGI 脚本语言,随着越来越多的实验室转向 Web 发布他们的数据,Perl 的重要性也在增加。
真正的答案可能与 Perl 的关系比您想象的要少。发生的很多事情都是历史的偶然。在那个时候,Perl 很流行,Java 越来越流行,没有太多人关注 Python,而 Ruby 才刚刚起步。
需要完成工作的人使用 Perl 并用 Perl 创建了一些库,其他人开始使用这些库。一旦人们开始使用对他们适度有用的东西,他们往往不会转换(经济学家称这些为“转换成本”)。从那里开始,更多的人开始使用它,因为很多其他人都在使用它。
今天可能不会发生同样的演变。我想说 Perl、Python 和 Ruby 都完全可以胜任这项任务。林肯斯坦因 mobrule 引用的所有内容都适用于今天的三者中的任何一个。如果今天每个人都必须从头开始,那么这些语言中的任何一种都可能是每个人都使用的语言。
我注意到,从我自己的客户群(一个非常小且不具代表性的生物技术样本)中,推动许多生物材料编程的人似乎至少是支持科学家的兼职系统管理员。科学家们担心科学并做了一些简单的编程,但 IT 支持人员正在为非科学部分做很多繁重的工作。Perl 非常适合作为系统管理员工具,因为它是 Internet 的磁带。
可能是因为 Perl 擅长处理字符串,而遗传学中的许多研究都涉及到对长长的“ACTGCATG...”字符串的操作。只是猜测...
我使用大量 Perl 来处理社会科学研究中的定性和定量数据。在快速完成任务(主要是文本)、在 CPAN 上查找库(不错的中心位置)以及通常只是快速完成任务方面,它是无法超越的。
Perl 也是出色的粘合剂,因此如果您有一些乐器记录,并且需要将它们粘合到数据分析例程中,那么 Perl 就是您的语言。
Perl 似乎是生物信息学的首选语言——甚至有一个关于这个主题的 O'Reilly 标题:Beginning Perl for Bioinformatics。
Perl 在处理文本方面非常强大,并且几乎存在于每个 Linux/Unix 发行版中。在生物信息学中,不仅序列数据很容易用 Perl 操作,而且大多数生物信息学算法都会输出某种文本结果。
然后,像EBI这样的最大的生物信息学中心拥有了领导BioPerl项目的伟大人物 Ewan Birney。该库为每种流行的生物信息学算法的结果提供了大量解析器,并用于处理主要序列数据库中使用的不同序列格式。
然而,如今,Perl 并不是生物信息学家使用的唯一语言:随着序列数据,实验室产生越来越多不同类型的数据类型,而其他语言更常用于这些领域。
例如,R统计编程语言被广泛用于微阵列和 qPCR 数据(以及其他)的统计分析。再说一次,为什么我们这么多使用它?因为它为这类数据提供了很好的库(参见bioconductor项目)。
现在谈到 Web 开发,CGI并不是当今最先进的技术,但是了解 Perl 的人可能会坚持下去。在我的公司虽然它不再使用...
我希望这有帮助。
Perl 基本上强制非常短的开发周期。这就是完成任务的开发方式。
这足以胜过 Perl 的缺点。
生物信息学主要处理文本解析,而 Perl 是最适合这项工作的编程语言,因为它是为字符串解析而设计的。正如 O'Reilly 的书(Beginning Perl for Bioinformatics)所说,“凭借 [Perl] 高度发达的检测数据模式的能力,Perl 已成为最流行的生物数据分析语言之一。”
这似乎是一个相当全面的回应。然而,也许缺少的一件事是大多数生物学家(也许直到最近)根本没有太多的编程经验。Perl 的学习曲线远低于编译语言(如 C 或 Java),但 Perl 在文本处理方面仍然提供了大量特性。那么如果运行时间更长怎么办?生物学家绝对可以解决这个问题。实验室实验通常需要一个小时或更长时间才能完成,所以多等几分钟来完成数据处理不会杀死他们!
请注意,我在这里谈论的是出于必要而进行编程的生物学家。我知道有一些非常熟练的程序员和计算机科学家也使用 Perl,这些评论可能不适用于他们。
人们错过了DBI,这是一种 Perl 抽象数据库接口,它使使用生物信息数据库变得非常容易。
还有单线角。您可以在 Perl 的一行中编写一些东西来重新格式化数据,然后使用该-pe
标志将其嵌入到命令行中。许多使用AWK和sed的人转向 Perl。即使在完整的程序中,文件 I/O 的编写也非常容易和快速,与周围的任何工程语言相比,文本转换的表现力也很高。使用 Java 甚至 Python 进行一次性文本转换的人只是懒得学习另一种语言。Java 尤其高度依赖JVM实现及其 I/O 性能。
至少你知道 Perl 将无处不在,比 CI/O 稍微慢一点。不要学习grep、cut、sed或AWK;只需学习 Perl 作为您的命令行工具,即使您不使用它生成大型程序。在 CGI 方面,Perl 有很多更好的 Web 框架,例如Catalyst和Mojolicious,但绝对来自 CGI 和生物信息学是互联网最早的重度用户之一。
与其他语言相比,Perl 非常容易学习。它可以充分利用正在成为大数据的生物数据。它可以处理大数据,并且在处理数据管理和所有类型的 DNA 编程方面表现良好,由于 Perl、Python 和Ruby等语言,生物学的自动化变得很容易。对于那些了解生物学但不知道如何用其他编程语言进行编程的人来说,这很容易。
就个人而言,我知道这会和我约会,但这是因为我首先学习了 Perl。我被要求拍摄FASTA文件并与其他 FASTA 文件混合。当我四处询问时,Perl 是推荐的工具。
当时我上过几节计算机科学课程,但我对编程并不是很了解。
Perl 被证明相当容易学习。一旦我将正则表达式记入脑海,我就会在一天内解析并制作新的 FASTA 文件。
正如已经建议的那样,我不是程序员。我是一名生物化学专业的毕业生,在实验室工作,我犯了一个错误,即设置了一个每个人都可以看到我的 Linux 服务器。这是一个全天项目的日子。
不管怎样,Perl 成了我在实验室需要做的任何事情的首选。它很棒,易于使用,超级灵活,其他实验室的其他 Perl 人员我们和我很像。
因此,简而言之,Perl 易于学习、灵活且宽容,它满足了我的需求。
一旦我真正进入生物信息学领域,我就开始学习 R、Python 甚至 Java。Perl 并不擅长帮助创建可维护的代码,主要是因为它非常灵活。现在我只是使用这种语言来完成工作,但 Perl 仍然是我最喜欢的语言之一,比如初吻之类的。
重申一下,大多数生物信息学人员只是通过将东西拼凑在一起来学习编码,而且大多数时候你只是想为首席研究员(PI) 找到答案,所以你不能花几天时间在代码设计上。Perl 在获得答案方面非常出色,它可能不会再工作了,而且如果你在六个月后看到它,你将无法理解你自己的代码中的任何内容;但是,如果您现在需要一些东西,那么即使我现在主要使用 Python,它也是一个不错的选择。
我希望这能给你一个生活过的人的答案。