您現在的位置是:首頁 > 單機遊戲首頁單機遊戲

對話Python之父:人類大腦才是軟體開發效率的天花板

  • 由 Getty的科技視界 發表于 單機遊戲
  • 2022-10-11
簡介鄒欣:大家剛接觸 Python 這門語言時都會好奇的就是強制的程式碼縮排

red hat多少錢

十五年前,《程式設計師》雜誌曾專訪過 Python 之父 Guido van Rossum,一起探討了 Python 3。0 的較為明顯的新特性,即增加了對中文( Unicode )的支援。十五年過去,Python 的版本號只前進了一個數字,但是 Python 已經是程式設計流行度的王者。我們也在近期對 Guido van Rossum 再次進行採訪,除了就開發者們關心的 Python 4 問題進行了最新披露外,還對軟體開發核心進行了深層解讀。

對話Python之父:人類大腦才是軟體開發效率的天花板

2007年,

CSDN

《程式設計師》編輯在 Google Dev Day 大會現場採訪到Guido van Rossum,那時的他已經加入 Google 近兩年,而Python已經是Google的第三大程式語言,適用速度不太高的應用,比如企業內部的一些小工具以及和溝通交流的工具應用。當時的會場上不斷有中國程式設計師走近 Guido ,索要簽名和合影,就像打卡網紅景點一樣。Guido 很高興地看到 Python 在中國正從小眾走向大眾。對於如何推動 Python 在中國的發展,他認真地提出了幾個小建議“比如,CSDN 網站上有人在翻譯我的英文 Blog。出版社也可以考慮出一本中文的 Python 教程或圖書,或把一些現有的 Python 書籍翻譯成中文。”

彈指一揮間,從 Guido van Rossum 在1991年釋出第一個 Python 公開發行版本算起,Python 已然過了三十而立又一年。Guido 的小建議已一一實現,如今的 Python 也在全球程式語言總榜牢牢佔據第一,超越了眾多歷史上流行的程式語言,成為最受歡迎的解釋型程式語言,可以跨平臺執行在所有主流作業系統之上。同時它在眾多軟體企業和組織,例如 Google、Mata(Facebook)、Twitter、Red Hat、Dropbox、阿里巴巴、騰訊、百度、NASA 等,都是排在最前列的程式語言。在 CSDN 2021-2022中國開發者調查報告中,工作中常用 Python 的開發者佔比達30。7%,使用量呈逐年攀升趨勢。

另一方面,誕生之初便是開源專案的 Python,三十多年來其生態圈對整個開源事業的貢獻可謂源源不斷,綿綿不絕。在 2000 年由於 GPL 早期在美國個別州與地方法律存在衝突,Python 2。0 發行版便自行創立了 PSFL 許可證,為推動 GPL 的進步作出了貢獻。Python 社群也貢獻了眾多的開源軟體,例如NumPy、SciPy、Matplotlib 等眾多科學計算程式庫,TensorFlow、PyTorch 機器學習框架,SaltStack 和 Ansible 等 DevOps 運維自動化平臺,OpenStack 雲計算解決方案,還有 Django、Tornado、Flask 等數不清的 Python Web 應用開發框架,等等,都已成為開源軟體開發的重要基石。

此外,作為 Python 軟體基金會( PSF )成員之一的 Google,還有一個 Google Summer of Code(GSOC)的專案,被眾多開發者所喜愛,

它贊

助世界各地的大學生利用暑假時間參與到一些開源軟體的開發中,為開源提供

生生不息

的新力量,如今已是全球最大的開源社群實習專案。

Guido 從一個小眾語言的發明者,到最流行語言的“仁慈的獨裁者”,轉變為一個退休程式設計愛好者加入微軟,他現在的工作和生活狀態如何?本次對話,我們也向 CSDN 開發者徵集了最想問 Python 之父的問題,從 CSDN 副總裁鄒欣與 Guido van Rossum 的獨家對話中,一起看看他的精彩解答。下面是Guido在加州海邊度假別墅中的對話實錄。

