CODE COMPLETE 2 軟體開發實務指南 第2章 藉由隱喻進一步理解軟體開發

        第二章主題是隱喻,我認為翻譯成暗喻會比較好,要寫好程式類比想像能力也要很好。智者所見皆同《Clean Code》作者在第十一章同樣用建構城市比喻軟體開發的過程。


隱喻的重要性


作者舉出很多隱喻的實例,就像武俠小說的例子,蛇拳、鶴拳或猴拳不是創作者無中生有憑空想像,而是觀察動物的行動領悟到拳法。


隱喻的優點


能夠被所有人理解


對概念進行內在化和抽象化的一種途徑


在高層面思考問題,避免低層次的錯誤


 


隱喻如同科學沒有絕對的對錯,只有「不是很貼切的隱喻」到「更貼切的隱喻」


軟體開發是年輕的科學,沒有成熟到只有一種隱喻,必然存在互相補充或互相矛盾的隱喻。


如何使用軟體隱喻


隱喻是啟示(heuristic)而不是演算法(algorithm)。演算法有寫出解決問題的詳細步驟流程,啟示只有列出解決問題的大方向。


隱喻能夠提升程序的洞察力,幫助設計思考程式中的活動,想出更好的做事方法。善於使用軟體隱喻的人,對於程式的理解會更好,能夠更快寫出更好的程式。


常見的軟體隱喻


軟體中的書法:寫作程式碼


用寫作比喻寫程式,寫作想什麼就寫什麼自然可以完成一篇文章,不需要做什麼計畫。


文字寫作隱喻可暗示軟體開發是嘗試錯誤的過程(trial and error),而非仔細的規劃和設計。


作者認為寫作這個隱喻太過簡單太過呆板。


軟體中的耕作法:培植系統


用耕作比喻寫程式,用步步為營的方式進行軟體開發,一次只設計系統一小部分,寫出一段程式碼,做一點測試,將成果一點點加入系統。


作者認同增量技術(incremental technique),不認同耕作的隱喻。耕作是看天吃飯,暗示人們無法對軟體進行直接控制。


軟體的牡蠣養殖觀點:系統成長


dummy classes虛假類別是軟體的基本起點,如同牡蠣開始孕育珍珠的那顆小砂粒。骨架形成之後,在上面增加肌肉與皮膚。虛假類別換成真實類別,虛假輸入輸出換成真實輸入輸出。


需要如何一次為軟體系統增加一小部分,跟生長密切相關的詞彙有:incremental、iterative、adaptive、evollutionary 。以增量方式進行設計、編譯和測試,都是已知最強有力的軟體開發概念。


作者認為牡蠣孕育珍珠貼切比喻增量式開發的情形。


軟體建構:建造軟體


作者認為建造比寫作和培育,更能貼切隱喻軟體開發。


狗屋如同小型程式,如果寫壞可以立刻重來。大房子如同大型專案必須要有詳細的規劃設計。


常見軟體開發術語都是從建築隱喻衍生而來。軟體架構、支撐性測試程式碼、建構、基礎類別、分離程式碼。


應用軟體技術:智慧工具箱


不要只會一種工具,要學會多種工具,根據目前情況拿出適當的工具使用。


組合各個隱喻


隱喻之間沒有互相衝突,可以結合各種不同的隱喻完成工作。


使用隱喻是說不清楚的事情,要避免引申錯誤的隱喻。


要點


隱喻是啟示而不是演算法。因此它們往往帶有一點隨意(sloppy)。


隱喻把軟體開發程序與其他活動聯想在一起,可較容易理解軟體開發過程。


軟體建構過程如同房屋的建造過程。仔細準備是必要,大型專案與小型專案之間有差異。


實踐如同工具箱的工具,程式設計師有許多工具,並不存在萬能的工具,要因地制宜選擇適合的工具。


隱喻之間並不互相排斥,應該使用最有益處的隱喻。


 



留言

這個網誌中的熱門文章

異世界NTR web版第三章 觀後感 喧賓奪主 ,反派實力過強

泛而不精的我被逐出了勇者隊伍 web第三章 觀後感 菲莉真能打; 露娜超爽der

持有縮小技能的D級冒險者,與聖女結婚並加入勇者團隊 漫畫 01-04 觀後感 大我與小我