傳奇程式設計師Larry Wall:Perl的樂趣

發表於2011-06-19

“Larry Wall是如何發明了一門凌亂的程式語言 —— 接著改變了WEB的面貌?”

Larry Wall 微笑著回憶起Yahoo的共同創始人David Filo幾年之前發給他訊息,當時正值Yahoo公開面市之前的不久。Filo寫道:”如果沒有Perl——Wall發明的通用程式語言,Yahoo是不可能開始的。那麼,Larry你願意買一些便宜的Yahoo的原始股麼”?

回溯到1996年早期,當時正值矽谷Internet IPO的瘋狂處於絕對高度,這樣一個提議無異於問你是否接受讓一輛裝載了固體黃金製品的自動卸貨卡車往你的門前草坪上運輸。但是對於Wall, 錢永遠不是主要的動機。儘管被認為是黑客們使用的最有價值的工具的作者,Wall仍平靜地住在偏遠的加州的Mountain View中一個小鎮上,為陳舊的1977 Hoda Accord做加工。Perl與錢無關, Wall只是為了解決在日常工作中的碰到的一個程式設計問題才發明了這門語言,並且從開始他就確認Perl的原始碼是可以自由獲得的。人們總是想到用Perl 來做修補工作 —— 無論是用它來構造一個上百萬美元的Internet目錄公司或者只是在他們自己的主頁上面做一項調查。

儘管Wall可能很節儉,但他並不笨。他接受了這個提議並且為他的14歲的女兒購入一些Yahoo的股票 —— 這也足夠支付她的大學費用。關於Internet上古老的”互惠經濟”(gift economy)的規則的更好的例子是幾乎不可想象的 —— 投資網路,你就可以獲利。

Larry Wall喜歡把Perl叫做一門”粗陋的”語言,用他那溫和的嗓音,他這樣描述Perl:他是一個順從,溫順的僕人,只是為了”讓他服從於你的需要”而存在。擁擠在Web上的大多數Perl黑客卻欠溫和:他們宣稱,Perl是一種不可缺少的粘合劑,使得整個Web緊緊聯絡在一起 —— 不止是Yahoo, 還有Amazon和其他成百萬的站點。Perl的支持者認為,如果沒有Perl和Larry Wall, 那麼網路只是它現在樣子的一個蒼白的影子。

無論是在推動Web的發展,還是在製造了眾多Internet基礎設施的FreeSoftware/Open Source運動的發展過程中,Wall都扮演了一個重要的角色。但是,即使他的同事尊稱他為FreeSoftware的”極為重要的首領和睿智的老者”,Wall的領導風格絕對是謙卑的 —— 這個顯著的個性使得他區別於該運動的其他領導人物。

作為傳教士的兒子和孫子,Wall是一個虔誠的教/徒。據他的朋友,Perl的親密合作者Tom Christian sen說,他的任務是實現他的理想 —— “使人們合作工作。他計劃以他內心無私的感知能夠為Perl做一些互利的工作”。但是他不會允許自己捲入到不重要的”信仰”戰爭中,這些戰爭正困擾著程式設計世界 —— 那些無休無止的爭論諸如是否一個程式語言或者作業系統天生地比另外一個好。這樣激烈的爭論是那些喜歡涇渭分明的黑客的偏好,他們不允許哪怕是狹小的變通空間的存在 —— 相對計算機世界中的基礎概念如是/否,0/1等數字的問題,模糊性屬於外邊的世界。

但是Wall和Perl就是狹小空間的全部,就是凌亂的非理想性和模糊的創造性。畢竟,傳送的價值不僅在於它為你解決了某個具體問題,而在於它幫你完成了某項工作。某種程度上,Perl不是第一流的。但那不是Wall關心的,他謙虛的目標就是有用,就是幫助幫助人們做他們需要做的 —— 實現程式語言,硬體平臺,多種軟體領域和同一個宇宙空間中共同工作的人們的互相連線。

如果你仔細思考,你會發現Perl是網路的全部所在。 Wall十多年之前首先發明的Perl,直到1994年網路成長時才開始爆炸性地傳播,這並非出於偶然。網路是一個黑客雲集的,凌亂的既成事實存在,它需要快速的思考和更快的反應次數。Perl是一個網路黑客的最好朋友。

Larry Wall是如何改變整個計算機文化的

“我試圖同時得到適量的靈活性和穩定性”,在他Mountain View的有些凌亂的家中,Wall說道,他正地在談關於Perl的事情,但他的態度融合進了日常生活的基礎。

Wall有一個Caller ID(主叫標記)連在計算機上面,這樣對於每一個進來的電話他有指令來發出對應的聲音。CallerID有什麼好的,Wall問,如果你不得不走很遠去接電話以知道是誰打電話?同樣的,按下他的門鈴也從一個Wallace&Gromit粘土木偶發出一系列對話;當他的乾衣機(藏在車庫中)停止轉動時,一種汽笛聲將響徹整個房間。