1 Python 緣起與三十載風雲發展史

鄒欣:現在很多人的第一門程式語言就是 Python。你是怎麼開始學習程式設計的?

Guido:

我最早是1974與1975年在阿姆斯特丹開始學習程式設計。學的第一門語言是 ALGOL 60,後續還學過一些別的語言,但我最愛的是 Pascal,它是一門非常優雅的語言。在這個過程中,我逐漸瞭解一門程式語言應有的特性,以及它們在處理具體問題時各自的特點。例如,在 ALGOL 60 裡是沒有字串型別的,如果想定義一個識別符號就必須用一種魔法一般的方式來處理字串,這種魔法在不同的輸入硬體上的施展方式還不一樣——要知道我們當時是透過穿孔卡片來輸入程式碼的,每一種卡片機都是不同的。而 Pascal 在處理字串上也很有一套,我認為 Pascal 非常優雅,能幫程式設計師高效率程式設計。

鄒欣:上世紀 90 年代初,你在聖誕節假期作為個人興趣專案建立了 Python,當時你有沒有想過有一天 Python 會如此大放異彩?如何看待今天的 Python?

Guido:

當時,我在工作中有個任務要完成:用C語言寫一大批功能非常相似的小型工具。對於重複編寫非常相似的C語言程式碼,我比較心煩,如果能有個比 C 語言更好的程式語言就好了,我就能非常快速地完成任務。後來,我索性自己發明了 Python。當時只是想創造一個“膠水語言”,把寫過的 C 語言小程式貼上在一起構成一個新的工具。

我對 Python 後來的發展其實根本沒有什麼預期,我覺得它就跟當時做過的許多失敗的專案一樣,沒有什麼特別之處。Python 最開始的發展其實非常緩慢。它後來之所以會得到大家的青睞,主要是在上世紀90年代末期,很多科學家開始在進行科學計算時,就像我一樣用 Python 來作為“膠水語言”,呼叫原來由Fortran 或 C++ 編寫的程式碼。對於這些科學家來說,Python 是非常順手的工具。

對比現在的 Python 和最早的版本,你也許會發現 Python 這門程式語言幾乎沒怎麼變,只是類的宣告有少許改變;print 從一開始到 Python 2 一直都是語句,直到在 Python 3 裡才變成了函式;函式從最開始沒有關鍵字和引數到後來有;以及 Python 3 才出現的雙下劃線魔法函式(Dunder/Magic Methods),等等。但總的來說,現在的 Python 跟最開始相比並沒有特別大的差別,無論是語法、語義還是其本質精神都非常接近。

鄒欣:大家剛接觸 Python 這門語言時都會好奇的就是強制的程式碼縮排。如果重來一次,你是否會放棄縮排這個強制要求?

Guido:程式碼縮排(Indentation)其實並不是我發明的,當時的同事給了我啟發。在 Python 中要求進行程式碼縮排的原因是 30 年前的程式碼編輯器都不能很好地對程式碼進行縮排排版,所以我就想鼓勵程式設計師自己來對程式碼進行正確的排版,從而確保程式設計師從視覺上對程式碼的理解與編譯器對程式碼的解析是一致的。這其實非常重要,幾年前蘋果公司就發生過一次非常嚴重的程式碼安全漏洞事故,就是由於程式碼中一個語句與程式設計師實際設想的 if-else 語法邏輯沒有匹配而引起的,如圖 1 。其實,嚴格要求程式碼縮排確實有點誇張,改用花括號,也不是不可以。

對話Python之父:人類大腦才是軟體開發效率的天花板

圖1:Apple的SSL/TLS錯誤

鄒欣:開源程式語言 Python 的發展是否像所謂的“曲棍球曲線”一樣,是突然獲得了高速發展?

Guido:

