【IT168 評論】程序員在編程語言的選擇上或多或少都猶豫過,,選擇時也會不自主地將客觀事實(shí)與主觀偏好相結(jié)合,。過去十年,可供選擇的語言層出不窮,,本文將重點(diǎn)縮小到20世紀(jì)90年代編程語言的兩大幸存者身上:Java和Python,。 Python起源于一種腳本語言,它的語法體現(xiàn)了一種可讀性的理念,,具有簡單而規(guī)則的界限,,鼓勵簡潔和一致的代碼布局。Python的動態(tài)類型有助于代碼簡化和組合,,是許多平臺的解釋性語言,成為眾多程序員編程首選的便攜式選項,。 Python的參考實(shí)現(xiàn)(以C編寫,,被稱為CPython)在許多平臺上可用,并且是眾多實(shí)現(xiàn)中最常用的,。其他實(shí)現(xiàn)例如IronPython,,是使用C#編寫的,并提供與.NET運(yùn)行時的緊密集成。 Python是圍繞可擴(kuò)展對象模型構(gòu)建的通用語言,。其面向?qū)ο蟮暮诵牟⒉灰馕吨鴮ο蠖ㄏ蚴情_發(fā)人員在用Python編程時最常用的方式,。它支持程序化編程,模塊化編程和部分函數(shù)式編程,。 Java是一種面向?qū)ο笳Z言,,具有許多程序員熟悉的類似于C / C ++的語法。其吸引力和價值所在是其具有的可移植性和相對效率,。Java作為一種編譯語言,,執(zhí)行模式與解釋性語言(比如Python和Perl)相比更加以機(jī)器為中心。Java不僅僅是一種語言和庫:它也是一個虛擬機(jī),,一個生態(tài)系統(tǒng),。Java虛擬機(jī)(JVM)是運(yùn)行Java代碼的理想化和便攜式平臺。程序員不必?fù)?dān)心硬件細(xì)節(jié),,并且不必將代碼移植到新平臺,,Java承諾“一次寫入,到處編譯(WORA)”,。同時,,JVM語言有很多,比如Groovy,、Clojure,、Scala、Python或者Jython,。 那么這兩種語言相比,,哪一種更勝一籌呢? 1、速度 雖然軟件中的性能并不總是一個問題,,但它始終是一個考量因素,。在網(wǎng)絡(luò)I / O成本或數(shù)據(jù)庫訪問占主導(dǎo)地位的情況下,語言的具體效率不如技術(shù)選擇和設(shè)計方面的整體效率重要,。 Java和Python都不適合高性能計算,,但在性能上,Java還是略勝一籌,。雖然一些Python實(shí)現(xiàn)(如PyPy)可以針對性能進(jìn)行微調(diào),,但原始的便攜式性能Python不占優(yōu)勢。 Java的效率優(yōu)勢體現(xiàn)在虛擬機(jī)執(zhí)行,。程序執(zhí)行時,,JVM可以將字節(jié)碼轉(zhuǎn)換為本地機(jī)器碼。這種即時(JIT)編譯讓Java的性能略勝Python,。依靠JIT是一個相當(dāng)便攜的假設(shè),,HotSpot是默認(rèn)的Oracle JVM,。 Java從其第一個公開版本起就支持并發(fā),而Python則是按序執(zhí)行,。在當(dāng)前多核處理的趨勢下,,Java代碼更易實(shí)現(xiàn)。 這一輪,,Java勝! 2,、歷史遺留問題 歷史遺留問題在其技術(shù)上具有慣性。當(dāng)企業(yè)選擇了一種編程語言,,就很難再次更換,。例如,更多的企業(yè)項目后端可能會使用Java代碼來擴(kuò)展其功能,,也許可以遷移到更新版本的語言,,或者通過其他JVM語言(如Scala和Groovy)添加新功能。Java在企業(yè)中的歷史比Python更久,,這也是招聘Java程序員的企業(yè)比招Python更多的原因,。 這一輪,Java勝! 3,、實(shí)用敏捷性 漫長的發(fā)展中,,Java和Python都受益匪淺。Java通常被認(rèn)為與敏捷開發(fā)及其社區(qū)有更密切的聯(lián)系,。Python在敏捷領(lǐng)域一直存在,,并且受到諸多原因的影響而更加普及,包括DevOps運(yùn)動的興起,。 Java比Python具備更一致的重構(gòu)支持,,一方面,它的靜態(tài)類型使自動化重構(gòu)更可預(yù)測和可靠,,另一方面是Java開發(fā)中IDE(例如IntelliJ,,Eclipse和NetBeans)的普及。Python的動態(tài)類型在代碼中鼓勵使用不同類型的敏捷性,,其重點(diǎn)在于簡潔和流動,。然而,Pythonic文化傾向于多種編輯器,,而不是基于IDE,,這意味著對強(qiáng)自動重構(gòu)的支持較低。 JUnit的早期知名度及其與測試驅(qū)動開發(fā)(TDD)的關(guān)聯(lián)意味著,,在所有語言中,,Java可能是唯一一個單元測試受到程序員一致歡迎的語言。在IDE中自動包含JUnit已經(jīng)在很大程度上對此有所幫助了,。 Python的腳本起源和在其標(biāo)準(zhǔn)庫中包含測試功能意味著Python對現(xiàn)代開發(fā)中自動化測試相當(dāng)重視,,盡管它更有可能是集成而不是單元測試。在Java世界中,,傳統(tǒng)Java代碼庫可以通過采用另一種JVM語言來加以改善,,例如使用Groovy或Clojure進(jìn)行自動化測試,或者完全跨越Java Universe,,例如使用Python來處理系統(tǒng)方面操作 ,。 這一輪,平局! 4,、市場普及度 Java和Python都是TIOBE編程語言排行榜上的前十名,,并且是穩(wěn)穩(wěn)地占據(jù)前十名。 但Java一直比Python更受歡迎,,但是Python的受歡迎程度已經(jīng)超過了兩種編程語言:Perl和Ruby,。 此外,兩種語言在教育中都具有強(qiáng)大的立足點(diǎn),,但Java比Python更常用于大學(xué)課程中,。 這一輪,Java勝! 5,、架構(gòu) 圍繞Python Web框架構(gòu)思的軟件體系架構(gòu)與Java的不會相差甚遠(yuǎn),。Java和Python都有各自的開源社區(qū),并有很多程序員一直在源源不斷的貢獻(xiàn)源代碼,,這些代碼已經(jīng)解決了常見或者不常見的問題,,事實(shí)上,這兩種語言都因開源社區(qū)而受益匪淺,。 這一輪,,主要取決于公司具體要求! 結(jié)論 Java和Python都是富有活力的編程語言,這兩種語言與開放性相關(guān)聯(lián),,所以公司,,團(tuán)隊和程序員在做出決定時最好保持開放的態(tài)度。至于,,程序員到底該選擇哪種編程語言,,可以結(jié)合上述五點(diǎn)自行比較,但更多的程序員似乎更傾向于Java,。 |
|