10 月 30 日,Python 之父 Guido 大牛宣布退休,離開 Dropbox。
他發(fā)推文說,“這件事感覺既苦澀又甜蜜:苦澀的是,我馬上要離開 Dropbox,現(xiàn)在已經(jīng)退休;甜蜜的是,在 Dropbox 做工程師期間,我學(xué)到很多,比如類型標(biāo)注就來自這段經(jīng)歷。我會非常懷念在這里工作的日子?!?/p>
Python 正在吞噬世界
如今,人們對 Python 的熱情已經(jīng)遠(yuǎn)遠(yuǎn)超出了最初的開發(fā)者圈子。一些人預(yù)測,隨著 Python 用戶群的快速增長,它很快會成為世界上最流行的編程語言。每天有數(shù)以百萬計的人使用 Python,用戶群呈現(xiàn)出指數(shù)級的增長,幾乎沒有出現(xiàn)下降的跡象。
不管是專業(yè)的還是業(yè)余的開發(fā)人員,他們都在使用 Python 處理大大小小的任務(wù),特別是 Web 開發(fā)人員、數(shù)據(jù)科學(xué)家和系統(tǒng)管理員。今年出現(xiàn)的第一批黑洞圖片就是用 Python 拼接出來的。
Python 在一些世界知名的組織中扮演著關(guān)鍵角色,比如,Netflix 用 Python 向全球 1 億多戶家庭提供流媒體視頻,Instagram 用 Python 實現(xiàn)圖片分享,NASA 借助 Python 來探索太空。
Python 的早年時期
Python 原先是荷蘭程序員 Guido van Rossum 的一個個人項目。20 世紀(jì) 80 年代末,van Rossum 在荷蘭國家數(shù)學(xué)和計算機(jī)科學(xué)研究中心的 CWI 部門開發(fā)分布式系統(tǒng)。由于對已有的編程語言感到十分失望,他決定開發(fā)一門新的語言——一門既易于使用功能又強(qiáng)大的語言。
對于當(dāng)時的 van Rossum 來說,使用僅有的幾種編程語言完成任何一件事情都顯得很困難。他正在開發(fā)的 Amoeba 分布式計算系統(tǒng)要求他使用 C 語言或 Unix shell,但這兩種語言都有很大的局限性。C 語言要求開發(fā)人員自己手動管理內(nèi)存,容易埋下潛在的 bug,而且還缺少可重用的代碼庫。開發(fā)人員想要完成日常任務(wù),需要在每個新項目中重新發(fā)明輪子。Unix shell 存在另外一個問題——它雖然為日常任務(wù)提供了一些實用程序,但它們的運(yùn)行速度太慢,無法處理復(fù)雜的邏輯。
這些語言對開發(fā)人員造成的限制如此之大,以至于在 van Rossum 看來,他自己創(chuàng)建的這門解釋型語言——從 ABC 語言借用了一些特性——似乎是最好的選擇。
van Rossum 回憶道:“我當(dāng)時在想,為什么不自己開發(fā)一門語言呢?我完全可以借鑒 ABC 的一些想法,并將項目的規(guī)模縮小一些,把原先需要花三年時間完成的東西縮短至三個月內(nèi),讓它變成我自己的個人項目。于是,Python 誕生了”。
1989 年末,van Rossum 開始認(rèn)真地開發(fā)這門語言,并借用了他最喜歡的喜劇團(tuán)體“Monty Python”的名字,又因為與蛇有關(guān)系,后來就有了那個盤繞的巨蟒的 logo。
他說:“當(dāng)時我也不知道 Python 是否真的會讓我的工作變得更有效率。在某種程度上,我真的很喜歡這種可以自己完成一個大項目的想法,并且可以按照我想要的方式來設(shè)計和實現(xiàn)。在我看來,編程是件有趣的事情”。
三個月之后,van Rossum 做出了可運(yùn)行的 Python 原型。
他說:“雖然現(xiàn)在的 Python 有很多在當(dāng)時并不存在的抽象特性,但語言本身仍然始終如一”。
“那時,Python 已經(jīng)具備了解析器和運(yùn)行語言所需的基本組件。第一個可運(yùn)行的 Python 程序放到現(xiàn)在仍然可以運(yùn)行”。它們的函數(shù)定義是一樣的,縮進(jìn)是一樣的,字典和元組的創(chuàng)建語法是一樣的,交互式提示符也是一樣的。
當(dāng)他的兩個同事開始使用這門語言處理日常任務(wù)時,van Rossum 并沒有指望它會流行起來。因為他知道,在互聯(lián)網(wǎng)時代到來之前,讓一門編程語言流行起來有多么困難。
在今天,只需要點擊幾下鼠標(biāo)就可以把一款軟件分享給全世界,但在上世紀(jì) 80 年代,這是一件非常費力的事情。
1991 年,van Rossum 通過 alt.sources 新聞組向全世界發(fā)布了 Python。這在當(dāng)時基本上算是一種開源許可協(xié)議,比”開源許可協(xié)議“這個術(shù)語本身早了六年出現(xiàn)。雖然當(dāng)時的 Python 解釋器仍然需要將 21 個單獨的部分連接成一個壓縮文件,并需要連夜從 Usenet 網(wǎng)絡(luò)上下載下來,但與幾年前線下送磁帶的方式相比,它仍然要高效得多。
他說:“我希望 Python 可以取得成功,畢竟之前我做的另一個東西基本上以失敗告終”。
van Rossum 說,在很長一段時間之后,他才知道 Python 的用戶群在增長。漸漸地,他意識到 Python 的發(fā)展勢頭正在形成,在與 Python 社區(qū)進(jìn)行了一段時間的交流之后,他知道,Python 成功了。
Python 為什么會贏
Python 在 20 世紀(jì) 90 年代初期到中期開始受到關(guān)注,Python 的時代到來了,這讓 van Rossum 感到震驚。
van Rossum 相信,被 Python 吸引過來的開發(fā)者,他們轉(zhuǎn)向 Python 的原因與他當(dāng)初創(chuàng)建 Python 的原因是一樣的。他們需要一門高級的腳本語言,能夠在易用性和功能之間取得平衡。他們希望能夠結(jié)束在 C 語言中手動管理內(nèi)存、在開始新項目時需要為重復(fù)任務(wù)重新實現(xiàn)代碼的日子。
Warsaw 說,Python 在可用性和功能之間取得了平衡——在 20 世紀(jì) 90 年代早期,任何一門主流編程語言都沒能提供這種平衡?!蔽覍戇^很多 Perl、Tcl 和 C 代碼,感覺它們一點都不好玩。Python 一出現(xiàn),我就想,‘哇,它讓編程變得更有趣了’”。
不管是過去還是現(xiàn)在,Python 提供的都是清晰而明確的語法,它使用縮進(jìn)將代碼分組成塊,讓開發(fā)人員更容易閱讀和理解代碼。
Python 強(qiáng)調(diào)代碼的簡潔和可讀性,這并非偶然。van Rossum 曾公開表示,編程語言不僅要告訴計算機(jī)該做什么,還要便于在開發(fā)者之間傳遞思想。
Ryan 說,除了可讀性之外,Python 很早就內(nèi)置了一些通用的功能,這讓 Python 從其他語言中脫穎而出?!澳銖囊婚_始就可以使用某些功能,比如類和異常處理。Python 還提供了對 lambda、map 和 filter 等函數(shù)的支持,這些東西在很多情況下都非常有用”。
如果 80 年代末的主流編程語言能夠再好一點,或許就不會給 Python 留有機(jī)會。van Rossum 開發(fā) Python 的動機(jī)之一就是因為 Perl 與他在 CWI 工作時使用的 Amoeba 分布式計算系統(tǒng)不兼容。他說:“Python 的幸運(yùn)之處在于 Perl 不能被移植到 Amoeba。如果 Perl 可以被移植到 Amoeba,我就不會想要自己去開發(fā)一門語言”。
盡管 Python 在發(fā)布后吸引了一批鐵桿粉絲,但在 20 世紀(jì) 90 年代,Python 在編程語言方面仍然處于劣勢。van Rossum 說,Python 的競爭對手是 Tcl/Tk 和 Perl,這兩種語言的目標(biāo)與 Python 是一樣的,即簡單易用且功能強(qiáng)大。
他說:“上世紀(jì) 90 年代,在前三大編程語言中,Perl 無疑是第一名,Tcl/Tk 是第二名,而 Python 則是第三”。
Stack Overflow 開發(fā)者報告顯示,從開發(fā)者活躍度方面看,Python 是增長最快的編程語言,而 Perl 在縮水,它甚至都沒有出現(xiàn)在最新的 Stack Overflow 開發(fā)者報告中。
下圖顯示了這種爆炸式的增長。近年來,Stack Overflow 網(wǎng)站上與 Python 相關(guān)的問題的增長速度遠(yuǎn)遠(yuǎn)快于其他編程語言。
那么,Python 是如何超越昔日的競爭對手的呢?又如何解釋這兩門語言之間截然不同的命運(yùn)呢?van Rossum 認(rèn)為,這與代碼庫在達(dá)到一定規(guī)模后的維護(hù)難易程度有關(guān)。他說,“從人們的經(jīng)驗來看,Perl 適合用來編寫行數(shù)較少的腳本,但如果你的主干代碼超過了 500 行,除此之外還有數(shù)千行分支代碼,那么在 Perl 中維護(hù)這些代碼就需要遵循很多原則。而在 Python 中,你不需要遵循那么多原則,代碼仍然具有很好的可讀性和可維護(hù)性”。
Python 一方面簡單易用,一方面又健壯到可以用來開發(fā)大型的應(yīng)用程序,這兩個因素的組合正是 Python 在上世紀(jì) 90 年代取得成功的原因。
“一些互聯(lián)網(wǎng)開發(fā)者想要開發(fā)越來越大型的應(yīng)用程序,而且他們意識到用 Python 開發(fā)應(yīng)用程序要比用 C 語言、C++ 或 Java 容易得多”。
隨著 Python 在 20 世紀(jì) 90 年代逐漸流行起來,當(dāng)時還在 CWI 工作的 van Rossum 發(fā)現(xiàn)他創(chuàng)造的這門編程語言越來越多地把他與來自世界各地的人聯(lián)系在一起。