《程式設計之道》譯者序(轉載) (轉)

amyz發表於2007-08-15
《程式設計之道》譯者序(轉載) (轉)[@more@]

《之道》(轉載) 譯者序

如今設計類的圖書可謂是層出不窮,其中絕大部分是以教程、使用手冊和程式設計技巧為主,它們都是用來處理一些技術性的問題的。

然而,怎樣領悟程式設計的內涵和精髓呢?程式設計師程式設計時是一種怎樣的思維方式?他們的工作、生活是個什麼樣子?他們在想些什麼?作為一名經理如何同他們相處並處分發揮他們的積極性?涉及這些方面的書卻寥寥無幾。但沒有並不代表不重要--隨著我國程式設計事業從起步到發展,這些方面的內容顯得越來越重要,我們越來越希望瞭解它們。

美國是個工業和程式設計水平處於世界依靠地位的國家,我們是不是可以從那裡借鑑點什麼呢?您將要讀到的《程式設計之道》一書便是出息美國的一位善於進行哲學性思考、有十多年工作的程式設計師--Geoffrey James之手。

在本書中,作者以一種幽默、辛辣的眼光審視著發生在程式設計室裡的各種各樣的小故事,並運用東方的哲學體系進行深層次的思考和理解,即進行“道”式的思考和理解。簡單的故事蘊含深奧的道理,是本書的極大特色。

本書不僅語言優美、比喻生動,而且在結構上頗具匠心。

本書在美國出息時分為三冊--《程式設計之道》《程式設計之禪》和《寓言--資訊時代的啟示》,經與作者協商,決定將中譯本彙總為一本以《程式設計之道的》的書名出版。

1、《程式設計之道》

本書的構思新穎而奇特。作者作為一名計算機考古的業餘愛好者,偶然發現了在程式設計業內傳說的《程式設計之道》。這其中的內容,每個程式設計師都想知道,但誰也沒有見到過,就有點像金庸的小說《射鵰英雄傳》中的《九陰真經》。於是作者便將它“翻譯”成此書,公之於眾。全書共分為九篇:

第一篇 靜寂的空宇
第二篇 古代的大師
第三篇 設計
第四篇 編碼
第五篇 維護
第六篇 管理
第七篇 公司裡的學問
第八篇 和軟體
第九篇 尾聲

2、《程式設計之禪》

在本書中,作者借用中國傳統文化中的五行--”金、木、水、火、土“來代表與計算機相關的概念,並以此將多個富有祖宗色彩的故事有機地組織起來。全書分為五篇

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

3、《計算機寓言--資訊時代的啟示》

作者以四季--”春、夏、秋、冬“來組織本書的結構。全書共分為四篇:

第一篇 秋--虛幻與真實
第二篇 冬--戰爭與死亡
第三篇 春--真愛與新生
第四篇 夏--啟示

我們將此書獻給那些愛笑也愛思考的程式設計者,以及那些同程式設計者打交道的管理人員,當然他們也愛笑愛思考。 
 
 
第一篇 靜寂的空宇

程式設計大師如是說:

“當你有本事奪走我手中的這塊水晶石時,就是你出師的時侯了。”

1.1

在靜寂的空宇裡,一種神奇的物質形成並誕生了。它立刻便靜止了,獨自守侯著,豪無動靜,然而又處於永恆的運動之中。它是所有程式的源頭,我不知道它的名字,所以我將稱它為程式設計之道。

如果此道是完美的,那些操作就是完美的,如果是完美的,那麼編譯程式就是完美的,如果編譯程式是完美的,那麼應用程式就是完美的。滿意之至--和諧便應運而生。

程式設計之道流逝遠去,又乘著晨風而歸。

1.2

此道產生了機器語言,機器語言又產生了語言,

組合語言產生了編譯程式,如今有了上萬種的語言。

每一種語言都有其各自的卑微用途。每一種語言都表達出軟體的陰和陽。每一種語言都在此道之中有其一席之地。

