## 第?12?章?無根的根:無名師的 Unix 心傳
**目錄**
[導言](ch12.html#id3057424)
[無名師與萬行碼](ch12s02.html)
[無名師與腳本狂](ch12s03.html)
[無名師的雙路論](ch12s04.html)
[無名師與方法論](ch12s05.html)
[無名師的GUI論](ch12s06.html)
[無名師與Unix狂](ch12s07.html)
[無名師的Unix傳統論](ch12s08.html)
[無名師與最終用戶](ch12s09.html)
> 注意:《Rootless Root:The Unix Koans of Master Foo》為《Unix編程藝術》一書的附錄,原作者不詳
## 導言
《無根的根》這部心傳的收錄集在西山純凈的空氣中得以保存數十年,它的發現在學術圈中掀起軒然大波。這些出土文稿是否為早期 Unix 教義的新發現?抑或僅是后世高明的贗品?那些半神秘的人物,像尊者 Thompson、Ritchie 和 Mcllroy,是否以此發展出我們所處時代的教義?
答案無法確知。各方爭論均被收入那本經典之作,《編程之道》(The Tao of Programming)。但是《無根的根》在論調風格上都與那本 James 松散詩化的逸聞譯作有顯著差異,所有一切都圍繞著卓越而謎一般的無名師。
把 AI Koans(AI 心傳)與之相提并論頗為恰當;在 AI Koans 中也可發現《無根的根》作者的著筆痕跡。它和 Loginataka(箴言劇)也有密切關聯;實際上,《無根的根》和 Loginataka 大有可能是出自一人之手筆,此人正是無名師。
Tales of Zen Master Greg(禪祖 Greg 傳說)也值得一說,對“九寸釘”的引用已經使人對其古老程度產生懷疑,它對《無根的根》影響微乎其微。
毫無疑問,可以認為標題借鑒了 Mumon 的禪宗經典讀物《無門之門》(The Gateless Gate)。數個心傳都可以看作是對 Mumon 的回應。
無名師應該歸于東派(New Jersey)還是西派(尊者 Thompson 往 Berkeley 的劃時代之旅)。如果不能回答這個問題,我們甚至也許無法宣稱無名師確實存在,它也許只是一群教師,也許是一批達摩尊者。
即使把無名師的傳說附會在單獨的人身上,那他最看重的學生 Nubi 怎么辦? Nubi 是個有血有肉的形象,是個完美的門徒。也許有人會想起佛祖最喜愛的追隨者阿難達的傳說,但他的性格特質在神話傳說中并沒留下痕跡,而佛祖也是永恒的謎。
最終,我們可做的便是講述故事的本原,抽絲剝繭,挖掘其中真意。
《無根的根》還在編寫之中,素材的整理和解釋都是難題。難題解開后,將被收錄到未來版本中。
## 無名師與萬行碼
無名師曾對來訪的程序員說:“Unix傳統上認為,一行shell腳本勝過萬行C程序。”
這個程序員自以為對C極其精通,說:“這不可能。UNIX內核正是用C實現的。”
無名師回道:“確是如此。不過,UNIX傳統上認為,一行shell腳本勝過萬行C程序。“
程序員頗為沮喪:”但是在C中我們可領會到尊者Ritchie的智慧。我們與操作系統和機器合而為一,可以獲取無與倫比的性能。”
無名師回道:“誠如你言。不過,Unix傳統上認為,一行shell腳本勝過萬行C程序。”
程序員冷笑著想憤然離去。無名師向學生Nubi頷首示意,Nubi在黑板上寫下一行shell腳本,問道:“尊敬的程序員,看看這行管道,用純C實現,是不是要一萬行C代碼?”
程序員沉吟念誦。最終他承認如此。
“你需要多長時間來實現和調試那個C程序?”Nubi問道。
“很長”,來訪的程序員承認。“但傻子才會干這個而不去完成更有價值的任務。”
“那么誰更了解Unix傳統?”無名師問道。“是寫一萬行代碼的,還是看到任務的無謂而不去編碼的?”
聽到此,程序員眼中一亮。
## 無名師與腳本狂
無名師和學生吃早飯時,從黑客大陸來了個陌生訪客。
“Ihear y00 are very l33t,”他說。“Pl33z teach m3 all y00 know”。(我聽說你很牛,請把你會的都教給我。)
無名師的學生面面相覷,都沒聽懂這類粗鄙言語。無名師微笑道:“你想弄懂Unix?”
“I want to b3 a wizard hax0r”,陌生人回答,“and 0wn ever3one's b0xen。”(我想當個頂尖黑客,能掌握所有人的機器。)
“我不教這個”,無名師答道。
陌生人很激動。“D00d, y00 r nothing but a p0ser。”,他說。“If y00 n00 anything, y00 wud t33ch m3。”(哥們兒,敢情你沒真本事啊,你要知道點兒東西就教給我了。)
“有條路,”無名師說,“可以將你帶入真知。”他在紙上寫了個IP地址。“黑掉這臺機器,這對你來說應該不費什么力氣,它的管理員不稱職。回來后告訴我你發現了什么。“
陌生人鞠了一躬就離開了。無名師把他的早飯吃完。
幾天過去了,幾個月過去了。沒人再想起陌生人。
數年過去了,黑客大陸來的陌生人回來了。
”你混蛋!“他說,”我黑掉了那臺機器,你說的沒錯,太容易了。但是我被FBI抓起來扔進監獄了。“
”好“,無名師說,”你可以繼續下一課了。“他在另一張紙上寫了個IP地址交給陌生人。
”你瘋了?“陌生人喊道。”經過這事,我再也不黑別人的機器了。”
無名師臉現微笑。“這里就是”,他說,“真知的開始。”
聽到此,陌生人眼中一亮。
## 無名師的雙路論
無名師如是教導學生:
“達摩教義有條準線,這在尊者McIlroy的符咒“做一件事并做好”中得到體現。它強調軟件應當具有簡單一致的行為,這符合Unix慣例,人和其它程序便都很容易想象其心理模型。
“但達摩教義還有另一條準線,體現在尊者Thompson的符咒“有懷疑,用窮舉”中,很多經文都教導我們現在得到的90%,比等不來的100%更有價值。它強調實現的健壯性和簡單性。
“現在告訴我:什么程序符合Unix傳統?“
想了一會兒后,Nubi沉思道:
“老師,這些教義有沖突。”
“簡單的實現往往對邊緣情況有欠考慮,比如資源耗竭、無法關閉競爭窗口以及在未完成事務中超時等等。”
“發生邊緣情況時,軟件行為往往不規律、難以猜測。這當然不是Unix傳統。“
無名師頷首同意。
“另一方面,大家都知道精巧的程序很脆弱。更進一步說,每個對邊緣情況的修正往往牽扯到程序的核心算法,還牽扯處理其它邊緣情況的代碼。”
“于是,對邊緣情況防患于未然、確保描述的簡單性,反而會使得代碼過分復雜、bug成堆、根本無法發售。這當然不是Unix傳統。”
無名師頷首同意。
“那么,什么是正確的達摩道?”Nubi問道。
無名師說:
“當鷹飛翔時,它忘記爪子與地面相觸?當虎捕食時,它忘記騰空的一刻?VAX只重三斤!”
聽到此,Nubi眼中一亮。
## 無名師與方法論
無名師和學生Nubi在圣地行走,無名師習慣在晚間為城市和鄉村的Unix新門徒布道。
一次,聆聽者中混入了一名方法論者。
“優化程序時不對熱點進行反復衡量,就像漁夫把網撒入空湖中。”無名師說。
“那么,”方法論者說,“管理資源時不持續地衡量你的產能,不也像漁夫將網撒入空湖中么?”
“我一次碰到一個漁夫時,他正將網撒入船下的湖中,”無名師說,“他摸了好一會兒船底,像在尋找他的船。”
“但是,”方法論者說,“如果他把網撒入湖中,為什么還要找船呢?”
“因為他不會游泳。”無名師答道。
聽到此,方法論者眼中一亮。
## 無名師的GUI論
一晚,無名師和Nubi參加一個程序員的探討會。有個程序員問Nubi和他的老師來自哪所學校。當得知他們是Unix大道的追隨者時,程序員頗為不屑。
“Unix命令行工具太粗糙太落后”,他譏諷道。“現代的、設計得當的操作系統可以在圖形用戶界面中做任何事情。”
無名師一言不發,只是指著月亮。旁邊的一條狗對著他的手狂吠。
“我不明白。”程序員說。
無名師依然緘默,指著一幅佛祖像,然后又指著一扇窗。
“你想說什么?”程序員問。
無名師指著程序員的頭,接著指著一塊大石。
“請把話說清楚!”程序員要求道。
無名師深深蹙眉,輕拍程序員的鼻子兩下,把他扔到旁邊的垃圾箱中。
程序員試圖從垃圾堆掙扎出來之時,那條狗跑過來在他身上便溺。
此時,程序員眼中一亮。
## 無名師與Unix狂
一個Unix狂熱者聽說無名師掌握Unix大道真知,便跑來求教。無名師對他說:
“當尊者Thompson發明Unix時,他并不理解它。隨后他理解了,受益了,不再發明了。“
“當尊者McIlroy發明管道時,他只知道它將傳遞軟件,并不知道它能傳遞思想。”
“當尊者Ritchie發明C時,他將程序員放到緩沖溢出、堆損壞和爛指針bug的地獄中懲罰。”
“說實話,這些尊者又瞎又蠢!”
狂熱者對無名師的用詞極為憤怒。
“這些智者”,他抗議道,“給了我們Unix的大道。我們嘲笑他們,就是混淆是非,比轉世為牲畜和MCSE還不如。”
“你的代碼全無污點和缺陷?”無名師問。
“不,”狂熱者承認,“沒人不犯獵。”
“這些尊者之智,”無名師說,“就是了解自身之愚。”
聽到此,狂熱者眼中一亮。
## 無名師的Unix傳統論
一學生對無名師說:“我們聽說SCO公司把握著純正的Unix。”
無名師頷首。
學生繼續說,“我們還聽說OpenGroup公司也把握著純正的Unix。”
無名師頷首。
“這怎么可能?”學生問。
無名師答道:
“SCO確實把握著Unix源碼,但是Unix的源碼不是Unix。OpenGroup確實把握著Unix的名稱,但Unix的名稱不是Unix。”
“那么,什么是Unix傳統?”學生問。
無名師答道:
“非源碼。非名稱。非思想。非實物。恒變。不變。”
“Unix傳統是簡單和空。正是簡單,正是空,才使得它更強勝颶風。”
“以自然法則前行,在程序員手中,吸納各種優良設計。與之競爭的軟件最終必與之想像;空,空,真空,虛無,萬歲!”
聽到此,學生眼中一亮。
## 無名師與最終用戶
無名師又一次布道時,一個最終用戶聽說了他的智慧,跑來求教。
他對無名師三鞠躬。“我欲學習Unix大道,”他說,“但是弄不懂命令行。”
一個旁觀的新門徒開始嘲諷最終用戶,說他腦子一鍋粥,說只有經訓練者、有智慧者才配使用Unix。
無名師撫手不語,命這個嘲笑最終用戶的新門徒前坐,坐到最終用戶身邊。
“告訴我,”他對新門徒說,“你寫過什么代碼,有過什么突出設計。”
新門徒囁嚅了兩句,然后沉默了。
無名師轉向最終用戶。“告訴我”,他問,“為何你要尋求大道?”
“我用的軟件并不能令我滿意”,最終用戶答,“既不穩定,也不美觀。聽說Unix之道盡管艱難,但超越一切,我愿拋去一切誘餌和虛像。”
“那么,”無名師問,“你為何想盡辦法讓軟件幫你做事?”
“我是個建筑工”,最終用戶答道,“這座城里的很多房屋都出自我手。”
無名師轉向新門徒。“家貓也能欺負老虎”,無名師說,“但是貓叫永遠比不過虎吼。”
聽到此,新門徒眼中一亮。
- 開源世界旅行手冊
- 授權
- 致謝
- 序言
- 更新紀錄
- 導讀
- 如何寫作科技文檔
- 部分?I.?氣候
- 第?1?章?GUI? CLI?
- 第?2?章?UNIX 縮寫風格
- 第?3?章?版本號的迷霧
- 第?4?章???Vim 還是 Emacs
- 第?5?章???DocBook 還是 TeX
- 第?6?章?完全用 Gnu/Linux 工作
- 第?7?章?病毒
- 第?8?章?磁盤 分區
- 第?9?章?文件系統
- 第?10?章???發行版介紹
- 第?11?章???編程語言
- 第?12?章?無根的根:無名師的 Unix 心傳
- 部分?II.?地理
- 第?13?章?基礎知識
- 第?14?章?命令系統
- 第?15?章?基本系統
- 第?16?章?軟件管理
- 第?17?章?核心工具集
- 第?18?章?編譯工具鏈
- 第?19?章?圖形界面
- 第?20?章?國際化
- 第?21?章???內核
- 第?22?章?Grub
- 第?23?章?服務器
- 第?24?章?Vim 編輯器
- 第?25?章?Emacs 入門
- 第?26?章?正則表達式
- 第?27?章?docbook 指南
- 第?28?章?Git 版本控制系統
- 第?29?章?ConTeXt 入門指南
- 部分?III.?景觀
- 第?30?章?終極 Shell -- ZSH
- 第?31?章?完美工作站 Archlinux
- 第?32?章?組織你的意念:Emacs org mode
- 第?33?章???Zsh+screen
- 第?34?章???gentoo stage3
- 第?35?章???硬件問題
- 第?36?章???網絡設置
- 第?37?章???自制 LiveCD
- 第?38?章?awesome
- 第?39?章?openbox 工作環境
- 第?40?章???Emacs muse
- 第?41?章???寫作工具鏈
- 第?42?章?使用 lftp
- 第?43?章???Firefox 使用技巧
- 第?44?章???FVWM
- 部分?IV.?地質
- 第?45?章?Unix
- 第?46?章???Gnu
- 第?47?章?軟件業自由之神——Richard Stallman
- 第?48?章?Linux
- 第?49?章?GNOME與KDE的戰爭
- 第?50?章???Vim Emacs
- 第?51?章???年代紀
- 第?52?章?我的選擇
- 第?53?章???補遺