為什麼軟體最終會變得複雜 - Alex Gaynor
通常將軟體的複雜性(無論是程式語言,API還是使用者介面)視為壞事情。然而,實際上沒有人會在一開始就構建複雜的東西,那麼複雜性為什麼會異常普遍存在呢?這對於希望構建易於使用的軟體感興趣的人,瞭解導致複雜性Complex的原因至關重要。幸運的是,我相信這裡有一個簡單的解釋。
任何功能需求的最自然的實現都是累加的,一般先試圖將設計中的所有其他元素保留在原位,然後新增一個新元件:UI中的新按鈕或函式的新引數。隨著此過程的不斷重複,系統的簡單性就會喪失,而複雜性會取代它。在企業軟體中,這種模式通常尤其明顯,因為很明顯,每個新功能都是為一個特別大的客戶編寫的,這給所有其他客戶增加了複雜性。
每個功能需求都有一個選區–一些希望實施的組,因為他們從中受益。簡單性卻並非以這種相同的方式來支援,這就是經濟學家所謂的非排他性商品,不是每個人都從中受益。這意味著支持者總是可以為他們的特定用例指出具體的好處,而反對者則聲稱更為抽象的缺點。結果是,對任何給定特徵附加條件的反對者往往數量較少,更容易被忽略。導致不斷增加功能,並簡化了功能。
擺脫這種明顯的不斷新增功能的迴圈並不容易。我們可以輕鬆地說“拒絕所有功能需求”即可,但是這樣做的專案最終將發現自己根本無法滿足使用者的需求!我們的方法必須更嚴格地衡量:我們需要花大量的時間來考慮一項新功能將如何給我們的所有使用者帶來負擔,但是現實中我們卻需要花費大量的時間來思考一項新功能將如何使我們的某些使用者受益。
我們還應該花時間思考如何設計新功能,以維持Fred Brooks所謂的系統“概念完整性”的方式(banq注:領域概念的邏輯完整性),而不是僅僅新增一些新內容。
banq注:經常看到一句話:除非你的系統異常複雜,否則不要用XXX(XXX代表DDD或微服務等),這種觀點是靜止觀點,複雜性是隨著時間增加不斷累積的,功能需求不斷增加,那麼複雜性就不斷增加,提前預見到這種複雜性Complex,使用complcated複雜思維去解決,否則技術債務累積,每前進一步非常累,最後專案失敗。
相關文章
- 系統困境與軟體複雜度,為什麼我們的系統會如此複雜複雜度
- 為什麼Web前端變的越來越複雜,變得更加難學了Web前端
- 為什麼我覺得 Java 的 IO 很複雜?Java
- 為什麼軟體會被稱為“軟體”
- 為什麼我們的web前端變的越來越複雜Web前端
- 為什麼軟體測試需要變革?
- 為什麼拙劣的軟體也會成功?
- 軟體工程--為什麼軟體開發方法論讓你覺得糟糕軟體工程
- 為什麼遊戲主機的向下相容會變得如此艱難?遊戲
- 為什麼軟體開發方法論讓你覺得糟糕
- 沒有 Linux 和開源軟體的世界會變得怎麼樣Linux
- 終端複用軟體 tmuxUX
- 為什麼Laravel會成為最成功的PHP框架LaravelPHP框架
- 為什麼 Laravel 會成為最成功的 PHP 框架?LaravelPHP框架
- 淺析--為什麼軟體開發方法論讓你覺得糟糕?
- 如何降低軟體的複雜性?
- 軟體設計的複雜度複雜度
- 為什麼程式設計師反而是最痛恨軟體的人?程式設計師
- 軟體開發到底是業務複雜還是UI複雜UI
- 軟體工程個人最終總結軟體工程
- 為什麼人工智慧不會讓軟體測試消失人工智慧
- 為什麼開源?curl作者:讓世界變得更美好
- 又愛又恨感情複雜,育碧遊戲為什麼迷失了?遊戲
- 為什麼 ReactJS 不適合複雜的前端專案?ReactJS前端
- 為什麼社交網路中資料翻頁技術複雜
- 複雜性正在殺死軟體開發者
- 越做越複雜的軟體工程專案軟體工程
- [譯]為什麼在使用了類之後會使得組合變得愈發困難(軟體編寫)(第九部分)
- 為什麼有人會覺得IT門檻低,工資高?
- 為什麼軟體開發,人多,事少,還會工作量大?
- 為什麼我喜歡資料庫?沒那麼複雜和嚇人資料庫
- 為什麼軟體測試外包更好?
- 為什麼糟糕的軟體成功了
- 阿里研究員:警惕軟體複雜度困局阿里複雜度
- 軟體複雜性正在殺死我們
- 軟體的複雜性:命名的藝術
- [樂譯 第11期] 為什麼軟體開發方法論讓你覺得糟糕?
- 害怕軟體的複雜嗎?其實複雜性是必須存在的 - ferd