但是,應儘量避免用COBOL語言編寫程式。

1.3

宇宙之初有道,道產生了空間和時間。空間和時間便是程式設計之陰陽。

不能領悟此道的程式設計者總是耗盡他們所要編寫的程式的時間和空間;而領悟了此道的程式設計者卻總有足夠的時間和空間來達到他們的目標。

除此之外,難道還有其它的情形嗎?

1.4

精明的程式設計者聽說了此道,並遵循它;平庸的程式設計者聽說了此道,並尋覓它;愚蠢的程式設計者聽說了此道,卻嘲笑它。

要不是因為有嘲笑,道也就不復存在了。

最高的最難被聽見。前進也是一種倒退。大器晚成。即使是一個完美的程式也仍然會有隱患。

道深藏不露,難於理解。


第二篇 古代的大師

程式設計大師如是說:

“倘若三天不程式設計,生活將變得毫無意義。”

2.1

老一輩的程式設計師是神秘的、深奧的。我們沒法揣摩他們的想法,我們所能做的只是描述一下他們的表象。

他們是清醒的,就像一隻遊過水面的狐狸;他們是警惕的,就像一位戰場上的將軍;他們是友善的,就像一位招待客人的女主人;他們是簡單的,就像未經刻鑿的木頭;他們還是難以琢磨的,就像黑暗的洞穴中漆黑的池水。

誰能說出他們心中的秘密?

答案只存在於道中。

2.2

電腦科學巨擘圖靈曾經夢到他是一臺機器。當他醒來時,他驚歎道:

“我不知道--我是夢到了自己是臺機器的圖靈,還是一臺夢到了自己是圖靈的機器?”

2.3

一家大公司的一名程式設計師參加了一次軟體研討會。他回來後向經理彙報說:“為其它公司工作的那些程式設計師都是些什麼的人啊?他們行為拙劣,不顧及自己的儀表。他們的頭髮又長又亂,衣服又皺又舊。他們闖進我們的會客組,還在我演講時發生粗魯的喧鬧。”

經理說:“我本不應該讓你去參加這個會議。那些程式設計師是生活在物質世界之外的。他們認為生活是荒唐的,一種意外的巧合。他們來去自如。他們只為他們的程式而活著,無憂無慮地活著。為什麼要用社會習俗來他們呢?

他們活在此道之中。”

2.4

一個禮堂者問大師:“有位程式設計師,從不構思、編寫文件或測試他的程式,然而所有知道他的人都認為他是世界上最棒的程式設計師。這是為什麼呢?”

大師回答說:“那個人掌握了道。他不需要事先進行構思,當系統崩潰時,他不會因此而悶悶不樂,而是心平氣和地接受整個事實。他還從編寫程式說明文件的需要之中超脫了出來,不在意是否有人看他的編碼。他也不需要進行測試。他的每個程式都完美無缺。寧靜而優雅,程式的用途也顯而易見。

的的確確,他已經進入了道的神奇境界。”


第三篇 設計

程式設計大師如是說:

“當程式被測試時,再修改設計方案就太遲了。”

3.1

曾經有個人去參加一次電腦展示會,每天當他進入展館時,都對門衛說:

“我是個大盜,我偷盜的本領是出了名的。事先警告你,這次展示會也在劫難逃。”

這番話讓門衛坐立不安,因為裡面有價值數百萬美元的電腦裝置,所以他緊緊地盯住這個人。但這個人只是從一個展攤逛到另一個展攤,嘴裡輕輕地哼著小曲。

當這個人出門時,門衛把他拉到一邊,搜查他的衣服,但一無所獲。

第二天,這個人又來了,並對著門衛囂張地嚷著:“昨天我滿載而歸,但今天的收穫會更大。”於是,門衛盯他盯得更緊了,但仍一無所獲。

在展示會的最後一天,門衛再也抑制不住自己的好奇心了。“大盜先生,”門衛說,“我被你搞糊塗了,實在想不明白。請告訴我,你究竟在偷什麼?”