我其實不是很喜歡“曲棍球曲線”這個詞,雖然這是一種非常直觀的表述。實際上任何事物的發展最終都會變得平滑,就像一個S曲線一樣,在發展達到一個高峰後就不會繼續高速發展了。

對於我來說,衡量 Python 發展的一個指標其實是社群事件。Python 最早是在1991 年,一個與開發工具有關的 Usenet 新聞組裡釋出的,後來我們建立了郵件列表(mailing list),到 1994 年 Python 有了專屬的 Usenet 新聞組 comp。lang。python。在 1994 年初,Python 仍然只是一個線上社群。後來社群裡的開發者表示希望能有真實世界的線下活動,於是 1994 年底我第一次主導了線下研討會,當時只有不到 25 人參加。半年之後又舉辦了一次線下研討會,參加人數倍增到 50 多。從那時起,我覺得半年一次線下活動實在是太耗費精力了,於是從第三次開始改成了一年一次。再後來,我們有了 PyCon 的會議形式,其它的 Python 會議逐在世界不同的地點舉辦起來。

關於 Python 的技術書籍出版也呈現出同樣的“S曲線”發展,最開始每一位出版Python 相關書的作者都會給我寄一本副本,我也開始收集這些書。到後來Python 的書出版得越來越多,很多作者也就沒有給我寄書了。我也不知道這些書有多少本是成功的,但關於 Python 書籍的市場規模慢慢起來了。O’Reilly也出版了不少,甚至有個時期同時出版了三本 Python 的書。

鄒欣:

Python 的書在中國非常受歡迎,所有程式設計書籍裡賣得最好的就是 Python,其中有一本《Python 程式設計從入門到實踐》中文版暢銷 100 萬冊,讀者更是對其愛稱為“蟒蛇書”。一定是因為 Python 能幫助人們解決他們在實際當中所遇到的問題,人們對此有極大的需求。

Guido:

我想這一定也歸功於中國龐大的人口基數,以及迅速的經濟社會發展。

鄒欣:技術和社會的確在快速發展,程式設計師也一直很忙,幾十年前,程式設計師的顯示器能顯示的程式碼行數很有限。而現在的程式設計師喜歡用寬大的、解析度高的螢幕,甚至是多個螢幕,並排在一起。你覺得多屏程式設計能極大地提升編寫程式碼的效率嗎?

Guido:

你剛才描述的就是我在辦公室的狀態,被多個螢幕圍繞,哈哈。但這並不會飛速提升程式設計效率。你得不停地轉頭檢視各個螢幕,可能會讓人分神。我有個個同事為了能更專注地寫程式碼,他只用一個膝上型電腦螢幕,但開了 8 個程式碼視窗並排在一起,並用非常小的字型。

2 軟體開發沒有銀彈

鄒欣:隨著硬體條件的改進,軟體的進步,很多東西都變了,但所謂的“銀彈”並沒有出現。我們現在有 Python,也有了新的程式語言,例如 Julia、谷歌新近推出的 Carbon 語言等等,但這些是否只是語法糖?還是它們確實可以大幅提升開發軟體的效率呢?

Guido:

Fred Brooks 在《人月神話》書中最早引入這“銀彈”這個詞,闡述了沒有什麼工具能直接讓軟體開發的效率能得到大幅提升,我認為人的大腦可能才是軟體開發效率的天花板,而不是螢幕上能顯示多少行程式碼、或者編譯器能跑得多快。新出現的 GitHub Copilot,我一用就喜歡上了它,它太棒了,但我也不認為這是提升程式碼編寫效率的銀彈——因為它自動生成了 10 行程式碼,你還得花時間去確認這 10 行程式碼所做的事情確實就是你想要的。

