為什麼 Python 不是未來的程式語言?

2021-01-08 InfoQ技術實驗室

Python 現在如此火爆,已發展成為一種非常通用的語言,無論是從入門級選手到專業技術數據挖掘、科學計算、圖像處理、人工智慧,Python 都可以勝任。它會是未來的程式語言嗎?它是完美無缺的程式語言嗎?有人發出了不同的聲音。此前,InfoQ 中文站曾編譯過相關文章,今天,我們翻譯並分享了 Rhea Moutafis 對 Python 的看法,權當一家之言吧!

編程社區花了幾十年的時間才領略到 Python 迷人之處。但自 2010 年初以來,Python 就一直在蓬勃發展,並最終在受歡迎程度上超越了 C、C#、Java 和 JavaScript。

但這種趨勢還會持續到什麼時候呢?什麼時候 Python 最終會被其他程式語言所取代?為什麼會被取代?

要給 Python 設定一個確切的「死期」可能是一個很大的猜測。它可能會像科幻小說一樣。相反,我在本文中,將闡述 Python 那些受歡迎的優點,以及將來會打敗它的弱點。

是什麼讓 Python 現在如此流行

Python 的成功提現在 Stack Overflow 趨勢上,該趨勢衡量平臺上帖子中的標籤數量。鑑於 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 一直處於發展前沿,從過去幾年機器學習的火熱的浪潮中可以看出來。

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 上設置時間戳的最大因素。

未來何時,誰將取代 Python?

在程式語言市場上有幾個新的競爭對手:

Rust 提供了與 Python 同樣的安全性,任何變量不會被意外覆蓋。但是,它用所有權(ownership)和借用(borrowing)解決了性能問題。根據 Stack Overflow Insights 的統計,Rust 也是過去幾年來最受歡迎的程式語言。Go 對於 Python 這樣的初學者來說很棒。它是如此簡單,以至於維護代碼更加容易了。有趣的是:Go 開發人員是市場上收入最高的程式設計師之一。Julia 是一門非常新的程式語言,可以與 Python 一較高下。它填補了大規模技術計算的空白:通常情況下,人們會使用 Python 或 Matlab,然後用 C++ 庫來修補整個程序,這在大規模應用時是必需的。現在,人們可以使用 Julia,而不是同時使用兩種程式語言。雖然市場上還有其他程式語言,Rust、Go 和 Julia 是修補了 Python 薄弱部分的程式語言。所有這些語言在未來的技術上表現出色,尤其是在人工智慧領域。雖然它們的市場份額仍然很小,但從 Stack Overflow 標籤的數量可以看出,它們的趨勢都很明顯:上升。

StackOverflow 上各種程式語言標籤快照。

鑑於目前 Python 已無處不在的流行程度,這些新語言中的任何一門要想取代它,肯定要花上五年的時間,甚至終其「一生」。

究竟會是哪一門程式語言將取代 Python,是 Rust?Go?Julia?抑或是未來的一門新語言?現在還很難說。但是鑑於 Python 架構中的最基本的性能問題,這些語言中的一門將會不可避免地佔據一席之地。

關注我並轉發此篇文章,私信我「領取資料」,即可免費獲得InfoQ價值4999元迷你書!

