Python大咖談 - Alex Martelli

Python大咖談_Alex Martelli
Alex Martelli

Alex Martelli,意大利計(jì)算機(jī)工程師,《Python in a Nutshell》第一、二版作者,《Python Cookbook》前兩版與 《Python in a Nutshell》第三版的合著者,Python 軟件基金會(huì)(PSF)成員。因在 Python 社區(qū)的卓越貢獻(xiàn),2002 年與 2006 年分別獲得 Activators 精選獎(jiǎng)與 Frank Willison 紀(jì)念獎(jiǎng)。2005 年起,他開始在谷歌工作,現(xiàn)任谷歌高級(jí)工程師、谷歌云平臺(tái)社區(qū)支持團(tuán)隊(duì)技術(shù)主管。Alex 是 Stack Overflow 積極貢獻(xiàn)者,還常在各種技術(shù)大會(huì)上發(fā)表演說。


訪談主題:Python 圖書,Python 2.7 與 Python 3.x,谷歌與 Python。


Mike Driscoll:能簡單介紹一下您的背景嗎?

Alex Martelli:我是意大利人,在國內(nèi)學(xué)的是電子工程專業(yè)。畢業(yè)后,我想從事集成電路設(shè)計(jì),雖然設(shè)計(jì)其它系統(tǒng)也很酷,但我還是鐘情于集成電路。

那時(shí),真正有意思的電路設(shè)計(jì)都是美國公司在做,所以,我的第一份工作在美國,也就是大家耳熟能詳?shù)牡轮輧x器(TI)。

德州儀器(TI)

德州儀器名氣很大,不管是消費(fèi)產(chǎn)品還是前沿芯片,他們都在做,但我并不適應(yīng)這家公司。德州儀器的風(fēng)格是一下子啟動(dòng)很多項(xiàng)目,然后毫無征兆的就廢棄這些項(xiàng)目,結(jié)果,我就在各個(gè)廢棄的項(xiàng)目團(tuán)隊(duì)間跳來跳去。

Alex Martelli:‘我就在各個(gè)廢棄的項(xiàng)目團(tuán)隊(duì)間跳來跳去?!?/p>

我也不能指責(zé)德州儀器這種做法。他們不想干擾工程師的生活,而我當(dāng)時(shí)只是個(gè)小年輕兒,還是移民,反正在哪里都一樣。不到一年,我就在達(dá)拉斯、奧斯汀、休斯頓與拉伯克的四個(gè)實(shí)驗(yàn)室工作過,還不到一年!

這么折騰給人的壓力很大。之前覺得德州儀器的工作更有意思,我拒絕了 IBM 給的 Offer,后來,我只好又回過頭去找 IBM。IBM 也開發(fā)過不少頗具創(chuàng)意的集成電路,只是不廣為人知,他們關(guān)注的主要是科研,不是為了量產(chǎn),僅僅是為了驗(yàn)證概念。

IBM 在這個(gè)領(lǐng)域也有很多走在時(shí)代前沿的技術(shù)。我記得 IBM 獲得過一次諾貝爾獎(jiǎng),他們用單個(gè)原子拼寫出 IBM 三個(gè)字母。比起觀測原子,用電子顯微鏡擺放原子絕對(duì)是別出心裁,就像科幻小說似的。

IBM 當(dāng)時(shí)要在意大利,具體說是羅馬,設(shè)立一家研究院,他們希望有人能毛遂自薦,不用想,我肯定自告奮勇。這個(gè)機(jī)會(huì)不錯(cuò),還能回國,那里有更好喝的卡布奇諾,還有更美味的面食!就這樣,80 年代我又回到了意大利,從此我的事業(yè)開始起步了。

Driscoll:您是怎么成為程序員的?

Martelli:那是在 IBM 時(shí)的事兒,我們當(dāng)年剛開發(fā)了一臺(tái)圖像處理原型機(jī),這在當(dāng)時(shí)可是很了不起的成就。這臺(tái)原型機(jī)配備了專屬芯片、幀緩沖器和顯示器,現(xiàn)在看起來這算不了什么,但當(dāng)時(shí)可是價(jià)值不菲。

Alex Martelli:‘我們當(dāng)年剛開發(fā)了一臺(tái)圖像處理原型機(jī),這在當(dāng)時(shí)可是很了不起的成就?!?/p>

我們還為這臺(tái)原型機(jī)舉辦了啟動(dòng)儀式,有位主管走過來和我說,“恭喜你們,只可惜這臺(tái)原型機(jī)今后要在角落里吃土了?!?我很驚訝,“怎么會(huì)在角落里吃土?IBM 研究院有各個(gè)領(lǐng)域的科學(xué)家,天文學(xué)家、地質(zhì)學(xué)家,都能用上這臺(tái)機(jī)器啊。”

“你說的沒錯(cuò),” 他說,“但這臺(tái)機(jī)器不支持他們用的編程語言啊,這些科學(xué)家用的是 Fortran 和 APL。想讓這臺(tái)機(jī)器派上用場,要有人寫個(gè)通道程序(Channel Program),地質(zhì)學(xué)家和天文學(xué)家才不會(huì)干這事兒?!?這可是一個(gè)龐大的軟件項(xiàng)目,要開發(fā)所有科學(xué)家所需的界面與支持庫。

我說,“能不能讓我們組建一個(gè)小團(tuán)隊(duì)開發(fā)這個(gè)軟件呢?” 他反問我,“你覺得多少人合適?”

我當(dāng)時(shí)真的希望“自己設(shè)計(jì)”的機(jī)器能有用武之地,而不是放在那里落土,于是,我大著膽子低聲說道,“3 個(gè)人?”

他笑了起來,“沒問題,我負(fù)責(zé)找人,你負(fù)責(zé)組建團(tuán)隊(duì),不過半年后得做出點(diǎn)成績來?!?/p>

我就這樣稀里糊涂地當(dāng)上了 IBM 小主管,成了一名低層管理者,準(zhǔn)確的說是技術(shù)帶頭人。但這并不意味著標(biāo)準(zhǔn)降低了,我需要自學(xué)大量的軟件技能才能編寫通道程序,要整合各個(gè)支持庫,還要找出為那些外圍設(shè)備加速的支持庫算法。

Driscoll:那您成功了嗎?

Martelli:半年后,我們只搞出了一套湊合能用的概念模型,好在領(lǐng)導(dǎo)同意我們接著干。最后,這個(gè)項(xiàng)目搞了兩年,不過總算為 APL 與 Fortran 開發(fā)出了所需的支持庫,這已經(jīng)很難能可貴了。

Alex Martelli:‘我們總算為 APL 與 Fortran 開發(fā)出了所需的支持庫,這已經(jīng)很難能可貴了?!?/p>

這個(gè)軟件項(xiàng)目讓我們精心打造的硬件系統(tǒng)派上了用場,科學(xué)家與程序員可以用它實(shí)現(xiàn)圖像處理與可視化,無需居間軟件,也不用學(xué)習(xí)匯編語言或通道程序。