我想起以前聽過的一個笑話,那是在 MS-DOS 的年代,有個外行的專案經理領導一個專案,要交付一百來個使用者介面的應用,期限是六個星期。然而到第三個星期,他們還沒有生成任何一個使用者介面,這個專案經理非常焦慮,對他來說團隊的生產效率就是零!然而程式設計師卻說,他們正在構建一個工具,這個工具會在最後兩天自動生成這一百個使用者介面。這大概是所有程式設計師都夢寐以求的事情。事實上我當初建立 Python 的時候也是這麼想的,我最後透過 Python 把原來所有 C 語言寫的小程式都粘

連在一起

,很快完成了任務。

鄒欣:什麼才是軟體開發最核心的東西?是使用“創造工具的工具”來極大提高效率麼?

Guido:

我認為對程式設計來說真正酷的事情,是將新軟體構建於先前軟體的基礎之上,現在的程式設計師編寫程式碼可以借鑑前人的程式碼。舉例來說,假設我需要用Python 編寫一個程式以對推特訊息進行情感分析(Sentiment analysis)。雖然從未做過類似的事情,但我相信可以透過谷歌搜尋引擎和Copilot就能在一個下午完成這項工作,因為我一定不是第一個去做這件事的人。可以看到我們現在構建軟體的方式跟二三十年前很不一樣。

軟體實際上是由多層結構組成的。這有點像生物的進化。一方面 DNA 的編碼方式已經有十億年沒有發生變化了,這就像計算機體系裡的位元、位元組、指標和記憶體一樣。數億年前隱生代的水藻細胞就已經有著自己獨特的 DNA 編碼,一個水藻細胞就像一個小型計算機。另一方面從水藻化石中發現的隱生代細胞跟現代的細胞,例如人類的組織細胞,沒有太大的形態變化。不同類的多細胞可以組成不同的器官,各種不同的器官最終又組成了人類,人類自己又構成了人類社會。軟體也像是這樣,我認為軟體開發領域最重要的事件就是透過網路把計算機都聯絡在了一起,從而能基於簡單的細小結構構建出多層次的大型複雜體系。在簡單當中蘊含著高層次的結構,這裡面具有超乎想象的靈活性和可能性。

在軟體當中其實最終都是指標、記憶體和計算,作為程式設計師瞭解這些最底層的概念非常重要。至少在學習程式設計的時候,要對此有所瞭解。這就像做加減乘除一樣,你可以透過計算器來算出結果,但如果你不懂算術原理,當你在用計算器計算時不小心按錯了,得到了錯誤的最終結果,你自己甚至都不知道錯在哪裡了。如果你懂一點基本算術原理,你就能對計算器的最終顯示結果是否正確有一個大致的判斷。如果還懂得更多一點的數學知識,就可以將一個原本無法直接用算術來進行解答的問題拆分成若干個小的算術問題,解決了這些小問題,就能算出最終答案。因此我們不能把計算機當作是一個魔法盒子,而要去了解它是如何運作的。這樣雖然不一定能成為最厲害的程式設計師,但會比那些完全不懂基本概念的程式設計師更瞭解軟體和計算機的弱點和約束,從而更好地運用各種軟體工具,避免愚蠢的錯誤。

3 從“集市”走進“大教堂”,在微軟做開源的日子

鄒欣:談起微軟和開源,有一本書必須被提到,那就是《大教堂與集市》。許多人認為微軟就像大教堂,而開源則像集市,現在你從集市走進了大教堂裡。在微軟內部從事開源有什麼不一樣的感受和印象嗎?與 C#之父 Anders Hejlsberg、VS Code 負責人 Erich Gamma 等人有過交流和思想碰撞嗎嗎?

Guido:

我對微軟的第一個印象就是微軟實際上並不只有一個微軟,微軟的內部實際上還有眾多不同的部落,彼此有著不同的目標以及做事方式。有的人不怎麼關心軟體而只關心錢;有的人只關心軟體而不怎麼關心錢,但卻不怎麼關心使用軟體的人;還有人會關心使用軟體的人以及軟體如何幫助到這些人。我很幸運在微軟找到了屬於自己的部落,這個團隊關心開發人員,也就是使用 Python 的人。

