2023/5/22

侯世達定律 Hofstadter's Law

Hofstadter 在「哥德爾、艾舍爾、巴赫書:集異璧之大成」這本書中,提到了一條 Hofstadter's Law:做事所花費的時間總是比你預期的要長,即使你的預期中考慮了侯世達定律。

在工作規劃時,總是需要做評估,在軟體工程中,評估卻是最困難的問題,永遠都會估算失準,即使開發過程中,沒有特殊的技術問題,或只是修改已經做過的事情,但還是有可能會有其他人為因素,改變了原本的時程。

這時候就變成另一種做法,在原本樂觀的估算結果後,乘上一定程度的風險值,這些增加出來的時間,就成為 buffer。但這也可能會發生另一種問題,時程只要經過一個人的加總與估算,就會多膨脹一點點,誤差也會變得更大。

如果單純只考慮開發的時程,或許還能接受,時程不準確的問題,但專案總是會有 stakeholders,也有預算成本的問題,牽涉到金錢跟最後交付的時程,還有專案誠品的成熟度,在管理階層、業務單位、客戶之間,這些問題就會不斷地放大,近一步影響到所有人。

即使大家都知道「花費的時間總是比你預期的要長」,身處不同的角色,就有不同的應對方式,也會用各種不同的手段想要達到預期的結果,但最終還是只能讓最底層的開發人員,花上足夠的時間,去完成該做的事情。

References

侯世達定律:做事所花費的時間總是比你預期的要長 - 頭條匯

每個人都應該了解的定律——侯世達定律 - 壹讀

侯世達定律 - 台部落

GitHub - nusr/hacker-laws-zh: 💻📖对开发人员有用的定律、理论、原则和模式。(Laws, Theories, Principles and Patterns that developers will find useful.)

2023/5/15

古德哈特定律 Goodhart's Law

Goodhart's Law 是以 Charles Goodhart 命名的,在 1975 年,由於英國貨幣政策,他提出了:當壓力施加於某個統計指標,進行控制時,將會失去任何觀測得到的統計恆性。

在一個獎懲系統中,為了得到最後的結果,將會作出獲得最多獎勵的行為。也就是在有已知量化標準的表現衡量體系中,員工會嘗試最初獲得最多獎勵的行為,但該行為不一定會實現利潤最大化。

Jón Danı́elsson 用另一句話描述:當用於決策之上,任何的統計關係都會分崩離析。當用於管制之上時,任何的風險模型都會分崩離析。

古德哈特定律:「當一項指標被設定為要達成的目標時,這項指標就無法成為一個好的指標。」"When a measure becomes a target, it ceases to be a good measure.)"

這個規則是在警告,一個量度的評估標準或指標,最後將會被濫用,而失去原本的功能。

如果單以「送貨量」衡量配送員的工作績效,會讓到貨時間縮短,但也可能會發生客戶滿意度下降,或是車禍,配送員代簽等等問題。

為提升治安情況,指標訂立是觀察每月、每年每一個分局的破案率,如分局的破案率不佳,則分局長就調離現職。各分局為追求破案率,就可能會發生吃案的情況。用各種方式引導減少報案數量,自然就能提升破案率。

為提升客服人員效率,薪資由固定制改為績效制,以接電話處理案件的數量作為發新標準。客服人員會為了績效,對客戶更不耐煩,或是快速地掛斷電話,雖然案件處理量增加,但服務品質卻下降了。

量化的量測指標是不可避免的,以科學的角度來看,事件需要客觀的量測指標,才能依照這個標準,得到真正的事件發生指數。像新冠肺炎,統一以 CT 值,來作為傳染力(確診)的標準,但在精確度要求不高的情況下,一般以快篩作為量測的標準。不同的量測方式,因為誤差出錯的比例也不同。

Goodhart's Law 在討論的就是量測指標,跟最後的誤差結果。每一種量測指標,會有不同的誤差,在牽涉的量測人類的行為標準上,誤差不同於科學量測的誤差不大會改變,會因為人類的行為改變,而讓原本的量測標準誤差改變而失準。

解決的方式,就是不要使用單一量測指標,要採用多重指標。在多重觀測指標的交互影響下,讓偏差值降到最低。

References

古德哈特定律 - MBA智库百科

單一指標對決策的影響-淺談 古德哈特定律 - Growing Thinker 警惕网络安全的“古德哈特定律” - 安全内参 | 决策者的网络安全知识库

古德哈特定律 - 維基百科,自由的百科全書

2023/5/8

坎寧漢姆定律 Cunningham's Law

根據 Steven McGeady 的說法,在 1980 年代,Ward Cunningham 曾經給他一個建議:「在 Internet 得到正確答案的做法,並不是提問,而是先貼出一個錯誤答案。」McGeady 引述為 Cunningham's Law,這個規則正好是 Wikipedia 的運作法則,Cunningham 本人則否認了這個說法,認為這是錯誤的引用。

Ward Cunningham 在 1995 年於The Portland Pattern Repository's Wiki建立了第一個 wiki site,他也是 "The Wiki Way" 這本書的作者,該書討論 wiki 協作編輯系統。

像這樣的提問,都是 Cunningham's Law 的實踐

  • 「5000元左右根本買不到好的遊戲本,全是水貨」

  • 「根本找不到一個形容詞可以形容現時的政府」你同意嗎?

  • 問小孩問題時

    • 今天在學校做了什麼事情?

    • 沒什麼

    • 你今天翹課了喔

    • 沒有啊,我們都在學校上課

用這個方法雖然可以快速得到答案,但也會有這樣的缺點:發言的人被認為是笨蛋。因此不要在正式場合使用,可在無聊時講垃圾話使用。

跟這個法則相反的狀況,有這樣的成語:眾口鑠金、積非成是、三人成虎、人云亦云

因此,這個法則並不能用在所有的問題上,只能用在可以確定,被提問的那些人,一定會有正確答案的狀況。當有人是用「聽說」來回答問題時,就可能會被錯誤的答案誤導。

2022年底也發生過這樣的事情:遭爆假街訪!哈哈台沉默5天回應 網破盲點狠酸:避重就輕│影片│造假│路人│TVBS新聞網

我自己也常看哈哈台,哈哈台的提問方式,就是用很多網路上的說法,來詢問當地民眾,如果把它當作綜藝,博君一笑,應該是沒什麼問題,但畢竟不可能每一次拍攝,都能找到一些當地奇人來回答,為了追求收視率,找臨演來拍影片,對當地人來說,被抓到也會覺得情何以堪。

不同的講者跟受眾,也會有不同的感受。看事情的角度不同,難免就會產生不同的觀點及感受。

難怪有很多專業的喜劇演員,私底下會是沈默寡言,常常會有憂鬱症的狀況。在很多衝突下,還要盡全力搞笑真難。

公視在 2022 也有討論這樣的議題:「你敢開身障者玩笑嗎?」

@hahaping XLeo @chairman1227 X王榮璋 X 雪莉@sherry0813 |「你敢開身障者玩笑嗎?」X 《禁忌不禁忌》|〈公視主題之夜SHOW〉 - YouTube

References

【坎寧漢姆定律(Cunninghams Law)】到底是什麼?怎麼理解? ? - GetIt01

【沃爾得英語】坎寧漢姆定律 :“擡槓式提問” 、“茬架式求助”, battle啊! - 雪花新闻

坎寧安定律 - Meta

沃德·坎寧安 - 維基百科,自由的百科全書

Cunningham's Law: The sun is flat, isn’t it?

眾口鑠金 [正文] - 成語檢視 - 教育部《成語典》2020 [基礎版]

2023/4/17

