義大利麵與程式碼

高翌翔發表於2012-09-04

各種色香味俱全的義大利麵如圖所示,尤其是左下角的“千層麵”好吃極了 :D...

義大利麵
四種美味的義大利麵

​言歸正傳,儘管義大利麵灰常好吃,但是“義大利麵式的程式碼”卻讓程式設計師吃盡了苦頭(程式設計師,你懂的)。正如種類繁多的義大利麵一樣,“義大利麵式的程式碼”更是玲琅滿目、五花八門!

既然人們喜歡拿義大利麵與程式碼作比較(又稱隱喻),想必二者多少有些相似之處。

那就先從美味的義大利麵說起吧,如圖所示,色香味俱全的義大利是最終狀態,是廚師精心烹調的結果。而在烹調之前,它們只是麵粉、肉末、番茄醬、食鹽等等一系列主輔料,是廚師根據顧客的要求把它們按比例混合、加工成為各種口味的義大利麵。

既然義大利麵做好了,那麼“義大利麵式的程式碼”又是如何加工出來的呢?作為程式設計師,俺非常清楚這個加工過程:首先,客戶將功能需求以口頭或書面形式告知客戶經理;接著,經客戶經理對需求進行簡單分析(分解為輸入和輸出),並將分析結果告知程式設計師;然後,程式設計師根據分析結果進行“填空”,即實現從輸入轉換到輸出之間的空白;最後,層層提交給客戶驗收功能。若幸運的話(驗收通過),“義大利麵式的程式碼”就算大功告成了。若更幸運的話(需求變更),程式設計師很快就能品嚐到親手製作的“美味佳餚”了!

為什麼義大利麵如此誘人,而“義大利麵式的程式碼”卻慘不忍睹?!——請程式設計師仔細回憶“填空”的過程,我們把程式語言作為被加工的原料,嘗試用語言提供的各種基本元素及結構來“烹調”,儘管我們最終實現了使用者需求,而得到的卻是一坨“義大利麵式的程式碼”。其中的問題在於,我們用“元素”合成了“義大利麵”。而更恰當的做法則是,先用“元素”合成“原料”,然後將“原料”混合、加工成為“義大利麵”。這樣,只需適當調整原料的配比及加工工藝即可烹調出多種口味的“義大利麵”。簡單地說,“元素”即程式語言,“義大利麵”即客戶需求,而缺失的“原料”不僅包括領域知識,而且還有對程式的設計時及執行時概念模型的設計和認知!

美味的義大利麵本該盛在餐盤裡供人品嚐,而不應出現在程式碼中!

相關文章