軟體工程實踐的十條軍規
- 0.1 Moore』s Law
- 0.2 Metcalfes Law
- 1、Little』s Law
- 2、Goodhart』s Law
- 3、Conway』s Law
- 4、Parkinson』s Law
- 5、Humphrey』s Law
- 6、Law of the instrument
- 7、Law of Demeter
- 8、Dude』s Law
- 9、Law of 2 Feet
- 10、Law of Propinquity
- 11、Linus Lawn
- 0.1 Moore』s Law
摩爾定律,由英特爾創始人之一戈登·摩爾提出來的。其內容為:積體電路上可容納的電晶體(晶體管)數目,約每隔兩年便會增加一倍。主要有以下三種演繹版本:
- 集成電路晶元上所集成的電路的數目,每隔18個月就翻一倍。
- 微處理器的性能每隔18個月提高一倍,或價格下降一半。
- 用一個美元所能買到的電腦性能,每隔18個月翻兩倍。
這個定律 被引用最多,分歧很大,反對聲音也最多,有預測認為摩爾定律的極限將在2025年左右到來,但也有更樂觀的預測認為還能持續更久。
0.2 Metcalfes Law
梅特卡夫定律,由喬治·吉爾德於1993年提出,但以計算機網路先驅、3Com公司的創始人羅伯特·梅特卡夫的姓氏命名。內容是:一個網路的價值等於該網路內的節點數的平方,而且該網路的價值與聯網的用戶數的平方成正比。該定律指出,一個網路的用戶數目越多,那麼整個網路和該網路內的每台電腦的價值也就越大。
1. Little』s Law
Cycle Time = Work in Progress / Throughput
中譯為利特爾法則,由MIT (Sloan School of Management)的教授John Little於1961年提出:在一個穩定的系統 L中,長期的平均顧客人數,等於長期的有效抵達率,系統中的平均存貨等於存貨單位離開系統的比率(亦即平均需求率)與存貨單位在系統中平均時間的乘積。
the relationship between the average number of customers in a store, their arrival rate, and the average time in the store.
應用領域:精益生產、系統運籌方面應用廣泛,Kanban(看板)方法論的基石。
It is the basis of Kanban.
The power of Little』s Law to Kanban teams is not its ability to predict WIP, Thoughput or Leadtime. The true power lies in its ability to influence team behavior with its underlying assumptions.
2. Goodhart』s Law
When a measure becomes a target, it ceases to be a good measure.n當一個政策變成目標,它將不再是一個好的政策。
古德哈特定律(Goodharts law),是以Charles Goodhart的名字命名,他在1975年的文章中首次發表(當時作為英格蘭銀行的政策建議):當政府試圖管理這些金融財產的特別標識時,它們便不再是可信的經濟風向標。應用領域:公共管理,敏捷開發,目標管理
了解一個指標有意義與否的一個好的方法是試著去理解其所體現的個人價值。關注那些可以給出好的建議、體現溝通技能和良好態度,尤其是需要巨大的付出才能作弊的指標。
3. Conway』s Law
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organizations communication structure.任何組織在設計一套系統(廣義概念上的系統)時,所交付的設計方案在結構上都與該組織的通信結構保持一致 -- Melvyn Conway, 1967
《人月神話》:Adding manpower to a late software project makes it later --Fred Brooks, (1975)
為了趕進度加程序員就像用水去滅油鍋里的火一樣,原因在於:溝通成本 = n(n-1)/2,溝通成本隨著項目或者組織的人員增加呈指數級增長。很多項目在經過一段時間的發展之後,都會有不少恐龍級代碼,無人敢挑戰。比如一個類的規模就多達數千行,核心方法近千行,大量重複代碼,每次調整都以失敗告終。龐大的系統規模導致團隊新成員接手困難,項目組人員增加導致的代碼衝突問題,系統複雜度的增加導致的不確定上線風險、引入新技術困難等。應用領域:Micro-Service 微服務
4. Parkinson』s Law
Work expands so as to fill the time available for its completion.n在工作能夠完成的時限內,工作量會一直增加,直到所有可用時間都被填充為止
帕金森定理(英語:Parkinsons law),由英國作家西里爾·諾斯古德·帕金森提出,語最早出現在1955年《經濟學人》中的幽默短文。在他後續的書中進一步闡述(《Parkinsons Law: The Pursuit of Progress》)。官僚組織隨著時間而擴大的速率。一個官僚組織(作者註:包括非政府組織)中的僱員總數,通常以每年5-7%的速度增加。他認為,有兩股力量造成了這個增長:(1) 一個官員希望他的下屬增加,但不希望解僱造成敵人增加;以及(2) 官員會製造工作給彼此。 同意!
5. Humphrey』s Law
The user will never know what they want until after the system is in production (maybe not even then)n用戶將永遠不知道他們想要什麼,直到系統已經上線。(也許上線了也不知道)n"服務員,給我來份宮保雞丁!"n"好嘞!"n------------這叫原始需求n大廚做到一半。n"服務員,菜里不要放肉。"n"不放肉怎麼做啊?"n"不放肉就行了,其它按正常程序做,不就行了,難嗎?"n"好的您稍等"n------------中途需求變更n大廚:"你大爺,我肉都回鍋了"n服務員:"顧客非要要求的嘛,你把肉挑出來不就行了嗎"n大廚:"行你大爺" 然而還是一點點挑出來了n------------改動太大,部分重構n。。。。。。n"服務員,這樣吧,腐竹不要了,換成蒜毫能快點嗎?對了,順便加點番茄醬"n------------因工期過長再次改動需求n大廚:"我日了狗啊,你TM不知道蒜毫也得焯水啊?還有你讓我怎麼往熱菜里放番茄醬啊??"n服務員:"焯水也比等腐竹強吧,番茄醬往裡一倒不就行了嗎?很難嗎?"n大廚:"腐竹我還得接著泡,萬一這孫子一會又想要了呢。"n------------頻繁改動開始導致大量冗餘
6. Law of the instrument
If all you have is a hammer, everything looks like a nail
工具定律,鎚子定律或馬斯洛的鎚子。表現為對一個熟悉的工具過度的依賴,「如果你有的只是一個鎚子,那麼所有的東西看起來都像一個釘子」以及一些由此轉化的說法,來自於亞伯拉罕·馬斯洛1966年發行的《科學的心理學》一書。例如:
- 「XXX是世界上最好的語言,沒有之一」
- 「加強party的領導」
7. Law of Demeter
Law of Demeter is also called 「Principle of Least Knowledge」
得墨忒耳定律(Law of Demeter,縮寫LoD)是一種軟體開發的設計指導原則,特別是面向對象的程序設計。美國東北大學在1987年末發明,名稱來源於希臘神話中的農業女神,孤獨的得墨忒耳。簡單描述為:
- 每個單元對於其他的單元只能擁有有限的知識:只是與當前單元緊密聯繫的單元;
- 每個單元只能和它的朋友交談:不能和陌生單元交談;
- 只和自己直接的朋友交談。
a.b.Method()違反了此定律,而a.Method()不違反此定律。一個簡單例子是,人可以命令一條狗行走(walk),但是不應該直接指揮狗的腿行走,應該由狗去指揮控制它的腿如何行走。
8. Dude』s Law
Value (of a project) = Why over How [or Value = Why / How]
「David [the law』s creator] comes from the music industry. New musicians focus on having a nice sound. Professional musicians first think about the mood of the song, the emotion they want to bring across and then work out the sound that fits it」
該法則的發明者來自音樂產業。新手音樂家注重好聽的聲音。專業的音樂家首先考慮歌曲的情緒,他們想要傳達的情感,然後找出適合它的聲音。應用領域:項目管理、目標管理
9. Law of 2 Feet
If at any time during our time together you find yourself in any situation where you are neither learning nor contributing, use your two feet, go someplace else.
應用領域:組織溝通
10. Law of Propinquity
The probability of two people communicating is inversely proportional to the distance between them.兩個人交流的概率與他們之間的距離成反比。數字時代亦然。nCucumbers get more pickled than brine gets cucumbered.n當你進入一個環境,它會更多地影響你而不是相反
the more we see people and interact with them, the more probable we are to like them.
11. Linus Law
以Linux創始人林納斯·托瓦茲(Linus Torvalds)的名字來命名,但最先由埃里克·斯蒂芬·雷蒙(Eric S. Raymond)的作品《大教堂和市集》(The Cathedral and the Bazaar)中所提出。「足夠多的眼睛,就可讓所有問題浮現」(given enough eyeballs, all bugs are shallow)。
應用領域:代碼審查。「只要有足夠的單元測試員及共同開發者,所有問題都會在很短時間內被發現,而且能夠很容易被解決」。將代碼展示給更多開發者以達成共識。在2001年出版的《黑客倫理與信息時代的精神》(The Hacker Ethic And the Spirit of th Information Age)里,林納斯在其為此書做的序言中,自己定義了另外一個林納斯定律
人類所有的動機可分為遞進的三種類型 — 生存(survival)、社會生活(social life)、娛樂(entertainment)。...... 「黑客」是已經超越利用計算機謀生存而進入後面兩個階段的人。計算機本身就是娛樂。黑客堅信沒有比這更高的動力階段。
軟體工程實踐中的十大法則
推薦閱讀: