編程之道

 第一篇 靜寂的空宇

編程大師如是說:
“當你有本事奪走我手中的這塊水晶石時,就是你出師的時侯了。”
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卡--譯註),他衣衫襤褸,手裏拄着根帶刺的柺杖,蹣跚地走着。固件對他們說:“道存在於陰、陽之外。它默默無聞,靜如止水。它不追求名譽,所以沒人知道它的存在;它不追求財富,因其自身完整圓滿。它存在於空間和時間之外。”
 
軟件和硬件,自覺慚愧,掉頭回家去了。 
 
  
第九章 尾聲

編程大師如是說:
“現在該是你出師的時侯了。”

發佈了27 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章