不過,兩年完全沒有接觸硬件設(shè)計(jì),這是個(gè)大問題,我甚至沒有跟進(jìn)硬件設(shè)計(jì)的趨勢。那個(gè)年代,硬件設(shè)計(jì),特別是集成電路,每年都有革命性的發(fā)展。不能在這一行占據(jù)前沿位置,很快就跟不上潮流了。

Driscoll:這就是您為什么會(huì)轉(zhuǎn)向軟件?

Martelli:是啊,我有多年經(jīng)驗(yàn),就算那些剛畢業(yè)的大學(xué)生,哪怕他們精通最新的高科技工具,我也比他們強(qiáng)。

但另一方面,哪怕最簡單的管理工作與軟件開發(fā),也可以為我真正想干的事業(yè)添加很多附加值,比如,這些為集成電路設(shè)計(jì)的軟件系統(tǒng)。

走了幾年下坡路以后,我不得不承認(rèn)自己設(shè)計(jì)不了像樣的現(xiàn)代硬件系統(tǒng)了。長期以來,我干得軟件開發(fā)與管理工作越來越多。其實(shí),很多人與我的際遇類似,都是從硬件起步,然后,逐漸發(fā)現(xiàn)硬件本身不能真正解決問題。

Alex Martelli:‘很多人與我的際遇類似,都是從硬件起步,然后,逐漸發(fā)現(xiàn)硬件本身不能真正解決問題?!?/p>

我女兒現(xiàn)在就是這樣。她是電信工程專業(yè),也就是高級(jí)無線電系統(tǒng)專業(yè)的博士,雖然癡迷于硬件,但她現(xiàn)在的工作四分之三都是軟件。這是因?yàn)樗械木W(wǎng)絡(luò),越往底層走,越是軟件驅(qū)動(dòng)。

打個(gè)比方,假如設(shè)計(jì)一個(gè)天線,沒有軟件與數(shù)據(jù)的支持,其自身無法運(yùn)作。如今的設(shè)備都會(huì)配備讓人眼花繚亂的天線陣列,并有足夠的智能支持,基于信號(hào)質(zhì)量,判斷什么時(shí)候激活哪個(gè)天線。這與我畢業(yè)時(shí)的無線電技術(shù)不可同日而語,需要大量軟件支持。

Driscoll:您為什么會(huì)學(xué) Python 呢?

Martelli:這段經(jīng)歷其實(shí)挺有意思。很多年前,剛踏入迷人的軟件世界時(shí),我曾用業(yè)余時(shí)間開發(fā)過一個(gè)研究定約橋牌打法的實(shí)驗(yàn)系統(tǒng)。

定約橋牌是 Harold Vanderbilt 在 1920 年代發(fā)明的。我學(xué)打定約橋牌的時(shí)候,有關(guān)這個(gè)游戲的數(shù)學(xué)理論很少。只有一名數(shù)學(xué)大師,émile Borel,寫過一本關(guān)于橋牌的數(shù)學(xué)理論圖書。

那時(shí),計(jì)算機(jī)的運(yùn)算能力已經(jīng)很強(qiáng),也很便宜,就算拿來分析這些娛樂活動(dòng)也不算可望而不可及。我就是在當(dāng)時(shí)新賣的個(gè)人電腦上重構(gòu)了 1930 年代首次提出的一種試驗(yàn)性思路。

Alex Martelli:‘我重構(gòu)了 1930 年代首次提出的一種試驗(yàn)性思路?!?/p>

我是按照傳統(tǒng)的硬件思路搞軟件,從編程系統(tǒng)的組織方式上看,這個(gè)解決方案就是一團(tuán)糟,用的語言數(shù)不勝數(shù),Modula-3、Perl、Visual Basic、Scheme,等等,等等,我自己都覺得害怕,但不管怎么說,這一堆七拼八湊的東西能跑得起來。

Driscoll:這個(gè)程序能贏牌嗎?

Martelli:這個(gè)程序每手玩了一百萬次,并記錄了所有結(jié)果,證明了 1920 年代與 1930 年代最聰明的橋牌大師,Ely Culbertson,令人不可思議的直覺。

我把分析結(jié)果寫成了研究報(bào)告,提交給了《橋牌世界》,這是當(dāng)時(shí)最有名的橋牌雜志。雜志編輯看了以后非常感興趣,還與我一起改進(jìn)這篇報(bào)告。這篇研究成果最終發(fā)表在《橋牌世界》 2000 年 1 月刊與 2 月刊上。

之后,我與不少橋牌選手互通有無,甚至有橋牌冠軍問我,“你能用這些理論幫我解決問題嗎?”

我很高興能幫上他們的忙,只是這個(gè)程序太脆弱了,哪怕改個(gè)標(biāo)點(diǎn)符號(hào),也會(huì)莫名其妙地崩潰。純屬一團(tuán)糟!所以我決定,不管是不是個(gè)坑,我都要重寫一遍。目標(biāo)就是盡可能用一種編程語言重構(gòu)這個(gè)程序,但問題是用哪種語言!

Driscoll:那您找到了想要的語言嗎?

Martelli:能實(shí)現(xiàn)我要求的語言只有 Lisp,其實(shí)我更偏向 Scheme,這可能和我的硬件背景有關(guān)。

可惜它的免費(fèi)版沒有足夠的支持庫,不能實(shí)現(xiàn)完成所需的輔助任務(wù)。再怎么說這也只是個(gè)人項(xiàng)目,我已經(jīng)耗費(fèi)了不少時(shí)間,不想再在這上面花錢了。有個(gè)同事向我推薦,“你可以試試新出的那個(gè)編程語言,現(xiàn)在特火,叫 Python?!?/p>

Alex Martelli:‘有個(gè)同事向我推薦,“你可以試試新出的那個(gè)編程語言,現(xiàn)在特火,叫 Python?!薄?/p>

我說,“別別別,我都學(xué)了一打編程語言了,我可不想再學(xué)了!” 但他非要堅(jiān)持,而我又很尊重這位兄弟,最終還是我擋不住他的狂轟亂炸,決定給這個(gè)編程語言一次機(jī)會(huì)。我給自己定了個(gè)小目標(biāo),用它解決個(gè)小問題,看看它到底好在哪里。

Alex Martelli:‘我說,“別別別,我都學(xué)了一打編程語言了,我可不想再學(xué)了!”’

1990 年代后期,我還不懂網(wǎng)絡(luò),這還是個(gè)新鮮事物,看上去蠻有趣的,我就琢磨著自己搭建個(gè)網(wǎng)站。網(wǎng)站編程與 Python 我都是自學(xué)的,你猜我花了多長時(shí)間?才一個(gè)周末!我說過,不論做什么事情,都得下點(diǎn)功夫。

我周五晚上開始邊看手冊邊試著寫代碼,沒過多久,我就不看用看手冊了,我連猜帶蒙,再根據(jù)其它代碼的寫法推斷下一步該怎么寫,我居然有 90% 都蒙對(duì)了。這門語言貌似和我的腦回路很搭,就好像我怎么想的,它就是怎么做的。

