霸榜GitHub!程序員必懂的15大定律和7大原則
從小到大,我們學(xué)過(guò)很多定律,見(jiàn)過(guò)許多法則。近日,猿妹在GitHub上找到一個(gè)專(zhuān)屬程序員的定律&法則合集項(xiàng)目。
自從我知道這個(gè)項(xiàng)目后,已經(jīng)連續(xù)一周霸榜GitHub Trending前三,如今已經(jīng)在GitHub上獲得4337 個(gè)Star,231 個(gè)Fork(GitHub地址:https://github.com/dwmkerr/hacker-laws)
這個(gè)倉(cāng)庫(kù)包含對(duì)一些定律、原則以及模式的解釋?zhuān)灿?5大定律和7大原則,但不提倡其中任何一個(gè)。 它們的應(yīng)用始終存在著爭(zhēng)論,并且很大程度上取決于你正在做什么。
阿姆達(dá)爾定律 (Amdahl's Law)
阿姆達(dá)爾定律是一個(gè)顯示計(jì)算任務(wù)潛在加速能力的公式。這種能力可以通過(guò)增加系統(tǒng)資源來(lái)實(shí)現(xiàn),通常用于并行計(jì)算中。它可以預(yù)測(cè)增加處理器數(shù)量的實(shí)際好處,然而增加處理器數(shù)量會(huì)受到程序并行性的限制。
舉例說(shuō)明:如果程序由兩部分組成,部分 A 必須由單個(gè)處理器執(zhí)行,部分 B 可以并行運(yùn)行。那么向執(zhí)行程序的系統(tǒng)添加多個(gè)處理器只能獲得有限的好處。它可以極大地提升部分 B 的運(yùn)行速度,但部分 A 的運(yùn)行速度將保持不變。
下圖展示了運(yùn)行速度的潛能:
可以看出,50% 并行化的程序僅僅受益于 10 個(gè)處理單元,而 95% 并行化的程序可以通過(guò)超過(guò)一千個(gè)處理單元顯著提升速度。
隨著摩爾定律減慢,單個(gè)處理器的速度增加緩慢,并行化是提高性能的關(guān)鍵。圖形編程是一個(gè)極好的例子,現(xiàn)代著色器可以并行渲染單個(gè)像素或片段。這也是為什么現(xiàn)代顯卡通常具有數(shù)千個(gè)處理核心(GPU 或著色器單元)的原因。
布魯克斯法則 (Brooks's Law)
軟件開(kāi)發(fā)后期,添加人力只會(huì)使項(xiàng)目開(kāi)發(fā)得更慢。
這個(gè)定律表明,在許多情況下,試圖通過(guò)增加人力來(lái)加速延期項(xiàng)目的交付,將會(huì)使項(xiàng)目交付得更晚。布魯克斯也明白,這是一種過(guò)度簡(jiǎn)化。但一般的推理是,新資源的增加時(shí)間和通信開(kāi)銷(xiāo),會(huì)使開(kāi)發(fā)速度減慢。而且,許多任務(wù)是不可分的,比如更多的資源容易分配,這也意味著潛在的速度增加也更低。
諺語(yǔ)九個(gè)女人不能在一個(gè)月內(nèi)生一個(gè)孩子 與布魯克斯法則同出一轍,特別是某些不可分割或者并行的工作。
康威定律 (Conway's Law)
系統(tǒng)的技術(shù)邊界受制于組織的結(jié)構(gòu)。改進(jìn)組織時(shí),通常會(huì)提到它??低杀砻?,如果一個(gè)組織被分散成許多小而無(wú)聯(lián)系的單元,那么它開(kāi)發(fā)的軟件也是小而分散的。如果一個(gè)組織更多地垂直建立在特性或其服務(wù)周?chē)?,那么軟件系統(tǒng)也會(huì)反映這一點(diǎn)。
侯世達(dá)定律 (Hofstadter's Law)
即使考慮到侯世達(dá)定律,它也總是比你預(yù)期的要長(zhǎng)。
在估計(jì)需要多長(zhǎng)時(shí)間開(kāi)發(fā)時(shí),你可能會(huì)聽(tīng)到此定律。軟件開(kāi)發(fā)似乎不言而喻,我們往往不能準(zhǔn)確地估計(jì)需要多長(zhǎng)時(shí)間才能完成。
技術(shù)成熟度曲線 (The Hype Cycle & Amara's Law)
我們傾向于過(guò)高估計(jì)技術(shù)在短期內(nèi)的影響,并低估長(zhǎng)期效應(yīng)。
技術(shù)成熟度曲線是高德納咨詢(xún)公司對(duì)技術(shù)最初興起和發(fā)展的視覺(jué)展現(xiàn)。一圖頂千言:
簡(jiǎn)而言之,這個(gè)周期表明,新技術(shù)及其潛在影響通常會(huì)引發(fā)一陣?yán)顺薄F(tuán)隊(duì)快速使用這些新技術(shù),有時(shí)會(huì)對(duì)結(jié)果感到失望。這可能是因?yàn)樵摷夹g(shù)還不夠成熟,或者現(xiàn)實(shí)應(yīng)用還沒(méi)有完全實(shí)現(xiàn)。經(jīng)過(guò)一段時(shí)間后,技術(shù)的能力提高了,使用它的實(shí)際機(jī)會(huì)會(huì)增加,最終團(tuán)隊(duì)也可以提高工作效率。羅伊·阿馬拉簡(jiǎn)潔地總結(jié)了這一點(diǎn):我們傾向于高估技術(shù)短期內(nèi)的影響,并低估長(zhǎng)期效應(yīng)。
查看其它的定律和法則,可以到GitHub詳情頁(yè)查看,如果你自我感覺(jué)英文水平不行還有中文版哦,附上中文地址:https://github.com/nusr/hacker-laws-zh