布魯克斯法則 (Brooks's Law) - 人月神話

Frederick P. Brooks, Jr. 於 IBM System/360 開發階段任職專案經理,OS/360設計階段任職軟體專案經理。在他管理的軟體專案經驗中,他將經歷寫成一本著名的軟體開發管理書本,名為「人月神話」。

在人月神話中,他提出一個觀念:在一個進度已經落後的專案再增加人手時,只會讓這個專案進度拖延更久。

在軟體專案管理中,有一些重要的事項,就是開發人力跟耗費的時間。這些估算工作,很多時候只能用經驗法則來判斷,由於這個估算無法非常準確,而且會隨著時間的前進,一直不斷地變化。

多數的管理人員都會用很單純的人月互換法則,來進行工作的估算,例如一個 10 人月的工作量,要直接分配給 5 個人用 2 個月的時間開發。

這是因為工作項目在切割的同時,就發生了項目的先後關係,且每一個項目在不同人員開發時,得到的成果跟品質不同,最後也會在整合階段,發生不同的問題,導致實際上不可能發生 10 人月 = 5 人 x 2 月。

一般在遇到進度延遲的狀況時,第一個反應會是增加人手,就像是蓋房子蓋到一半趕進度,就會想要從別的地方調派人力過來幫忙。但軟體專案沒有辦法依照這種想法處理,任意增加人手,很有可能會讓專案問題更亂更複雜。

造成這種現象的原因可能有:

  1. 專業工作無法任意切割

  2. 溝通成本大幅增加

  3. 新人無法快速融入團隊開發

  4. 舊人要暫停工作,做新人的教育訓練,需要更多時間,這些時間無法反映到實際的專案進度上

最明顯的實例,就是一個女人生小孩需要耗費 10 個月的時間,但十個女人生小孩,一樣需要 10 個月,因為這是一項專業工作,無法任意切割。

References

布魯克斯法則 - MBA智库百科

又delay了...為什麼人手增加後,專案進度反而死更慘? - Project Club 專案管理輕鬆學

專案管理你要知道事情 布魯克斯法則 ( Brook’s Law ) | lalacube

浅谈软件开发定律系列之布鲁克斯定律_柳记的技术博客_51CTO博客

2023/4/10

阿姆達爾定律 Amdahl's Law

Amdahl's Law 是 1967 年 Amdahl 發表的論文提出的法則。

當時的命題是,在平行運算的研究領域中,一個程式可以分為可被平行運算與不能被平行運算兩個部分,當我們針對平行運算做效能提升的研究時,應該把時間跟經費做最有效率的投資,但究竟平行運算可以帶來多少效益?

\[ T = 程式以序列運算的總時間 \\ B = 程式中,無法被平行化運算的部分的運算時間 \\ T-B = 可被平行化運算的總時間 \\ N = number of Threads/CPUs \\ T = B + (T-B) \\ (T-B) 部分可被平行化,變成耗費時間 (T-B)/N \]

假設 T 為 1

\[ \text{if N=2} => T(N) = B + (T-B)/2 \\ \text{if N=3} => T(N) = B + (T-B)/3 \]

可得到程式運算的總時間

\[ T(N) = B + (T-B)/N \]

假設 T = 1, 只能序列運算的部分 B = 0.5, N = 2

\[ T(2) = 0.5 + (1-0.5)/2 \\ = 0.5+0.5/2 \\ = 0.75 \]

當 Thread/CPU 越多,就代表程式運算的總時間會減少。


另外有一個程式加速的指標參數

\[ Speedup = \frac{Original Execution Time}{Execution Time After Enhancement} \\ = \frac{1}{B+(1-B)/N} \]

如果程式有一半的部分可被平行化加速

\[ N=2, Speedup = \frac{1}{0.5+(1-0.5)/2} = 1.33 \\ N=4, Speedup = 1.6 \\ N=100, Speedup = 1.98 \\ N=1000, Speedup = 1.998 \\ N=10000, Speedup = 1.99998 \\ N=\infty, Speedup = 2 \]

意思就是,就算平行化運算可以無限的加強效能,減少運算時間,程式的總運算時間,會被無法平行化運算加速的部分限制住。

如果有兩件事,我們不知道應該去做哪一項時,也可以利用這個法則決定,取效益比較高的那一個。例如:讀書時不知道要先讀數學還是英文,先假設數學是無法提升的部分,算出 Speedup,再用英文為B,算出 Speedup,兩個互相比較,就可以知道哪一個效益較高。

但真實世界也不是那麼簡單的事,因為我們無法預先知道,最佳化後的成果,是不是跟預先假設的成果效益一樣。另外以讀書為例,我們也不知道一直都看不懂的英文,要花多少時間,才能改進並得到效益,反而是比較熟悉的數學還有進步空間,因為看不懂的東西,再怎麼看也不懂,就算看懂以後的效益很高也沒有用。

References

OpenMP: Amdahl's Law - YouTube

阿姆達爾定律 - 維基百科,自由的百科全書

Day27:阿姆達爾定律(Amdahl's law)——資源配置的哲學 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天

Amdahl's Law · 課程筆記

阿姆达尔定律(Amdahl’s Law) 计算51CTO博客amdahl 定律