爲什麼Python不是面向未來的編程語言?

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"緩慢的速度、運行時問題和移動應用開發困境“毀掉”了Python的未來"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"編程社區花了幾十年的時間才接納了Python。但自2010年初以來它一直在蓬勃發展,熱度終於比肩C、C#、Java和JavaScript。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但這種趨勢會持續到什麼時候?什麼時候Python會被其他語言取代,爲什麼?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python的消亡時間是很難預測的,所以我不會給出確切的時間點,而是會評估當下正在推動Python普及的優勢有哪些,將來導致它沒落的缺陷又會是哪些。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"哪些優勢造就了Python今天的流行局面"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python的成功從Stack Overflow"},{"type":"link","attrs":{"href":"https:\/\/insights.stackoverflow.com\/trends?tags=r%2Cpython%2Cjavascript%2Cjava%2Cc%2B%2B%2Cc%23","title":"","type":null},"content":[{"type":"text","text":"趨勢"}]},{"type":"text","text":"中就能管中窺豹。這個趨勢數據統計了平臺上帖子中的標籤數量。鑑於Stack Overflow的巨大規模,這是編程語言流行度的一個很好的指標。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"StackOverflow上各種編程語言的標籤數量快照。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"R在過去幾年一直處於穩定狀態,其他很多語言的熱度則在穩步下滑,但Python的增長似乎勢不可擋。約14%的Stack Overflow問題都被標記爲“python”,而且這個趨勢還在上升。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這種現象的背後有幾個因素。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"Python歷史悠久"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python從90年代就出現了。這不僅意味着它有足夠的時間來成長,還讓它獲得了一個龐大的支持社區。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,如果你在使用Python編程時遇到任何問題,都有很大機率通過一次谷歌搜索來解決它。因爲很可能有人遇到過你的問題,併爲此寫了一些有用的方案。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"它對初學者友好"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這不僅是因爲它已經存在了幾十年,讓程序員有時間製作精彩的教程。更重要的是Python的語法非常易讀。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,它不需要指定數據類型。你只需聲明一個變量;Python會從上下文中理解它是整數、浮點值、布爾值還是其他值。這對初學者來說是一個巨大的優勢。如果你用C++編過程,你就會知道僅僅因爲一個浮點數換成一個整數就讓程序無法編譯是多麼令人沮喪。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你對比過Python和C++代碼,就會知道Python是多麼容易理解。儘管C++在設計時就考慮到了可讀性,但與Python代碼相比,它讀起來還是相當費勁的。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"它的用途廣泛"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於Python已經存在了很長時間,開發人員已經爲衆多用途都製作了對應的包。如今,你可以找到幾乎適用於所有事物的包。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"想要處理數字、向量和矩陣?NumPy是你的好幫手。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"想爲技術和工程行業做計算嗎?請用SciPy。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"想在數據操作和分析方面大展宏圖嗎?試試Pandas吧。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"想入門人工智能嗎?爲什麼不用Scikit-Learn呢。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"無論你嘗試管理哪種計算任務,都可能有一個Python包可用。這讓Python始終處於技術的最前沿陣地,從過去幾年機器學習領域Python使用率的激增就可見一斑。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Python的缺陷,它們是否會動搖根本?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如前文所述,你可以想象Python將在未來很長一段時間內保持很高的熱度。但與所有技術一樣,Python也有其弱點。我會一一分析其中那些最重要的缺陷,並評估這些缺陷是否致命。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"速度"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python很慢,真的非常慢。平均而言,使用Python完成一項任務所需的時間是使用其他任何語言的2到10倍。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這種情況是多種原因造成的。其中之一是Python是動態類型的 — 請記住,你不需要像在其他語言中那樣指定數據類型。這意味着它需要使用大量內存,因爲程序需要爲它可能用到的每個變量保留足夠的空間。大量的內存使用就意味着大量的計算時間。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一個原因是Python一次只能執行一個任務。這是靈活數據類型的後果——Python需要確保每個變量只有一種數據類型,而並行進程可能會在這裏出問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"相比之下,你的常用Web瀏覽器可以同時運行十幾個不同的線程。此外還有其他一些因素。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但歸根結底,這些速度問題都不是很關鍵。計算機和服務器變得如此便宜,所以速度再慢也只是亞秒級的差距。最終用戶並不那麼關心他們的應用程序是在0.001秒還是0.01秒內加載。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"作用域"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一開始,Python是動態作用域的。這基本上意味着,要評估一個表達式時,編譯器首先搜索當前塊,然後依次搜索所有調用函數。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"動態作用域的問題在於每個表達式都需要在每個可能的上下文中測試 — 這很乏味。這就是大多數現代編程語言都使用靜態作用域的原因。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python嘗試過渡到靜態作用域,但搞砸了。一般來說,內部作用域 — 例如函數內的函數 — 能夠看到和改變外部作用域。在Python中,內部作用域只能看到外部作用域,而不能改變它們。這會導致很多混亂。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"Lambda"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"儘管Python相當靈活,但Lambda的用法卻相當有限。Lambda只能是Python中的表達式,不能是語句。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一方面,變量聲明和語句始終是語句。這意味着Lambda不能用於它們。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"表達式和語句之間的這種區別相當隨意,在其他語言中不會出現。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"空格讓代碼更具可讀性,但更難維護。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"空格"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在Python中,你可以使用空格和縮進來表示不同級別的代碼。這讓代碼看起來更美觀且易於理解。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"其他語言(例如C++)更多依賴大括號和分號。雖然這可能不夠美觀,對初學者不夠友好,但它讓代碼更易維護。對於更大的項目來說這種方法更好。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Haskell等較新的語言解決了這個問題:它們依賴空格,但爲那些希望不使用空格的人提供了另一種語法。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"移動開發"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當我們見證軟件產業的主流從桌面轉向智能手機時,很明顯我們需要強大的語言來構建移動軟件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但使用Python開發的移動應用並不多。這並不意味着它做不到 — 有一個名爲Kivy的Python包就是做這個的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可是Python並不是爲移動而設計的。因此,即使開發人員可能用它爲基本任務做出可接受的結果,但最好的辦法還是使用一種爲移動應用開發而創建的語言。一些廣泛使用的移動編程框架有ReactNative、Flutter、Iconic和Cordova。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"需要明確的是,筆記本電腦和臺式電腦應該會繼續存在很多年。但由於移動端的流量早已超過桌面端,可以肯定地說,只學習Python並不足以成爲一個經驗豐富的全能開發者。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"運行時錯誤"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python腳本不是先編譯然後執行。相反,它每次執行時都會編譯,因此任何代碼錯誤都會在運行時顯現出來。這會導致性能下降、耗費更多時間且需要進行大量測試。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這對初學者來說非常有用,因爲測試可以教會他們很多東西。但是對於經驗豐富的開發人員來說,用Python調試一個複雜的程序會讓他們出岔子。這種缺陷是在Python上設置時間戳的最大因素。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"哪種語言可以在未來取代Python?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python在編程語言市場上有一些新生的競爭對手:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Rust提供了與Python相同的安全性—任何變量都不會被意外覆蓋。但它通過所有權和借用的概念解決了性能問題。根據StackOverflowInsights的"},{"type":"link","attrs":{"href":"https:\/\/insights.stackoverflow.com\/survey\/2019#technology","title":"","type":null},"content":[{"type":"text","text":"說法"}]},{"type":"text","text":",它也是過去幾年最受歡迎的編程語言之一。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Go非常適合喜歡Python的初學者。而且它非常簡單,代碼維護起來更容易。有趣的一點:Go開發人員是市場上"},{"type":"link","attrs":{"href":"https:\/\/insights.dice.com\/2019\/10\/30\/top-programming-languages-that-will-get-you-paid\/","title":"","type":null},"content":[{"type":"text","text":"收入最高"}]},{"type":"text","text":"的程序員之一。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Julia是一種非常新的語言,可以與Python正面競爭。它填補了大規模技術計算的空白:通常,人們會使用Python或Matlab,並用大規模計算必需的C++庫修補整個過程流程。現在,人們可以使用Julia,然後就用不着同時使用兩種語言了。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雖然市場上還有其他語言選項,但Rust、Go和Julia成功彌補了Python的缺陷。所有這些語言都在新興的技術領域有着出色表現,尤其是在人工智能方面。雖然它們的市場份額仍然很小(正如StackOverflow標籤數量所反映的那樣),但它們的趨勢很明顯:一路向上。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"StackOverflow上各種編程語言的標籤數量快照。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"鑑於目前Python語言無處不在,這些新語言中的任何一種都肯定需要五年甚至整個十年的時間才能取代它。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"贏家將是哪種語言,是Rust、Go、Julia,還是未來出現的某種新語言 ,目前還很難說。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但考慮到Python架構中的基本性能問題,總會有某種語言佔據一席之地。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/thenextweb.com\/news\/why-python-not-programming-language-future-syndication","title":"","type":null},"content":[{"type":"text","text":"https:\/\/thenextweb.com\/news\/why-python-not-programming-language-future-syndication"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章