回複內容:
瀉藥。
- 首先我個人的主張是:python !
- 3年的生物資訊應用開發和資料分析實踐經曆表明,我選擇Python並在期間推薦周圍的同事和朋友也嘗試和選擇python,是非常有益效率的,至少明顯克服了以前perl的部分弊端。
- 空洞的語言之爭在程式猿本是一個有違職業操守的行為,但放到某一個特殊情境也許有益新手也引發他人思考。 對生物資訊而言,語言其實是一個次要問題,最重要的是建模和求解,而非工具選擇;何況有些時候在使用別人的程式時是無法選擇語言的。
- 談點具體的:python代碼本身比perl更易學易讀易懂,這點基本沒太大爭議;而對於非一次性程式,尤其是pipeline類的,對“易改”有更高的要求,我們很不希望一個冗長的perl指令碼在三個月後就看不懂。。。還有那些怪異符號對人的震懾感 >=< 另一個方面,因為曆史原因,以前積累的生物資訊學資料庫和開來源程式/公開程式(因為某些原因,大家只是共用自己的程式,沒有任何開源許可)大部分是perl構建,而後人為了學習和重現也繼續學習perl;但實際上這不是必要的,不需要為此而讓自己也使用perl,可實踐中人們精力有限,學一門語言總比學兩門輕鬆。
- 對於 bioXXX方面,其實大同小異,只是社區活躍度有所不同。至少我所見過和使用過的很多程式以及分析流程中,perl主要用於小指令碼,python經常用於pipeline串聯和某些分析方法實現等,R主要是統計和結果可視化(有 bioconductor),至於SVG的輸出,則基本是語言無關的,看各自的喜好了。另一些web類的工具,或者workbench等,則基於java構建的也不在少數,比如solid的部分工具,CLC workbench,貌似是SWT ?等等。甚至Broad的IGV瀏覽器採用了java web start這種技術(較少見),或許它可以在下個版本考慮javaFX ?!
綜上,perl和python各有自己的優缺點,為了學習和重現前人的成果,學習perl無可厚非;為了自己在實踐中開發和分析資料,優先推薦python。
順便推薦點老外們的討論供參考:
- http://biostar.stackexchange.com/questions/2742/perl-or-python-for-comparative-genomics
- http://network.nature.com/groups/bioinformatics/forum/topics/1611
- http://www.quora.com/Bioinformatics/How-did-Perl-start-off-as-the-dominant-language-in-bioinformatics
作為使用過兩種語言的我來說,python確實是寫指令碼程式的首選,優美而易懂。但是一個讓我始終放不下perl的原因是它強大的處理文本的能力,因為絕大多數生物資訊分析工作都是各種格式轉換和文本處理,perl能強大到用一行命令完成python幾十行指令碼的任務,而且它和寫shell命令列差不多,但可以比shell命令列更出色,另外因為這些處理任務的程式一般只用一次,所以沒有維護不維護的問題,但用perl寫起來非常省時省力。所以一般寫大型程式我會用python,其它文本處理任務用perl。
下面是一個不錯的教程教授perl單行命令,學會受益匪淺。
http://www.catonmat.net/blog/introduction-to-perl-one-liners/
贊同語言本身沒有強弱之分,但總體來說python更強大,一方面有google在支援,使用的人多更活躍,另一方面python功能更豐富,可以做文本處理、統計分析,甚至作圖,學一門就可以了,對於perl主要只能做文本處理,統計和作圖還得再學R。關於PERL和PYTHON之爭,曆史悠久。這裡貼一下,看看我收集的,大家是怎麼說的
關於生物資訊的perl和Python的比較和爭論由來已久,這裡我僅給出幾個連結:
做生物資訊學:Python還是Perl?
功能強大而又簡單易學的程式設計語言Python_有個部落格
請高手指點:生物資訊學應用,學perl還是學python更好?
為學生物資訊的推薦Python
2013年我在China Unix 論壇的PERL和Python版,做了個對這個問題的調查,現在還有很多人蔘與,到2014底約200+150人蔘加,大家也可以參考一下:
Perl對Python 使用調查-Python-ChinaUnix.net Python版
Perl對Python 使用調查-Perl-ChinaUnix.net Perl版
Perl的介面就是一坨巨大的shi:它強迫你用PerlXS這種shi一樣的語言寫介面,而且API的命名也是一坨shi。
隨便看了下Python的介面寫法,好像要乾淨得多。
===================
最近為了學習Python,用Python寫了一個簡單的代碼產生器。感覺Python在構建日常指令碼方面,與Perl相比還是有很多不方便的地方:
- labmda裡只能有一個語句。對於稍微麻煩一點(但卻沒有那麼麻煩)的排序、映射,就得單開函數,而不能直接放在此處。
- Regex不如Perl易用。比如Perl可以簡單地寫成:
$foo =~ /Some(Reg)Exp/ or die "failed to parse foo for XXX";my $wanted_part = $1;
用perl 做生信快10年了,至今沒有發現有什麼地方非換成python不可的,語言就是個工具,在於你運用,就像用PC還是MAC,熟練程度不同而已語言是沒有強弱的,不過Python可用的開源包以及更新頻率可能要略快於Perl。
另外我個人認為Python學習曲線比較平緩。至少我接觸了好多年Perl,現在依然寫不出來。。。大牛門可以拍了。perl和Python和生信關係都不大~ 也沒有優劣之分~ 因為可以跳過perl和Python的學習,直接應用Bioperl和BioPython~ doge~ 再者,等到語言被淘汰,我們也老啦~ awk多麼老啊,現在不是一直很強大易用~ 生信那麼多文本,你難道要用Java去處理。。。有時候簡單不代表淘汰,反而在特定的情況意味著強大~ 對於未來發展來說~ Github~ 上面有最先潮的一切~python吧,不僅可以做實驗,還可以直接出工業級代碼,biopython就不錯都學比較好吧,除非以後哪個把對方的優點全部吸收了,那就可以不用都學了。