轉(zhuǎn)載自科技愛好者周刊(第 331 期)
原文
有些領(lǐng)域的軟件會持續(xù)運(yùn)行幾十年,比如發(fā)電廠、起搏器、飛機(jī)、橋梁、重型機(jī)械的軟件。它們可能幾年都不會改動,然后推出一個新的大版本。
如果一個軟件的開發(fā)周期長達(dá)幾十年,需要長期維護(hù),那么最好做到下面幾點(diǎn)。
1. 盡量減少依賴。
軟件的依賴項(xiàng)越多,長期越難以維護(hù)。依賴包括開發(fā)時(shí)依賴和運(yùn)行時(shí)依賴,都是越少越好。
現(xiàn)在,很多軟件在運(yùn)行時(shí)會調(diào)用云服務(wù),這也不利于長期維護(hù)。
2. 完備的測試用例。
測試對于重構(gòu)、刪除/添加功能,會提供極大的幫助。當(dāng)你中斷3年后,重新開始開發(fā),測試也會讓你快速了解系統(tǒng)。
3. 減少復(fù)雜性。
復(fù)雜性是軟件開發(fā)的頭號敵人,會讓最好的程序員和團(tuán)隊(duì)都鎩羽而歸。
由于熵增定律和人類行為,除非你有意識地遏制,否則復(fù)雜性總是會增加。
因此,你需要養(yǎng)成嚴(yán)格的開發(fā)習(xí)慣:盡早和頻繁地重構(gòu),刪除不必要的或重復(fù)的代碼,花時(shí)間簡化。
4. 編寫簡單無趣的代碼。
代碼越簡單越好,重點(diǎn)是代碼的運(yùn)行邏輯要顯而易見。你永遠(yuǎn)不會后悔編寫了簡單的代碼。
那些看上去很聰明、很高深的代碼,會讓后期的調(diào)試和理解變得復(fù)雜。特別注意那些高性能代碼,只有當(dāng)你正確理解它們時(shí),它們才有效。
另外,那些眼下時(shí)髦、被熱炒的明星技術(shù),如果沒有得到充分驗(yàn)證,也需要規(guī)避。
你最好只使用至少有10年歷史的可靠技術(shù)。有一條規(guī)則是,某項(xiàng)技術(shù)的壽命與它們當(dāng)前的年齡成正比,即存在越久的東西越可能繼續(xù)存在。
5. 日志、遙測和文檔
如果軟件不是持續(xù)更新,開發(fā)者的注意力就會轉(zhuǎn)到其他地方,不會立即跟進(jìn),所以需要有日志和遙測,能把運(yùn)行過程記錄下來。
文檔則可以幫助我們理解幾年前、甚至十幾年前,編寫原始代碼時(shí)的想法??赡艿脑挘涗浰惺挛?,不僅僅是代碼,還有理念、想法和為什么。
6. 團(tuán)隊(duì)
團(tuán)隊(duì)人員變化是很常見的。在許多地方,在一個團(tuán)隊(duì)呆三年,就已經(jīng)很久了。雖然你可以用良好的文檔和出色的測試,來抵消這種人員變化,但這很困難。
軟件長壽的最簡單辦法之一,就是讓開發(fā)成員長期穩(wěn)定,保持工作十年。這意味著,你必須給你的程序員提供良好待遇,否則人們會離開。
在某些地方,軟件是外包公司或咨詢顧問寫的,他們將代碼丟到你的系統(tǒng)中后離開。對于長期運(yùn)行的軟件,這是非常糟糕的安排。
7. 開源
讓你的代碼暴露在外界的眼光,是保持代碼可靠的好方法。一個有趣的事實(shí)是,只有質(zhì)量良好的代碼,人們才愿意對外分享,也就是說,如果不開源,人們會愿意在組織內(nèi)部接受質(zhì)量更差的代碼。
開源代碼有更高的標(biāo)準(zhǔn)、更多的測試,這是讓代碼不過時(shí)的絕佳機(jī)制。