當然,微軟大部分的部門都關心使用者。我最近有跟Excel團隊有過接觸,他們對 Excel 使用者深入關注的程度給我留下了深刻的印象。我還跟 C#、C++、F# 和TypeScript 等團隊都有過接觸。實際上 Anders Hejlsberg 就是我的入職導師。

我發現微軟內部對待不同的開發語言的態度非常有意思。這些程式語言的狀態也很不一樣,微軟自己設計的語言,例如 C# 和 Visual Basic 得到了非常高的重視;而有的程式語言就像在

光譜

的另一端,不受關注,這裡 Java 就是最顯著的例子。由於一些糟糕的歷史因素,Java 在微軟內部很長時間都沒有得到關注。

鄒欣:在加入微軟後,你有用過 VS Code 或是 Visual Studio 嗎?你喜歡使用什麼程式碼編輯器,是 Vim 還是 Emacs ?

Guido:

這是一個非常有意思的問題。在我加入微軟之前,我是一個有著至少30 年曆史的 Emacs 使用者。雖然我不是個非常極端的 Emacs 使用者,但 Emacs的鍵盤快捷方式已經深深地嵌入了我的肌肉記憶當中。在Emacs之前,我用的是 Vim。一直到現在,任何時候我都能拿起 Vim 就用,我始終記得如何在 Vim 裡切換編輯和導航模式。但只要超過了五分鐘,我就會回到 Emacs 裡進行工作。

在我加入微軟之後,我決定去嘗試一下 VS Code。然後我就喜歡上了它。這也是前面我提到 Copilot 的原因。雖然 Copilot 並不是 VS Code 專屬的,但是VS Code 確實為 Copilot 提供了最為地道的支援。我個人認為 VS Code 是Emacs 的繼承者,尤其是它的擴充套件架構。至於 Visual Studio ,我覺得那是微軟自己的東西。雖然 Visual Studio 也有擴充套件體系,但顯然不是面向所有終端使用者的。

4 Python 4 還有多遠?

鄒欣:大家都非常關注 Python 4,對此你有些什麼可以披露的?如果再次升級Python,對比從 Python 2 升級到 Python 3 會有什麼不同?

Guido:

實際上我也不確定 Python 4 是否會出現。因為從 Python 2 遷移到Python 3 對社群來說實在是一個太過於痛苦的事情,這次遷移還導致了社群裡的分裂,甚至有些開發人員成了陌生人。Python 的核心開發團隊沒有預料到需要付出這麼大的代價,所以大家後來不敢想象再有Python 4了。從我來看,即便今後會有 Python 4,它的遷移過程一定不能重蹈覆轍。

最近圍繞 Python 有個激烈的討論,是關於取消全域性直譯器鎖(Global Interpreter Lock,GIL)。這個改變和遷移過程或許不會像之前那樣痛苦。來自 Facebook 的 Sam Gross 就是極力提議要取消 GIL 的開發人員之一,他在過去很多年一直致力於採用多種策略來取消 GIL,從而實現執行緒自由。但這個觀點既有支援的,也有持懷疑態度的。我對此不置可否。

如果 Python 指導委員會支援,我希望 Python 4 至少在擴充套件模組上能有很多的不同——唯有這樣才能使 Python 3 到 Python 4 的遷移對普通使用者而言是無感的。但或許對編寫 Python 擴充套件的開發人員來說依然是痛苦的。因為整個Python 生態系統充滿了各種擴充套件,例如 NumPy 和其它眾多的科學計算庫、資料科學庫和機器學習庫等等,它們將會從一個沒有 GIL 的 Python 版本中受益。然而,它們已經使用含有 GIL 的 Python 版本編寫了龐大的程式碼,遷移到沒有 GIL 的 Python 版本肯定是個非常複雜的過程。但最終對於這些庫來說,沒有 GIL 可以實現更加安全的多執行緒以及多核計算。

