歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

《編程之禅》(轉載) 序


聲明:
本文內容來自《編程之道》一書, 小趙只負責錄入. 所有版權歸該書的出版社。本文由原來的三冊書組成:《編程之道》 《編程之禅》《計算機時代的寓言》

前言

《編程之道》的出版在程序設計業內得到了普遍的接受,出版社邀請我翻譯一些與之相關的文章,以作為那部著名的經典之作的補充。雖然,我申明我的能力難以勝任,但我最終還是被說服試一試。

本書是許多個月來研究和翻譯的結果,它試圖通過對那些傳統著作的摘錄,來馐一個復雜的主題。我不懷疑,將會有許多計算機考古專家對我的摘錄標准提出意見。他們地問,“他為什麼不把《UNIX程序員、大象和妓女》的寓言包括進來?”“他竟敢忽視歷史悠久的故事《圖靈集市歷險記》!”對於這些批評,我只能說,我已經盡了我最大的努力來選擇有代表性的內容。

為了確定文中各個章節的年代,我利用了朝代系統。對於那些不熟悉這套劃分年代的方法的人來說,可以按四個朝代(或者說“四代”)來劃分。

第一個朝代,即所謂的“黃金時代”,要追溯到由玻璃管構建計算機的日子;許多現代的學者斷言,這個年代具有神話色彩。第二個朝代開始於晶體管的發明,而結束於集成電路的再現。

現代計算機的歷史,開始於第三個朝代,它由主機和控制主機的軍機大臣所統治。第四個朝代開始於對“集成教”的鎮壓,“集成教”對業已建立的秩序的反抗,被狂熱的“藍色兵團”殘酷地摧毀了。具有諷刺意義的是,正是這次鎮壓,導致編程之禅擴散到了外部世界。

除了組成該書主體的古老的素材以外,我還有幸得到了Babbage博士和Yu博士的幫助,他們分別為該書撰寫了引言和序。我希望他們對該書的貢獻能夠或多或少地彌補我作為編者的不才。

Geoffrey James
1988年1月於洛杉矶

目錄

前言

引言
第一篇 木
第二篇 火
第三篇 土
第四篇 金
第五篇 水

根據古老的“五行學說”,本書由五部分 :

木 火 土 金 水

大師:忍者 行者 隱者 大力神 阿幸
媒體:編年史 民間故事說教 公案 俳句
硬件:鍵盤 顯示器 CPU 打印機 磁盤
方向:東 南 中 西 北
軟件:編輯程序格式化程序調試程序解釋程序編譯程序
感覺:觸覺 視覺 嗅覺 聽覺 味覺
階段:界面 設計 編碼 排錯 測試
動物:龍 鳳凰 牛 兔 蛇
系統:VMS CP-6 OS/VS MS-DOS Unix

這套分類系統包羅萬象,要想在該書的篇幅內把它闡釋清楚是不大可能的。然而,在沉思於這些千變萬化的對應關系之後,您或許會發現其中那令人驚異的洞察力。

毫無疑問,古老的編程藝術在西文人的腦海裡通常會被誤解,現代的觀點則認為這是一種工程學、機械論和唯物論。

許多人認為,編程僅是為了達到一個目的而使用的一種手段,而且,一個程序(及程序員)只能依據其賺錢的能力來評價。

這些原始的錯覺,來自於對編程的真正意圖的一種很深的誤解。

高超的程序員並非致力於表面的成功,而是在人機之間尋找一種神秘的存在。

根據禅的解釋,在硬件、軟件、固件、界面和理解之間沒有分界--相反,所有這些都結合進了一個和諧的整體。

只有當程序員最終學會了將那種“自我自我的存在”的虛假感覺拋在一邊,此種境界才可能達到,而那種“自我的存在”的感覺往往伴隨在我們大多數人的生活之中。

這是計算機所帶來的--禅師程序員的行為方式。

有人說,掌握了禅機的程序員也就掌握了生命。這樣的程序員是以一種永不疲倦的童稚的歡樂來看待這個世界的。

覺悟了的程序員,走在大街上也能感覺到兩旁房子和大樓裡面的電腦。

覺悟了的程序員,能夠感覺和聽到調制過的數據穿過電腦線時那種電流脈沖的持續不斷的嗡嗡聲。

覺悟了的程序員已經與宇宙合為一體。

我以前的學生Geoffrey能夠完成這樣一個工作,將失落的編程之禅的經典著作再現於世,作為一名教師,我感到由衷的滿足。

真心希望,這本書能夠重新確立禅在完善的程序員教育中的重要地位。

C.P.Yu博士
蓮花大學超越機器學院


西藏拉薩

引言