Alex Martelli:‘這門語言貌似和我的腦回路很搭,就好像我怎么想的,它就是怎么做的。’

周六下午剛過,我就學(xué)完了。我做出了一個(gè)能初步運(yùn)轉(zhuǎn)的 CGI,還有一個(gè) Web 應(yīng)用,可以用它計(jì)算定約橋牌中同花色分牌的條件概率。周末還剩一天,接下來,我該干點(diǎn)什么?

我就想,“這個(gè)程序不錯(cuò),但只支持意大利語,其它語種的人可能對(duì)它也有興趣。我應(yīng)該做個(gè)支持英語、法語的多語版本,反正,這兩種語言我也很擅長。”

做多語版本需要模板系統(tǒng),但我沒找到滿意的 Python 模板系統(tǒng)。我試過 Gofer 等工具,但都不合我意。最后,我干脆自己寫了一個(gè)模板系統(tǒng),叫“Yet Another Python Template Utility (YAPTU)”,即,“另一個(gè) Python 模板工具”。周日,這個(gè)工具就可以順利運(yùn)行了。然后,我把它打包上傳到一個(gè)發(fā)布自由軟件的地方,這樣我就有了自己的網(wǎng)站。

Yet Another Python Template Utility (YAPTU)

Driscoll:有人對(duì)您的作品感興趣嗎?

Martelli:YAPTU 當(dāng)時(shí)確實(shí)吸引了一個(gè)人注意,他正為加州大學(xué)伯克利分校開發(fā)計(jì)算機(jī)科學(xué)專業(yè)網(wǎng)站。他覺得 YAPTU 是最好用的模板工具,并打算用 Python 開發(fā)網(wǎng)站,他還對(duì) YAPTU 做了一些優(yōu)化,并給我發(fā)了補(bǔ)丁文件。我們一起討論怎么能把 YAPTU 做得更好,后來還成了朋友。

Alex Martelli:‘我們一起討論怎么能把 YAPTU 做得更好,后來還成了朋友。他就是 Peter Norvig,現(xiàn)在是谷歌研究主管?!?/p>

他就是 Peter Norvig,現(xiàn)在是谷歌研究主管,也是暢銷編程書《人工智能:一種現(xiàn)代手段》的作者。由此可見,Python 從那時(shí)起就幫我搭建了非常好的人脈。

人工智能:一種現(xiàn)代手段

我還嘗試在工作中推廣 Python,可惜沒有成功。決策權(quán)在專業(yè)管理人員手里,他們認(rèn)為就算我們現(xiàn)在用的程序都是面向 Unix 工作站的,但未來屬于 Windows,其它操作系統(tǒng)都將不復(fù)存在。的確,如今已經(jīng)很難買到 Unix 工作站了。到處都是使用 Linux 或 Windows 的 PC。從這點(diǎn)上看,他們的預(yù)判非常正確。

我不愿意只使用微軟樂意支持的編程語言,但高層管理人員也不會(huì)同意用其它編程語言。我只能在他們注意不到的地方偷偷用 Python,比如測試框架,一個(gè)叫做 haha.bat 的 Shell 腳本文件。

這是 Windows 推出 cmd 之前的事情了。Python 腳本非常有用,且易于維護(hù),只有一點(diǎn)讓人不太滿意。上班時(shí),我只能用微軟的 Fortran 編譯器處理漏洞,然后擠出可憐的時(shí)間使用 Python。

Driscoll:咱們稍微換個(gè)話題,您是怎么成為 Python 圖書作者的呢?

Martelli:我非常喜歡 Python,Guido van Rossum、 Python 開發(fā)者及社區(qū)里的每一位伙伴,他們給了我如此美妙的禮物,我希望有所回報(bào)。

我能做什么呢?當(dāng)時(shí)有個(gè)叫 comp.lang.python 的 Usenet 小組,很多人都在這里問問題。我比較擅長幫別人解決技術(shù)問題,雖然,我只是 Python 新手,但仍開始嘗試回答別人的問題。只要看到自認(rèn)能有效解決的問題,我就會(huì)回答,很快就有了不錯(cuò)的成績!

Alex Martelli:‘我比較擅長幫別人解決技術(shù)問題?!?/p>

幾個(gè)月后,Python 社區(qū)的一位高人給我起了個(gè)外號(hào),馬爹利機(jī)器人(Martelli Bot)。眾所周知,我是 Python 社區(qū)里第三個(gè)“機(jī)器人”,只有回答了超級(jí)多的問題,而且基本上都正確,才會(huì)被人稱為機(jī)器人。給我起外號(hào)的這位大神就是 Steve Holden,我很榮幸告訴大家,他是我的新書《Python in a Nutshell》第三版的合著者。

Python in a Nutshell

總之,這讓我在 Python 社區(qū)里聲名鵲起,也給了我聯(lián)系 O'Reilly 出版社的勇氣,我看到他們在為《Python in a Nutshell》這本書找作者,于是我問他們,“能不能讓我嘗試一下,或者找個(gè)經(jīng)驗(yàn)更豐富的人一起寫?”

他們說,“你還要找人合作?發(fā)個(gè)樣章和大綱給我們吧?!?我就這樣成了 Python 圖書作者。

Alex Martelli:‘我問他們,“能不能讓我嘗試一下,或者找個(gè)經(jīng)驗(yàn)更豐富的人一起寫?”’

Driscoll:您為什么會(huì)寫《Python Cookbook》?

Martelli:合著《Python Cookbook》一書時(shí),我走了一點(diǎn)彎路,之前計(jì)劃中的一位作者放棄了。這本書很有意思,所有的解決方案都來自社區(qū),只是為了切實(shí)有效地解決問題,才進(jìn)行了改寫。

Python Cookbook

我還在 ActiveState 網(wǎng)站上貢獻(xiàn)了很多解決方案,并且樂此不疲!ActiveState 有點(diǎn)類似現(xiàn)在的 Stack Overflow。Stack Overflow 對(duì)特定主題技術(shù)的問題與答案處理的非常到位。我也這個(gè)網(wǎng)站的活躍用戶:Python 標(biāo)簽下的發(fā)帖排行榜上,我排名第二,我還是首頁榮譽(yù)榜的前 0.001%。

多說一句,Stack Overflow 的首席數(shù)據(jù)科學(xué)家發(fā)表過一個(gè)研究報(bào)告,介紹編程語言的流行度,該報(bào)告稱,隨著時(shí)間推移,基于 Stack Overflow 上的標(biāo)簽與問題,流行度增長最快的編程語言就是 Python。

Alex Martelli:‘這項(xiàng)研究表明,2019 年初,Python 將會(huì)成為最流行的編程語言?!?/p>

這項(xiàng)研究表明,2019 年初,Python 將會(huì)成為最流行的編程語言?,F(xiàn)在,Python 僅次于 Java 與 JavaScript,但是它已經(jīng)超過了其它所有編程語言。Perl 消失了,Ruby 也消失了,C# 排名下滑極快。只有 Java 與JavaScript 還算堅(jiān)挺,但是它們的變化幅度不大,只有 Python 突飛猛進(jìn)。

