軟件工程必看——10條你最容易忽視的經(jīng)典法則
本文列出了10條經(jīng)常被忽視的軟件工程法則,包括康威定律、布魯克斯定律、扎溫斯基定律、帕金森定律、帕累托法則、斯特金的啟示、彼得原理、Eagleson 定律、Greenspun 的第十條編程規(guī)則以及冰山謬論。
在進(jìn)行軟件開發(fā)和產(chǎn)品設(shè)計(jì)的時候,有一些經(jīng)典又有重要參考價值的法則常常被忽視,而忽視這些法則又會讓開發(fā)者走一些彎路。
因此,小編在這里放上10條最容易被忽視的10條軟件工程法則,大家可以作為參考:
1. 康威定律(Conway's Law)
任何設(shè)計(jì)系統(tǒng)的組織,其設(shè)計(jì)的結(jié)構(gòu)都是該組織溝通結(jié)構(gòu)的復(fù)制品。

你可能會認(rèn)為,通過不同層級的會議以及股東的更新和決策,這個狀況可以得到避免,但是實(shí)際是,沖突或分歧發(fā)生的優(yōu)先級,將導(dǎo)致同樣沖突和分歧的過程和結(jié)果,從而影響整個設(shè)計(jì)的結(jié)構(gòu)。
2. 布魯克定律(Brooks's Law)
“給一個遲來的軟件項(xiàng)目增加人力會使它更遲。”

當(dāng)你意識到你沒有取得預(yù)期的進(jìn)展,并且管理層試圖重新分配人力資源時,那么項(xiàng)目不僅會更加推遲,而且最后很可能會交付一個更加脆弱、更復(fù)雜的產(chǎn)品。
3. 扎溫斯基定律(Zawinski's Law)
“每個程序都試圖擴(kuò)展,直到它包含了一個web服務(wù)器。那些不能擴(kuò)展的項(xiàng)目會被能夠擴(kuò)展的項(xiàng)目所取代。”

4. 帕金森定律(Parkinson's Law)
工作完成的時間會影響工作的量"

在這里,主要的項(xiàng)目管理經(jīng)驗(yàn)是,如果你不為概念性的里程碑設(shè)定大概的最后期限,那么項(xiàng)目將永遠(yuǎn)不會完成。這也說明了在固定的時間線上迭代最小可行產(chǎn)品的重要性。
當(dāng)然,我們也可以根據(jù)數(shù)據(jù)、處理能力、RAM等等來調(diào)整這條法則:
在使用完所有可用的存儲空間/帶寬/周期/RAM之前,數(shù)據(jù)/CPU/內(nèi)存的使用會一直擴(kuò)展
實(shí)際上,32GB對任何人來說都足夠了,對吧?
5. 帕累托謬論(Pareto's Fallacy)
帕累托原則很容易被曲解,尤其是被管理層曲解。這通常會導(dǎo)致帕累托謬論:
“當(dāng)你完成了80%時,你會認(rèn)為你只剩下20%了。”
這里忽略的關(guān)鍵部分是,這20%,其實(shí)需要你投入80%的時間。

6. 斯特金啟示(Sturgeon's Revelation)
所有部分的90%都是無用的。

是的,你的產(chǎn)品也包含在內(nèi)。
7. 彼得原則(The Peter Principle)
在等級制度中,每個員工都傾向于升到他們不能勝任的級別。因此,隨著時間的推移,每個崗位都有可能被不稱職的員工占據(jù)。”

8. Eagleson定律(Eagleson's Law)
任何你自己的代碼,如果你有6個月或更長的時間沒有查看,就好像是別人寫的一樣。

實(shí)際上,6個月已經(jīng)相當(dāng)樂觀了。
不過,有一點(diǎn)需要注意,那就是“Yo mom推論”:
只有原作者才可以批評代碼;任何其他的負(fù)面反饋都會被駁回。
9. Greenspun編程的第10條規(guī)則(Greenspun's 10th Rule of Programming)
任何自定義開發(fā)的身份驗(yàn)證系統(tǒng)都包含一個特別的、非正式指定的、充滿錯誤的、緩慢的Kerberos實(shí)現(xiàn)。
這可以概括為普遍的NIH規(guī)則:“任何定制開發(fā)的系統(tǒng)都包含一個臨時的、非正式指定的、有bug的、緩慢的執(zhí)行,而這些執(zhí)行的對象有一半都是你拒絕使用的工業(yè)界標(biāo)準(zhǔn)。”
10. 冰山謬論(The Iceberg Fallacy)
新軟件產(chǎn)品的開發(fā)成本僅占所有權(quán)管理的總成本和預(yù)算的25%。
對于運(yùn)維來說,有一句格言是這么說的:
“如果軟件維護(hù)占總擁有成本的75%,那么運(yùn)營支持就是剩下的75%。