為什麼我們無法避免複雜?
是因為我們無意識崇拜覆雜嗎? 本文來自艾伯哈德沃爾夫:
軟體開發並不是真正的程式設計。任何人都可以寫一個十行程式。真正的挑戰是複雜的系統。如果一個系統如此之大,以至於單個人無法理解並進一步開發,那麼模組化等概念至關重要。模組化將系統劃分為小單元,這樣每個人都可以處理,然後複雜性成為主要挑戰,由於這種複雜性,單個人不能再實施一個專案,只能依靠實施團隊,這導致了組織方面的挑戰。
康威定律在組織和軟體開發方面非常重要。它指出系統架構代表實現系統的組織的通訊結構。對於軟體中的每個模組,都對應有一個組織單元;組織單元之間存在的溝通依賴,對應軟體中的模組之間存在同樣依賴關係。
然而,康威1968年的論文也描述了其他內容:如果一個組織想要開發一個大系統,由於大型團隊中的溝通很困難,因此會在團隊特定某個大規模下崩潰。由於溝通和架構相互影響,溝通不良會導致混亂的架構和額外的複雜性。
但康威更進一步:顯然,如果可能的話,你應該尋求一個小團隊可以實現的優雅解決方案。康威表示,經理的聲望取決於團隊的規模和他或她負責的預算。這就是為什麼經理會爭取儘可能大的團隊和大預算。
起初這似乎不是問題。如果專案是由一個太大的團隊完成的,那麼有些人就會坐在那裡什麼都不做。這需要花錢,但不會危及專案或架構。但康威說,帕金森定律將會罷工。帕金森定律解釋了為什麼一些政府僱用更多員工,但仍然沒有完成更多的工作。法律規定任務完全使用所有員工可用的時間。即使可以輕鬆快速地處理任務,也會有越來越多的人參與,直到組織中的每個人都忙碌為止。因此,在軟體專案中,無論是否有必要,所有團隊成員都將在專案上工作。因此,組織將成長,溝通將崩潰,架構將變得混亂。
Conway的洞察力現在已有50年曆史,它特別有趣,因為它可以解釋為什麼一個大型重要專案可能有一個糟糕的架構,即使它是一個非常重要的專案也難以進一步發展。
本文所描述的管理者在沒有意識到的情況下崇拜覆雜性。他們希望儘可能龐大的團隊,從而使問題變得複雜,因為大型組織可能導致架構崩潰。
軟體架構師怎麼樣?
不僅管理者而且軟體架構師有時會無意識地崇拜覆雜性。例如,當我們使用諸如事件源,具有許多層或微服務的架構之類的模式而沒有充分考慮特定上下文與複雜性的益處時,就會發生這種情況。
如果您想使用最新,最閃亮的技術,這也會導致過度複雜。畢竟,我們都在尋找技術挑戰,並希望實施有趣的專案。現代方法,特別是複雜系統非常適合於此。
我們有時也會解決不存在的技術問題。這可能會產生非常通用或可擴充套件的解決方案,這些解決方案不是實際要求所必需的,因此會產生太多複雜性。
複雜性作為藉口
一個特別明顯的複雜性崇拜案例是“這對我們不起作用”。我們面臨的挑戰遠遠超過亞馬遜或谷歌。“我聽說過不同公司的員工。這些陳述令人驚訝:像亞馬遜或谷歌這樣的公司擁有極其複雜的IT系統。他們的經濟成功直接取決於這些IT系統。尤其是因為這些IT系統,它們是世界上最有價值的公司之一。
乍一看,這些陳述可以被解釋為具有防禦性:亞馬遜和谷歌擁有現代化的組織和雲基礎設施,但在公司更加複雜的環境中,顯然不可能建立類似的東西。但也許這句話反映了驕傲。畢竟,你正在應對幾乎前所未有的挑戰。無論哪種方式,複雜性當然都有缺點,但也有一個優點,即您不必考慮某些方法,如雲,持續交付或微服務,因為它們無論如何都無法實現。
因此,我們是否真的總是在避免複雜性是值得懷疑的。如果我們無意識地崇拜覆雜性,那麼僅僅專注於使設計儘可能簡單和優雅的技術是沒有用的。因此,實現這些無意識機制很重要。當然,仍然存在許多實際難以解決的複雜問題。
banq注:無意識崇拜覆雜其實源自人之內心的自大。
相關文章
- 系統困境與軟體複雜度,為什麼我們的系統會如此複雜複雜度
- 為什麼我覺得 Java 的 IO 很複雜?Java
- 我們常說的演算法時間複雜度和空間複雜度到底是什麼?演算法時間複雜度
- 我們為什麼需要CDP?
- 為什麼我們需要 VuexVue
- 我們為什麼要用RedisRedis
- 我們為什麼而工作
- 為什麼我們要使用無伺服器架構伺服器架構
- 因果迷境:為什麼我們會問“為什麼”?
- 到底為什麼我們需要 Clickhouse?
- 我們為什麼需要雲原生?
- 我們為什麼需要async/await ?AI
- 《後來的我們》,為什麼我們會錯過彼此?
- GC是什麼?為什麼我們要去使用它GC
- 什麼是Web workers?為什麼我們需要他Web
- 我們為什麼要學豐田?
- 為什麼我們不使用GraphQL? - Wundergraph
- 我們為什麼要用英文寫文件?
- 我們為什麼需要 lock 檔案
- [譯] 為什麼我們需要 Web 3.0Web
- 為什麼我們要新增 super(props) ?
- 為什麼springcloud值得我們學習?SpringGCCloud
- 軟體的複雜性正在殺死我們
- 複雜業務下,我們為何選擇 Akka 作為非同步通訊框架?非同步框架
- 雙11規則為什麼越來越複雜?
- 為什麼我們需要訊息佇列?佇列
- 我們為什麼要使用CRM系統?
- 我們為什麼很難堅持下去
- 為什麼我們需要volatile關鍵字?
- 我們為什麼要技術寫作
- 我們到底為什麼要用 IoC 和 AOP
- GitHub:我們為什麼會棄用jQuery?GithubjQuery
- 我們為什麼需要API管理系統?API
- [譯]我們為什麼要寫 super(props)?
- 為什麼我們做分散式使用Redis?分散式Redis
- 為什麼我認為就算人工智慧可以全面替代人類我們也無需擔心人工智慧
- 我們為什麼要閱讀webpack原始碼Web原始碼
- 為什麼我們需要資料庫事務資料庫