Java与Python:哪一种最适合您? [信息图]
通過從應(yīng)用程序中學(xué)習(xí)企業(yè)APM產(chǎn)品,發(fā)現(xiàn)更快,更高效的性能監(jiān)控。 參加AppDynamics APM導(dǎo)覽!
在軟件開發(fā)中,很少有問題比選擇編程語言更具分裂性或部落性。 軟件開發(fā)人員經(jīng)常以自己選擇的工具來強(qiáng)烈地認(rèn)同自己,將客觀事實(shí)與主觀偏好自由地混合在一起。
但是,在過去的十年中,生產(chǎn)中使用的語言數(shù)量以及單個(gè)開發(fā)人員可能會(huì)每天使用的語言數(shù)量都出現(xiàn)了爆炸式增長(zhǎng)。 這意味著語言聯(lián)系有時(shí)會(huì)在不同的代碼庫(kù),框架和平臺(tái)之間更加寬松和廣泛地分布。 現(xiàn)代項(xiàng)目和現(xiàn)代開發(fā)人員越來越多,可以使用比以往更多的語言和庫(kù)。 明智的選擇仍然可以發(fā)揮作用。
從那繁華的編程語言市場(chǎng)中,讓我們將關(guān)注范圍縮小到1990年代兩個(gè)有著不同起源故事的幸存者:Java和Python。
Python的故事
Python是這兩種語言中的較老版本,由其發(fā)明者Guido van Rossum于1991年首次發(fā)布。 自成立以來一直是開源的。 Python軟件基金會(huì)負(fù)責(zé)管理語言及其庫(kù)的設(shè)計(jì)和標(biāo)準(zhǔn)化。 Python增強(qiáng)建議 (PEP)流程指導(dǎo)其開發(fā)。
在編程語言演進(jìn)中,通常無限期地保持向后兼容性。 Python并非如此。 Python 2于2000年問世,Python 3于2008年問世。它們?cè)诤艽蟪潭壬鲜羌嫒莸?#xff0c;但是在功能和語法上的差異卻足以將它們視為不同的語言。 Python 3并不是將更新的趨勢(shì)和思想改編到Python 2中(使語言變得復(fù)雜和妥協(xié)),而是被認(rèn)為是一種從Python 2的經(jīng)驗(yàn)中學(xué)到的新語言。 Python 3(在撰寫本文時(shí)為3.6版)是Python世界中當(dāng)前發(fā)展和強(qiáng)調(diào)的地方。 Python 2的開發(fā)繼續(xù)單獨(dú)進(jìn)行,但最終版本是2.7版,該版本將在2020年之后不再保留。
Python的語法體現(xiàn)了可讀性的哲學(xué),其簡(jiǎn)單且規(guī)則的樣式鼓勵(lì)簡(jiǎn)潔和一致的代碼布局。 它起源于腳本語言,體現(xiàn)了Unix的哲學(xué),即能夠從舊開始編寫新程序以及直接使用現(xiàn)有代碼。 Python的動(dòng)態(tài)類型系統(tǒng)幫助實(shí)現(xiàn)了這種簡(jiǎn)單性和可組合性。 它是許多平臺(tái)上可用的一種解釋語言,使其成為常規(guī)開發(fā)的可移植選項(xiàng)。
Python的參考實(shí)現(xiàn)是用C編寫的,稱為CPython,可在許多平臺(tái)上使用,并且是最常用的參考實(shí)現(xiàn)。 其他小組已經(jīng)創(chuàng)建了自己的實(shí)現(xiàn),例如IronPython ,它是用C#編寫的,并且與.NET運(yùn)行時(shí)緊密集成。
Python是圍繞可擴(kuò)展對(duì)象模型構(gòu)建的通用語言。 它的面向?qū)ο蟮暮诵牟⒉灰欢ㄒ馕吨嫦驅(qū)ο笫情_發(fā)人員使用Python編程時(shí)最常用的樣式。 它支持過程編程,模塊化編程以及功能編程的某些方面。
這種語言的名稱來自英國(guó)超現(xiàn)實(shí)主義喜劇組織Monty Python,并且在其文檔和庫(kù)中也發(fā)現(xiàn)了不少幽默。
Java的故事
盡管Java直到1995年才發(fā)布,但Java的故事始于1991年。Sun Microsystems的James Gosling和其他人構(gòu)思了一種用于對(duì)交互式電視系統(tǒng)進(jìn)行編程的語言。 它的發(fā)布是一種可移植的互聯(lián)網(wǎng)語言,尤其是在瀏覽器中。 現(xiàn)在距離這個(gè)起點(diǎn)和原始名稱還有很長(zhǎng)的路要走:Oak。
就像當(dāng)時(shí)對(duì)于原始電視目標(biāo)市場(chǎng)而言過于沉重一樣,它失去了使用動(dòng)態(tài)HTML和JavaScript(盡管它的名稱與語言無關(guān))的瀏覽器空間。 但是, Java很快在服務(wù)器和教室中找到了自己的位置,從而幫助確保了它在千年之交時(shí)成為主流語言的地位。
它的吸引力和價(jià)值的一部分是它的便攜性和相對(duì)效率。 盡管不是諸如C和C ++之類的本地語言,但Java是一種編譯語言。 與純解釋語言(例如Python和Perl)相比,其執(zhí)行模型更加以機(jī)器為中心。 Java不僅僅是一種語言和庫(kù):它還是一個(gè)虛擬機(jī),因此也是一個(gè)生態(tài)系統(tǒng)。 Java虛擬機(jī)(JVM)是??一種理想的可移植平臺(tái),用于運(yùn)行Java代碼。 Java的承諾是編寫一次即可在任何地方運(yùn)行 (WORA) ,而不用擔(dān)心硬件的特殊性和將代碼移植到新平臺(tái)上的麻煩。 這樣一來,只要存在JVM,編譯到其字節(jié)碼中的任何內(nèi)容都可以運(yùn)行,并且可以輕松地與為JVM編寫的其他任何內(nèi)容交互。 JVM語言有很多,包括更像腳本的Groovy ,功能性Clojure ,對(duì)象功能的混合Scala甚至是Python變體Jython 。
Java是一種面向?qū)ο蟮恼Z言,具有許多程序員都熟悉的類似于C / C ++的語法。 它是動(dòng)態(tài)鏈接的,允許下載和運(yùn)行新代碼,但不能動(dòng)態(tài)鍵入。 作為一種語言,Java的發(fā)展相對(duì)較慢,直到最近才合并了支持功能編程的功能。 另一方面,語言和VM的理念都是將向后兼容性視為主要指令。
在甲骨文收購(gòu)Sun之后,該語言及其編譯器最終開源。 該語言的發(fā)展受到Java Community Process (JCP)的指導(dǎo),其中包括Oracle以外的公司和個(gè)人。
那么這兩種語言如何疊加? 讓我們按類別細(xì)分。
速度
盡管在軟件中性能并不總是問題,但應(yīng)始終將其作為考慮因素。 在網(wǎng)絡(luò)I / O成本或數(shù)據(jù)庫(kù)訪問占主導(dǎo)地位的情況下,就整體效率而言,語言的特定效率不如技術(shù)選擇和設(shè)計(jì)的其他方面重要。
盡管Java和Python都不特別適合高性能計(jì)算,但是當(dāng)性能很重要時(shí),Java在平臺(tái)和設(shè)計(jì)上都具有優(yōu)勢(shì)。 盡管對(duì)某些Python實(shí)現(xiàn)(例如PyPy)的性能進(jìn)行了微調(diào),但原始的可移植性能并不是Python的亮點(diǎn)。
Java的許多效率都來自優(yōu)化到虛擬機(jī)的執(zhí)行。 JVM可以在程序執(zhí)行時(shí)將字節(jié)碼轉(zhuǎn)換為本地機(jī)器代碼。 這種即時(shí)(JIT)編譯是Java的性能通常可以與本地語言相媲美的原因。 依賴JIT是一個(gè)合理可移植的假設(shè),因?yàn)槟J(rèn)Oracle Oracle JVM HotSpot提供了它。
Java從其第一個(gè)公共版本開始就對(duì)并發(fā)提供支持,而Python絕對(duì)是一種順序語言。 這意味著要利用當(dāng)前的多核處理器趨勢(shì),而Java代碼更容易做到這一點(diǎn)。 Python的主要實(shí)現(xiàn)方式CPython中的全局解釋器鎖 (GIL)阻礙了這種擴(kuò)展。 存在不受命中限制的Python實(shí)現(xiàn),但是依賴它們可能會(huì)干擾支持Python代碼的某些可移植性假設(shè)。
遺產(chǎn)
ss
語言選擇通常與語言本身的設(shè)計(jì)和內(nèi)在品質(zhì)無關(guān)。 存在用于創(chuàng)建代碼的語言,并且該代碼具有業(yè)務(wù),經(jīng)濟(jì)學(xué),歷史,軟件體系結(jié)構(gòu),技能和開發(fā)文化的上下文。
傳統(tǒng)系統(tǒng)在其現(xiàn)有技術(shù)方面存在慣性。 更改將更容易遵循已經(jīng)設(shè)定的路徑,而不是通過重寫和革命來逐步地,逐步地轉(zhuǎn)移。 例如,與重寫相比,現(xiàn)有的Python 2代碼庫(kù)更有可能在Python 3中找到新的生命周期。 現(xiàn)有Java企業(yè)項(xiàng)目的后端可能會(huì)通過添加更多Java代碼來擴(kuò)展其功能,可能會(huì)遷移到該語言的最新版本,或者通過在其他JVM語言(例如Scala和Groovy)中添加新功能。
Java在企業(yè)中的歷史及其較為冗長(zhǎng)的編碼風(fēng)格意味著Java遺留系統(tǒng)通常比Python遺留系統(tǒng)更大且數(shù)量更多。 另一方面,組織可能驚訝地發(fā)現(xiàn)將IT基礎(chǔ)架構(gòu)結(jié)合在一起的腳本和膠合代碼由Python組成。 兩種語言都有一個(gè)遺留問題,但通常呈現(xiàn)的方式有所不同。
實(shí)踐敏捷
開發(fā)文化和趨勢(shì)使Java和Python受益。 通過使用Java作為通用語言的出版物和專注于Java的工具,人們經(jīng)常看到Java與敏捷開發(fā)及其社區(qū)有著更緊密的聯(lián)系。 但是,沒有一個(gè)社區(qū)是靜態(tài)的,因此很難定義。 Python一直存在于敏捷領(lǐng)域,并且由于許多原因(包括DevOps運(yùn)動(dòng)的興起)而變得越來越流行。
Java比Python擁有更一致的重構(gòu)支持,一方面是由于它的靜態(tài)類型系統(tǒng)使自動(dòng)重構(gòu)更加可預(yù)測(cè)和可靠,另一方面是因?yàn)镴ava開發(fā)中IDE的普及(例如,IntelliJ,Eclipse和NetBeans)。 Python的更具動(dòng)態(tài)性的類型系統(tǒng)鼓勵(lì)代碼的另一種敏捷性,著重于簡(jiǎn)潔性,流動(dòng)性和實(shí)驗(yàn)性,而Java可能被視為更嚴(yán)格的選擇。 但是,相同類型的系統(tǒng)可能會(huì)成為Python自動(dòng)重構(gòu)的障礙。 Python的文化偏向于廣泛的編輯器,而不是基于IDE,這意味著人們對(duì)強(qiáng)大的自動(dòng)重構(gòu)支持的期望越來越低。
JUnit的早期流行及其與測(cè)試驅(qū)動(dòng)開發(fā)(TDD)的聯(lián)系意味著,在所有語言中,Java可能對(duì)任何語言的單元測(cè)試都擁有最一致的開發(fā)人員熱情。 在IDE中自動(dòng)包含JUnit起到了很大的作用。
也就是說,Python起源于腳本編寫并將測(cè)試功能包含在其標(biāo)準(zhǔn)庫(kù)中,這意味著Python對(duì)現(xiàn)代開發(fā)中對(duì)自動(dòng)測(cè)試的強(qiáng)調(diào)并不陌生,盡管它更可能是集成而不是單元測(cè)試。
人力資源
有時(shí),語言選擇更多是關(guān)于技能的應(yīng)用,而不是軟件應(yīng)用程序本身。 人員配備可能比語言設(shè)計(jì)和工具更重要。 如果該工作的理想語言是沒有人具有技能,也沒有人想要技能,那么這可能畢竟不是該工作的理想語言。 另一方面,如果開發(fā)人員熱衷于接受一項(xiàng)新技術(shù),那么在其他所有條件都相同的情況下,這可能是使用該技術(shù)的足夠充分的理由。 在Java世界中,通常可以通過擁抱另一種JVM語言(例如使用Groovy或Clojure進(jìn)行自動(dòng)化測(cè)試)或完全走出Java領(lǐng)域(例如使用Python處理Python的操作方面)來獲得遺留Java代碼庫(kù)的好處。系統(tǒng)。
人員配備問題的另一方面是技能市場(chǎng)。 Java和Python都是TIOBE Index編程語言受歡迎度排名前10位的清單。 Java一直比Python流行得多,但是Python經(jīng)歷了這兩種語言的更大發(fā)展,在Perl和Ruby下降的領(lǐng)域有所發(fā)展。
遵循對(duì)個(gè)人選擇和就業(yè)興趣都產(chǎn)生最大影響的想法就是您所知道的,這兩種語言在教育中都有很強(qiáng)的立足點(diǎn),Java通常用于大學(xué)課程,而Python通常用于高中。 當(dāng)前的IT畢業(yè)生在簡(jiǎn)歷上幾乎都默認(rèn)使用這兩種語言中的一種或兩種。
建筑
技能和現(xiàn)有軟件系統(tǒng)以及選擇會(huì)告知任何給定軟件體系結(jié)構(gòu)中使用的編程語言。 軟件體系結(jié)構(gòu)還涉及框架和庫(kù),重用和集成。 在許多情況下,人們想要利用這種技術(shù)來決定語言選擇,而不是相反。 圍繞Python Web框架構(gòu)想的軟件體系結(jié)構(gòu)對(duì)于僅Java的開發(fā)團(tuán)隊(duì)來說是遙不可及的。
Java和Python都享受著源源不斷的開源庫(kù),這些源庫(kù)由已經(jīng)解決了常見和不常見問題并樂于共享的個(gè)人和公司的代碼組成,這些人和公司樂于分享,以便其他人可以利用他們的解決方案。 確實(shí),兩種語言都受益于在線論壇和開放源代碼開發(fā)并受其影響。
當(dāng)遺留,重用,性能和開發(fā)技能的問題都考慮在內(nèi)時(shí),某些體系結(jié)構(gòu)決策仍然可以使語言選擇保持開放。 例如,微服務(wù)架構(gòu)的興起(將面向互聯(lián)網(wǎng)的系統(tǒng)劃分為小的協(xié)作過程),使得語言的選擇更多地取決于局部細(xì)節(jié),而不是整個(gè)項(xiàng)目的主要考慮因素。
對(duì)于現(xiàn)代編程領(lǐng)域及其軟件體系結(jié)構(gòu)中存在的所有多樣性,一些團(tuán)隊(duì)和企業(yè)更愿意減少他們的某些技術(shù)選擇,而不是忍受過去的決策和個(gè)人異想天開。 但是合并可以減少選擇的余地,因此這并不是一個(gè)輕率的決定。 值得留意語言和框架的趨勢(shì),以免走錯(cuò)路。
結(jié)論
Java和Python都可以長(zhǎng)期使用。 自1990年代以來,他們與開發(fā)社區(qū)一起不斷發(fā)展和適應(yīng),找到了新的利基市場(chǎng)并取代了其他語言,有時(shí)甚至在同一領(lǐng)域競(jìng)爭(zhēng)。 兩種語言都與開放性相關(guān)聯(lián),因此公司,團(tuán)隊(duì)和開發(fā)人員在做出決策時(shí)最好保持開放的態(tài)度。
通過從應(yīng)用程序中學(xué)習(xí)企業(yè)APM產(chǎn)品,發(fā)現(xiàn)更快,更高效的性能監(jiān)控。 參加AppDynamics APM導(dǎo)覽!
翻譯自: https://www.javacodegeeks.com/2017/06/java-vs-python-one-best-for-you.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java与Python:哪一种最适合您? [信息图]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: downie mac版功能特色
- 下一篇: Sigma IDE现在支持Python无