首頁 > Python教程 > Python應用 > Python正在吞噬世界:它為何會贏又將走向何方?

Python正在吞噬世界:它為何會贏又將走向何方?

時間:2019-08-29    來源:InfoQ公眾號

作者丨Nick Heath

譯者丨無明

策劃丨小智

2018 到 2019 年,所有編程語言的流行度都在下滑,除了 Python。Python 為什么會變得越來越火?本文梳理了 Python 的發展史,試圖揭示背后的秘密。

1994 年末,一群來自美國各地的程序員聚在一起,討論他們的新式秘密武器。

這是 Python 有史以來的第一次研討會,有 20 多名開發者參加,Barry Warsaw 是這些與會者當中的一員。他回憶起那些早期 Python 用戶的興奮之情:

“我記得有一個人說,‘你不要跟別人說我來參加這個研討會,因為使用 Python 就像擁有了某種競爭優勢’。在他們看來,Python 就是他們的秘密武器,不是嗎?”

在早期的 Python 研討會上,Warsaw 就曾說過,Python 提供了一些東西,讓代碼編寫變得更加簡單,更容易完成編程任務。

他回憶道:“當我第一次接觸 Python 時,我就知道它有一些特別之處。Python 的可讀性不錯,編寫 Python 代碼變成了一種樂趣”。

如今,人們對 Python 的熱情已經遠遠超出了最初的開發者圈子。一些人預測,隨著 Python 用戶群的快速增長,它很快會成為世界上最流行的編程語言。每天有數以百萬計的人使用 Python,用戶群呈現出指數級的增長,幾乎沒有出現下降的跡象。

不管是專業的還是業余的開發人員,他們都在使用 Python 處理大大小小的任務,特別是 Web 開發人員、數據科學家和系統管理員。今年出現的第一批黑洞圖片就是用 Python 拼接出來的。

Python 在一些世界知名的組織中扮演著關鍵角色,比如,Netflix 用 Python 向全球 1 億多戶家庭提供流媒體視頻,Instagram 用 Python 實現圖片分享,NASA 借助 Python 來探索太空。

Python 的早年時期

從某些方面看,Python 的崛起就像那個英國喜劇團體(Python 因這個喜劇團體而得名)一樣不尋常。在 Python 自己的領域,這門編程語言也變得越來越出名和越來越有影響力。

Python 原先是荷蘭程序員 Guido van Rossum 的一個個人項目。20 世紀 80 年代末,van Rossum 在荷蘭國家數學和計算機科學研究中心的 CWI 部門開發分布式系統。由于對已有的編程語言感到十分失望,他決定開發一門新的語言——一門既易于使用功能又強大的語言。

Python 之父 Guido van Rossum

對于外行來說,自己開發一門編程語言就像是“造飛機”一樣,但當時 30 多歲的 van Rossum 在某些方面已經很有造詣。他花了三年時間與 CWI 的一個團隊合作,一起開發了 ABC(一種解釋型編程語言),他知道開發一個可以執行指令的解釋器需要些什么,以及一門新的編程語言需要哪些語法構建塊。

對于當時的 van Rossum 來說,使用僅有的幾種編程語言完成任何一件事情都顯得很困難。他正在開發的 Amoeba 分布式計算系統要求他使用 C 語言或 Unix shell,但這兩種語言都有很大的局限性。C 語言要求開發人員自己手動管理內存,容易埋下潛在的 bug,而且還缺少可重用的代碼庫。開發人員想要完成日常任務,需要在每個新項目中重新發明輪子。Unix shell 存在另外一個問題——它雖然為日常任務提供了一些實用程序,但它們的運行速度太慢,無法處理復雜的邏輯。

這些語言對開發人員造成的限制如此之大,以至于在 van Rossum 看來,他自己創建的這門解釋型語言——從 ABC 語言借用了一些特性——似乎是最好的選擇。

van Rossum 回憶道:“我當時在想,為什么不自己開發一門語言呢?我完全可以借鑒 ABC 的一些想法,并將項目的規模縮小一些,把原先需要花三年時間完成的東西縮短至三個月內,讓它變成我自己的個人項目。于是,Python 誕生了”。

1989 年末,van Rossum 開始認真地開發這門語言,并借用了他最喜歡的喜劇團體“Monty Python”的名字,又因為與蛇有關系,后來就有了那個盤繞的巨蟒的 logo。

