為什么現代軟件如此復雜
1.代碼維護
有一個古老的幽默文章已經在線傳播了多年,標題為“如果架構師必須像程序員一樣工作”。它寫得好像是一個想要架構師建造房子的故事。這是一個摘錄:
“請設計并建造一所房子。我不確定我需要什么,你應該自行決定。我的房子應該在兩間和四十五間臥室之間。只需確保臥室計劃是可以輕松添加或刪除。當你把藍圖帶來時,我會做出我想要的最終決定。我還帶來了每個配置的成本,所以我可以任意選擇一個。“
這是幽默的,因為它聽起來像程序員所獲得的軟件要求的方式。由于軟件可以在創建之后進行修改,所以雇主假定它很容易做到這一點,而且它們不需要具體對他們想要的東西特定。
通過創建越來越多的抽象,軟件開發領域的人們在多年來一直努力容納這一點,以便更容易更改,組合,升級或交換軟件。
雇主想要這一點,因為它使他們能夠在經濟實惠的時間表上獲取軟件,而無需強迫雇主編寫他們可能在預先知道的詳細規范。
程序員希望這是因為他們想要仍然雇用。
2.代碼可重用性
在不增加計劃的情況下提高代碼質量的好方法是編寫更少的定制代碼,而是在項目之前使用更多已編寫和測試的代碼。我們調用這些庫,框架,模板或代碼生成器。
您可能已經使用了樂高玩具,您可以使用簡單可重復使用的磚塊或其他特種碎片來構建精心制作的模型。您可以使用足夠的磚塊構建任何東西。還有一些專業的形狀,以及大量的指南,向您展示如何將它們組合以構建所需的模型。
它是代碼重用性的類似概念。軟件開發隨后成為學習所有不同碎片的活動和使用它們的方法。
代碼是因為抽象而重復使用。就像使用標準尺寸和連接按鈕的樂高碎片,這樣它們就可以固定在其他件上。
3.功能,功能,功能
我曾經為一位非常挑戰的經理制定了一個應用程序。每次我問他,“你想要這個應用程序這樣做或那種方式嗎?”我經常詢問兩個互斥的替代品。例如,您是否希望報告以行或列中的數據排列數據類別?
他總是回答“兩者”。他不知道如何選擇,他害怕做出錯誤的選擇。所以他讓我能夠實現兩個替代方案,并使軟件可配置。他想保留自己的選擇,以便盡可能多地改變主意。
這至少加倍努力實現代碼,并將測試所需的測試加倍,以確保其工作。
但是,每當他說的時候,這一切都更糟糕了,這一倍的測試用例的數量翻了一番,因為我不得不確保一個新的功能與過去特征的每個替代品的組合合作。
當雇主想要一些功能時,程序員不能說“不”。他們可以說,“好的,但這就是它的時間和金錢的成本,你還想要嗎?”