跳到主要內容

再讀「人月神話」(2)--關於架構

梭羅:「問題不在於你看著什麼,而是你看出了什麼」

重讀人月神話,方知這幾年,仍只是如來佛手中的小猴崽子......
我們來探討人月神話在架構及設計上的看法:
首先是整體概念性
軟體工程並不用像蓋教堂一樣要花好幾世紀的時間。但是,因概念的不統一而造成問題的情況,卻遠比蓋教堂還糟。這肇因於我們往往不採用主設計師的一系列想法,而是把設計這件工作切割成好幾個部分,然後分配給一群人去做。
我主張在系統設計時,保有概念整體性(conceptual integrity)是最重要的原則。寧可忽略掉某些新奇或更好的特色,來反映同一組設計理念,也不要蒐羅了一大堆很棒,但彼此無關或合不來的構想。

要做到概念性整體這點,我們發現,勢必須要有一位總工程師或是架構師的角色,且必須有深厚的經驗及技術,方能達成這項要求。

避免發生錯誤的設計方式

做好定義以防止誤解
最致命也最棘手的錯誤莫過於系統錯誤。這肇因於各個組件的開發人員做出了彼此不協調的假設,之前討論的概念整體性,就是針對這個問題所提出來的解決方案,簡而言之,具備了概念整體性,不但使軟體易於使用、易於開發,也比較不容易發生錯誤。

這做法意味得在架構上付出勤勉、辛苦的代價。貝爾電話實驗室的V.A.Vyssotsky說:「把產品定義清楚是非常關鍵的工作,有太多大多的失敗都源自於自始至終都搞不清楚要做的是什麼東西。」
詳細的功能定義、詳細的規格說明、規範良好的防錯設施與錯誤處理技術,都有助於減少發生系統錯誤的可能性。

規格審查
早在進入程式編寫階段之前,規格文件就應該先由其他獨立的測試小組進行審查,以確保規格的完整和明確,開發人員本身則不適合做這樣的工作。

由上而下的設計方式
Niklaus Wirth在1971年提出了一篇非常亮麗的論文。將整個系統開發工作劃分出架構、實作和實現,便是基於這種觀念的具體做法;更進一步來說,不論是架構、實作和實現,都可以透過由上而下的方式做出最佳的成果。

Wirth 提出來的是一個持續細分精製的步驟(refinement steps)。一開始,先勾勒出粗略的工作定義和執行方案以得到主要的結果。然後對此定義做更深入的探討,看看結果跟我們真正要的東西有何不同,並把方案 中幾個大的步驟細分成更小的步驟,於是,在工作定義中的每個細分精製過程都演變成解決方案演算法的細分精製,同時也可能伴隨著某個資料結構的細分精製。

透過上述的過程,就可以界定出解決方案的模組(module)。或是其他能夠獨立進行更進一步細分精製的資料,而模組化的程度便決定了軟體適應變動或修改的能力。
Wirth提倡每個步驟都應該盡可能運用高階(high-level)的表示方式,只彰顯出概念,而細節則隱藏起來,留待需要更進一步細分精製的時候再處理。

一 個良好的由上而下設計方式(top-down design)可以避免掉許多錯誤,這可從幾方面來說明。
首先,由於結構與表示方式變得很清楚,所以更容易描述出精確的需求和模組功能;
其次,藉由分割並 明確定義出獨立模組的過程。可以避免系統錯誤;
第三,隱藏細節將使結構中的缺陷更容易被突顯出來;
第四,每一次細分精製的步驟,都可以對該步驟的設計成果進行測試,這使得測試工作可以提早進行,並把測試的焦點集中在屬於該步驟中較為適當的細節層次。

這種逐步細分精製的過程並非只進不退,如果在某個細節上遭遇到意想不到的混亂,就有可能再回到較高的層次重頭再來,事實上這種情形很常發生。但你會比較容易精確判斷出何時、或為什麼該壯士斷腕重 新設計。