他說:“當時我的社交生活并不豐富。除了看電視就是寫代碼,有時候也會同時做這兩件事”。

雖然名義上 van Rossum 是為了更好地完成日常工作而開發 Python,但他承認他的動力更多的是來自于自己開發一門語言所要面臨的挑戰。

他說:“當時我也不知道 Python 是否真的會讓我的工作變得更有效率。在某種程度上,我真的很喜歡這種可以自己完成一個大項目的想法,并且可以按照我想要的方式來設計和實現。在我看來,編程是件有趣的事情”。

對于一般人而言,自己開發一門編程語言可能是件很不尋常的事情,但像 van Rossum 這樣的例子并非獨有。在 20 世紀 80 年代末,各種主要編程語言的出現都是因為當時有限的工具無法滿足開發者的需求。Larry Wall 曾經說過,他之所以創建 Perl,是因為其他語言很難解決他的問題,而且他是一個“懶惰、不耐煩和狂妄自大”的人。類似地,為了找到可用于構建集成電路交互工具的語言才,John Ousterhout 設計了 Tcl。

三個月之后,van Rossum 做出了可運行的 Python 原型。

他說:“雖然現在的 Python 有很多在當時并不存在的抽象特性,但語言本身仍然始終如一”。

“那時,Python 已經具備了解析器和運行語言所需的基本組件。第一個可運行的 Python 程序放到現在仍然可以運行”。它們的函數定義是一樣的,縮進是一樣的,字典和元組的創建語法是一樣的,交互式提示符也是一樣的。

當他的兩個同事開始使用這門語言處理日常任務時,van Rossum 并沒有指望它會流行起來。因為他知道,在互聯網時代到來之前,讓一門編程語言流行起來有多么困難。

在今天,只需要點擊幾下鼠標就可以把一款軟件分享給全世界,但在上世紀 80 年代,這是一件非常費力的事情。van Rossum 回憶起當時推廣 ABC 遇到的困難:

“我記得大約在 1985 年,我第一次去美國度假。那是我第一次去美國,我的行李箱里裝了一沓磁帶”。

當時可用的通信方式只有電子郵件,而電子郵件并不適合用來傳播源代碼。他從電子郵件里拿到了對 ABC 感興趣的人的地址和電話號碼,然后挨家挨戶送磁帶。盡管他很賣力地給用戶送磁帶,都沒能讓 ABC 真正流行起來。

他說:“盡管 ABC 提供了很多優秀的特性,但我們在 ABC 的推廣方面并沒有取得很大進展”。不過,隨著互聯網革命進程的演進,Python 的推廣工作變得容易得多,他不用再拖著裝滿磁帶的行李箱到處跑了。

1991 年,van Rossum 通過 alt.sources 新聞組向全世界發布了 Python。這在當時基本上算是一種開源許可協議,比”開源許可協議“這個術語本身早了六年出現。雖然當時的 Python 解釋器仍然需要將 21 個單獨的部分連接成一個壓縮文件,并需要連夜從 Usenet 網絡上下載下來,但與幾年前線下送磁帶的方式相比,它仍然要高效得多。

他說:“我希望 Python 可以取得成功,畢竟之前我做的另一個東西基本上以失敗告終”。

van Rossum 說,在很長一段時間之后,他才知道 Python 的用戶群在增長。漸漸地,他意識到 Python 的發展勢頭正在形成,在與 Python 社區進行了一段時間的交流之后,他知道,Python 成功了。

“這個發現來得非常緩慢。在發布了第一個開源版本之后,我制定了一個新的發布周期,并與 Python 社區頻繁交流。我們感覺這是一件很了不起的事情”。

Python 為什么會贏

Python 在 20 世紀 90 年代初期到中期開始受到關注,Python 的時代到來了,這讓 van Rossum 感到震驚。

van Rossum 相信,被 Python 吸引過來的開發者,他們轉向 Python 的原因與他當初創建 Python 的原因是一樣的。他們需要一門高級的腳本語言,能夠在易用性和功能之間取得平衡。他們希望能夠結束在 C 語言中手動管理內存、在開始新項目時需要為重復任務重新實現代碼的日子。

Warsaw 說,Python 在可用性和功能之間取得了平衡——在 20 世紀 90 年代早期,任何一門主流編程語言都沒能提供這種平衡。”我寫過很多 Perl、Tcl 和 C 代碼,感覺它們一點都不好玩。Python 一出現,我就想,‘哇,它讓編程變得更有趣了’”。

