您現在的位置是:首頁 > 足球

人生苦短,Python會不會被取代?國外網友吵翻天

  • 由 澎湃新聞客戶端 發表于 足球
  • 2022-08-07
簡介反方:必然會有一種語言取代Python一位名叫Rhea Moutafis的網友認為,Python不會是“未來的程式語言”

runtime error什麼原因

關注前沿科技 量子位

十三 發自 凹非寺

量子位 報道 | 公眾號 QbitAI

人生苦短,我該不該選擇Python?

程式語言幾年一變樣,榜單之爭也是愈演愈烈,還架不住時不時殺出個黑馬……

而對於Python,自2010年初以來一直蓬勃發展至今,在流行程度上,也超越了C、C++、Java等老牌程式語言。

人生苦短,Python會不會被取代?國外網友吵翻天

那麼問題來了:

這種趨勢將持續到什麼時候?最終會因何故被其他語言取代?

對於Python是不是the language of the future,網友們展開就此展開一番激辯。

反方:必然會有一種語言取代Python

一位名叫Rhea Moutafis的網友認為,Python不會是“未來的程式語言”。觀點僅釋出數日,便得到了10。2k的點贊。

他從“流行原因”、“缺點”以及“何時、何故被取代”三方面做了闡述。

人生苦短,Python會不會被取代?國外網友吵翻天

Python為何現在如此流行?

Moutafis認為,Python的成功,一定程度體現在Stack Overflow的趨勢上。這個平臺衡量了釋出帖子中的標籤數量,再考慮到它的規模,對於“受歡迎程式語言”來說是個不錯的指標。

人生苦短,Python會不會被取代?國外網友吵翻天

從圖中可以看出,R語言在過去幾年中處於穩步增長的狀態,但其他語言,像C#、C++、Java和JavaScript,都有下降的趨勢。

而在所有Stack Overflow的問題中,幾乎有14%的問題被貼上了 “Python “的標籤,而且這個趨勢還在上升。

Moutafis認為,原因有如下3個方面。

首先,Python也算是一個老牌語言。

Python從90年代便已出現,這不僅意味著它有足夠的時間來發展,還意味著擁有一個龐大而強有力的社群支援。

所以你在用Python程式設計的時候,如果遇到了任何問題,只要網上搜索一下,大機率就能解決掉。

因為很有可能在你之前,就有人遇到過同樣的問題,還在網上留下了寶貴的意見。

其次,Python對於初學者來說是友好的。

對於這一點,並不是說它存在了幾十年,給了程式設計師們充足的時間來寫使用教程。而是Python的語法易讀性特別好。

例如你不需要指定資料型別,只要宣告一個變數,Python會根據上下文,理解這個變數是屬於整數、浮點數、布林值等等。

這對於初學者來說優勢是巨大的。如果你用過C++,你就有可能體會到這樣的痛苦:程式跑不出來,可能僅僅是因為把一個浮點數指定成了整數……

以及,如果對比著讀過Python和C++的程式碼,你就能深刻的體會到Python程式碼理解起來是有多麼容易。

最後,Python的用於很廣。

Python從出現至今,開發人員幾乎在各個領域、用途方面開發了包(package):

想處理數字、向量和矩陣?Numpy是的你首選。

想進行技術和工程方面的計算?SciPy瞭解一下。

想在資料處理和分析領域大展身手?Pandas值得一試。

想涉足人工智慧?Scikit-Learn真香(褒義……)。

無論你想處理哪種計算任務,Python幾乎都可以提供相應的包。從近幾年機器學習的激增,也不難看出Python一直處於發展的前沿。

Python的缺點是否具有致命性?

當然,沒有一個技術是完美的,Python也不例外。Moutafis列出了6個最重要的缺陷,還評估了它們是否具有致命性。

第一,速度 (Speed)。

平均來說,用Python執行一個任務所需要的時間,是其他語言的2-10倍。

為什麼會這樣呢?其中一個原因就是它是動態型別。

