# 第 22 章 結論

這本書只針對一件事：複雜性。處理複雜性是軟體設計中最重要的挑戰。這也是為什麼系統難以構建和維護的原因，而且複雜的系統通常執行也很緩慢。在本書中，我試圖描述導致複雜性的根本原因，例如依賴性和模糊性。我已經討論了可以幫助您識別不必要的複雜性的危險訊號，例如資訊洩露、不必要的錯誤情況或名稱過於籠統。我提出了一些通用的想法，可以用來建立更簡單的軟體系統，例如，努力建立更深和更通用的類、透過定義來規避錯誤以及將介面文件與實現文件分離。最後，我討論了產生簡單設計所需的投資思維。

所有這些建議的缺點是它們會在專案的早期階段需要額外的工作量。此外，如果您不習慣於思考設計問題，那麼當您在學習良好的設計技巧時，您的速度還會更慢一些。如果對您而言唯一重要的事情讓您當前的程式碼儘快執行，那麼思考設計就好像是件苦差事，而這實際上妨礙了您實現真正的目標。

另一方面，如果良好的設計對您來說是重要的目標，那麼本書中的思想會讓程式設計變得更有趣。設計是一個令人著迷的謎題：如何用最簡單的結構解決特定問題？探索不同的方法很有趣，找到一種既簡單又強大的解決方案是一種很棒的感覺。整潔、簡單和易理解的設計是一件美事。

此外，您對良好設計的投資將很快獲得回報。在專案開始時仔細定義的模組，在您一遍又一遍地重複使用它們時，會節省您的時間。您六個月前編寫的清晰文件將為您節省修改程式碼以新增新功能的時間。花在磨練設計技能上的時間也將有所回報：隨著技能和經驗的增長，您會發現您可以越來越快地做出好的設計。一旦您掌握了方法，好的設計實際上並不會比草率的設計花費更多的時間。

成為一名優秀設計師的回報是，您可以將大部分時間花在設計階段，這很有趣。而糟糕的設計師花費大量時間在複雜而脆弱的程式碼中尋找缺陷。如果您提高了設計技能，不僅可以更快地生產出更高質量的軟體，而且軟體開發過程也將也會更加愉快。