Wall的職業是一個系統管理員,而不是一個軟體工程師。系統管理員對程式設計和技術傾向於一種功利主義的態度 —— 他們關注於使網路不停運轉,解決緊急的問題,飛快地程式設計。Wall做為一個程式設計師,一生都用來解決這種問題 —— Perl就是他個人工藝品倉庫中最近的工具。在他構造出Perl的幾年之前,他已經達到了黑客的名望,他寫了”Rn” —— 一個用於讀Usenet新聞組的程式。

對於軟體開發,Rn是一種現在稱為FreeSoftware或者OpenSource模型早期的原型 —— 在其中各地的程式設計師通過網路互相協作,通過使得大家都可以獲得程式碼來改進產品。Wall寫了Rn,在Internet上發放了原始碼之後,然後就開始做升級版本,這個升級版本包含了來自最初的網路空間中其他黑客提出的建議和錯誤修正。

但是回溯到80年代中期,通過網路不是很容易發放升級版。人們通常通過300-1200波特率的modem連線網路,是不可能以輕鬆的態度把上兆的原始碼來回傳遞,而現在這種情況很正常。

所以Wall寫了一個小程式,稱為”patch”。Patch帶有一個壓縮的新的升級原始碼並可以應用於以前的原始碼。Patch能夠提高舊程式碼更新的速度,並且甚至非常聰明地考慮以前的原始碼作過的變化。

作為黑客,Wall是一個相當慎重的人,但那並不意味著他總是很謙讓。“patch改變了計算機文化”,wall說。

“我多年來一直相信patch是一個對OpenSource文化最重要的貢獻,儘管它從來沒有象Perl或者Rn作到的那樣吸引這種更大,更誘人的工程的注意力。”OpenSource運動的最著名的領導人之一Eric Raymond說。

“Patch可能是迄今為止最成功的活兒”,Raymond說道,“Larry有效地創造了,至少是關鍵性地促成了,被Linux驗證了的現代化的高度分佈的開發模式。”

Patch之後是Perl。表面上,它是完全不同的東東,一個高度複雜的”指令碼”語言,為那些需要寫自動任務,連線不相容程式和系統或者解決難以應付的問題的程式設計師打算。Perl起源於1986,那時Wall是Burroughs公司的附屬公司的一個系統管理員。那時,他致力於加州 Santa Monica和Paoli,Pa.的計算機之間資訊的同步交換有關的”NSA的一個祕密專案”,但NSA不止希望希望資訊的同步 —— 它還希望生成關於每次交換的報表,而Wall現有的工具沒有一樣可以勝任這個任務。把所有的事情結合起來需要一個應急解決方案,一個程式設計的活兒,最終成為 Perl —— 實用提取和報表語言(Practical Extraction and Report Language)。

“我意識到在C語言和Unix Shells之間有極大的空白區域,”Wall說,“C可以處理複雜的事情 —— 你可以叫它’可操作複雜性’而Shells卻擅長處理那些我稱做’whipupitude’的事情。但有一大段空白區域,無論C還是Shells都無法很好地處理,這就是我設計Perl的目的。”

從那時起,Wall把他的業餘時間和精力花費在探索一門可以連線計算機領域中所有大的空白區域的語言的需求。

“人們總是在尋找空隙”,Wall說,“他們總是在尋找新的生態環境,而你進入這些生態環境的速度是真正重要的,因為第一個進入這些環境的人總是贏家。”

Perl是一個贏家。Wall保證Perl的特別強大的能力 —— 文字處理,靈活性和一個對於解決快速/困難問題非常有用的工具集 —— 他們使得程式設計師可以立即瞭解Perl的本質:比如David Filo和Jerry Yang,這兩個Stanford大學的本科生創造了Yahoo。他們發現Perl不可缺少,他們用Perl來生成Web頁面,為他們的執行Web資料蒐集的機器人編寫程式碼,並且維護Web地址的資料庫。

“我們極大地依賴於它”,Filo說,由於可以快速地開發,你可以很快地做這些事情。

Yahoo的經驗不是唯一的,Tim O’Reilly,計算機圖書的出版公司O’Reilly & Associates的CEO和奠基人說,不止是O’Reilly出版最暢銷的Perl計算機圖書,3年前他們還聘請Wall作為Perl的全職推銷者。

“Perl做這個很順利”,O’Reilly說,“Perl比傳統的程式語言要容易理解的多,並且我認為是人們開始構造和想象Web時一個很重要的部分。他讓業餘愛好者進入 —— 你不必是一個專業程式設計師….儘管Perl可能有點難,並且可能有點模糊,它對於那些人們想做的事情還是可用的。你可以把事情迅速地捆綁在一起並且迅速解決問題。”