這個人笑了。“我在偷想法。”他說。

3.2

曾經有位程式設計大師,喜歡編寫非結構化的程式設計。一位初學者試圖模仿他,也開始編寫非結構化的程式。當這位徒弟請師父評價他的進展時,師父批評了他的做法。他說:“對一位程式設計高手適合的,對初學者來說並不一定適合。在超越結構化之前,你必須先領悟道。”

3.3

曾經有位程式設計師被派到IBM的軍機大臣手下工作。軍機大臣問程式設計師:“設計一個財務軟體包,和設計一個作業系統,哪一個更容易?”

“作業系統。”程式設計師回答說。

軍機大臣立刻發生一種不信任的驚歎,“與一個複雜的作業系統,一個財務軟體包簡直是小巫見大巫。”他說。

“並非如此,”程式設計師說,“在設計一個財務軟體包時,程式設計人員是作為一箇中介者在觀念各異的人們之間起作用的:這個軟體必須如何操作,它的報表必須是什麼形式,它必須如何與稅法一致,等等,一個作業系統則不為其外觀所限制。當設計一個作業系統時,程式設計人員只要在機器與人的思維之間尋找一種最簡單的和諧就可以了。這就是為什麼作業系統更容易設計。”

軍機大臣點點頭,笑了。“說來也是。但要想檢測和糾正其中的錯誤,哪個更容易呢?”

程式設計師沒有回答。

3.4

一位經理到程式設計大師那裡,交給他一份有關一個新應用程式的需求說明。經理問程式設計大師:“如果我分配五個程式設計師給你,你需要多久能設計好這個系統?”

“那將花費一年的時間。”大師立刻回答。

“但我們馬上就需要這個系統,甚至要求更快!如果我分配十個程式設計師給你,你需要多長時間?”

大師皺了皺眉頭,“那樣的話,需要兩年。”

“如果我分配一百個程式設計師給你怎麼樣?”

大師聳了聳肩膀,“那麼這項設計將永遠無法完成。”他說


第四篇 編碼

程式設計大師如是說:

“一個寫得完美的程式是其自身的天堂,而一個寫得糟糕的程式則是其自身的地獄。”

4.1

一個程式應當是輕盈的、靈活的,它的子程式就像一串珍珠一樣連線著。它的精神和意圖應該貫穿始終。在程式中,內容既不應太多,也不應太少;既不應該有不需要的迴圈結構,也不該有冗餘的變數;既不缺乏結構性,又不過分僵化。

一個程式,無論多麼複雜,都應該以一個整體的方式執行。程式應以其內在的邏輯為指引,而非外在形態。

如果一個程式不能達到這些要求,它將處於一種雜亂無章的混淆不清的狀態。唯一的方法就是重寫這個程式。

4.2

一位初學者問大師:“我有個程式,時靈時不靈。我一直都遵循著程式設計的規則,結果卻整個兒搞糊塗了。這是什麼原因呢?”

大師回答說:“因為你沒有領悟道,所以你迷惑不解。只有傻瓜才會指望從人類身上看到理性的行為,你又能指望一臺人類製造的機器怎麼樣呢?計算機模仿的是決定論,只有道才是盡善盡美。

程式設計用的那些條條框框式的規則僅僅是曇花一現,只有道才是永恆的。因此,在你受到道的啟發之前,你必須沉思於道。”

“但是我怎樣才能知道我已經受到了啟發了呢?”初學者問。

“當你的程式執行無誤時。”大師回答說。

4.3

一位大師正在向他的一名初學程式設計的弟子解釋道的真諦。“此道體現在所有的軟體當中--不管它看上去多麼無足輕重。”大師說著。

“此道體現在手掌計算器中嗎?”初學者問。

“是的。”

“此道在電子遊戲中嗎?”初學者繼續問。

“此道甚至也體現在電子遊戲之中。”大師說。

