我是一名学生,在生物研究所担任技术支持人员,似乎到处都在使用Perl。虽然并非每个项目都需要使用Perl,但是这里超过一半的人都在办公室或桌子上放着几本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脚本语言,并随着越来越多的实验室开始利用网络发布数据而变得越来越重要。
真正的答案可能与Perl无关,很多事情都是历史的偶然性。当时,Perl非常流行,Java越来越受欢迎,Python并没有引起太多人的注意,而Ruby刚刚开始崭露头角。
那些需要完成工作的人使用Perl编写了一些库,并且其他人开始使用这些库。一旦人们开始使用某个对他们有用的东西,他们倾向于不更改(经济学家称之为“转换成本”)。从那里开始,更多的人开始使用它,因为许多其他人正在使用它。
今天可能不会出现相同的演变。我认为Perl、Python和Ruby都完全足够胜任。所有Lincoln Stein在mobrule中引用的话今天都适用于这三个语言中的任何一个。如果每个人今天都必须从零开始,其中任何一种语言都可能成为每个人使用的语言。
我注意到,从我的客户群体中(生物科技公司的一个非常小而不具代表性的样本),推动大部分生物技术编程的人似乎至少是支持科学家的兼职系统管理员。科学家担心科学,做一些轻度的编程,但IT支持人员为非科学部分提供了大量的支持。Perl非常适合作为系统管理员工具,因为它是互联网的“胶带带子”。
也许是因为Perl擅长操作字符串,而遗传学中的许多研究涉及对非常长的 "ACTGCATG..." 字符串进行操作。我只是猜测...
我经常使用Perl处理社会科学研究中的定性和定量数据。在快速完成任务(主要是文本)方面,通过在CPAN上查找库(一个不错的集中位置),通常可以更快地完成任务,这是无可比拟的。
此外,Perl也是很好的“胶水”,因此如果您有一些仪器记录,并且需要将它们与数据分析程序粘合在一起,则Perl是您的语言。
Perl似乎是生物信息学的首选语言,甚至有一本O'Reilly的书专门介绍这个主题:Beginning Perl for Bioinformatics。
例如,R 统计编程语言被广泛用于微阵列和qPCR数据的统计分析(等等)。我们为什么这么多人使用它呢?因为它有非常适合那种数据的库(请参见bioconductor项目)。
现在,当涉及到Web开发时,CGI 今天不是最先进的技术,但是知道Perl的人可能会坚持使用它。然而,在我的公司里,它已经不再使用了...
我希望这可以帮到你。
Perl基本上强制要求非常短的开发周期。这种开发方式可以完成工作。
这足以抵消Perl的缺点。
生物信息学主要涉及文本解析,而Perl是最适合此工作的编程语言,因为它是专门用于字符串解析的。正如O'Reilly的书(Beginning Perl for Bioinformatics)所说:“由于[Perl]在数据中高度发展的模式检测能力,Perl已成为生物数据分析最流行的语言之一。”
人们错过了DBI,这是一个Perl抽象数据库接口,使得使用生物信息学数据库变得非常容易。
还有一行代码的角度。您可以编写一个单行代码来重新格式化Perl中的数据,并只需使用-pe
标志将其嵌入命令行即可。许多使用AWK和sed的人转向了Perl。即使在完整程序中,文件I/O也非常容易和快速地编写,并且与任何工程语言相比,文本转换具有更高级别的表达能力。使用Java甚至Python进行一次性文本转换的人只是懒得学习另一种语言。尤其是Java对JVM实现及其I/O性能具有高度依赖性。
至少你知道Perl在各个地方的速度快慢,比C I/O稍微慢一点。不要学习grep, cut, sed或AWK;只需将Perl作为您的命令行工具学习,即使您不使用它生成大型程序。关于CGI,Perl有很多更好的Web框架,例如Catalyst和Mojolicious,但是CGI和生物信息学肯定是最早使用互联网的重度用户。
这似乎是一个相当全面的回答。然而,可能有一件事情被遗漏了,那就是大多数生物学家(直到最近,也许)根本没有太多编程经验。Perl的学习曲线比编译语言(如C或Java)低得多,但在文本处理方面,Perl仍然提供了大量功能。那么,如果运行时间更长怎么办?生物学家们绝对可以应对。实验室实验通常需要一个小时或更长时间才能完成,所以等待几分钟来完成数据处理并不会对他们造成影响!
请注意,我在这里谈论的是出于必要而编程的生物学家。我知道有一些非常熟练的程序员和计算机科学家也使用Perl,这些评论可能不适用于他们。