有許多爛系統就是因為當初捨不得放棄,結果一直架在不良的設計基礎上做些治標不治本、疊床架屋的違章建築,由上而下的設計方式可以減少這種做法的誘惑。

Brooks認為由上而下的設計方式是這十年間最重要的一個新的軟體開發形式。

在決定怎麼做之前,重要的是知道要做什麼。
而且要每個人都清楚知道作的是什麼,所以要有清楚的定義。
可是團隊中還是會有搞不清楚或是只想依自己方法幹的人,因此有一段時間我們需要規格審查,不斷地review,以確定大夥兒都清楚知道。

另外,架構師要清楚的了解:
架構旨在說明做什麼,而實作是說明如何做。

架構師與實作人員的互動:
*記住實作人員有發揮創意完成實作的責任,所以架構設計師只能建議,不能命令。
*在建議時,永遠只提出一個能夠符合規格的實作方式,同時也接受其他能夠達到目標的方案。
*默默地,私底下提出建議。
*準備為提出的建議付出喪失信任的代價。

所以要做好架構,必定要有清楚的文件指導。
這我們下次再來談。

留言

這個網誌中的熱門文章

小褶 Life(3) 古亭景美線段

經過上周的總統大選後,想說可以好好地規劃路線,這週末再來享受我的Bike Life,沒想到天氣預報一直恐嚇著我:「週末會下雨,週末會下雨,週末會下雨......。」 哇靠,早上起來,天色是有些陰暗,查了yahoo天氣,竟然下雨機率僅20%,趕緊重新考慮騎車的路線。 這次的目標是新店溪。 想說從哪邊切入比較好,唔,從師大路那邊進古亭河濱公園看來是不錯的選擇,要是下午真的下雨,就在師大路那邊晃一下午也比較安全。 查了google map,怪怪的,不知哪邊是公園的入口處。 不管了,到那附近再說,總有路口的。 結果是......迷路了。 -___-||| 到師大路跟兒童交通博物館那邊,就是看不到古亭河濱公園的入口。 沒辦法,走確定知道的路,以前新店上班時,總是從思源街接到景美堤外便道,果然,從那邊進去就對了。 (後來從古亭河濱公園也騎到中正河濱公園,才發現,那邊只有很小一條汽車進來的道路,真的很難找。 建議從思源街沿自來水廠那邊進來比較方便。) 就目前騎的3個線段而言,沿景美溪新店溪的河濱是最好騎的了,路又寬廣又平直,要飆車也容易。 看看地圖,只到舊橋就沒了,不知什麼時候才會完工咧...... 這樣,之後還可以直接騎到動物園咧!! 這個線段有較多的網球場地,靠古亭河濱公園那邊還有羽球場地,騎車的族群跟前兩次的線段比較起來,嗯,在地居民比較多(關渡到淡水則是遊客特多),應該是方便的緣故吧,騎Dahoon折疊車的人也比較多,莫非這附近有Dahoon專賣店?! 終點出來就到景美夜市一帶。 不錯的塗鴉作品。北市很多自行車道旁的圍牆,是開放給民眾塗鴉的。 (旁邊有 borther的簽名,莫非這是傳說中塗鴉客brother先生的作品?! 但......割腕的少女 ...... 繪在自行車道的旁邊,想表達什麼咧!?) 在終點處有很大的Taipei Cycling Mark。 雖然一開始有些小迷路,但也剛好繞到了兒童交通博物館......的外面,跟小丸子的看板合照。 門票太貴了,也聽有人說其實有些不值得,所以也不打算買票進去。 >___

能力並非來自於神來之筆

