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