為什麼軟體最終會變得複雜 - Alex Gaynor
通常將軟體的複雜性(無論是程式語言,API還是使用者介面)視為壞事情。然而,實際上沒有人會在一開始就構建複雜的東西,那麼複雜性為什麼會異常普遍存在呢?這對於希望構建易於使用的軟體感興趣的人,瞭解導致複雜性Complex的原因至關重要。幸運的是,我相信這裡有一個簡單的解釋。
任何功能需求的最自然的實現都是累加的,一般先試圖將設計中的所有其他元素保留在原位,然後新增一個新元件:UI中的新按鈕或函式的新引數。隨著此過程的不斷重複,系統的簡單性就會喪失,而複雜性會取代它。在企業軟體中,這種模式通常尤其明顯,因為很明顯,每個新功能都是為一個特別大的客戶編寫的,這給所有其他客戶增加了複雜性。
每個功能需求都有一個選區–一些希望實施的組,因為他們從中受益。簡單性卻並非以這種相同的方式來支援,這就是經濟學家所謂的非排他性商品,不是每個人都從中受益。這意味著支持者總是可以為他們的特定用例指出具體的好處,而反對者則聲稱更為抽象的缺點。結果是,對任何給定特徵附加條件的反對者往往數量較少,更容易被忽略。導致不斷增加功能,並簡化了功能。
擺脫這種明顯的不斷新增功能的迴圈並不容易。我們可以輕鬆地說“拒絕所有功能需求”即可,但是這樣做的專案最終將發現自己根本無法滿足使用者的需求!我們的方法必須更嚴格地衡量:我們需要花大量的時間來考慮一項新功能將如何給我們的所有使用者帶來負擔,但是現實中我們卻需要花費大量的時間來思考一項新功能將如何使我們的某些使用者受益。
我們還應該花時間思考如何設計新功能,以維持Fred Brooks所謂的系統“概念完整性”的方式(banq注:領域概念的邏輯完整性),而不是僅僅新增一些新內容。
banq注:經常看到一句話:除非你的系統異常複雜,否則不要用XXX(XXX代表DDD或微服務等),這種觀點是靜止觀點,複雜性是隨著時間增加不斷累積的,功能需求不斷增加,那麼複雜性就不斷增加,提前預見到這種複雜性Complex,使用complcated複雜思維去解決,否則技術債務累積,每前進一步非常累,最後專案失敗。
相關文章
- 當數字化遇到轉型為什麼會變得如此複雜
- 系統困境與軟體複雜度,為什麼我們的系統會如此複雜複雜度
- 為什麼Web前端變的越來越複雜,變得更加難學了Web前端
- 為什麼我覺得 Java 的 IO 很複雜?Java
- 為什麼我們無法避免複雜?
- 軟體工程--為什麼軟體開發方法論讓你覺得糟糕軟體工程
- 為什麼軟體開發方法論讓你覺得糟糕
- 雙11規則為什麼越來越複雜?
- 終端複用軟體 tmuxUX
- 人是什麼?人生是什麼?人為什麼會變?
- 如何降低軟體的複雜性?
- 淺析--為什麼軟體開發方法論讓你覺得糟糕?
- 為什麼Laravel會成為最成功的PHP框架LaravelPHP框架
- 什麼是 幾何複雜性
- 為什麼開源?curl作者:讓世界變得更美好
- 阿里研究員:警惕軟體複雜度困局阿里複雜度
- 如何使用 XYZ 軟體建立複雜圖形
- 為什麼有人會覺得IT門檻低,工資高?
- 又愛又恨感情複雜,育碧遊戲為什麼迷失了?遊戲
- 害怕軟體的複雜嗎?其實複雜性是必須存在的 - ferd
- 形式化方法應該為複雜軟體工程保駕護航軟體工程
- 什麼才是真正的空間複雜度?複雜度
- 為什麼軟體測試外包更好?
- 《最終幻想14》為什麼總是能迎來“第N春”
- 說說你做過讓你覺得最滿意的專案是什麼?為什麼?
- 軟體的複雜性正在殺死我們
- 複雜性正在殺死軟體開發者
- 讀 why Software Development Methodologies Suck?為什麼軟體開發方法論讓你覺得糟糕?dev
- 測試最終的歸宿是什麼?
- 為什麼有些遊戲上了NS之後,就變得更“好玩”了?遊戲
- 到底什麼才是真正的空間複雜度?複雜度
- 【簡單演算法】什麼是複雜度?演算法複雜度
- 阿里研究員谷樸:警惕軟體複雜度困局阿里複雜度
- 關於管理軟體複雜性的最佳書籍?
- 你知道Laravel為什麼會成為最優雅的PHP框架嗎?LaravelPHP框架
- Kubernetes為何如此複雜?
- CRM為什麼慢慢成為企業必備軟體?
- 為什麼很多大學生都會覺得程式設計很難?程式設計