不管是過去還是現在,Python 提供的都是清晰而明確的語法,它使用縮進將代碼分組成塊,讓開發人員更容易閱讀和理解代碼。

Gartner 公司的研發總監 Fintan Ryan 說,無論是現在還是在上世紀 90 年代,Python 清晰明了的風格都在吸引開發者方面起到了重要作用,盡管通過縮進來達到這種效果在開發者當中存在分歧。”Python 的語法非常簡潔。你也可以在其他語言中實現縮進,但 Python 已經自動實現了。有些程序員喜歡這種縮進方式,有些則不喜歡”。

Python 強調代碼的簡潔和可讀性,這并非偶然。van Rossum 曾公開表示,編程語言不僅要告訴計算機該做什么,還要便于在開發者之間傳遞思想。

Ryan 說,除了可讀性之外,Python 很早就內置了一些通用的功能,這讓 Python 從其他語言中脫穎而出。“你從一開始就可以使用某些功能,比如類和異常處理。Python 還提供了對 lambda、map 和 filter 等函數的支持,這些東西在很多情況下都非常有用”。

如果 80 年代末的主流編程語言能夠再好一點,或許就不會給 Python 留有機會。van Rossum 開發 Python 的動機之一就是因為 Perl 與他在 CWI 工作時使用的 Amoeba 分布式計算系統不兼容。他說:“Python 的幸運之處在于 Perl 不能被移植到 Amoeba。如果 Perl 可以被移植到 Amoeba,我就不會想要自己去開發一門語言”。

盡管 Python 在發布后吸引了一批鐵桿粉絲,但在 20 世紀 90 年代,Python 在編程語言方面仍然處于劣勢。van Rossum 說,Python 的競爭對手是 Tcl/Tk 和 Perl,這兩種語言的目標與 Python 是一樣的,即簡單易用且功能強大。

他說:“上世紀 90 年代,在前三大編程語言中,Perl 無疑是第一名,Tcl/Tk 是第二名,而 Python 則是第三”。

Stack Overflow 開發者報告顯示,從開發者活躍度方面看,Python 是增長最快的編程語言,而 Perl 在縮水,它甚至都沒有出現在最新的 Stack Overflow 開發者報告中。

下圖顯示了這種爆炸式的增長。近年來,Stack Overflow 網站上與 Python 相關的問題的增長速度遠遠快于其他編程語言。

那么,Python 是如何超越昔日的競爭對手的呢?又如何解釋這兩門語言之間截然不同的命運呢?van Rossum 認為,這與代碼庫在達到一定規模后的維護難易程度有關。他說,“從人們的經驗來看,Perl 適合用來編寫行數較少的腳本,但如果你的主干代碼超過了 500 行,除此之外還有數千行分支代碼,那么在 Perl 中維護這些代碼就需要遵循很多原則。而在 Python 中,你不需要遵循那么多原則,代碼仍然具有很好的可讀性和可維護性”。

Python 一方面簡單易用,一方面又健壯到可以用來開發大型的應用程序,這兩個因素的組合正是 Python 在上世紀 90 年代取得成功的原因。

“一些互聯網開發者想要開發越來越大型的應用程序,而且他們意識到用 Python 開發應用程序要比用 C 語言、C++ 或 Java 容易得多”。

隨著 Python 在 20 世紀 90 年代逐漸流行起來,當時還在 CWI 工作的 van Rossum 發現他創造的這門編程語言越來越多地把他與來自世界各地的人聯系在一起。

相關推薦
用Python爬取B站5000 條視頻,揭秘為何千萬人為它流淚!
Python教程:如何用xlrd和xlwt庫讀和寫Excel表格?
Python安裝MySQL-python:EnvironmentError的解決辦法
分享:Python2和Python3有那些差異?

精彩推薦

熱門教程

炸金花坐在那边好 短线炒股 广东36选7开奖数据 海南体彩app官方网站 月薪2000元理财 山西快乐十分基本走势图 股票账户查询 内蒙古十一选五奖池 公牛配资 辽宁11选5开奖走势图 快乐十分开奖视频 安徽快三app下载安装 股票牛股 江苏十一选五结果走势图 高频彩票分析技巧论坛 江西多乐彩历史开奖 好运快3计划软件7