就像剛才說的,你不需要指定資料型別,這就意味著它需要使用大量的記憶體,因為程式需要為每個變數預留足夠的空間,確保在任何情況下都能工作。而大量的記憶體使用量,意味著大量的計算時間。

另一個原因是Python一次只能執行一個任務。這是靈活資料型別的結果——Python需要確保每個變數只有一個數據型別,而並行程序可能會把這一點搞得一團糟。

相比之下,一般的Web瀏覽器一次可以執行12個不同的執行緒……

但說到底,這些速度問題都無關緊要。計算機和伺服器現在很便宜了,使用者並不真正關心他們的應用程式,是否在0。001或0。01秒內能載入完。

第二,作用域 (Scope)。

最初,Python是動態確定作用域的。這基本上就意味著,要對錶達式求值,編譯器首先需要搜尋當前塊,然後依次搜尋所有呼叫函式。

動態作用域的問題在於,每個表示式都需要在每個可能的上下文中進行測試。這個是相當繁瑣的過程,這也就是為什麼大多數現代程式語言使用靜態作用域的原因。

對於這個問題,Python試圖過渡到靜態作用域,但卻搞砸了:通常,內部作用域能夠檢視和更改外部作用域,但在Python中,內部作用域只能看到外部作用域,而不能更改它們。

第三,Lambda。

儘管Python內部的靈活性很好,但Lambda的使用還是相當有限制的。Lambda只能是Python中的表示式,而不能是語句。

另外,變數宣告和語句始終是語句,這意味著Lambda不能用於它們。

表示式和語句之間的這種區別,可以說是相當隨意,在其他語言中就不會出現這種情況。

第四,空白符 (Whitespaces)。

在Python中,你可以用空格和縮排來表示不同級別的程式碼。這讓它在視覺上很吸引人,也很容易理解

人生苦短,Python會不會被取代?國外網友吵翻天

而其他語言,例如C++,更多的是依賴大括號和分號。雖然這可能並不吸引人,也不適合初學者,但它讓程式碼的可維護性提高了很多。對於較大的專案來說,這就更有用了。

像Haskell這樣的新語言就解決了這個問題:它們依賴於空格,但同時為那些希望不使用空格的人,提供了一種替代語法。

第五,移動開發 (Mobile Development)。

隨著應用逐步從電腦桌面轉向移動端,很明顯我們需要強大的語言來構建移動軟體。但用Python開發的移動應用並不多。

Python並不是為移動端開發而設計的,即便在基本任務上能達到差強人意的效果,但最好還是選擇專門為移動端開發的語言,例如React Native、Flutter、Iconic和Cordova。

需要明確的是,筆記本和臺式電腦仍會在未來存在一段時間。但由於移動端流量早已超過了桌面端,可以說,學習Python還不足以讓你成為一個全能型開發者。

第六,Runtime Error。

一個 Python 指令碼不是先編譯,然後再執行。相反,它在每次執行時都會編譯,所以任何編碼錯誤都會在執行時顯示出來。這導致效能差、時間消耗大,以及需要大量的測試

這對初學者來說是很好的,因為測試可以教給他們很多東西。但對於經驗豐富的開發人員來說,不見得這是個好事。

在未來,何時、何故會讓Python被取代

在程式語言這個市場上,出現了一批新的競爭者:

Rust提供了和Python一樣的安全性——沒有任何變數會被意外覆蓋。但它用ownership和borrowing的概念解決了效能問題。根據StackOverflow Insights的資料,它也是過去幾年來最受歡迎的程式語言之一。

Go對於Python初學者來說也是非常棒的一門語言。它非常簡單,甚至程式碼維護起來更容易。有意思的一點是,Go開發者是市場上收入最高的程式設計師之一。

Julia是一門非常新的語言,可以與Python一較高下,它填補了大規模技術計算的空白。在大規模計算中,人們通常會使用Python或Matlab,然後用C++庫進行修補。現在,只用Julia就可以了,不用再在兩種語言之間來回切換。