Alex Martelli:‘只有 Java 與JavaScript 還算堅(jiān)挺,但是它們的變化幅度不大,只有 Python 突飛猛進(jìn)?!?/p>

Python 的基數(shù)已經(jīng)非常大了,但仍能實(shí)現(xiàn)跨年增長 27%。年初(2017年),我看過《Spectrum》雜志一篇文章,宣稱 Python 是今年最流行的編程語言。

Spectrum

該文章基于一些主觀指標(biāo),比如崗位需求、課程、與研討會(huì)等,而 Stack Overflow 的調(diào)研則是量化的、客觀的,它的結(jié)論來自于超出想象的巨量數(shù)據(jù)。雖然,兩者都得出了同樣的結(jié)論,不過 Stack Overflow 得出結(jié)論的量化手段更好、更精準(zhǔn)。

Driscoll:能介紹下作為 Python 圖書作者有什么收獲嗎?

Martelli:首先,你可能會(huì)覺得自己對(duì)一門語言了解的已經(jīng)非常透徹了,但寫書以后就會(huì)發(fā)現(xiàn),這一認(rèn)知十有八九是錯(cuò)誤的。

運(yùn)氣好的話,可能會(huì)有一位有耐心、意志堅(jiān)定的編輯與你一起合作,他的職責(zé)是了解這門語言,搞明白圖書應(yīng)該怎樣排版印刷、讀者如何從書中獲取知識(shí)。

英語是我的第三語言,我從來沒覺得自己的英語水平有多高。但寫作增進(jìn)了我對(duì)英語,特別是書面英語的理解。

Alex Martelli:‘這就是我們?yōu)槭裁匆镁幊陶Z言:因?yàn)樽匀徽Z言有歧義,雖然強(qiáng)大,但卻難懂?!?/p>

自然語言是一種強(qiáng)大、內(nèi)容豐富、卻難于理解的溝通工具,這就是我們?yōu)槭裁匆镁幊陶Z言:因?yàn)樽匀徽Z言有歧義,雖然強(qiáng)大,但卻難懂。想用自然語言極其精準(zhǔn)地描述事物是不可能的。

Driscoll:您能舉個(gè)例子嗎?

Martelli:我曾在郵件列表看到過一個(gè)小故事,講的是自動(dòng)化與計(jì)算系統(tǒng)的風(fēng)險(xiǎn)。這是一個(gè)用于在市區(qū)調(diào)度救護(hù)車而設(shè)計(jì)的形式化定義系統(tǒng)(Formally-Defined System),顯然,這是一項(xiàng)性命攸關(guān)的任務(wù)。

用自然語言最初寫就的內(nèi)容,也是其中一個(gè)限制條件是,不論何時(shí),急救熱線接到中風(fēng)等急癥電話后,救護(hù)車應(yīng)該在 15 分鐘之內(nèi)(即,這些病癥的最佳急救時(shí)間之內(nèi))趕到病發(fā)現(xiàn)場。

將這一自然語言正確轉(zhuǎn)化為編程語言后,大部分情況都有所改進(jìn),但卻出現(xiàn)了已經(jīng)安排了救護(hù)車,可是救護(hù)車一直沒有到達(dá)病發(fā)現(xiàn)場的個(gè)案,這種情況雖然很少,但實(shí)在是讓人憂心。這就是自然語言未能與形式邏輯(Formal Logic)相匹配的問題。

Alex Martelli:‘這就是自然語言未能與形式邏輯(Formal Logic)相匹配的問題?!?/p>

要知道,這是市區(qū),交通堵塞。救護(hù)車雖然可以鳴笛開路,但仍會(huì)被堵在路上。如果出現(xiàn)延誤,哪怕是 15 分多 0.01 秒,系統(tǒng)也會(huì)推斷救護(hù)車已經(jīng)到達(dá),這是因?yàn)橹凹僭O(shè)的前提是救護(hù)車總會(huì)在 15 分鐘內(nèi)到達(dá)。所以如果假定救護(hù)車已經(jīng)抵達(dá)了,系統(tǒng)就無需讓該車?yán)^續(xù)前往,進(jìn)而重新調(diào)度該救護(hù)車。

自然語言里,我們說必須在 15 分鐘以內(nèi),并不是說一定在 15 分鐘內(nèi),而是最好在 15 分鐘內(nèi)。要表達(dá)的意思是,在此時(shí)間內(nèi)到達(dá)至關(guān)重要,需要盡一切努力實(shí)現(xiàn),確保救護(hù)車在此時(shí)限內(nèi)到達(dá)。但這并不意味著,如果 15 分鐘沒有到,就不需要救護(hù)車了,也不代表 15 分鐘多 1 秒已經(jīng)沒用了。雖然,這個(gè)結(jié)果不理想,但總比沒有強(qiáng)!

Alex Martelli:‘在編程語言里,斷言(assertion)更簡單:說一就是一?!?/p>

這只是自然語言引起歧義的一個(gè)小例子。在編程語言里,斷言(assertion)更簡單:說一就是一。如果說一不是一,就會(huì)觸發(fā)異常。自然語言則不同,很多時(shí)候你會(huì)免不了想當(dāng)然,這包括各種常識(shí),還有同一詞語在不同文化背景中的不同涵義。

Driscoll:能介紹下您與讀者的互動(dòng)中最有意思的事情嗎?

Martelli: 這種例子很多!我可以介紹一些工作中遇到的樂子,總有同事問我,“我碰到一個(gè)特別奇怪的問題……” 這通常是他們剛寫的程序或函數(shù)。

我會(huì)幫他們找出問題,并進(jìn)行修復(fù)。不是說我對(duì) Python 的了解比他們更深,而是我擅長 找茬兒。比如說,給我一篇有錯(cuò)別字的文章,不知道為什么,在閱讀任何內(nèi)容之前,我一眼就能看出錯(cuò)別字。這對(duì)編程與電路設(shè)計(jì)而言,非常有好處。

以前,老有人問我,“我一直想問,你是寫那本書的 Alex Martelli 嗎?” 我總是很高興地回答,“是啊,就是我,那本書是我順手寫的。” 這讓我一天都很開心。

Alex Martelli:‘除了搞定問題,我也有虛榮心?!?/p>

現(xiàn)在,這種事沒以前那么多了,我在這個(gè)公司已經(jīng)待了 12 年半了。我的意思是,雖然這種事兒沒什么實(shí)際意義,但是,嘿嘿!除了幫別人搞定問題,我也有虛榮心。

Driscoll:您覺得 Python 2.7 已經(jīng)要被淘汰了嗎?

Martelli:《Python in a Nutshell》第三版里提出過這個(gè)問題。書里曾經(jīng)說過 Python 2.7 離被淘汰還遠(yuǎn)著呢,我現(xiàn)在仍然認(rèn)為這是對(duì)的。

