Python 這麼完美,但為什麼反對者還是不放棄詆毀它?
InfoQ · 程式 ·

Python 這麼完美,但為什麼反對者還是不放棄詆毀它?

軟體開發長期以來一直是一個雷區。

普通人會發現,用傳統的程式語言(如 C 和 JAVA)闖入軟體領域是很可怕的。

但一旦 Python 加入遊戲,這種情況很快就改變了。Python 以其革命性的編程方法在軟體開發方面是一個巨大的飛躍。

人們愛上 Python,是因為其簡潔性、廣泛的庫支持和表達能力。因此,像 C 和 Java 這樣的語言的統治結束了。

沒有什麼是完美的。等等,真的嗎?

如果你是一個軟體開發者,你可能熟悉**權衡(trade-off)**這個詞。

每當一個關於程式語言的問題突然出現時,人們通常會得到一個傳統的答案:「視情況而定」。

普遍認為沒有一種完美的程式語言。等等, 是真的嗎?

對我來說,不是這樣。我認為 Python 是程式語言中的銀彈。

到目前為止,我用過 Python、C、C++、MATLAB、JAVA。Python 是我接觸最晚的,但卻是最好的。

為了測試 Python,我做了一個實驗,並將大多數非 Python 程序轉換為 Python。最終的 Python 版本要好得多。

目前,據我所知,Python 在兩個問題上一直受到嚴重批評:

  • 動態類型
  • 速度

雖然我同意這些問題在某種程度上對軟體開發有重大影響,但我可以確認,這些大部分是 Python 誕生初期存在的問題。

然而,多虧了 rock-solid 社區,Python 已經演變到幾乎與每一種程式語言相當。動態類型和速度不再對編碼實踐產生重大影響。

Python 可以用來處理任何問題。

如果是這樣的話,為什麼 Python 還沒有被大規模採用呢?

因此,有必要解釋為什麼動態類型和性能問題是容易被忽略的小問題。

動態類型

為了理解動態類型,最好先理解其反面——靜態類型。

靜態類型語言有 C、JAVA 等。這些語言與它們的動態類型對應語言之間的主要分別在於類型檢查。靜態類型是在編譯時進行類型檢查,而動態類型是在運行時進行類型檢查。

註:這是對動態類型和靜態類型的平淡定義。其中具體的技術細節超出了本文要討論的範疇。


由於 Python 的調試問題,以及 Python 語言如何使跟蹤 bug 的過程變得比現在更複雜,一些開發人員對 Python 大發牢騷。

這種抱怨源於這樣一個事實:作為一種動態類型語言,Python 在運行時標記錯誤,這使得它比 Java 等靜態類型語言更容易出錯。

理論上,這是一個威脅,畢竟考慮到一個著名的諺語——是人都會犯錯。但是在實踐中,我懷疑類型錯誤有沒有他們聲稱的那樣嚴重。

說真的,現在誰還犯類型錯誤?

靜態類型語言遠不是一個無障礙的調試避風港。除了類型錯誤之外,大多數靜態類型語言都無法捕獲到你可能認為應該檢測到的細微錯誤。這些錯誤同樣發生在靜態類型和動態類型中。

此外,幾乎沒有代碼會不經過單元測試就部署。單元測試可以很好地防範類型錯誤。只有極少數情況下,類型錯誤會繞過單元測試來搞亂代碼。在調試方面,程式語言的另一個特性是安全類型和不安全類型。允許用戶重寫系統類型的語言被認為具有不安全的類型——例如 C。雖然不安全的類型給了用戶對類型的控制,但它的誤用會導致程序任意崩潰。

大多數靜態類型語言都是不安全的類型系統。然而,JAVA 是一種安全類型語言。Python 和我所知道的其它動態類型程式語言也是如此。

最後,我更願意使用像 Python 這樣方便和高級的語言編寫一百萬次代碼,而不是陷入 JAVA 等語言的低級細節中。

速度

可憐的 Python 總是笑著接受性能批評。如果你是在一場程式語言辯論中,我幾乎可以保證,一旦你開始讚美 Python,你就會受到性能打擊。這是真的。嗯,在某種程度上。

對於原始或標準 Python 比 C 或 JAVA 慢這一事實,我不會爭論。但正如我之前所說,有一個像 Python 一樣勤奮和創新的社區,不要害怕。

