關於程式碼即設計的隨想
我們先回顧一下軟體工程的兩個重要的模式,瀑布模式和敏捷模式。瀑布模式的慣用流程是由SE/DE分析設計並形成文件,然後把文件交給碼農編碼,最後碼農把最終的軟體交給測試人員進行測試(一般是黑盒測試)。這樣的機械分割的問題至少有兩個。首先,冷冰冰的文件言未盡意,再加上人的變化,導致資訊的丟失甚至誤解。其次,設計由於缺少驗證,而且需求的不斷變化,編碼時甚至測試時才發現設計必須要修改。編碼這種對設計的反作用直接的後果是設計文件往往跟程式碼風馬牛不相及。
於是各大門派的大牛們痛定思痛,放下門戶之見,集思苦修,終於練成敏捷,江湖為之一振,蝦米們競相轉投敏捷門下。敏捷一掃瀑布的文件化和流程化的僵硬死板,展現出擁抱變化的靈活快速。敏捷模糊了設計、開發和測試的界限。從敏捷背後的機制來看,程式碼即設計雖然“猶抱琵琶半遮面“,但好歹”千呼萬喚始出來“。
不同於傳統工業的設計和生產之間的關係,軟體設計和編碼之間的關係非常緊密。現在已經有越來越多的工具,雖然還不夠完美,但是可以實現UML圖和程式碼正向和逆向的轉換。從某種程度上看,設計文件和程式碼也許是等價的。從程式碼即設計的角度,設計和編碼是同一頭大象兩條不同的腿,而構造和測試則是另外兩條腿。也就是說,設計包含傳統的設計、編碼、構造和測試。傳統的設計在其中更多是頂層設計,程式碼則是完備的設計清單,構造和測試是為了驗證和優化設計。整個設計過程是一個螺旋上升的環,測試的結果會促使設計和程式碼的修改和優化。程式碼即設計,可以很好的解釋開頭提出的問題。編碼並不是工廠裡的製造環節,而是設計環節。設計中出現問題是很常見的情況,只要及時改正就不會出大簍子。
在剛接觸程式碼即設計的時候,經常出現一知半截就滿腔熱血開始踐行。很容易把程式碼絕對化。很瀟灑的拋開文件和設計,直接編碼,眼前是長髮飄飄的Richard Stallman坐在電腦旁不斷敲鍵盤的情景。走了各種彎路而疲憊煩躁時,回過頭來斷言,程式碼即設計不對。程式碼即設計不併是說不需要畫UML圖,而是說程式碼也是設計的一部分,好吧,是最重要的一部分。設計拼圖中還有另外三個部分。
程式碼限設計要求人員的融合,而人員的融合又促使組織結構的調整。就像程式碼架構的調整無異於涅槃一樣,組織結構的調整也是舉步維艱。除非嚴重的危機發生,調整很難執行。
相關文章
- 程式碼隨想錄:設計連結串列
- KMP演算法(基於程式碼隨想錄)的隨筆KMP演算法
- 程式設計隨想:基於歷史狀態的演算法程式設計演算法
- 程式碼隨想錄2
- 程式碼隨想錄leetcodeLeetCode
- Hadoop HDFS 設計隨想Hadoop
- 【程式碼隨想錄】二、連結串列:2、設計連結串列
- 程式碼可讀性隨想
- 程式碼即設計 | 掘金年度徵文
- 程式碼隨想錄:兩數之和
- 程式碼隨想錄- Day01
- 程式碼隨想錄-day3
- 程式碼隨想錄-day1
- 程式碼隨想錄-day2
- 【程式碼隨想錄】完全揹包
- 程式碼隨想錄移除元素二刷
- 【程式碼隨想錄】零錢兌換
- 關於程式設計的基本練習程式設計
- 關於Python的面相物件程式設計Python物件程式設計
- IT審計隨想
- 隨著低程式碼的發展,程式設計不再僅適用於開發人員。程式設計
- 程式碼隨想錄:移除連結串列元素
- 程式碼隨想錄演算法-回溯4演算法
- 程式碼隨想錄演算法 - 回溯3演算法
- 程式碼隨想錄day 53 || 圖論4圖論
- 20240505記錄《程式碼隨想錄》筆記筆記
- 技術掃盲:關於低程式碼程式設計的可持續性交付設計和分析程式設計
- 關於 Angular 程式設計中的 shim 概念Angular程式設計
- 眾所周知,配置即程式碼≠基礎設定即程式碼
- 人際關係的一點隨想
- 【程式碼隨想錄】廣度優先搜尋
- 關於 rxjs 程式設計中的 take(1) 操作JS程式設計
- 關於 Android 程式設計師最近的狀況Android程式設計師
- Python GUI程式設計:tkinter關於ttkbootstrapPythonGUI程式設計boot
- 程式碼隨想錄演算法 - 二叉樹演算法二叉樹
- 2021年程式人生的隨想總結
- 關於夢想
- 【Linux】關於Linux的系統程式設計總結Linux程式設計
- Terraform: 基礎設施即程式碼ORM