現(xiàn)在,生產(chǎn)環(huán)境中仍有大量的 Python 2.7 或 2.x 代碼,并且這些 2.x 代碼可以輕輕松松地就升級(jí)到 Python 2.7。大家都知道 Python 2.7 就到此為止了,雖然,我篤定有不少企業(yè)會(huì)提供商業(yè)化支持,但到 2020 年, Python 軟件基金會(huì)將停止對(duì) Python 2.x 的官方支持。所以,我們的書里對(duì) Python 3、3.5、3.6 及未來新版的支持,就顯得格外重要。

Alex Martelli:‘Python 2.7 離被淘汰還遠(yuǎn)著呢?!?/p>

現(xiàn)在就拋棄 Python 2.7 還為時(shí)過早,所以我們的書里包括了 Python 2.x 與 3.x 的內(nèi)容。如果讀者只想了解其中一版的話,可能會(huì)覺得該書有些冗余,不過,我們會(huì)在下一版解決這個(gè)問題,到時(shí)某些內(nèi)容將只支持 Python 3,不再支持 Python 2.7。

Python 2.7 的代碼庫非常龐大,仍有很多公司與產(chǎn)品還會(huì)滯留在 Python 2.7。比如, YouTube 總的來說就是一個(gè)用 Python 開發(fā)的系統(tǒng),有幾百萬行超級(jí)優(yōu)化過的 2.7 版代碼,說實(shí)在的,從商業(yè)角度上看,這種切換太難了。要知道 YouTube 已經(jīng)對(duì)這些代碼優(yōu)化 10 多年了,不可能上來就說,來吧,咱們重寫下這幾百萬行代碼。

如果切換到 Python 3 會(huì)把 YouTube 的速度減少 10%,這不僅要量化谷歌的成本,還要量化所有用戶的成本,YouTube 的流量太大了,要考量性能降低對(duì)互聯(lián)網(wǎng)帶寬的占用會(huì)增加多少。哪怕性能只降低 10%,都會(huì)讓所有人的感受變得很糟。這是不能容忍的!這條路走不通,只能選擇其他方向。

Driscoll:那么 Python 作為一門編程語言,您覺得它現(xiàn)在有什么問題嗎?

Martelli:如果我能穿越回 Python 第一版發(fā)布之前,且只能對(duì)它做一項(xiàng)更改的話,我覺得是不要區(qū)別大小寫。

Alex Martelli:‘最優(yōu)秀的編程語言都不區(qū)分大小寫。對(duì)我來說,這是最好的地方?!?/p>

自從 C 語言在編程語言領(lǐng)域稱霸以來,大家都覺得不區(qū)分大小寫很怪。但是,不管是 Fortran,還是 Pascal,甚至是 Ada,這些最優(yōu)秀的編程語言都不區(qū)分大小寫。對(duì)我來說,這是最好的地方。

可能很多人都沒有注意到,西方文化中,大小寫的概念其實(shí)不是自然出現(xiàn)的,而是刻意人為的,這點(diǎn)可能很多人都意識(shí)不到。大小寫是在寫作發(fā)展過程中出現(xiàn)的,這是我們文化里刻意制造出來的人造物。

我喜歡 Macintosh 的文件系統(tǒng),比如新建一個(gè)名為大寫 F-O-O(FOO)的文件,它會(huì)按大寫文件名存儲(chǔ)文件。但是,如果你用小寫 foo 進(jìn)行搜索,系統(tǒng)也會(huì)找到。這種感覺與人類思維更相似。

Alex Martelli:‘語音輸入一下子就成了主流輸入方式?!?/p>

比如說語音識(shí)別系統(tǒng)。語音輸入一下子就成了主流輸入方式,這是因?yàn)閷?duì)著手機(jī)說話,比用屏幕上的小鍵盤打字要容易的多。但用語音輸入的時(shí)候,區(qū)分大小寫讓人很頭疼,這就是我為什么說大小寫是刻意的人造物!自然拼讀根本就不需要區(qū)分大小寫。

Python 社區(qū)里希望 Python 不要區(qū)分大小寫的人很少,與 Python 競爭的編程語言也都區(qū)分大小寫,我估計(jì)這是當(dāng)今所有流行語言共有的缺陷。

Python 的關(guān)鍵字也有些問題,這是 Python 與其它編程語言不同的地方,如果與其它語言一樣的話,Python 將會(huì)是一門更好的編程語言。Python 最常用的關(guān)鍵詞,即定義函數(shù)的 def。問題是 def 既不是關(guān)鍵詞,也不是單詞,它沒有任何涵義!你知道哪種編程語言做的最到位嗎?JavaScript。

Driscoll:JavaScript 有何不同?

Martelli:JavaScript 里用的關(guān)鍵詞是 function。我想不明白為什么 Python 不用 function。就算 function 要多輸入 4 個(gè)字符,就算這得多敲好幾下鍵盤!但現(xiàn)在的編輯器不都支持自動(dòng)補(bǔ)全了嗎,是不是?

我明白,從技術(shù)上講,def foofunction foo 沒什么實(shí)際區(qū)別,但我更關(guān)注這些小小不言,卻影響易用、易懂的小瑕疵。

Alex Martelli:‘Python 可能是迄今為止,最好用、最好理解的編程語言。’

我認(rèn)為 Python 可能是迄今為止,最好用、最好理解的編程語言,所以這些小瑕疵在我看來就顯得特別刺眼。

Python 的 range 只有一種,而且總是不包括上界,所以它的一致性更強(qiáng),也更清晰。其實(shí)這里用任意單詞都是一樣的,比如 def,就可以在設(shè)計(jì)時(shí)使用像 function 這樣更易懂的單詞。

如果覺得 function 這個(gè)詞太長了,我覺得 fun 也不錯(cuò),這個(gè)詞多有意思。不管怎么說,Python 這個(gè)名字畢竟是源于 Monty Python 這個(gè)喜劇片。用 fun 作為 function 的縮寫也可以表明 Python 編程很有趣(這里的原文是 fun)。反正我覺得比 def 好。

Driscoll:那您覺得 Python 最大的優(yōu)勢是什么?

Martelli:在講瑕疵的時(shí)候,我其實(shí)已經(jīng)提到了。 Python 的優(yōu)勢在于清晰、一致性,這門語言的野心很大,就是,只用一種自然的、顯性的方式做事情。

目前,Python 還未達(dá)成這一目標(biāo),舉例來說,加法符合交換律,a+bb+a 是表示匯總的兩種方式, Python 無法改變這點(diǎn)。但在閱讀別人寫的代碼時(shí),你依然會(huì)覺得更容易理解。

不管是 Python 老手,還是新人,都會(huì)不約而同地選擇顯性編程,因?yàn)?Python 往往是顯性的。就算不這么做,也可以告訴他們應(yīng)該怎么寫,而且很容易就能說服他們。也許正是這種只用一種顯性方式表達(dá)事物的野心,就是 Python 更清晰、更好用、更實(shí)用的原因吧。

