CODE COMPLETE 2 軟體開發實務指南 第2章 藉由隱喻進一步理解軟體開發
第二章主題是隱喻,我認為翻譯成暗喻會比較好,要寫好程式類比想像能力也要很好。智者所見皆同《Clean Code》作者在第十一章同樣用建構城市比喻軟體開發的過程。
隱喻的重要性
作者舉出很多隱喻的實例,就像武俠小說的例子,蛇拳、鶴拳或猴拳不是創作者無中生有憑空想像,而是觀察動物的行動領悟到拳法。
隱喻的優點
能夠被所有人理解
對概念進行內在化和抽象化的一種途徑
在高層面思考問題,避免低層次的錯誤
隱喻如同科學沒有絕對的對錯,只有「不是很貼切的隱喻」到「更貼切的隱喻」
軟體開發是年輕的科學,沒有成熟到只有一種隱喻,必然存在互相補充或互相矛盾的隱喻。
如何使用軟體隱喻
隱喻是啟示(heuristic)而不是演算法(algorithm)。演算法有寫出解決問題的詳細步驟流程,啟示只有列出解決問題的大方向。
隱喻能夠提升程序的洞察力,幫助設計思考程式中的活動,想出更好的做事方法。善於使用軟體隱喻的人,對於程式的理解會更好,能夠更快寫出更好的程式。
常見的軟體隱喻
軟體中的書法:寫作程式碼
用寫作比喻寫程式,寫作想什麼就寫什麼自然可以完成一篇文章,不需要做什麼計畫。
文字寫作隱喻可暗示軟體開發是嘗試錯誤的過程(trial and error),而非仔細的規劃和設計。
作者認為寫作這個隱喻太過簡單太過呆板。
軟體中的耕作法:培植系統
用耕作比喻寫程式,用步步為營的方式進行軟體開發,一次只設計系統一小部分,寫出一段程式碼,做一點測試,將成果一點點加入系統。
作者認同增量技術(incremental technique),不認同耕作的隱喻。耕作是看天吃飯,暗示人們無法對軟體進行直接控制。
軟體的牡蠣養殖觀點:系統成長
dummy classes虛假類別是軟體的基本起點,如同牡蠣開始孕育珍珠的那顆小砂粒。骨架形成之後,在上面增加肌肉與皮膚。虛假類別換成真實類別,虛假輸入輸出換成真實輸入輸出。
需要如何一次為軟體系統增加一小部分,跟生長密切相關的詞彙有:incremental、iterative、adaptive、evollutionary 。以增量方式進行設計、編譯和測試,都是已知最強有力的軟體開發概念。
作者認為牡蠣孕育珍珠貼切比喻增量式開發的情形。
軟體建構:建造軟體
作者認為建造比寫作和培育,更能貼切隱喻軟體開發。
狗屋如同小型程式,如果寫壞可以立刻重來。大房子如同大型專案必須要有詳細的規劃設計。
常見軟體開發術語都是從建築隱喻衍生而來。軟體架構、支撐性測試程式碼、建構、基礎類別、分離程式碼。
應用軟體技術:智慧工具箱
不要只會一種工具,要學會多種工具,根據目前情況拿出適當的工具使用。
組合各個隱喻
隱喻之間沒有互相衝突,可以結合各種不同的隱喻完成工作。
使用隱喻是說不清楚的事情,要避免引申錯誤的隱喻。
要點
隱喻是啟示而不是演算法。因此它們往往帶有一點隨意(sloppy)。
隱喻把軟體開發程序與其他活動聯想在一起,可較容易理解軟體開發過程。
軟體建構過程如同房屋的建造過程。仔細準備是必要,大型專案與小型專案之間有差異。
實踐如同工具箱的工具,程式設計師有許多工具,並不存在萬能的工具,要因地制宜選擇適合的工具。
隱喻之間並不互相排斥,應該使用最有益處的隱喻。
留言
張貼留言