“那麼此道也體現在個人電腦的DOS系統之中嗎?”

大師咳嗽一聲,並稍稍挪動了一下位置。“今天的課就到這裡吧。”他說。

4.4

一位專案經理手下的一名程式設計師正編寫軟體。他的手指在鍵盤上飛舞著,在程式的編譯過程中沒有出現任何錯誤資訊。程式執行起來就像一陣和風。

“太好了!”經理高興地大叫了起來,“你的技藝簡直是完美無缺。”

“技藝?”程式設計師說著便從他的終端機前轉過身來,“我遵循的是道--所有的技藝遠不能及!當我剛開始程式設計時,我眼前看見的是整個問題亂成一團。三年之後,我再也看不見這種一團糟的情形了。相反,我用了各種各樣的子程式。但現在,我什麼也看不見了。我的整個身心存在於一種無形的虛空裡,我的知覺是空蕩蕩的。

我的精神隨其本能而動,不無原則計劃就能自由地工作。總而言之,是我的程式自己寫出了自己。誠然,有時會有一些難題。我看見那些難題向我走來,於是我放慢了速度,默默地注視著他們。然後我更改了一行編碼,那些問題就煙消雲散了。然後我完成程式的編譯。我靜靜地坐著,讓工作的歡心情舒暢遍佈我的全身。我閉上雙眼,歇息片刻,然後退出系統。”

經理說,“希望我的所有的程式設計師都這麼聰明!”


第五篇 維護

程式設計大師如是說:

“即使一個程式只有三行長,總有一天它也不得不需要維護。”

5.1

一記扇經常開啟的門的絞鏈不需要潤滑油。

一條湍急的河流不會變得汙濁。

無論是聲音還是想法都不可能在真空中傳播。

軟體如果不用就會腐朽。

這世界真奇妙。

5.2

一個程式設計師正在編寫他的程式,經理問他還需要多長時間完成。

“明天就可以完成。”程式設計師立刻回答。

“我想你這是不切實際,”經理說,“實話實說,這需要多長時間?”

程式設計師想了一會兒。“我還想加進一些新的特色,這需要花至少兩個星期的時間。”他最後說。

“即使那樣也期望過高,”經理堅持說,“只要你編完程式時告訴我一聲,我也就滿足了。”

程式設計師答應了。

幾年以後,那位經理要退休了。在他去退休午餐會的路上。他發現那個程 序員趴在他的終端機前睡著了。整個晚上都在忙於編寫那個程式。

5.3

一次一位初學程式設計者被指派編寫一個簡單的財務軟體包。這位初學者大張旗鼓地工作了許多天。但當他的師父檢查這套程式時,發現其中包含有一個螢幕編輯器,一套通用圖表程式,一個人工智慧介面,然而卻沒有任何財務方面的東西。

當師父問及此事時,初學者顯得憤憤不平。“不要這樣沒有耐心嘛,”他說,“我最後加些財務的素材進去就是了。”

5.4

難道一位好農民會漏掉他所種的一株莊稼嗎?

難道一位好老師會放棄哪怕是最差的學生嗎?

難道一位好父親會允許哪一個孩子捱餓嗎?

難道一位好程式設計師會不願維護他的程式嗎?


第六篇 管理

程式設計大師如是說:

“讓程式設計師多而經理少--然後生產就會高。”

6.1

當經理們沒完沒了地開會時,程式設計師就寫些遊戲玩;當財務主管們談到季度利潤時,開發用的預算馬上就要被削減;當資深科學家們談論藍藍的時,馬上就會風起雲湧。

其實,這並不是程式設計之道。

當經理們忠於職守時,遊戲程式就會被擱置到一邊;財務主管們制訂出長 遠的計劃時,和諧秩序將很快恢復;當資深科學家們著手於眼前的問題時,這些問題不久就會解決。

其實,這才是程式設計之道。

6.2

為什麼程式設計師沒有效率?