Alex Martelli:‘也許正是這種只用一種顯性方式表達(dá)事物的野心,就是 Python 更清晰、更好用、更實(shí)用的原因吧?!?/p>

我相信,Python 之所以能在你能想到的各個(gè)領(lǐng)域都得到充分應(yīng)用,正是因?yàn)樗倪@種清晰與簡潔的理念,Python 太容易上手了。

不是所有人都像我學(xué) Python 學(xué)得那么快。我不認(rèn)為是個(gè)經(jīng)驗(yàn)豐富的程序員就能用一個(gè)周末就學(xué)會(huì) Python,但這種事確實(shí)發(fā)生了。就算 Python 里很多功能與其它編程語言類似,比如 Rust,我不敢想象有人能用一個(gè)周末就學(xué)會(huì) Rust。

Driscoll:您認(rèn)為 Python 未來會(huì)如何發(fā)展?

Martelli:無處不在!你知道嗎?近年來最偉大的科研成果是發(fā)現(xiàn)了引力波。

PyCon 意大利上曾有一兩個(gè)主題演講,講的是,Python 是控制所有采集數(shù)據(jù)設(shè)備的通用語言,最終這些數(shù)據(jù)顯示兩個(gè)黑洞相互撞擊,并發(fā)出了引力波。

Alex Martelli:‘正是 Python 在處理這些數(shù)據(jù)?!?/p>

如果我沒記錯(cuò)的話,碰撞后幾秒鐘所發(fā)出的引力波產(chǎn)生的能量,比宇宙中其它物質(zhì)發(fā)出的能量加在一起都多。這可是超大規(guī)模的數(shù)據(jù)量,而正是 Python 在處理這些數(shù)據(jù)。這意味著, Python 負(fù)責(zé)監(jiān)控這個(gè)強(qiáng)大到匪夷所思、眨眼之間發(fā)生的瞬時(shí)事件,對(duì)它的所有測量數(shù)據(jù)進(jìn)行清洗、分析,找出其相關(guān)性,并對(duì)之進(jìn)行解釋,這本身就已經(jīng)超級(jí)了不起了。這次沖撞發(fā)生在幾十億年前,現(xiàn)在監(jiān)測到的只是當(dāng)時(shí)的引力波而已。而這只是 Python 無處不在的一個(gè)例子。

科學(xué),正是因此而令人著迷。我和互聯(lián)網(wǎng)巨頭聊得越多,越發(fā)現(xiàn)這些公司使用其它編程語言開發(fā)其核心應(yīng)用,只不過是因?yàn)樗鼈兊膭?chuàng)始人只懂那些語言,但是因?yàn)椴①徚似渌?,它們不得不接納 Python。

很多并購都出現(xiàn)在高科技領(lǐng)域。大多數(shù)這些公司用的都是 Python,這正是它們成功的原因。他們的效率是用其它語言的公司的兩倍,甚至三倍。

Driscoll:這么說,您認(rèn)為更多公司開始使用 Python?

Martelli:是的,很多大公司需要采用 Python 是因?yàn)楸仨毥尤胨鼈儾①徆镜纳a(chǎn)系統(tǒng)。TensorFlow 的興起,讓我覺得 Python 必然會(huì)走在機(jī)器學(xué)習(xí)與人工智能領(lǐng)域的前沿。

即便 TensorFlow 的內(nèi)核是用高度優(yōu)化的 C++ 與匯編語言開發(fā)的,但其商業(yè)邏輯應(yīng)用層用的是 Python,因?yàn)闆]必要耗費(fèi)心力重新開發(fā),所以 TensorFlow 的核心是 Python。

Alex Martelli:‘TensorFlow 的興起,讓我覺得 Python 必然會(huì)走在機(jī)器學(xué)習(xí)與人工智能領(lǐng)域的前沿。’

我很難想像還有哪些領(lǐng)域 Python 可能會(huì)永遠(yuǎn)都無法涉足。不過,接下來探討的這個(gè)領(lǐng)域是個(gè)例外:嵌入式系統(tǒng)。Python 對(duì)優(yōu)化內(nèi)存占用做的不夠好。嵌入式系統(tǒng)則要對(duì)內(nèi)存精打細(xì)算。然而,就算Python 自身解決不了,Python 的方言也能解決這個(gè)問題。

具體來說,解決物聯(lián)網(wǎng)嵌入式設(shè)備的編程語言是一種名為 MicroPython 的 Python 方言。我聽說 BBC 給在校生配備了約上百萬臺(tái)運(yùn)行 MicroPython 的設(shè)備。

Driscoll:MicroPython 是 Python 嗎?

Martelli:不完全是 Python,因?yàn)樗仨殲閮?nèi)容使用設(shè)置限制條件。

不要指望在價(jià)值兩美元的設(shè)備上動(dòng)態(tài)分配內(nèi)存,這些設(shè)備的內(nèi)存最多也就是 64K,就算多,也多不了哪兒去。但在有限條件下仍可以實(shí)現(xiàn)動(dòng)態(tài)分配,進(jìn)行編程。

過去,Python 的一些實(shí)施特性阻止了它進(jìn)入某些應(yīng)用領(lǐng)域,正是這些特性飽受詬病。據(jù)我所知,Larry Hastings 正在苦苦尋求移除全局解釋鎖(GIL)。不管大家怎么想,GIL 與 90% 的應(yīng)用不相關(guān),但對(duì)另外 10% 要用更多芯片內(nèi)核的應(yīng)用而言,GIL 非常致命。

要把算法從 32 位優(yōu)化成 64 位,移除 GIL 后效果會(huì)非常顯著。不過也不要著急,這些限制條件早晚會(huì)被移除的。

Alex Martelli:‘在操作系統(tǒng)核心領(lǐng)域,Python 將來涉足的內(nèi)容也不會(huì)今天多多少?!?/p>

在操作系統(tǒng)核心領(lǐng)域,Python 將來涉足的內(nèi)容也不會(huì)比今天多多少。如果動(dòng)態(tài)分配沒問題,就可以用 Python,但這只是內(nèi)核的很小一部分內(nèi)容。也許一些設(shè)備驅(qū)動(dòng)對(duì)時(shí)間要求沒那么嚴(yán)格,但我覺得,在絕大部分情況下,Python 只是運(yùn)行在用戶層面,而不是內(nèi)核層面。

Driscoll:這是為什么呢?

Martelli:內(nèi)核要的是更底層的語言,順便說一下,這個(gè)領(lǐng)域迫切需要一種比 C 更好的語言,這就是為什么我現(xiàn)在在研究 Rust。

我非常想看到用 Rust 開發(fā)的實(shí)驗(yàn)性簡版操作系統(tǒng)內(nèi)核,Rust 有這種潛力。因?yàn)閮?nèi)存分配的問題,Python 就不適合做這種事情。而且 MicroPython 的方式其實(shí)運(yùn)行地也不是那么好,因?yàn)檫€是需要一些動(dòng)態(tài)分配。Python 控制內(nèi)存分頁十分困難,但是除了超級(jí)難搞、超級(jí)核心的領(lǐng)域,我覺得別的方面沒有什么限制。用比上天還難來形容 Python 的極限都不貼切,因?yàn)橐Σň褪前l(fā)生在天上的事情,Python 不也把它給征服了。

