《代碼大全2》第一、二、三章 隱喻思維在西方是一個熱門的話題,隱喻的認知功能在各個學科正受到越來越多的重視,依照我的理解,其實就是以眾所周知或者理解主體熟悉的事物為符號去將新事物、新概念具象化,與打比方的認知方式有同工異曲之妙。在《代碼大全2》第二章,作者Steve McConnell主要列舉了4種 ...
《代碼大全2》第一、二、三章
隱喻思維在西方是一個熱門的話題,隱喻的認知功能在各個學科正受到越來越多的重視,依照我的理解,其實就是以眾所周知或者理解主體熟悉的事物為符號去將新事物、新概念具象化,與打比方的認知方式有同工異曲之妙。在《代碼大全2》第二章,作者Steve McConnell主要列舉了4種針對軟體工程的隱喻:書法(寫作代碼)、耕作(培養系統)、牡蠣養殖(系統生長)、建造新建築(建造軟體)。作者認為前兩者已無法、或者說從來都不能準確描述軟體工程,書法暗示軟體開發是一項代價昂貴的試錯過程,而耕作大大低估了開發者對軟體構建的自主控制。而後兩種隱喻得到作者較大的認可。
牡蠣養殖隱喻的本體是增量式開發,也就是在開發前期先生成一個儘量簡單、但能運行的版本,不必接受真實的輸入或對數據進行處理,重點在構造軟體的整體框架以支撐逐漸被完善,也就是“生長”的系統。根據個人經驗,這種開發方式對於較大的工程有很大裨益,可以讓開發者對整個軟體的結構有比較清晰的認識並降低修改的成本。最後一種隱喻——建構軟體本質上是適當的多層次規劃,它強調“因地適宜”,根據軟體工程的類型和用戶的需求等等做出多個層次、循序漸進的規劃。
我非常贊成這一章中智慧工具箱的提議。學習更多的語言和分析方法可以防止我們在遇到問題時不必要地浪費時間。
第三章用了一整個章節來闡述構建軟體的前期工作,如需求分析和架構設計等,的必要性和重要性。書中讓我很有共鳴的一個原則是令發現錯誤的時間儘量接近引入錯誤的時間,因為錯誤在開發過程中會引發鏈式效應,令後期修複的代價不斷積累。另一個讓我印象深刻的是作者對前期需求分析和後期應對需求變更的建議。開發者和客戶都會在與軟體日積月累的接觸中不斷地調整自己的認知和相應的需求, 所以前期不能讓預設的需求束縛住構建過程,有必要留有餘地,而在構建過程中,只接受最有價值的新需求。同時,使用能適應變更的開發方法,例如演進原型法和演進交付法能夠大幅提升對需求做出的響應的能力。