相關焦點

  • 為什麼說Python是程式語言中的網紅?
    因為人生苦短要用python啊!Python發展接近三十年,確實已經成為了程式語言中的「網紅」。 因為Python仍舊是目前IT就業市場最受歡迎,最熱門的技術技能之一,且容易上手,學會了python,可以大幅提高IT人的自身競爭力。 在知名技術交流網站Stack Overflow在2019年年初推出的開發人員調查報告中,有四分之一的開發者表示,Python是他們最想學習的程式語言,這也是Python連續三年獲得這個榜單的第一名。
  • python語言基礎-6:程式語言是萬能的麼?
    正在學習編程的朋友,會不會有這樣的疑惑:程式語言,是萬能的麼?由於計算機不是萬能的,所以在計算機上運行的程式語言肯定也不是萬能的。如果一個語言能夠進行任何可能的計算,它就能發揮計算機的全部潛力。我們包括python在內的大多數程式語言,都可以做到這一點,因為它們都是圖靈完備語言。所謂圖靈完備,是指這種語言都可以模擬圖靈機的工作。而圖靈機已經被數學家們證實可以進行任何一種可能的有限步數的計算。
  • 杭州少兒編程培訓機構哪家好?少兒編程Python語言好學嗎
    而Python顯然不是一門快語言,但隨著近年來PyPy譯員不斷改進Python的速度,通過PyPy運行的程序在某些情況下速度直接接近C語言,所以先了解一下Python學習到底怎麼樣吧。現在,人工智慧和數據分析正在蓬勃發展,python是一顆冉冉升起的新星。有人說python可能是所有語言中最適合人類編程的。為什麼?因為python比任何其他語言更高效、更快、更強大!
  • 少兒學python編程:小學幾年級開始學編程?學哪個程式語言合適?
    大家好,歡迎學習python,本文從基礎開始,會連續寫作,喜歡的朋友可以收藏一下,在某一天用到的時候可以回來看一看。思想決定行動。看某一件事情是否需要去做,首先,要從思想上高度重視,並且從內心願意為之付出和努力。今天就來談談為什麼要學習PYthon,建議從幾歲開始學習。
  • 學會程式語言python和linux作業系統,月薪2W不是問題?
    人工智慧的基礎就是大數據,機器需要很多數據來編程,從小白到大數據人工智慧專家的學習歷程你也可以擁有。大數據處理技術怎麼學習呢?首先我們要學會python語言和linux作業系統,但還是需要從簡單的桌面應用,web開發,自動化測試運維等開始。
  • 編程的入門學習心得,python
    程式語言選擇這邊說個題外話,關於當時程式語言的選擇,很多時候我覺得不是你選擇程式語言,而是程式語言選擇你,也就是你的「本命程式語言」至於程式語言,沒有高低之分,因為無論你學習哪門語言,你都非常有市場,說下為什麼選擇python?因為簡單,python是公認的最容易入門的程式語言,而且也是公認有發展前景的程式語言,適用於機器人,大數據,人工智慧等未來高科技。基於以上原因,我選擇python來作為自己的入門語言,而且我覺得我適合python這門語言(因為我很懶)。
  • 18年,python成為第一大程式語言,95% 的程式設計師開始瘋狂
    近日,2018年最具就業前景的7大程式語言排行榜出爐了。這次的程式語言排行榜是由CodingDojo(編碼道場)發布。在此次的最有「錢」途的程式語言榜單上,Java排名第一,網紅程式語言Python排名第二,JavaScript排名第三。Python簡直可以評得上2017年網紅編程的語言,在此次榜單上,它又火了一把。
  • python語言入門需要多久?python編程該如何學習
    python語言入門需要多久時間?很多人認為python是一門很容易學的程式語言,其實事實也是如此,很適合入門。但更多還是因人而異,因方法而異,有的人可能一個星期就能學會python編程,而有的人需要幾個月,當然也可能會更多。
  • python與其他程式語言區別全在這
    對於接觸過程式語言的人來說,如果要快速上手python,首先要了解python和其他程式語言的主要區別在哪?下邊勇哥主要以使用較多的JAVA和C語言來做對比。喜歡的話,希望大家關注我們,我們會持續推出高質量的文章和視頻來回饋大家。
  • 為什麼那麼多人選擇學習Python?Python語言優勢解析
    python作為當前的趨勢,是許多人轉行的首選。為什麼那麼多人反而想學python?python有哪些前景和優勢?下面,酷仔給你分析一下。Python有什麼優勢為什麼那麼多人選擇學習python?隨著Python繼續佔據程式語言主流的趨勢,全國各城市的招聘崗位和薪酬將大幅增加。此外,隨著人工智慧在中國的投資和規劃,對人工智慧人才的需求激增。Python是人工智慧的開發語言。現在是你學習Python的最好時機。
  • Python程式語言在網站開發中的妙用
    Python程式語言在網站開發中的妙用 Python程式語言在我們長期的使用中有很大的應用範圍。尤其是在網頁編寫方面,下面我們就來看看相關的網頁編寫的相關問題。
  • 小白的福音-python程式語言開發工具初探
    生命是短暫的,我在python程式設計師之間使用了一個口號。在程式語言中,python由於其跨平臺、面向對象等特性已經徵服了越來越多的程式設計師。現在大數據時代,在人工智慧時代,python語言也扮演著重要的角色。許多人開始學習python,很好地利用它。
  • 少兒編程:Python語言
    #《全國青少年軟體編程等級考試》系列已經介紹完了,我們知道青少年軟體編程等級考試考三門語言:Scratch、Python和C,從這篇起我開始給大家介紹Python。圖1認識Python我一直認為少兒編程最好的啟蒙語言是圖形化程式語言
  • Python是現在最流行的程式語言嗎?
    我告訴大家一個事實,這是一種假象,實際上現在最流行的程式語言還是java,不信我們看一下招聘網站,招聘網站上排第一的是崗位是什麼?是java,Python的位置找都找不到,那既然java是使用量最廣的,為什麼名氣卻顯得沒有Python大那?
  • Python程式語言有什麼獨特的優勢呢?
    近幾年來,憑藉著這樣的大數據時代,Python程式語言一躍而起,受到大眾追捧,成為人工智慧技術中最受歡迎的程式語言之一,而Python程式設計師的薪資也水漲船高。不少小夥伴也跟千鋒諮詢,學完是否好就業的問題!
  • 為什麼C語言是最適合單片機編程的高級語言!
    為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不是不能,而是不合適。
  • Python程式語言基礎入門教程
    Python程式語言是最近幾年發展趨勢較火的語言,也是針對新手友好的語言,入門簡單上手快。再加上AI人工智慧和數據分析的加持,讓Python成為關注度最高的程式語言,現在不會Python都不好意思說自己會編程。
  • 人工智慧寵兒程式語言python是真的火,還是炒的火?
    近些年來,python在程式語言排行榜上排名很高,我覺得主要的原因是因為Python是一門動態的腳本語言,不需要編譯,即寫即用,代碼很短,開發很迅速,python的語法也比較接近自然語言,導致很多非專業的程式設計師或一些編程小白在學習編程時後都首選學習
  • 慢步學習,python語言編程,來扯扯語言的學習理解
    那麼慢步來說說自己對程式語言的學習理解吧。關於語言的共性——累積學習程式語言,跟一個人學習一門自然語言(英語、日語)是差不多的。學習在某種情景下使用語言的詞彙/語句來表達。比如表達善意的問候:「你好」、「hello」、「こんにちは(抗你知哇)」。語言的學習,就是不斷的累積相應情景下的語言表達。
  • python 程式語言在操作文件編碼格式的應用
    python 程式語言在操作文件編碼格式的應用 以下的文章主要是對python 程式語言在操作過程中的具體應用,包括python 程式語言在建立文件,以及其在文件中如何讀取。