當James先生要求我給他的這本書寫一篇引言的時侯,除了講述一下關於我自己在程序維護這個神秘的領域中的個人經歷,我實在想不到更好的辦法了。程序的維護是程序設計藝術中很少被人理解的領域。

有的讀者肯定會堅持說,在禅的深奧教義和程序維護的卑微技藝之間,並沒有什麼共同點。但正如一位大師所言:“方法和途徑(也就是道)存在於所有的程序之中,甚至在電子游戲裡。”因此,長期被的程序維護藝術必定有其禅的方面,這點是確鑿無疑的,雖然那對於未經訓練的頭腦來說或許不會立刻顯現出來。

我的故事開始於我從大學計算機科學專業畢業後的幾個星期。我大學畢業後的目標是為一家研究和開發機構工作,最好是編譯程序或操作系統設計的部門。我最後終於找到一家願意盲雇傭我的機構,但條件是我必須在一段時間內,通過完成程序維護的工作來“學會這套系統”。

我當然會對這個建議產生抵觸心理。我花了五年的大學時間,竟然是為了浪費時間來解決其他一些程序員的錯誤!然而,因為他們曾經答應日後讓我干感興趣的工作,於是我便接受了,並在心中提醒自己,即使這份工作干不出名堂,我還能找到其他的工作。

當我第二個禮拜去報到的時侯,我被領著去與那個程序維護組的師父見面。人事部總管帶著我快步地穿過開發中心黑暗的走廊,最後她指著長長的大廳通道盡頭處的一扇門說:“他在那裡面。”說完志身走了,好像有些心神不定。

我向門口走去,眼睛朝裡面窺探,我看見一個男人正坐在終端前工作,但他背對著我,所以我不知道他有多大年紀,長得什麼樣。我只有靠咳嗽一聲來表明我的存在,這裡,那位大師甚至沒有回頭瞅一眼便說:“請坐”。

越過他的肩膀,我瞟見了那些難以理解的屏幕顯示,隨著他纖長的手指在鍵盤上飛舞,它們一閃一閃地出現在他的終端上。最後,他滿意地咕哝了一聲,退出系統,然後轉過身來面對著我。

我所看見的讓我吃了一驚,因為他看上去不像那種應該是禅師的人,他的臉乏味,幾乎是丑陋的,他的頭發如同一圈煩惱的光環。但人們首先注意的是他的眼睛,透過厚厚的眼鏡片射出淡淡的藍光。

他從頭到腳地打量了我一番,然後點點頭,就好像確認一個個人觀點,“你就是那個新來的?”他酸酸地問。

“是的。”我回答。我假裝充滿激情,把我的經歷和在大學的成績向他作了快速的匯報。

這位禮貌的聽著,然後說:“那很好,但你以前做過程序的維護工作嗎?”

我坦白地告訴他我沒有做過。

師父長長地歎了口氣,“那好,我們應該做我們做做的事。”他說。然後他從一個架子上取下一本龐大的程序清單,隨意地翻開它,並遞給我。接著他問:“你怎樣對付這個?”

我眼睛盯著這本清單,那上面是匯編語言,還攙和著一些奇怪的宏語言。每隔十幾行語句,控制權便轉移到某個神秘的子程序,而且,即使這個程序具有任何結構性,我也看不出來。“這是什麼程序、”我問。

師父把那本清單從我的膝蓋上拿了過去,“這是《世代大師編碼藏經》,”他說,“當你學會了從迷魂陣中把錯誤的代碼抓出來時,那就是你出師的時侯了。”然後,他合上清單,把它放回到書架上。

我不久便意識到,程序的維護遠比我想象的要難得多。我起初試圖學會那本《編碼藏經》中所用的匯編語言,但令我煩惱的是,我發現那套匯編語言從未按規矩提供過說明文檔,現存的僅有一些筆記,是一位多年前就死去或離開公司的硬件開發者寫的。

這本《編碼藏經》不能給我什麼幫助了。雖然其中偶爾有一些注釋,但這些注釋和這種匯編語言一樣模糊,除了一些涉及到有關原始硬件構造的使人干著急的資料以外,別無它物。

當我向那位師父抱怨這一切的時侯,他禮貌地聽著,並在我們兩人沉默了許久之後,回答我說:

“你正在試圖理解某種不可能被你的理性思維所理解的東西,”他說,“這樣所導致的結果必然是失敗。你必須先清空你的大腦,只有那時,你才能開始領悟《編碼藏經》。”

接著,師父開始慢慢地向我闡釋那本《編碼藏經》裡復雜的邏輯。當我聆聽他那溫和的聲音時,我終於開始覺察到一點光芒的閃爍,這是隱藏在《編碼藏經》中輝煌的和永恆的靈光。“那些大師對‘良好的程序設計慣例與規則’一無所知,”師父說,他們努力去理解普遍意義上的計算機思維的內部活動,他們還需要什麼說明文檔呢?那些程序是極限的表達。