我只是盡力使得計算機比程式設計師多想一些

到底Perl能夠做什麼?在地位上,它與Sun的其他計算機語言 —— Java/Python/Tcl相比,到底有什麼差別?

Perl的擁護者說,它是一個”瑞士軍刀” —— 一件可以高效地做任何事情的工具。 學習Perl,一個人不必是那種精通Java/C++的程式設計天才,儘管Perl自己的靈活性使得它有時比較混亂 —— 尤其對那些習慣於只用一種方法解決問題的程式設計師。但是Perl最大的優點在於它在其他計算機語言之間建立了一座橋樑。

“Perl曾經是,並且繼續是原型式的膠水語言”,Chip Salzenberg, Perl最主要的程式碼分發商之一說,“按照設計,它的演進就是為真實程式設計師面對日常的挑戰、需要使複雜和非協作的系統協調工作的需求所驅動的。”

Larry Wall相信這個演進過程體現了真實的世界是如何工作的。

Perl作了許多工作,Wall說,並且對他認為是你程式的錯誤給出了很好的反饋,所以當你試圖快速開發一些東西的話,會有非常迅速的好轉。你試驗一些東西,然後它出錯,你再改正。你就這樣使它成長,發展。我就是這樣寫程式的。許多人就是這樣程式設計的,他們也是這麼去思考的。

Wall說,Perl對真實生活的反映 —— 他的人性特徵 —— 是內建於這門語言的深厚的哲學結構。Perl是第一個後現代的計算機語言,Wall說,一個人造自然語言,模擬了程式設計師是如何思考的。

所有語言的深厚的結構都是Wall的主要關注點。在他作為一個系統管理員和相關hacking的一生中,他和他的妻子是Uc-Kerkeley 的語言系的學生。Wall說,他們的計劃是,成為戰地的傳教士,並致力於翻譯聖經。他們將從一本沒有書面語言的聖經開始工作,從頭學起,再寫下來,然後幫助將聖經翻譯成那門語言。

他和妻子放棄了這項任務,但是他轉而從事另一項工作 —— 協助其他人為實現類似的目標 —— 與其他人想連線做一些有用的事情而努力。當這件事情轉而成為創造一門程式語言,而不是徹底地從頭建造一些事情的時候,Wall —— 從他的語言訓練中得到靈感 —— 選擇去建造一些事情來複制真實的人們的思想和行為。

首先而且最重要的是,這意味著為解決每個可能的問題提供許多不同的途徑 —— 這導致Perl的戰鬥口號,“有不止一條路徑可以實現”。“如果你認為人們的語言是一個藝術媒介”,WALL說,“他已經給你創造力的空間。如果你想能夠為不同的事情做優化 —— 如果你想能夠用同一種語言開處方,作詩,寫報紙專欄和雜誌專題 —— 他就必須具有靈活性。這與人們在電腦科學中學到的截然不同。人們被教導如果有任何冗餘,那就是有害的,惡劣的。從自然語言的角度看,我不買它(指電腦科學的教導)的帳。”

Perl沿著一門真實語言的道路發展,吸收了長期以來其他語言的優點 —— 有一些Unix, 一些C++, 一些BASIC, 一點這個,一點那個。如果其他任何人有一些新鮮,有用的東西,Perl會包含他。當Wall呼叫這些”後現代主義”的概念,他是指Perl的折衷,包容的方式 —— 在每一個隱蔽處和裂縫中都可以找到的一點點真理的能力 —— 同時不用使它自己被任何大的真理所包圍。

“當它出現的時候,大多數計算機語言試圖使程式設計師想計算機一樣思考”,Wall說,“我試圖使計算機比程式設計師多想一些。並達到了一定程度的成功。問題是,到底誰是主導者,這就是全部所在”。

儘管Perl十分普及,但這門語言不是沒有反對者。MarcEwing,RedHat的技術長員,Linux商業版本的主要分發商,情願使用Python;Infoseek, Internet的搜尋引擎公司,用Python做內部開發工作。也許最有力的批評來自Eric Raymond, 他長期將Perl吹捧為Open Source運動最成功的故事之一,“這門語言的設計顯示出他的年紀和明顯的膨脹的標記,Perl從來不是一個漂亮或者優雅的語言;他的引誘力在於他的直接的可用性。長期之後,在我看來,Larry’s早期選擇產生的問題是積聚和加強其他優點只比效益的堆積快一點點。”