Python 與其靜態類型的競爭對手之間的性能差距在過去幾年中急劇縮小。JIT 編譯和並行計算方面的進步使 Python 趕上了它的競爭對手。

許多變通方法都是為了解決 Python 的性能問題而開發的。例如:

  • 將實現從CPython更改為PyPy可以顯著提高執行速度。有時候,PyPy 甚至能超越 C。

注意:CPython 是你從Python.org下載的實現。


  • 抑制GIL使得 Python 能夠並行執行序列,從而提高計算速度。
  • JIT 編譯器Numba。只要把 Numba 裝飾器放在你的函數上,就可以看著它以光速運行了。
  • 許多 Python 庫(例如 Numpy 和 Scipy)是用 C/C++編寫的。

如您所見,性能是一個反對 Python 的過時論據。有了這些解決方案,除了讚嘆 Python 充滿活力的社區之外,別無選擇。

但是,為什麼有些人仍然不喜歡 Python,而喜歡使用老式的 JAVA 之類的東西呢?

為什麼不向 Python「投降」?

首先,這有一篇讓我咯咯笑的 quora 帖子。

軟體開發長期以來一直是一個雷區。普通人會發現,用傳統

來源:Quora

顯然,有些人沒有也不會認真對待 Python。真有趣!

無論如何,我個人認為阻止 Python 大規模採用的是人們對待編程的心態。換句話說,問題不在於程式語言,而在於人。

你看,Python 的出現是為了讓編程更容易,更重要的是,為了節省時間

你可能在想,「我用 JAVA 寫代碼,好好的。我為什麼要用 Python?」好吧,你當然不需要,但是要知道,如果你投資 Python,你將能夠充分發揮你的編碼潛力,而不是陷入 JAVA 的低級混亂中。

Python 是開源的、乾淨的、對用戶友好的。用一個好的文本編輯器,你甚至可以讓你的代碼比英文文本還漂亮。Python 並不期望有什麼回報,只是一點兒欣賞。

Python 可能太好了。我個人認為是這樣。

人們仍然使用 C 和 JAVA 的原因是一個古老的信念——努力工作是有回報的。我不會撒謊說這個信念是錯誤的。但是,我想表達的是「努力工作會有回報」只是放在了錯誤的屬性上。相反,這句話應該放在 Python 上。

事實上,JAVA 和類似的語言是跳轉到 Python 之前的一個很好的熱身。他們會讓你更成功地使用 Python。

此外,在死板的程式設計師眼中,向 Python 的轉換並不是一個選項,例如,曾協助 C 啟動,並從那時起就一直被困在 C 中。一個真正隨著語言成長並在其起伏中支持它的開發人員不太可能放棄這門語言。

我敢肯定,這些值得尊敬的開發人員不會改變他們的想法,即使在極端情況下——例如,發布一種自己寫代碼的程式語言。

事實是,「適應」說起來容易做起來難。

最後的一些想法

軟體開發是一個令人入勝的領域。它總是讓你保持警覺。

因此,你應該隨時準備好武器來反擊任何對你最親愛的程式語言的批評。否則,你就要看著它中彈。知識和經驗是你的最好的武器。

編程曾經是一個非常困難的領域,但現在由於 Python 的出現,它對每一個人來說都是一個開放的世界。

「Python 可以教給孩子們」 — Guido Van Rossum


我個人認為 Python 是一種完美的程式語言。Python 在可讀性方面勝過所有程式語言。當然,一個糟糕的 Python 程式設計師會產出糟糕的代碼。但是,我覺得那些糟糕的代碼會比這些人用另一種語言編寫同樣的代碼的糟糕程度好得多。

坦白地說,我從未遇到過 Python 與另一種程式語言相比黯然失色的情況。也許將來我會。如果我做了,我會重新懺悔。

如果 Python 不是開源的,人們會指責我為 Python 打廣告。

參考

文章的靈感來源於《計算機的進步》一書和作者的經歷。

作者介紹

Mohammed Ayar,科技愛好者。區塊鏈倡導者。撰寫編程、數據科學與加密貨幣相關的文章。

原文連結:

https://towardsdatascience.com/python-is-perfect-why-anti-python-developers-wont-give-up-326ae1a09e7f

聲明:文章觀點僅代表作者本人,PTTZH僅提供信息發布平台存儲空間服務。
喔!快樂的時光竟然這麼快就過⋯
繼續其他精彩內容吧!
more