因為他們的時間浪費在開會上。

為什麼程式設計師很難管束?

因為管理層多管閒事。

為什麼程式設計師接二連三地辭職?

因為他們的熱情已耗盡。

在糟糕的管理之下工作,他們不再敬業。

6.3

一位經理即將被解職,但此時他手下的一名程式設計師發明了一個新的程式。這個程式流行起來,並且極為暢銷。結果,經理又回到了原來的崗位上。

經理試圖要發給那位程式設計師一筆資金,但程式設計師拒絕了。他說:“我寫這個程式,因為我認為這是個很有意思的想法。我並不期望有所回報。”

經理聽到這話,評論說:“這位程式設計師雖然身居卑位,卻能很好地理解一位僱員應盡的職責。讓我們提拔他到管理顧問的高位上吧!”

然而,接到通知後,那位程式設計師又一次拒絕了。他說:“我在屬於我的位置上,才能較好地程式設計。如果我被提升了,除了浪費每個人的時間,我將一事無成。現在我可以走了嗎?我還有一個程式要編呢。”

6.4

一位經理走過來對他的程式設計師們說:“關於你們的上班時間:你們要早上九點鐘到,下午五點鐘下班。”聽了這話,所有的程式設計師都很氣憤,其中有幾位要當場辭職。

於是,經理只好又說:“好吧,那樣的話,你們可以自己安排上班時間,只要你們能按時完成專案。”程式設計師們滿意了。以後,他們中午來到辦公室,一起工作到凌晨。


第七篇 公司裡的學問

程式設計大師如是說:

“你可以向一位公司總裁演示一個程式,但你無法使他學會使用電腦。”

7.1

一位初學者問大師:“在東方(此處喻指美國的東海岸,有許多大公司的總部--譯註),有一個不尋常的樹狀結構,人們稱它為‘公司總部’。它的副總裁們和財務主管們的數量之大,使它鼓得不成開關。它簽發大師的便函,每份上都寫著”歸去”“來兮”,卻沒有人知道那是什麼意思。它的那些分支機構每年都要換新的名字,但都毫無價值。如此一個不正常的實體怎麼能繼續存在呢?”

大師回答說:“你探察這個龐大的鄧因其沒有合理的用途而心神不定。難道你不能從它那無盡的迴旋中得到樂趣嗎?你不會享受一下在它所蔽護的部分裡的程式設計的那種無憂無慮的輕鬆嗎?你為什麼要因為它毫無用處而心煩意亂呢?”

7.2

在東方,有一條大魚,比其它所有的魚都要大。它變成了一隻鳥,它的翅膀就像雲朵一個佈滿了天空。當這隻鳥飛過陸地時,它帶來了“公司總部”的訊息,像蜻蜓點水一樣把這個訊息丟在了那些程式設計師中間。然後這隻鳥駕著風,揹負藍天,返回了家園。

初學程式設計者驚奇地盯著那隻鳥,因為他根本無法理解;平庸的程式設計師畏懼那隻鳥的到來,因為他害怕鳥兒帶來的訊息;而程式設計大師卻仍然在他的終端機前工作,因為他不知道那隻鳥來了又去了。

7.3

象牙塔裡的魔術師帶來了他最新的發明,要讓程式設計大師檢驗一下。魔術師把一隻大黑箱子推進辦公室,大師靜靜地等侯著。

“這是一臺整合的、分散式的、通用的工作站,”魔術師開始,“運用人類工程學原理,使用享有專利的作業系統、第六代評議和多重狀態使用者介面而設計完成。建造這臺工作站,花了我幾百名助手幾年的時間。這不足以令人驚奇嗎?”

大師輕輕地揚了揚眉毛。“這的確令人驚奇。”他說。

“公司總部已經命令,”魔術師繼續說,“每個人都得使用這臺工作站作為操作平臺來設計新的程式。你同意嗎?”