Alex Martelli:‘用比上天還難來形容 Python 的極限都不貼切,因?yàn)橐Σň褪前l(fā)生在天上的事情,Python 不也把它給征服了。’

我覺得現(xiàn)在只有在移動(dòng)端開發(fā)這個(gè)領(lǐng)域,Python 還有很長的路要走。我聽說 Kivy[1] 框架不錯(cuò),但還沒親自用過。

Guido 在谷歌時(shí)和 Andy Ruby 討論過這個(gè)問題,他想說服 Andy, 他認(rèn)為在 Java 之外,安卓還需要一種更易用的應(yīng)用層編程語言。不過,很遺憾,Andy 不想再添加更多的語言,他覺得這樣讓程序員更辛苦。但事實(shí)并非如此!可惜,Andy 才是負(fù)責(zé)人,Guido 也只能是束手無策。要是我能更具說服力就好了,也許世界會(huì)大不相同。

Driscoll:在谷歌的工作怎么樣?

Martelli:在這里,我得到了近 13 年前面試時(shí)想要的一切,甚至可能更多。

當(dāng)然,這是我漫長、多變工作生涯的巔峰。我想要的不是大學(xué)畢業(yè)生設(shè)想的那種閃亮人生。公司運(yùn)營的現(xiàn)實(shí)已經(jīng)磨平了我的棱角,不管怎樣,多閃亮的成就也會(huì)被輕松超越,我甚至不確定谷歌是否能一直獨(dú)占鰲頭,因?yàn)橐磺卸既Q于人。畢竟,公司是由人組成的,了不起的人聚在一起,才能造就了不起的成就。

歸根結(jié)底,成功的秘訣還是得靠人才!對(duì)于已經(jīng)有 7 萬人的谷歌而言,這遠(yuǎn)比當(dāng)年只有 70 個(gè)人時(shí)更容易。不是說找 70 個(gè)人才容易,但是找到 7 萬個(gè)人才只會(huì)更難!我不敢說這些人百分百都是人才,但也差不多算是百分百了。

Alex Martelli:‘歸根結(jié)底,成功的秘訣還是得靠人才!’

優(yōu)秀,不只是指聰明。我打賭找聰明的人要比找到合適的人更容易,所謂合適的人,指的是,在人性層面上,能夠關(guān)心最終用戶、關(guān)心同事與合作伙伴的人。聰明很重要,但是一個(gè)聰明的混蛋造成的破壞遠(yuǎn)比蠢蛋大,對(duì)不對(duì)?所以,要找的首先是有心人:即,能為團(tuán)隊(duì)、支持者、用戶的成功投入感情的人。

Driscoll:找這樣的人有什么秘訣嗎?

Martelli:我覺得沒有!就算能博覽群書、通古識(shí)今,但我依舊不認(rèn)為有這種秘訣!因?yàn)椋嬖嚂r(shí)假裝關(guān)心比持之以恒的真關(guān)心容易多了。招聘時(shí),免不了會(huì)看走眼。

Alex Martelli:‘你所做的任何事情都會(huì)放大,產(chǎn)生完全不合比例的影響力?!?/p>

從技術(shù)層面講,公司那么大的規(guī)模自然會(huì)帶來各種問題與挑戰(zhàn)。但這也是能在工作中獲取最大滿足感的地方。你所做的任何事情都會(huì)放大,產(chǎn)生完全不合比例的影響力。

給你舉個(gè)例子吧,剛才說過,我是 Stack Overflow 上的積極貢獻(xiàn)者。現(xiàn)在,我的工作內(nèi)容之一是為谷歌云平臺(tái)提供技術(shù)支持,而這基本上都是通過 Stack Overflow 實(shí)現(xiàn)的。Stack Overflow 的數(shù)據(jù)顯示我?guī)椭?5000 多萬人,我都不知道他們是怎么算出來的,但我打心底里希望這是真的!這樣才能對(duì)得起所有幫助過我的人。

只寫書不會(huì)影響這么多人,就算一本書有好多個(gè)讀者,我能幫助的人最多也就一百來萬人,離五千萬還遠(yuǎn)著呢。我想,這就是在谷歌工作的意義吧。

Driscoll:這有什么負(fù)面影響嗎?

Martelli:當(dāng)然有,要小心!任何錯(cuò)誤都會(huì)放大無數(shù)倍!一個(gè)小失誤,就有可能讓一些系統(tǒng)癱瘓一個(gè)小時(shí)。哎,這就是有五千萬受眾的不便之處。但我喜歡這種超乎常人的生活。

Alex Martelli:‘授業(yè)解惑,幫人解決問題,是學(xué)習(xí)的最好方式?!?/p>

授業(yè)解惑,幫人解決問題,是學(xué)習(xí)的最好方式。你可以由外及內(nèi)地了解問題,然后參與其中,不斷深入。解決問題后,就會(huì)對(duì)這類問題有更深刻的理解。

Driscoll:谷歌如何使用 Python?

Martelli:這就說來話長了,可以追溯到谷歌存在之前。我強(qiáng)烈推薦 Steven Levy 寫的《In the Plex》。為了寫這本書,谷歌與谷歌人給了他極大的權(quán)限。

我從這本書里了解到,谷歌這個(gè)名字出現(xiàn)前,Larry Page 在斯坦福大學(xué)宿舍里想寫一個(gè)爬蟲,他想把整個(gè)網(wǎng)絡(luò)抓取到本地機(jī)上,然后進(jìn)行處理與實(shí)驗(yàn)。他想用一種新的編程語言,Java 1.0 Beta,但程序總是崩潰。Larry 向他的舍友求助,“能幫我看下嗎?我沒法運(yùn)行這個(gè)程序?!?/p>

他的舍友看了一眼就說,“肯定不行??!你用的是垃圾 Java!用下這個(gè)真正的編程語言吧!”

Larry 裝上了 Python,寫了一百行 Python 代碼,世界上第一個(gè)爬蟲程序就誕生了,web 的副本也被抓取到了這間宿舍的電腦上。所以,從這點(diǎn)上講,沒有 Python,就沒有第一個(gè)爬蟲,谷歌可能就不會(huì)誕生!

Alex Martelli:‘沒有 Python,就沒有第一個(gè)爬蟲,谷歌可能就不會(huì)誕生!’

這個(gè)爬蟲是谷歌最核心的程序,已經(jīng)被優(yōu)化了上百萬次,我確信這是你能想象到的,優(yōu)化力度最強(qiáng)的 C++ 代碼。我已經(jīng)好幾年沒有看過這個(gè)爬蟲了,但它的創(chuàng)建過程依然歷歷在目。在谷歌,Python 的下一個(gè)角色是作為所有深層基礎(chǔ)架構(gòu)任務(wù)的統(tǒng)一語言。

