雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

程式設計社群花了幾十年的時間才領略到 Python 迷人之處。但自 2010 年初以來,Python 就一直在蓬勃發展,并最終在受歡迎程度上超越了 C、C#、Java 和 JavaScript。
但這種趨勢還會持續到什麼時候呢?什麼時候 Python 最終會被其他程式設計語言所取代?為什麼會被取代?
預測這個時間點到底什麼時候到來可能會像科幻小說一樣充滿各種可能性。我在本文中,将闡述 Python 那些受歡迎的優點,以及将來會打敗它的弱點。
1.是什麼讓 Python 現在如此流行
Python 的成功展現在 Stack Overflow 趨勢上,該趨勢衡量平台上文章中的标簽數量。鑒于 Stack Overflow 的規模,是以它是程式設計語言受歡迎程度的一個很好的名額。
盡管 R 語言在過去幾年裡一直處于停滞不前的狀态,而且許多其他程式設計語言也在穩步下降,但 Python 的增長似乎勢不可擋。幾乎所有 Stack Overflow 上的問題有 14% 被标記為“Python”,而且這一趨勢還在上升。
這其中有幾個原因:
- 它是古老的
Python 早在 20 世紀 90 年代就出現了。這并不僅僅意味着它有充足的時間來成長,它還得到了一個龐大的支援社群。
是以,如果你在用 Python 編寫代碼遇到了什麼問題,你很有可能通過 Google 搜尋一下就能解決。這是因為有人已經遇到過和你一樣的問題,并記下了一些有用的東西。
- 它對初學者很友好
這不僅是事實,因為它已經存在了幾十年,讓程式員得以有時間來編寫優秀的教程。更重要的是,Python 的文法非常易于了解。
首先,無需指定資料類型。你隻需聲明一個變量即可;Python 将會從上下文中了解它是整數、浮點值、布爾值還是其他值。這對初學者來說,是一個巨大的優勢。如果你曾經使用 C++ 進行程式設計的話,你就會知道你的程式無法通過編譯是多麼令人沮喪,僅僅隻是因為你将浮點數換成了整數。
如果你曾經同時閱讀過 Python 和 C++ 代碼,你就會知道 Python 有多麼容易了解。盡管 C++ 在設計時考慮到了英語,但與 Python 代碼相比,它的閱讀還是相當困難。
- 它的用途廣泛
由于 Python 已經存在了如此久的時間,開發人員已經為各種潛在需求制作了軟體包。現在,你可以找到幾乎所有用途的軟體包。
想要計算數字、向量和矩陣嗎?NumPy 就是你要找的東西。
想要做技術和工程方面的計算嗎?請使用 SciPy。
想在資料處理和分析方面做大嗎?那就試試 Pandas 吧。
想從人工智能開始嗎?那為什麼不使用 Scikit-Learn 呢?
無論你想做哪種計算任務,都有相應的 Python 軟體包。這使得 Python 一直處于發展前沿,從過去幾年機器學習的火熱的浪潮中可以看出來。
2.Python 的缺點以及這些缺點是否會緻命
基于前面的闡述,你可以想象 Python 在未來幾年仍将興盛不衰。但是,像所有的技術一樣,Python 也有它的弱點。我将一一介紹最重要的缺陷,并評估這些缺陷是否緻命。
- 速度
Python 很慢。真的,非常非常慢。平均而言,使用 Python 完成一項任務所需的時間,是任何其他程式設計語言的 2~10 倍。
造成這種情況的原因有很多。其中之一是,它是動态類型的,記住,你不需要像在其他程式設計語言那樣指定資料類型。這意味着需要使用大量的記憶體,因為程式需要為它在任何情況下都能工作的每個變量預留足夠的空間,而且大量的記憶體使用意味着大量的計算時間。
另一個原因是,Python 一次隻能執行一個任務。這是采用靈活資料類型帶來的後果:Python 需要確定每個變量隻有一種資料類型,而并行化的程序可能會弄亂這一點。
相比之下,一般的 Web 浏覽器可以同時運作十幾個不同的線程。此外,還有其他一些理論。
但說到底,這些速度問題都無關緊要。計算機和伺服器已經變得如此便宜,以至于我們談論的隻是幾分之一秒的時間。實際上,最終使用者并不在乎他們的應用程式是在 0.001 秒還是 0.01 秒内加載的。
- 作用域
最初,Python 的作用域是動态的。這基本上意味着,要計算表達式,編譯器首先搜尋目前塊,然後依次搜尋所有調用函數。這就是大多數現代程式設計語言使用靜态作用域的原因。
Python 曾試圖過渡到靜态作用域,但搞砸了。通常情況下,内部作用域(例如函數中的函數)能夠檢視和更改外部作用域。但在 Python 中,内部作用域隻能看到外部作用域,而不能改變它們,這就導緻了很多混亂的情形。
- Lambda
盡管 Python 具有所有的靈活性,但 Lambda 的使用還是相當受限的。Lambda 隻能是 Python 中的表達式,不能是語句。
另一方面,變量聲明和語句始終是語句。這意味着 Lambda 并不能用于它們。
表達式和語句之間的這種差別是相當随意的,在其他程式設計語言中并不會存在。
在 Python 中,你可以使用空格和縮進來表示不同級别的代碼。這使得它在視覺上具有吸引力,了解起來也更直覺。
其他程式設計語言,如 C++,則更多地依賴花括号和分号。盡管這可能在視覺上不夠吸引人,對初學者也不太友好,但是它使代碼更易于維護。對于較大的項目,這個方法更有用。
像 Haskell 這樣的新語言解決了這個問題:它們依賴于空格,但為那些希望不使用空格的人提供了另一種文法。
- 移動開發
我們正在見證從台式計算機到智能手機的轉變,很明顯,我們需要強大的語言來開發移動軟體。
但使用 Python 開發的移動應用并不多。不過,這并不意味着它做不到 — 有一個名為 Kivy 的 Python 軟體包就是專門用于開發移動應用的。
但是 Python 在設計時并沒有考慮到移動開發。是以,即使它可能會為基本任務産生差強人意的結果,你最好的選擇是使用一種專為移動開發而建立的程式設計語言。一些廣泛使用的移動程式設計架構包括 React Native、Flutter、Iconic 和 Cordova。
需要明确的是,筆記型電腦和台式計算機應該會在未來很多年裡繼續存在。但是,由于移動裝置的流量早已超過台式計算機,是以可以肯定地說,學會 Python 并不足以成為經驗豐富的全能開發人員。
- 運作時錯誤
Python 腳本不是先編譯後執行的。相反,它會在每次執行時編譯,是以,任何編碼錯誤都會在運作時顯示出來。這會導緻性能差、耗時長,并且需要進行大量測試。比如,很多很多測試。
這特别适合初學者,因為測試可以教會他們很多東西。但是對于經驗豐富的開發人員來說,必須用 Python 調試複雜的程式會讓他們出錯。這種性能的缺乏是在 Python 上設定時間戳的最大因素。
3.未來何時,誰将取代 Python?
在程式設計語言市場上有幾個新的競争對手:
(1).Rust 提供了與 Python 同樣的安全性,任何變量不會被意外覆寫。但是,它用所有權(ownership)和借用(borrowing)解決了性能問題。根據 Stack Overflow Insights 的統計,Rust 也是過去幾年來最受歡迎的程式設計語言。
(2).Go 對于 Python 這樣的初學者來說很棒。它是如此簡單,以至于維護代碼更加容易了。有趣的是:Go 開發人員是市場上收入最高的程式員之一。
(3).Julia 是一門非常新的程式設計語言,可以與 Python 一較高下。它填補了大規模技術計算的空白:通常情況下,人們會使用 Python 或 Matlab,然後用 C++ 庫來修補整個程式,這在大規模應用時是必需的。現在,人們可以使用 Julia,而不是同時使用兩種程式設計語言。
雖然市場上還有其他程式設計語言,Rust、Go 和 Julia 是修補了 Python 薄弱部分的程式設計語言。所有這些語言在未來的技術上表現出色,尤其是在人工智能領域。雖然它們的市場佔有率仍然很小,但從 Stack Overflow 标簽的數量可以看出,它們的趨勢都很明顯:上升。
鑒于目前 Python 已無處不在的流行程度,這些新語言中的任何一門要想取代它,肯定要花上五年的時間,甚至終其“一生”。
究竟會是哪一門程式設計語言将取代 Python,是 Rust?Go?Julia?抑或是未來的一門新語言?現在還很難說。但是鑒于 Python 架構中的最基本的性能問題,這些語言中的一門将會不可避免地占據一席之地。
- 作者介紹
Rhea Moutafis,目前正攻讀暗物質實體學的博士學位。熱愛藝術、音樂和美好的事物。
【雲栖号線上課堂】每天都有産品技術專家分享!
課程位址:
https://yqh.aliyun.com/live立即加入社群,與專家面對面,及時了解課程最新動态!
【雲栖号線上課堂 社群】
https://c.tb.cn/F3.Z8gvnK
原文釋出時間:2020-04-14
本文作者:Rhea Moutafis
本文來自:“
InfoQ 微信公衆号”,了解相關資訊可以關注“
InfoQ”