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