海勒姆法則 - Hyrum's Law

最近看到了一篇文章 Hyrum’s Law涌萤,覺(jué)得非常有意思淹遵,感覺(jué)應(yīng)該翻譯一下,也順帶夾雜點(diǎn)自己的理解负溪。

這篇文章主要是一位在底層架構(gòu)上面工作多年的一位資深工程師觀察到的一個(gè)現(xiàn)象透揣,簡(jiǎn)單來(lái)說(shuō),就是:

當(dāng)一個(gè) API 有足夠的用戶的時(shí)候川抡,在約定中你承諾的什么都無(wú)所謂辐真,所有在你系統(tǒng)里面被觀察到的行為都會(huì)被一些用戶直接依賴。

在詳細(xì)解釋這個(gè)之前崖堤,我們可以先來(lái)說(shuō)說(shuō)程序設(shè)計(jì)里面非常重要的兩個(gè)東西侍咱,接口和實(shí)現(xiàn)。通常在一個(gè)系統(tǒng)里面密幔,接口就是一個(gè)于系統(tǒng)交互的抽象楔脯,譬如汽車的方向盤和油門,剎車這些(我們通過(guò)這些來(lái)控制汽車胯甩,與汽車交互)淤年,而實(shí)現(xiàn)則是這個(gè)系統(tǒng)工作的一種方式,譬如汽車的輪子和引擎(汽車實(shí)際是通過(guò)這些來(lái)工作的)蜡豹。區(qū)分接口和實(shí)現(xiàn)的好處是非常明顯的麸粮,當(dāng)一個(gè)系統(tǒng)快速迭代,變得越來(lái)越復(fù)雜和難以理解的時(shí)候镜廉,抽象能非常好的幫助我們管理這些復(fù)雜性弄诲。

關(guān)于如何定義不同層級(jí)的抽象,可以參考其他的文章娇唯,譬如經(jīng)典的《人月神話》齐遵,這里我們可以假設(shè),如果一個(gè)抽象被定義好了塔插,那么它其實(shí)就是有形具體了梗摇。也就是說(shuō),一個(gè)接口在理論上面需要清晰的將系統(tǒng)的使用者和該系統(tǒng)的實(shí)現(xiàn)隔離開(kāi)想许。但現(xiàn)實(shí)往往是殘酷的伶授,當(dāng)這個(gè)系統(tǒng)開(kāi)始逐漸膨脹断序,一些用戶開(kāi)始依賴一些通過(guò)接口暴露出的內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),這條理論就被打破了糜烹。

著名的 Joe 有一篇文章 Law of Leaky Abstractions违诗,里面就列舉了很多這樣的例子,一個(gè)就是我們常用的 SQL疮蹦。SQL 其實(shí)可以看做是一個(gè)對(duì)數(shù)據(jù)庫(kù)操作的抽象诸迟,我們只需要通過(guò) SQL 語(yǔ)句就能非常方便的查詢數(shù)據(jù),而不用去為數(shù)據(jù)庫(kù)寫特定的執(zhí)行步驟愕乎。但是阵苇,有時(shí)候,我們會(huì)發(fā)現(xiàn)感论,一些 SQL 語(yǔ)句明顯會(huì)比其他的運(yùn)行的要慢绅项,譬如 where a=b and b=c and a=c 可能就比 where a=b and b=c 要快不少,為了搞明白笛粘,我們就必須深入細(xì)節(jié)趁怔,去看相關(guān)的 query plan。這時(shí)候薪前,我們其實(shí)就已經(jīng)打破了 SQL 這層的抽象润努,因?yàn)槲覀儽仨氁チ私獾讓訉?shí)際的執(zhí)行方式了。

只要細(xì)致觀察示括,通常我們都會(huì)發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象铺浇,原作者將其稱為 “The Law of Implicit Interfaces” ,也就是說(shuō)垛膝,只要一個(gè)系統(tǒng)有足夠的使用者鳍侣,那么就沒(méi)有啥私有實(shí)現(xiàn)這個(gè)說(shuō)法了,用戶會(huì)開(kāi)始依賴實(shí)現(xiàn)的任何方面吼拥,無(wú)論是內(nèi)部的還是外部的倚聚。這樣,實(shí)現(xiàn)的一些隨意變更也會(huì)被限制了凿可,因?yàn)楝F(xiàn)在我們不光要保證公開(kāi)的有文檔的接口惑折,同時(shí)也要考慮已經(jīng)被使用的內(nèi)部的隱示接口。原作者將這個(gè)現(xiàn)象稱為 “bug-for-bug compatibility”枯跑。

隱示接口的產(chǎn)生是一個(gè)緩慢的過(guò)程惨驶,以至于接口的使用者通常都不會(huì)注意到它已經(jīng)出現(xiàn)了。例如敛助,一個(gè)接口不保證任何性能粗卜,但使用者通過(guò)它的實(shí)現(xiàn),預(yù)期了它的性能能達(dá)到哪一個(gè)層級(jí)纳击。這個(gè)期望變成了系統(tǒng)的一個(gè)隱示接口续扔,后續(xù)改系統(tǒng)的任何改動(dòng)都需要保證這個(gè)接口的性能特性攻臀,從而能讓用戶正常工作。

隱示接口來(lái)自于大型系統(tǒng)的增長(zhǎng)测砂,當(dāng)然我們其實(shí)并不想讓這個(gè)問(wèn)題出現(xiàn)茵烈,這就要求我們?cè)跇?gòu)建和維護(hù)復(fù)雜系統(tǒng)的時(shí)候思考的更全面一點(diǎn)百匆。我們需要意識(shí)到砌些,隱示接口會(huì)限制我們系統(tǒng)的設(shè)計(jì)和發(fā)展,對(duì)于任何的流行系統(tǒng)加匈,接口的水比我們想的還深存璃。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雕拼,隨后出現(xiàn)的幾起案子纵东,更是在濱河造成了極大的恐慌,老刑警劉巖啥寇,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偎球,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辑甜,警方通過(guò)查閱死者的電腦和手機(jī)衰絮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)磷醋,“玉大人猫牡,你說(shuō)我怎么就攤上這事〉讼撸” “怎么了淌友?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)骇陈。 經(jīng)常有香客問(wèn)我震庭,道長(zhǎng),這世上最難降的妖魔是什么你雌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任器联,我火速辦了婚禮,結(jié)果婚禮上匪蝙,老公的妹妹穿的比我還像新娘主籍。我一直安慰自己,他們只是感情好逛球,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布千元。 她就那樣靜靜地躺著,像睡著了一般颤绕。 火紅的嫁衣襯著肌膚如雪幸海。 梳的紋絲不亂的頭發(fā)上祟身,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音物独,去河邊找鬼袜硫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挡篓,可吹牛的內(nèi)容都是我干的婉陷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼官研,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼秽澳!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起戏羽,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤担神,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后始花,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妄讯,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年酷宵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亥贸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忧吟,死狀恐怖砌函,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溜族,我是刑警寧澤讹俊,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站煌抒,受9級(jí)特大地震影響仍劈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寡壮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一贩疙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧况既,春花似錦这溅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至莫其,卻和暖如春癞尚,著一層夾襖步出監(jiān)牢的瞬間耸三,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工浇揩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仪壮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓胳徽,卻偏偏與公主長(zhǎng)得像积锅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膜廊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容