首頁 > Python教程 > Python應用 > Python之父宣布退休,但Python仍然在吞噬世界

Python之父宣布退休,但Python仍然在吞噬世界

時間:2019-11-01    作者:趙鈺瑩   來源:InfoQ公眾號

10 月 30 日,Python 之父 Guido 大牛宣布退休,離開 Dropbox。

他發推文說,“這件事感覺既苦澀又甜蜜:苦澀的是,我馬上要離開 Dropbox,現在已經退休;甜蜜的是,在 Dropbox 做工程師期間,我學到很多,比如類型標注就來自這段經歷。我會非常懷念在這里工作的日子。”

image.png

Python 正在吞噬世界

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

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

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

Python 的早年時期

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

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

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

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

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

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

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

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

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

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

在今天,只需要點擊幾下鼠標就可以把一款軟件分享給全世界,但在上世紀 80 年代,這是一件非常費力的事情。

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

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

van Rossum 說,在很長一段時間之后,他才知道 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 提供的都是清晰而明確的語法,它使用縮進將代碼分組成塊,讓開發人員更容易閱讀和理解代碼。

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有那些差異?
Python正在吞噬世界:它為何會贏又將走向何方?
Python 的內置對象都藏了哪些小秘密?
實戰干貨!用案例讓你一文搞懂python網絡爬蟲
Python教程:圖像處理模塊ndimage用法實例分析
Python教程:代理IP爬蟲的使用方法
Python教程:如何使用scipy模塊實現一維卷積運算示例?
Python:關于內存分配時的那些小秘密分享
python技巧:global關鍵字的用法詳解
Python教程:深入了解python在HDA中的應用
python技巧:SSLerror的requests證書問題解決方法
PyCharm教程:搭建Spark開發環境的幾個步驟
分享:Django Admin中增加導出CSV功能過程詳解
Python開發技巧:openpyxl讀取單元格字體顏色過程解析
Python教程:面向對象之Web靜態服務器
Python教程:如何為終端提供持久性歷史記錄
Python技巧分享:自動登錄淘寶并保存登錄信息的方法
Python數據分析:利用Flask動態展示 Pyecharts 圖表數據方法
python3教程:如何搭建微型的web服務器?
python技巧:xlwt如何設置單元格的自定義背景顏色
Python開發:Django中間件攔截未登錄url實例詳解
如何解決Python字符串和正則表達式中的反斜杠('\')問題?
Python開發技巧:編寫一個簡單登錄功能過程解析
Python編程:postman傳遞當前時間戳實例詳解
Python爬蟲教程:使用beautifulSoup4爬取名言網案例代碼分享
python開發:動態遷移solr數據過程分享
python數據分析:用線性回歸預測股票價格的代碼分析
Python教程:數據分析模塊pandas用法詳解
Python3教程:pandas.merge用法詳解
Python爬蟲案例:如何爬取豆瓣電影信息?附代碼實例
python開發:如何編寫簡單端口掃描器?
Django框架教程:Pagination分頁實現代碼實例
python爬蟲實例:貓眼電影和電影天堂數據csv和mysql存儲過程

精彩推薦

熱門教程

重庆时时开奖直播app 陕西快乐10分首页 新曾道人内部玄机图 北京选号网 梦幻西游卖高兽决赚钱吗6 亲朋棋牌官方网站充值 怎么利用ps怎么赚钱 开心牧场养鸡赚钱 晓游棋牌ios 安徽十一选五赚钱 有能在手机上兼职赚钱 播新闻的靠什么赚钱 325棋牌旧版下载 广告机能赚钱吗 25选7开奖结果093期 手工做皮包好赚钱吗 865棋牌 棋牌游戏大厅