然而,即使我慢慢開始有所領會,我還是感覺到自己像一只在琥珀在掙扎的小飛蟲。師父所講的與我曾學過的東西截然不同,我的理性思維很難接受。但師父總是耐心地一遍遍解釋說,我必須不靠理性思維去推理,而要用潛意識來領悟《編碼藏經》的內涵。

經過數月的指點後,我感到很自信了,便想試試我的第一塊修補程序。為了給師父一個驚喜,我偷偷地工作。我寫了一段能重新運行幾行語句的補丁,把程序重新進行匯編,並把新程序釋放到生產系統中去。

第二天早上,我來晚了一會兒。讓我感到奇怪的是,開發中心的主任和從事部總管正在師父的辦公室裡。當我走進大廳後,從事部總管看見了我就把門關上了。我聽見了很大的說話聲,但聽不清說什麼。

等到那兩位來訪者離開後,我走進師父的辦公室,“什麼事?”我問。

“你的修補程序,昨天晚上六點整進入了生產系統。它現在已經被刪除了。”

“那麼?”

“你仍然可以繼續工作。”師父說。

最後,我終於明白,所有用我的理性思維去理解《編碼藏經》的努力都是徒勞的,這使我很絕望。師父覺察到了我思想上的這個變化,他開始向我傳授開機。他教給我冥想和查錯的技巧,他說這些技巧是從計算機時代之初,由技術支持部一代一代地傳下來的。

我聽著聽著,開始意識到一個關於我以前的編程體驗的特大事實。在大學裡,我一起認為程序員的工作主要是控制硬件和軟件的活動,編程的最高藝術境界是,為了完成一項任務或達到一個目標而成功地運用高超的編程技巧。但程序維護是不同於程序開發的。要想維護一個程序,就要把程序看作是一棵漸漸成長的植物,拔苗助長是毫無益處的。事實上,這樣的行為更容易導致植物的死亡。一個程序必須被小心地滋養。程序員在對程序進行改動之前,必須對每一個邏輯關系非常熟悉,必須對程序的意圖有很深刻的理解力。這種理解力不是在一夜之間就可以得來的,需要長時間的積累。

好幾個月以後,我終於能夠給《編碼藏經》成功地設計修補程序了,但設計之前要經過長時間的冥想,還要把那本程序清單打開著支在我的桌子上。我還發現,如果我工作的時侯點燃一支香,口中不停在重復師父教給我的口訣:“Null-So-Stix-Etx-Eot”(ASCII碼表中頭五個字節NUL、SOH、STX、ETX、EOT的發音--譯注),我更容易集中注意力。師父說,那個口訣意味著宇宙的“五原”。

不久我發現我不再關心是否能為工作成績而得到獎勵了,在我自身和我所維護的程序之間也看不見任何分離了。我像一個一生都活在陰影裡的人一樣,開始理解編程之禅,這是一種隱於程序員設計背後的難以言喻和難以形容的力量,就像投射影子的太陽一樣。

從那毫無意義的“自我的存在”中擺脫出來後,我開始發覺,那些偉大的編程語句過去對我來說似乎模糊不清,只是因為我還沒有徹悟,無法理解它們。我現在知道了為什麼過去的那些程序員從不為他們的程序提供文檔,因為英語語言的描述本身更讓人迷惑,而非使人受到啟發。

一天,我發現自己正在解決的一個問題涉及到《編碼藏經》中最復雜的部分--錯誤分析全程。我在對此一無所知的情況下,給出了一個修補程序,它能通過對硬件中斷區的內容進行檢查來測定錯誤的情況,使程序能繼續正確執行。

那天下午,師父第一次走進了我的工作間,他把手放在我的肩膀上,眼睛朝下看著我,“現在該是你出師的時侯了。”他說。

這些就是我第一次接觸禅式程序設計的經歷。雖然從那以後我被指派參加過很多項目設計,但我從未忘記過我的第一位師父給我的教誨。

想象一下我的驚奇--當我在《編程之禅》中發現了如此之多的我師父非常喜愛的語言時。我終於看到了那些隱於他那難忘的演說背後的古代傳統。

James先生將那本經典的影響深遠的著作重新發掘出來,我們大家都欠他一份人情。要不是他的持之以恆,它可能會永遠失傳。在本書中,James先生收集了一大堆定期,如異端的說教、民間故事和詩歌等,它們組成了具有傳奇色彩的“集成教”的教義。正是通過James先生這樣的學者的努力,才使得深藏禅機的程序設計的光芒永世不滅地照耀著後代的人們。

Charlie(Chuck)Babbage


Copyright © Linux教程網 All Rights Reserved