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