“這些問題導致了很多人從使用Perl流失到其他指令碼語言”,Raymond說,“我個人是這種趨勢的一部分,我已經完全從Perl轉向 Python, 一門年輕的語言,有點象應用程式但是有更清晰的設計…我期望在未來Perl相關的重要性可能降低,即使它的開發人員的基數在絕對數字上持續增長,因為它的競爭者的增長將比Perl的競爭者快的多”。

Perl有很多優點,但決不清晰 —— 實際上使用Perl的黑客用”混亂”作為稱讚的話。但是對於Perl的攻擊者,甚至是Python的支持者,混亂犯了程式設計的大忌。

我最近從Perl的使用者(同時也是Python的使用者 —— 但他們並不總是喜歡Python)聽到的最多的一個抱怨是 —— 當你有一段時間沒有接觸Perl後,即使你自己的Perl程式碼也很難再讀懂 —— 更別提別人的Perl程式碼了。” GuidoVanRossun, Python的主要作者說,“對於過去的或者不熟悉的Python程式碼這很少是一個問題。當Perl的支持者極力提倡Perl使用者寫清晰的程式碼,並且較新的Perl版本包含一些幫助特性,Perl堅持“混亂”的價值意味這總是Perl的一個問題。”

在某種程度上,Perl/Python的爭論只是無休止的那些為了體現黑客特性爭奪主導權的比賽的另一個例子。但關鍵差別是真實的 —— 那些探詢純正和那些堅持工具的有效性之間的差別。“純正語言的支持者總是說Perl是醜陋的”,O’Reilly說,“說Perl是一個’廚房水槽’式的語言,說Perl會被他的自重壓垮,而Perl繼續比其他指令碼語言的合集解決越來越多的問題”。

“我們出售關於Perl和Python的最暢銷書,”,O’Reilly說,“並且我們繼續看到Perl使用情況的健康增長,而Python的增長很平常。Perl的使用比Python高的多,至少根據書籍銷售的情況來看是這樣。”

“Perl並沒有經歷任何大規模的使用者分流“,Salzenberg說,”至多你可以說,在Perl繼續發展的同時其他也在發展。這對Perl是很好的。當有許多事情需要膠合,一門貼上語言是最有用的…Perl將繼續發展以使得任何事情可以與其他任何事情
相連線。”

Wall讓其他人反擊對Perl的攻擊。當我詢問他對於Raymond的直接的批評的反應是,他發給我一份線上email,其中引用了托爾斯泰的話:“這真奇怪,托爾斯泰寫道,漂亮就是好的這個錯覺是如此地完美!”

對於@all,好就是作好連線,這正是他自身的美麗所在。

Perl不但連線了C程式設計師的世界和UnixShell的世界,或者連線了計算機世界的數字服務和人類現實不成熟的混亂。Perl還在自由軟體世界的兩個極端之間架設了一座橋樑,一方是Raymond為代表的商業實用主義,他們支援自由軟體因為它作出了最好的軟體,一方是自由軟體基金的RichardStallman領導的激進的道德學家,他們相信自由軟體是絕對好的。

那些希望修改或者改變Perl的人們可以通過在兩種不同的許可宣告下的限制達到這個目的。他們可以在GPL下操作 —— Stallman的FSF制定的非常嚴格的許可證,為了保證自由軟體總是保持自由。或者他們可以選擇Wall自己的”藝術許可證” —— 一套更寬鬆的規則的集合,Wall說,這意味著“本質上,你可以用Perl做任何你想的事情,只要你把藝術的控制權給我就行了。”

它已經不會招致FSF任何過分的不滿了,Wall說,但實際上藝術license接近與我在這個問題上的感受,我希望Perl能夠被使用。

的確是這樣。Perl在一個似乎是死路一條的地方開闢了一種可能性 —— 為什麼有如此之多的Perl 黑客的一個主要的原因是,當被問到為什麼他們喜愛Perl,一個簡單的回答就是”fun”(有趣)。

我問Larry Wall為什麼認為Perl有趣。“他讓你富有創造力”,他說,“他給你眾多選擇。你常用的計算機語言就象一種訓練,他會把你帶到他到過的任何地方。Perl就象一輛偏離大路的汽車,將把你帶到你想去的地方,即使到那裡沒有任何正式的道路。”

當你能夠利用那種路徑搜尋的方法,你就從努力中得到回報。Larry Wall, 坐在Mountain View家中的起居室,撫摩他的小貓,聽著迴盪在房間中神祕的音樂,就象一個非常高興的男孩。他對Web作出了有價值的貢獻,Web不會讓他忘記它的。

“幾乎每一天,都有人會給我寫一條訊息說我喜歡你發明的那個東西”,Larry Wall說,“它改變了我的生命,我曾經討厭程式設計 —— 現在程式設計又是一個快樂的事情。”

(注:這是一篇“老”文章,2003年網路上已有。)

原文:AKA雜誌 hoowa

 

相關文章