建立深度關係的關鍵是投入,經由時間與精力的累計,你與這一事物的關係日益深厚,你逐漸掌握了它,與它相遇,而能力,是你的存在與它的存在相遇的副產品。 事實上,能力差的人,常是太期待神來之筆的人。 具體來說就是,他們覺得,一旦某個事物被自己掌握,那首先是因為我掌握了自己;如果它沒有被掌握,那是因為我沒有掌握好自己。即,我狀態好,就可以讓周圍世界如我所願;我狀態不好,周圍世界就不能如我所願——倒推後其實是這句:當外界不如自己所願時,他們會在自己身上找原因,因他們認定,自己是能輕鬆掌控世界的,而狀態不好,就是能找到的最直接原因。 因這一邏輯,他們花很大力氣去調整狀態,還會花很多時間去等待自己狀態好,而不懂得,關鍵是持續投入,瑣細努力即可累積出成功。 能力是建立深度關係的副產品,而建立關係時,比努力更為關鍵的一點是,你不是自戀地將自己意願強加在這一事物之上的,而是臣服於這一事物。不是你個人太牛逼,所以掌握了這一事物,而是你臣服,放下自戀,放下預期和判斷,放空自己,然後你就可以與這一事物的存在相遇了。 能持續努力的人,是有了相對成熟的心理:我未必能立即掌握一個事物,但只要我持續努力,並且尊重這一事物自身的規律,我會與這一事物建立起很好的關係。 一旦有“我這個人失敗了”的感覺,一個人就會體驗到,伴隨著自我崩塌感的,是無力感,即你感覺暫時發不出力量了。其實,只是你暫時控制不了外部事物而已。 成功者會相對擁有更多神來之筆,但絕非“一直擁有”,且“神來之筆”之所以會有,是大量投入而與事物建立了關係的結果。 總結一下,要破除對“神來之筆”過於期待而不受挫的心理,需要懂得這樣幾點: 一、能力是建立了深度關係的結果; 二、建立深度關係需要持續的投入; 三、建立深度關係的關鍵,不是將你的自戀強加於事物之上,而是放下自戀想像,尊重事物本身的真實規律; 四、一件外部事物能否被我控制,取決於那一刻我的內部狀態,這是嬰兒式全能自戀心理的殘留; 五、一受挫,就覺得“我整個人不好”,也源自全能自戀心理——我和整個世界是一體的,所以我能控制一切,否則就意味著一切都是我控制不了的; 六、關鍵不是要神來之筆這種好的感覺,而是如何處理挫敗感。 -- 《巨嬰國》

GLOOMY BEAR 暴力熊

Gloomy Bear身世背景: Gloomy是一隻在路邊被遺棄的粉紅色小熊 , 被小朋友Pity發現,並將牠帶回家中收養, 並為小熊取名為Gloomy。 可惜.....Gloomy外表可愛,但因為被拋棄的緣故~卻有著一般熊的暴力性格, 長大長出爪子後就時常向主人用暴力招數打招呼, 而Pity就慘被Gloomy日日夜夜地欺負!悲慘ㄉ人生就這樣子開始囉!! 暴力熊喜好~咬主人頭, 而牠的主人,復原能力極高...打不死喔~厲害厲害! 暴力熊顏色:粉紅色,金色,銀色,紅色,藍色,黃色,還有罕見的綠色與混色。 粉紅色暴力熊性別:女 頭大身細,眼珠黑色,爪白色兼尖利,具有殺傷力,她多數用口爪殺人,殺完人後喜歡在街上徘徊。 小主人每次都被暴力熊揍得半死兼頭破血流, 但仍然不離不棄地緊緊抱住這隻血腥的寵物; Pity就算受到傷害亦要讓開心的回憶遮掩,然後繼續微笑期待小熊再次跟他一起溫習/做功課/看書;相信等待他的會是小熊的溫柔而非暴力傷害; 暴力熊和他小主人之間微妙的情感讓人感動又心酸; 這次轉輪科技所推出的暴力熊,內容包含小男孩Pity與粉紅熊Gloomy兩支一組。造形上善用Gloomy胖胖的軀體,將轉輪關節隱藏其中,全身有14處可動。可替換配件包含小男孩被打的表情,還有防止熊熊咬人的口罩以及牠嘴角流下來的血,原型制作為山口勝久。