鄒欣:Python 在執行速度上的提升也是大家非常關注的方面。在這方面有什麼新的進展嗎?

Guido:

在這方面我倒是持非常的樂觀和正面的態度。加入微軟之後,我被鼓勵開啟了自己的起步專案,我決定來看看如何提升 Python 直譯器的執行速度。不過我非自己獨自開發,還聘請了一個團隊來做這個事情。這個小團隊的第一位開發人員是過去十年來一直在努力提升 Python 直譯器執行速度的人,他的名字叫 Mark Shannon。

再有幾個月 Python 3。11 版本就會正式釋出,根據我們的基準測試,對比Python 3。10,它會有 20% 到 25% 的速度提升。這是我們三到五個人花了一年左右的時間完成的。3。12 和 3。13 版本還在計劃中,我們期待 Python 直譯器將會執行得更快,擁有更好的未來。

5 “我不是個未來主義者,更專注當下”

鄒欣:在 Python 發展早期,你曾經向 DARPA 寫過提案,希望 Python 能成為大眾的程式語言。你認為現在 Python 實現了這個目標嗎?Python 的下一步發展是什麼?

Guido:

有意思的是,最近也有人向我提及了當年的提案。實際上 Python 並沒有按照當初設想的那樣發展。但 Python 今天確實擁有了非常多的使用者,並且成為和很多人入門學習程式設計的語言——這是 Python 最大的成就。

最近我參與了一個採訪,與我一同被採訪的是個搖滾樂手,同時也是個業餘Python 程式設計愛好者。他寫了很多 Python 程式來管理他的搖滾樂隊,例如巡迴演出的安排、追蹤他們歌曲的創作進度,等等。他非常熱衷於寫這些 Python 指令碼,我尋思,這大概能讓他從創作音樂中解放出來。他從 14 歲開始就在樂隊裡彈電吉他,那時他就有個夢想:在 23 歲的讓他的樂隊與唱片公司簽約。他非常有目標驅動力,而且非常有雄心和專注,後來他真的實現了夢想,簽約了唱片公司並且發行了熱門唱片。他做事非常有計劃,給我留下深刻印象。他會設定最後期限,按計劃推出下一張專輯,為了創作出十首足夠好的歌曲來發行一張唱片,他們常常需要先創作出一百首以上的歌曲來篩選。

鄒欣:

我曾讀過一本 Bill Gates 的傳記,他就是個非常有驅動力的人,這個傳記書名叫《Hard Drive》,一不小心會和“硬碟”混為一談。

Guido:

這個書名的確開了一個小玩笑。

鄒欣:

Unix 的創造者之一 Ken Thompson 的故事和你說的樂手不同,他沒有雄心勃勃的創業理想或商業目標,而是喜歡通宵在機房寫程式、玩電腦,他對於“加入偉大的公司”,也並不熱心。貝爾實驗室花了一番功夫才說服他加入,最終他在那裡和幾個小夥伴創造了 Unix、C 這些影響世界的產品。

Guido:

相比之下,我在自己 23 歲的時候還不知道自己將來要幹什麼,我只是關心當下什麼事情最讓我開心,那時程式設計就是。我不是個未來主義者,更專注當下,我對 Python 未來的發展也沒有雄心勃勃的設想。

這個夏天,我的一大愛好就是沿著海岸徒步,或者騎山地車到處轉悠。我也會花很多時間閱讀,比如美國經典小說《殺死一隻知更鳥》。我正慢慢看的另一本書是 Marlon James 的《七殺簡史》。作者來自牙買加,目前在美國一所文理學院教文學,他寫了一些我非常喜歡的奇幻書,而且故事背景設定在非洲。我非常享受這樣的生活。

感謝 Python 中文社群/大媽對本次採訪的鼎力支援。

本文來自微信公眾號

“CSDN”(ID:CSDNnews)

,作者:羅景文,責編:何苗,出品:《新程式設計師》編輯部

Top