Python正在吞噬世界

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

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

我記得有一個(gè)人說,“你不要跟別人說我來參加這個(gè)研討會(huì),因?yàn)槭褂?Python 就像擁有了某種競(jìng)爭(zhēng)優(yōu)勢(shì)”。在他們看來,Python 就是他們的秘密武器,不是嗎?

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

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

如今,人們對(duì) Python 的熱情已經(jīng)遠(yuǎn)遠(yuǎn)超出了最初的開發(fā)者圈子。一些人預(yù)測(cè),隨著 Python 用戶群的快速增長,它很快會(huì)成為世界上最流行的編程語言。每天有數(shù)以百萬計(jì)的人使用 Python,用戶群呈現(xiàn)出指數(shù)級(jí)的增長,幾乎沒有出現(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 實(shí)現(xiàn)圖片分享,NASA 借助 Python 來探索太空。

Python 的早年時(shí)期

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

Python 原先是荷蘭程序員 Guido van Rossum 的一個(gè)個(gè)人項(xiàng)目。20 世紀(jì) 80 年代末,van Rossum 在荷蘭國家數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究中心的 CWI 部門開發(fā)分布式系統(tǒng)。由于對(duì)已有的編程語言感到十分失望,他決定開發(fā)一門新的語言——一門既易于使用功能又強(qiáng)大的語言。

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

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

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

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

1989 年末,van Rossum 開始認(rèn)真地開發(fā)這門語言,并借用了他最喜歡的喜劇團(tuán)體“Monty Python”的名字,又因?yàn)榕c蛇有關(guān)系,后來就有了那個(gè)盤繞的巨蟒的 logo。

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

雖然名義上 van Rossum 是為了更好地完成日常工作而開發(fā) Python,但他承認(rèn)他的動(dòng)力更多的是來自于自己開發(fā)一門語言所要面臨的挑戰(zhàn)。

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

對(duì)于一般人而言,自己開發(fā)一門編程語言可能是件很不尋常的事情,但像 van Rossum 這樣的例子并非獨(dú)有。在 20 世紀(jì) 80 年代末,各種主要編程語言的出現(xiàn)都是因?yàn)楫?dāng)時(shí)有限的工具無法滿足開發(fā)者的需求。Larry Wall 曾經(jīng)說過,他之所以創(chuàng)建 Perl,是因?yàn)槠渌Z言很難解決他的問題,而且他是一個(gè)“懶惰、不耐煩和狂妄自大”的人。類似地,為了找到可用于構(gòu)建集成電路交互工具的語言才,John Ousterhout 設(shè)計(jì)了 Tcl。

三個(gè)月之后,van Rossum 做出了可運(yùn)行的 Python 原型。

他說:“雖然現(xiàn)在的 Python 有很多在當(dāng)時(shí)并不存在的抽象特性,但語言本身仍然始終如一”。

“那時(shí),Python 已經(jīng)具備了解析器和運(yùn)行語言所需的基本組件。第一個(gè)可運(yùn)行的 Python 程序放到現(xiàn)在仍然可以運(yùn)行”。它們的函數(shù)定義是一樣的,縮進(jìn)是一樣的,字典和元組的創(chuàng)建語法是一樣的,交互式提示符也是一樣的。

當(dāng)他的兩個(gè)同事開始使用這門語言處理日常任務(wù)時(shí),van Rossum 并沒有指望它會(huì)流行起來。因?yàn)樗?,在互?lián)網(wǎng)時(shí)代到來之前,讓一門編程語言流行起來有多么困難。

在今天,只需要點(diǎn)擊幾下鼠標(biāo)就可以把一款軟件分享給全世界,但在上世紀(jì) 80 年代,這是一件非常費(fèi)力的事情。van Rossum 回憶起當(dāng)時(shí)推廣 ABC 遇到的困難:

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

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

他說:“盡管 ABC 提供了很多優(yōu)秀的特性,但我們?cè)?ABC 的推廣方面并沒有取得很大進(jìn)展”。不過,隨著互聯(lián)網(wǎng)革命進(jìn)程的演進(jìn),Python 的推廣工作變得容易得多,他不用再拖著裝滿磁帶的行李箱到處跑了。

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

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

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

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

Python 為什么會(huì)贏

Python 在 20 世紀(jì) 90 年代初期到中期開始受到關(guān)注,Python 的時(shí)代到來了,這讓 van Rossum 感到震驚。

van Rossum 相信,被 Python 吸引過來的開發(fā)者,他們轉(zhuǎn)向 Python 的原因與他當(dāng)初創(chuàng)建 Python 的原因是一樣的。他們需要一門高級(jí)的腳本語言,能夠在易用性和功能之間取得平衡。他們希望能夠結(jié)束在 C 語言中手動(dòng)管理內(nèi)存、在開始新項(xiàng)目時(shí)需要為重復(fù)任務(wù)重新實(shí)現(xiàn)代碼的日子。

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

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

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

1994 年,Barry Warsaw 在第一次 Python 研討會(huì)上

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

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

如果 80 年代末的主流編程語言能夠再好一點(diǎn),或許就不會(huì)給 Python 留有機(jī)會(huì)。van Rossum 開發(fā) Python 的動(dòng)機(jī)之一就是因?yàn)?Perl 與他在 CWI 工作時(shí)使用的 Amoeba 分布式計(jì)算系統(tǒng)不兼容。他說:“Python 的幸運(yùn)之處在于 Perl 不能被移植到 Amoeba。如果 Perl 可以被移植到 Amoeba,我就不會(huì)想要自己去開發(fā)一門語言”。

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

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Python發(fā)展歷史 起源 Python的作者,Guido von Rossum,荷蘭人。1982年,Guido從...
    阿甘筆記閱讀 1,485評(píng)論 0 9
  • 1. Python發(fā)展歷史 起源 Python的作者,Guido von Rossum,荷蘭人。1982年,Gui...
    Louisnie閱讀 2,886評(píng)論 0 1
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,356評(píng)論 0 10
  • UI設(shè)計(jì)師主要做什么 拿到低保真原型后,設(shè)計(jì)師應(yīng)該做哪些事情? 設(shè)計(jì)流程 UI設(shè)計(jì)的的工作流程 UI設(shè)計(jì)的基本流程...
    格子喵sama閱讀 994評(píng)論 1 5
  • 昨日過路人,今日好朋友。昨日相視凝眸,今日熟悉雖短卻長久。緣聚一時(shí),一時(shí)還須走。多慨嘆,人生難得是朋友!此...
    九分鐘朋友閱讀 182評(píng)論 0 2

友情鏈接更多精彩內(nèi)容