Driscoll:您在當(dāng)時(shí)是什么職位呢?

Martelli:我當(dāng)時(shí)是基礎(chǔ)架構(gòu)的高級(jí)技術(shù)負(fù)責(zé)人。我要把所有 Bash、Perl 等強(qiáng)大、但難懂的編程語言,替換重寫為 Python。

這是我在谷歌的第一項(xiàng)任務(wù),我和我的團(tuán)隊(duì)與那些開發(fā) Bash、Perl 實(shí)用工具的工程師、系統(tǒng)管理員整天混跡在一起。我們搞清了所有工作內(nèi)容,然后用 Python 重構(gòu)了所有程序,并將之產(chǎn)品化。從此,代碼讀起來簡單了上百倍。

還有一個(gè)特別有意思的例子是,谷歌曾經(jīng)想搶占流媒體視頻市場。你可能聽說過谷歌視頻這個(gè)項(xiàng)目,谷歌想把所有的視頻放在一起,展示給用戶,用戶可以對(duì)視頻進(jìn)行搜索。當(dāng)時(shí),這個(gè)項(xiàng)目投入了大量的資源:數(shù)百名優(yōu)秀的工程師和不計(jì)其數(shù)的硬件資源。

但是谷歌視頻在產(chǎn)品特色戰(zhàn)中屢戰(zhàn)屢敗,被一家不起眼的初創(chuàng)公司甩了好幾條街。每次這家初創(chuàng)企業(yè)推出新功能時(shí),只要客戶喜歡,我們的工程師要花一兩個(gè)月跟進(jìn)開發(fā)類似的功能。但我們推出新功能時(shí),這家小公司一個(gè)禮拜就復(fù)制出來了!

Driscoll:那您找出這家創(chuàng)業(yè)公司反映這么快的原因了嗎?

Martelli:最終,我們收購了這家創(chuàng)業(yè)公司,發(fā)現(xiàn)他們只用了 20 個(gè)開發(fā)人員,就把我們數(shù)百名開發(fā)人員的團(tuán)隊(duì)耍的團(tuán)團(tuán)轉(zhuǎn)。但這里的奧妙其實(shí)非常簡單!這 20 個(gè)家伙用的是 Python,我們用的是 C++。這就是 YouTube 成功的秘訣,并且他們現(xiàn)在還在用 Python。

Alex Martelli:‘我們發(fā)現(xiàn)他們只用了 20 個(gè)開發(fā)人員,就把我們數(shù)百名開發(fā)人員的團(tuán)隊(duì)耍的團(tuán)團(tuán)轉(zhuǎn)。但這里的奧妙其實(shí)非常簡單!這 20 個(gè)家伙用的是 Python’

YouTube 雖然用了很多年才開發(fā)成熟,才有所盈利,這是因?yàn)樗玫馁Y源太龐大了!不過,它變得越來越流行,可以說,它是最了不起的 Python 成功案例。

與其它面向用戶代碼的領(lǐng)域不同。Python 有時(shí)處于前沿地位,比如谷歌應(yīng)用引擎,這是谷歌首次涉足云端服務(wù),至今仍是極具創(chuàng)新的產(chǎn)品,Python 是它最早支持的語言。 好幾年中,Python 是它唯一支持的語言,后來才添加了對(duì) Java 的支持,然后是其他編程語言。 但 Python 仍是谷歌應(yīng)用引擎上最流行的編程語言。

谷歌云平臺(tái)還有很多其它功能,基于某些技術(shù)原因,要限制用戶使用的編程語言,但 Python 一般都穩(wěn)居前兩名。TensorFlow 也是一個(gè)不錯(cuò)的例子,之前提到過,但這里的重點(diǎn)是,在很長一段時(shí)間內(nèi),TensorFlow 都是 GitHub 下載榜上最流行的項(xiàng)目。

谷歌應(yīng)用引擎的存在使得很多內(nèi)部工具受益。內(nèi)部版本應(yīng)用引擎上部署的工具可以優(yōu)先使用 Python,設(shè)置選項(xiàng)幾乎都是通用的,用一種方式就可以完成多種配置。在實(shí)際工作中,12 年半前加入谷歌時(shí),我時(shí)不時(shí)還要用下 C++,尤其是修復(fù)已有系統(tǒng)時(shí),但現(xiàn)在,用 Python 基本上都可以解決了。

Driscoll:您還有什么其它方面想討論的嗎?

Martelli:我想再講一下 Python 在教育領(lǐng)域里扮演的角色。十多年前,Guido 搞過一個(gè)投資項(xiàng)目,希望讓 Python 成為教育領(lǐng)域里核心語言,這個(gè)項(xiàng)目一直沒有真正落地,但很多優(yōu)秀的想法與成果都出自這個(gè)方案,只不過搞定教育界這件事沒有實(shí)現(xiàn)。

如今,Python 是大學(xué)基礎(chǔ)課教學(xué)里排名第一的編程語言,很久以前就已經(jīng)超越了 Java 等其它語言。但在高中,Python 還沒有這么普及。隨著計(jì)算機(jī)重要性不斷提高,大多數(shù)高中生都有必要了解一些計(jì)算機(jī)基礎(chǔ)知識(shí),但現(xiàn)在高中生用的編程語言五花八門,混在一起,十分可怕。

怎么才能讓 Python 吸引更多高中生的關(guān)注?我認(rèn)為應(yīng)該是把 Python 放到網(wǎng)上,最好是用瀏覽器就可以運(yùn)行?,F(xiàn)在有幾個(gè)網(wǎng)站提供這種功能,但這些網(wǎng)站的規(guī)模和一致性都不好。

我認(rèn)為 Python 軟件基金會(huì)應(yīng)該大力推動(dòng)這些項(xiàng)目。為什么呢?因?yàn)?Chromebook 如今在教育領(lǐng)域里遙遙領(lǐng)先?,F(xiàn)在,Chromebook 在學(xué)校里賣的比其它所有設(shè)備加起來還多。為什么?因?yàn)樗阋税?,性能沒問題,安全也有保障,管理員控制起來也方便。

Alex Martelli:‘我認(rèn)為 Python 無需改變,但要為學(xué)校提供一個(gè)非常好用的網(wǎng)站,這是必須的基礎(chǔ)工作?!?/p>

Chromebook 提供了非常好的網(wǎng)絡(luò)瀏覽器,基于這個(gè)瀏覽器,可以干很多事情,這比下載安裝軟件容易多了。

我認(rèn)為 Python 無需改變,但要為學(xué)校提供一個(gè)非常好用的網(wǎng)站,這是必須的基礎(chǔ)工作,要提供學(xué)校所需的功能,比如,管理員控制。做好這件事將改變數(shù)百萬初高中在校生的人生。我渴盼有人能用 Python 做些真正有意義的項(xiàng)目。

Driscoll:謝謝您,Alex Martelli。


  1. 支持包括 iOS、 安卓等平臺(tái)在內(nèi)的 Python 跨平臺(tái)開發(fā)框架。 ?

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

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

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