本人系在读博士,涉及生物信息学领域也有五六年了,从一个生物信息学是什么概念都不知道的小白翻滚摸爬到今天,终于对这一领域知道了个大概,会分析一些数据,算是基本入门了。分析生物信息学数据,掌握一门以上的编程语言是必不可少的,这能极大的帮助你提升处理数据的效率。本人刚涉及生物信息学时就开始学习Perl语言,如今已经能熟练利用Perl语言处理各式各样的数据,算是略有小成。今天本人就简单聊聊个人学习Perl的经验,我是如何从一个菜鸟成长为一个伪大神的。
记得当年刚读研时,跟的导师有一些高通量测序数据需要分析,那会儿组里只有一位大师兄会生物信息学分析,也会编写Perl脚本。但是这位大师兄很快就要毕业了,他一走我们就人才短缺了,所以当务之急就是把我们新招的这一批研究生培养起来,于是乎我们马上热火朝天的开始学习生物信息学。
学习生物信息学基本概念啊、分析软件啊等过程这里就不废话了,我想说的是那会儿第一次接触到了Perl语言。大师兄把他写好的很多Perl脚本给我们,教我们怎么使用,然后让我们帮他做分析,他就做甩手掌柜忙自己的去了。当我执行师兄给的序列拼接脚本时,屏幕上刷刷刷出现了软件运行的信息,一段时间过后目录里出现了结果文件,一打开发现这么多的小片段序列竟然已经组装成了几条长序列。我满脸崇拜地望着大师兄的背影,实在太神奇了。
这激发了我学习Perl的强烈兴趣,我立即买来Perl的书籍开始学习。我看的第一本书是《Perl语言入门》,称为“小骆驼”,是Perl入门学习的首选。我看的过程中不断的点着头,原来这就是标量,那就是数组,循环语句有for、while、until等,哈希表就是让每个key对应一个value,正则表达式可以匹配到目标文本内容……这本书读起来似乎很容易理解。我跟着书中的例子一句一句代码试验过去,时不时按自己的理解修改一下,发现基本都能成功实现,我不禁有点自得,原来正如引言所说,Perl的确很容易学。
我看完这本书,立即开始摩拳擦掌,想要写出一个完整的脚本。首先我想写一个脚本统计一个fasta文件里每条序列的长度。我知道首先要指定句柄打开该文件,然后用while循环读取文件内容,我很快的写好了“open IN,$ARGV[0];while( ) ”,然而接下来我就傻眼了,完全不知道下面该怎么继续写。我知道如何用正则表达式匹配一行序列名称和一行序列,也知道用length就可以计算出一条序列的长度,可是当要读取整个文件,计算所有序列的长度并输出结果的时候,我怎么也不知该如何实现。我又翻了一遍这本书,也没发现哪里告诉我该怎么写。虽然只是看完入门这本书,可是连这么简单的几行代码还是写不出来,这回我明白Perl并不是表面上那么容易掌握了。
其实学编程语言就像我们从小开始学写字、组词、造句,然后学着写出一个段落,最后到一篇完整的文章,这个过程是需要一步步循序渐进的。此时我认得了Perl的基本元素和命令,以及一些简单的代码和功能,但还没学会如何有序的将这些代码组合在一起,形成连贯的完整的代码。这就需要真正理解代码是如何运作的,书上无法回答你,短时间内你也很难领会,只有通过自己不断的去学去写,去理解代码的作用和意义,然后想尽办法通过代码实现自己的目的,你才能在某一天突然明白就是这么回事。
我看了好几遍《Perl语言入门》,还是在实际应用中写不出代码。但是我并不沮丧,因为我手里有大师兄给我的很多Perl脚本,而且知道这些脚本的用途以及使用方法,这对一个初学者来说是一个珍贵的宝库。当我第一次看这些脚本时,都是乱七八糟的字母和符号,简直是天书。随着我看完《Perl语言入门》,我慢慢能看懂师兄的这些脚本中的大部分代码,都是书中提及的命令,原来竟可以如此使用。我仔细把这些脚本的每一行代码都看下来,去理解它们的含义。看完后就关掉,然后开始自己写,一个字母一个符号的输入,尝试着实现同样的目的。
作为一个之前没接触过编程的初学者,在开始的模仿与摸索中,我发现自己不是少个分号,就是少一个括号,或者哪里语法错误,总之一不小心就出错,不断的提示“syntax error at……”,非常郁闷。这是一段难熬的时光,既不能独立写下一个脚本,又需要使劲琢磨别人的代码是什么意思,还老是被莫名其妙的错误所折腾,甚至明明没报错却出现混乱的结果文件,然后不断检查脚本哪里有问题,时刻考验着你的耐心和信心。但是当你坚持下去了,不用多久,你就能看到自己取得了巨大的进步。
不到一个月,我就基本能自己写出代码了。我掌握了大部分大师兄写的功能较简单的脚本,能够独立写脚本处理一些常规的数据,例如去除高通量测序数据的低质量序列、对大量的数据去重复或者挑选出重复的数据、把不同文件里的相同条目对应的内容合并到一个文件等等。在这个过程中,我理解了Perl语言处理文本的基本过程,当你用while命令读取文件内容时,文件的内容是一行一行被代码识别和处理的,如果一行的内容满足代码设定的条件,即开始执行,如果不满足条件就立即去识别下一行,直到下一行文本内容满足条件。理解了这个,你就能把整个文本内容拆分成一行一行,根据每一行内容的特征,利用正则表达式区分识别,然后进行相应的处理和输出,这样一来就很容易实现代码的功能了。
到这个时候,我总算是Perl语言编程入门了,想到自己竟然也掌握了一门计算机语言,可以向计算机小白们炫耀一番,心里不禁一阵得意。但是得意完后我也知道自己仍是菜鸟,看到一些大神们的Perl语言代码,真是出神入化,寥寥两行代码竟然能实现我写十行代码的功能。他们的逻辑与手法,我很多都看不大懂,看来我还有很长的路要走啊。
但是既然已经一只脚踏入Perl的世界,接下来的路就好走的多了,只要愿意花时间继续学习,有一定的逻辑与领悟能力,成为一个Perl大神并不难。毕竟Perl主要还是用来处理数据和文本的工具,不像其它编程语言那么复杂深奥。所谓一通百通,一个类型的数据会处理了,其他类似的数据基本大同小异,生物信息数据再复杂也就那么些类型,所以随着经验的积累,不用多久,你就能熟练利用Perl语言处理各式各样的数据了。
随后的我,又花了半年看完并领悟了《Perl技术内幕》的前面十四章。《Perl技术内幕》共二十八章,全面介绍了Perl的所有基本命令与功能。为什么我只看了前十四章呢,因为那会儿的我完全看不懂后面的章节,不信你自己去看看就知道了。实际上只有前面十四章讲的是数据与文本处理,看懂这十四章就完全够用了。《Perl技术内幕》弥补了我对Perl语言基本命令的漏缺,以后我哪里不明白或者需要用到某些代码就翻出来看一眼,这本书就如同我的字典一般,对我帮助极大。
再后来,经过好几年的实践与学习,我已经对各类数据的处理信手拈来。我可以用Perl语言建立一套完整的数据分析流程pipeline,如同当年大师兄一般。我学会了利用Perl的许多模块进行更快捷的功能,学会了利用Perl对mysql数据库的数据进行读取与输出。我还自创了哈希和数组的高阶多维用法,下次再跟大家分享。现在,同学们都来找我帮忙写个脚本,我非常有成就感,俨然一个伪大神,多年的学习与付出总是有回报的,这里请容我得瑟一下。
最后,简单说一说关于Perl的最重要学习内容。首先是正则表达式,因为Perl主要处理文本数据,需要正则表达式来匹配识别目标条目,十之八九的Perl脚本都会用到正则表达式,这个必须得掌握;其次是哈希表和数组,我们利用哈希表和数组存储目标条目对应的数据,才能大量的有针对性的进行每个条目数据的处理与输出,这里强调哈希表非常强大,请用心学习领会,用得好简直有如神助;然后就是循环语句与条件语句,只要掌握for循环、while循环、if语句等几个常用的语句就够用了,而且非常容易掌握,只要看几个例子就会用了;剩下的就是掌握Perl的一些常用函数,如split、join、substr、exists等,以及Perl的基本知识,如标量、变量、运算符等。掌握了以上这些内容,就基本能处理绝大多数的常规数据,然后再学会一些逻辑思想和算法,你就能写出更复杂更巧妙的脚本。至于其它Perl的内容,当你以上大成,有需要进一步深入时,再行学习不迟。
最后的最后,我想说学习Perl最难的就是入门,这个关卡过了,后面的学习过程就会水到渠成。总结一下Perl快速入门的经验,当你开始学Perl的时候,几本Perl的书籍是必要的,必须先学会Perl的基本知识,这是看懂和学习脚本的前提;然后尝试自己写代码,不会写就先模仿别人的脚本,先从简单的脚本开始,然后理解消化人家的脚本,在这个基础上自己学着去修改去创新。到一定程度后,你就能理解大多数代码的用法,这时候,你需要找机会不断地写代码,尝试在各种情境下实现目的,虽然很多时候你会无法实现目的,但是通过看Perl进阶的书籍、请教他人或者参考网上的技术分享,你得千方百计找到方法并掌握该方法。这样,通过坚持与实践,你很快就能写出脚本,熟练处理各类数据了。
本文转自生信草堂,徐小台,未经允许不得转载或用于商业用途,若想转载请先和本人联系!
1.《经验分享|如何从Perl语言小白变成大神》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《经验分享|如何从Perl语言小白变成大神》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/8773.html