“當然同意,”大師說,“我馬上就把它運到資料中心去。”於是魔術師興高采烈地回到了象牙塔去了。

幾天後,一位初學者走進大師的辦公室問道:“我找不到我的新程式清單了。你知道它會放在哪兒嗎?”

“知道,”大師回答說,“那些清單就堆放在資料中心的臺子(platform“可以指操作平臺”,也可以指普通的臺子--譯註)上。”

7.4

程式設計大師從不懼怕在設計不同程式的崗位間調來調去;管理層的變動不可能對他有所損害;他不會被解僱,即使專案取消了。這是為什麼呢?因為他胸有成“道”。


第八篇 硬體和軟體

程式設計大師如是說:

“沒有風,草兒靜止不動;沒有軟體,硬體則無所為用。”

8.1

一位初學者問大師:“我覺察到有一家電腦公司比其它所有的公司都要大得多。它在中遙遙領先,就如同鶴立雞群一般。它的任意一個部門都可以組成一個完整的企業。這是為什麼呢?”

大師回答說:“你怎麼問這麼愚蠢的問題呢?因為那家公司大,所以它就大嘛。如果它僅僅生產硬體,沒人願買;如果它僅僅生產軟體,沒人願用;如果它僅僅維護一下系統,人們將把它當作是傭人。然而,因為它把所有這些東西都結合了起來,它便搖身一變,被人們看作是諸神之一。不費吹灰之力,它便能取勝。

8.2

一天,一位大師從初學程式設計者身邊經過,他發現這位初學者正在全神貫注於掌上電腦遊戲。“對不起,”他說,”我可以看一下嗎?”

初學者立刻緊張起來,把那個玩意兒遞給了大師。“我知道這種裝置提供了三個遊戲級別:容易、中等和高難,”大師說,“然而每個這樣的裝置都有另一個級別,在這一級,遊戲機既不想贏人,也不想被人打敗。”

“請問,尊敬的大師,”初學者懇求道,“怎樣才能找到這個奇妙的級別設定呢?”

大師把那個玩意兒扔到地上,踩到粉碎。突然間,那個初學者明白了什麼。

8.3

曾經有一個程式設計師,擅長在微電腦上程式設計,“瞧,我在這裡過得多好呀,”他對另一位來訪的程式設計師說,這位程式設計師是在大型主機上工作的,“我有自己的作業系統和裝置,我不必和其他任何人分享我的資源。這裡的軟體自相一致,很容易使用。你為何不辭去現在的工作,加入到我這裡來呢?”

於是,主機程式設計師開始向他的這位朋友描繪他的系統:“主機就像一位陷入沉思的聖人一樣,端坐在資料中心。它的器首尾聲相連,就如同機器的海洋。這裡的軟體既像鑽石一樣能多面反射光芒,又像原始叢林一樣複雜難測。這裡的程式,各具特色,它們像湍急的河流穿過系統。這就是我樂於此處的原因。

微電腦程式設計師聽到這裡,陷入了沉默。但這兩位程式設計師至死都保持著友誼。

8.4

在去矽谷的路上,硬體碰上了軟體。軟體說:“你是陰,我是陽。如果我們攜手同路,我們將聞名於世,並能賺大筆的錢。”於是,這一對陰和陽便一同往前走,想著怎麼征服世界。

不一會兒,他們遇到了韌體(firmware,硬體和軟體結合在一起的部件,如IC卡--譯註),他衣衫襤褸,手裡拄著根帶刺的柺杖,蹣跚地走著。韌體對他們說:“道存在於陰、陽之外。它默默無聞,靜如止水。它不追求名譽,所以沒人知道它的存在;它不追求財富,因其自身完整圓滿。它存在於空間和時間之外。”

軟體和硬體,自覺慚愧,掉頭回家去了。


第九章 尾聲

程式設計大師如是說:

“現在該是你出師的時侯了。” 
 
 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958127/,如需轉載,請註明出處,否則將追究法律責任。

相關文章