雖然市場上有其他語言,但Rust、Go和Julia是修復Python弱點的語言。

所有這些語言都擅長於未來的技術,尤其是人工智慧。雖然它們的市場份額仍然很小,但從StackOverflow標籤的數量可以看出,它們上升的趨勢都很明顯。

人生苦短,Python會不會被取代?國外網友吵翻天

考慮到目前Python的普遍流行,這些新語言要想取代它,肯定要花上五年,甚至整整十年的時間。

那麼,取代Python的將是哪一種語言?Rust、Go、Julia,還是未來的新語言?

目前還很難說,但考慮到Python架構中的效能問題,必然會有一種語言取代它的位置。

正方:你的觀點漏洞百出

反方一辯陳述完畢,接下來,是正方的觀點。

使用者miraculixx針對Moutafis的文章,發起了猛烈攻擊,也獲得了高度關注——2。1K的贊。

人生苦短,Python會不會被取代?國外網友吵翻天

miraculixx直接開門見山:

這篇文章有夠爛的。你喜歡Rust、Go和Julia?那就去寫它們好了,不要來抨擊Python。

而後,直接提出了七大錯誤之處。

Python並不慢

首先,速度有兩個組成部分。

其一,你寫出想要的程式有多快,這是客戶和大多數開發人員真正關心的。Python對於一個命令列語言來說,它的速度是非常快的,大多數其他語言所需要的時間要長得多。

其二,是執行速度。正如你所指出的,在很多情況下,這幾乎不重要,但當它有需要的時候,Python既有內建的工具來加速,也有廣泛的工具生態系統來實現native速度 (與編譯後的 C 程式碼相同)。

Python確實可以並行執行多個任務

與大多數其他語言不同,Python程式碼非常容易並行執行,甚至可以跨大型節點叢集執行,這對於雲計算來說非常好。

內建的多模組處理,可以在本地和遠端節點上執行。還有其他工具,如Celery、IParallel、Dask等,讓並行執行程式碼變得輕而易舉。

縮排,作為程式碼塊的分隔符,對任何專案來說都是一種優勢

因為這樣就能確保程式碼看起來與個人偏好無關,意味著更好的可讀性,這通常會增加可維護性。

無論你有1個還是100個開發者,Python都很好用

大多數專案都只有1-5個開發者,而且,Python的模組化方法使得重構程式碼變得非常容易。

模組化是構建大型可維護軟體產品的關鍵成功因素。

靜態型別不是可擴展團隊的關鍵因素

根據我的經驗,靜態型別的影響如果不損害協作能力的話,也是可以忽略的。

團隊實際開發過程中的細節情況,超過出了你寫的評論,一言以蔽之:靜態型別很難做到處處都是對的,當出現問題的時候,還是需要更多人加入到團隊來解決。

團隊規模越大,溝通成本就越高,以n2的速度增長。也就是說,靜態型別實際上限制了生產力,而且我敢說這樣做並沒有提高質量。

Python並不老

Python最新版本是在2019年第四季度釋出的。無論是語言還是它所支援的用例,都不能說是“老”。

你說它不能在瀏覽器中執行不僅是錯誤的,而且也沒有抓住重點。大多數語言都不能在瀏覽器中執行,因為Web語言是JavaScript。不管你喜不喜歡,事情就是這樣。

React、Flutter等都不是程式語言

把不該比較的東西混為一談,對你文章的可信度並沒有什麼好處。

……

那麼,你覺得Python未來的命運會是什麼樣呢?

傳送門

反方部落格:

https://towardsdatascience。com/why-python-is-not-the-programming-language-of-the-future-30ddc5339b66

正方部落格:

https://medium。com/@miraculixx/clearly-your-knowledge-of-python-is-not-very-extensive-you-just-get-too-many-things-completley-fb42676edcd4

作者系網易新聞·網易號“各有態度”簽約作者

— 完 —

原標題:《人生苦短,Python會不會被取代?國外網友吵翻天》

Top