hacker-laws 的的中文翻譯。https://github.com/dwmkerr/hacker-laws
對(duì)開發(fā)人員有用的定律除破、理論掸掏、原則和模式船殉。(Laws, Theories, Principles and Patterns that developers will find useful.)
為了方便閱讀,維基百科增加了中文鏈接炕桨。英文鏈接表示 hacker-laws 項(xiàng)目尚未完成的主題饭尝。
- 介紹
-
定律
- 阿姆達(dá)爾定律 (Amdahl's Law)
- 破窗效應(yīng) (The Broken Windows Theory)
- 布魯克斯法則 (Brooks's Law)
- 康威定律 (Conway's Law)
- 坎寧漢姆定律 (Cunningham's Law)
- 鄧巴數(shù)字 (Dunbar's Number)
- 蓋爾定律 (Gall's Law)
- 古德哈特定律 (Goodhart's Law)
- 漢隆的剃刀 (Hanlon's Razor)
- 侯世達(dá)定律 (Hofstadter's Law)
- 哈伯特定律 (Hutber's Law)
- 技術(shù)成熟度曲線 (The Hype Cycle or Amara's Law)
- 隱式接口定律 (Hyrum's Law or The Law of Implicit Interfaces)
- 柯林漢定律 (Kernighan's Law)
- 梅特卡夫定律 (Metcalfe's Law)
- 摩爾定律 (Moore's Law)
- 墨菲定律 (Murphy's Law / Sod's Law)
- 奧卡姆剃刀 (Occam's Razor)
- 帕金森定理 (Parkinson's Law)
- 過早優(yōu)化效應(yīng) (Premature Optimization Effect)
- 普特定律 (Putt's Law)
- 里德定律 (Reed's Law)
- 復(fù)雜性守恒定律 (The Law of Conservation of Complexity or Tesler's Law)
- 抽象泄漏定律 (The Law of Leaky Abstractions)
- 帕金森瑣碎定理 (The Law of Triviality)
- Unix 哲學(xué) (The Unix Philosophy)
- Spotify 模型 (The Spotify Model)
- 沃德勒定律 (Wadler's Law)
- 惠頓定律 (Wheaton's Law)
-
原則
- 呆伯特法則 (The Dilbert Principle)
- 帕累托法則 (The Pareto Principle or The 80/20 Rule)
- 彼得原理 (The Peter Principle)
- 魯棒性原則 (The Robustness Principle or Postel's Law)
- SOLID
- 單一功能原則 (The Single Responsibility Principle)
- 開閉原則 (The Open/Closed Principle)
- 里氏替換原則 (The Liskov Substitution Principle)
- 接口隔離原則 (The Interface Segregation Principle)
- 依賴反轉(zhuǎn)原則 (The Dependency Inversion Principle)
- 不要重復(fù)你自己原則 (The DRY Principle)
- KISS 原則 (The KISS Principle)
- 你不需要它原則 (YAGNI)
- 分布式計(jì)算的謬論 (The Fallacies of Distributed Computing)
- 閱讀清單
- TODO
介紹
當(dāng)人們談?wù)撻_發(fā)時(shí),會(huì)聊到許多定律献宫。這個(gè)倉(cāng)庫收錄了一些最常見的定律钥平。
?: 這個(gè)倉(cāng)庫包含對(duì)一些定律、原則以及模式的解釋姊途,但不提倡其中任何一個(gè)涉瘾。 它們的應(yīng)用始終存在著爭(zhēng)論,并且很大程度上取決于你正在做什么捷兰。
定律
現(xiàn)在我們開始吧立叛!
阿姆達(dá)爾定律 (Amdahl's Law)
阿姆達(dá)爾定律是一個(gè)顯示計(jì)算任務(wù)潛在加速能力的公式。這種能力可以通過增加系統(tǒng)資源來實(shí)現(xiàn)贡茅,通常用于并行計(jì)算中秘蛇。它可以預(yù)測(cè)增加處理器數(shù)量的實(shí)際好處,然而增加處理器數(shù)量會(huì)受到程序并行性的限制顶考。
舉例說明:如果程序由兩部分組成赁还,部分 A 必須由單個(gè)處理器執(zhí)行,部分 B 可以并行運(yùn)行驹沿。那么向執(zhí)行程序的系統(tǒng)添加多個(gè)處理器只能獲得有限的好處艘策。它可以極大地提升部分 B 的運(yùn)行速度,但部分 A 的運(yùn)行速度將保持不變甚负。
下圖展示了一些運(yùn)行速度的提升潛能的例子:
(圖片來源: By Daniels220 at English Wikipedia, Creative Commons Attribution-Share Alike 3.0 Unported, https://en.wikipedia.org/wiki/File:AmdahlsLaw.svg)
可以看出柬焕,50% 并行化的程序在使用大于 10 個(gè)處理單元之后的速度提升收效甚微审残,而 95% 并行化的程序在使用超過一千個(gè)處理單元之后仍然可以顯著提升速度。
隨著摩爾定律減慢斑举,單個(gè)處理器的速度增加緩慢搅轿,并行化是提高性能的關(guān)鍵。圖形編程是一個(gè)極好的例子富玷,現(xiàn)代著色器可以并行渲染單個(gè)像素或片段璧坟。這也是現(xiàn)代顯卡通常具有數(shù)千個(gè)處理核心(GPU 或著色器單元)的原因。
參見:
破窗效應(yīng) (The Broken Windows Theory)
在破窗理論中認(rèn)為赎懦,一些明顯的犯罪跡象(或缺乏環(huán)保意識(shí))會(huì)導(dǎo)致進(jìn)一步的雀鹃、更嚴(yán)重的犯罪(或環(huán)境的進(jìn)一步惡化)。
破窗理論已應(yīng)用于軟件開發(fā)中励两,它表明劣質(zhì)代碼(或 Technical Debt)可能會(huì)影響后續(xù)優(yōu)化的效率黎茎,從而進(jìn)一步造成代碼劣化;隨著時(shí)間的推移当悔,這種效應(yīng)將會(huì)導(dǎo)致代碼質(zhì)量大幅下降傅瞻。
參見:
例子:
- 《程序員修煉之道:軟件熵》(The Pragmatic Programming: Software Entropy)
- 《Coding Horror:破窗效應(yīng)》(Coding Horror: The Broken Window Theory)
- 《開源:編程之樂 - 破窗效應(yīng)》(OpenSource: Joy of Programming - The Broken Window Theory)
布魯克斯法則 (Brooks's Law)
軟件開發(fā)后期,添加人力只會(huì)使項(xiàng)目開發(fā)得更慢盲憎。
這個(gè)定律表明嗅骄,在許多情況下,試圖通過增加人力來加速已延期項(xiàng)目的交付饼疙,將會(huì)使項(xiàng)目交付得更晚溺森。布魯克斯也明白,這是一種過度簡(jiǎn)化窑眯。但一般的論據(jù)是屏积,新資源的時(shí)間增加和通信開銷,會(huì)在短期內(nèi)使開發(fā)速度減慢伸但。而且肾请,許多任務(wù)是密不可分的,換句話說更胖,這樣可以使更多的資源之間能輕易分配,這也意味著潛在的速度增長(zhǎng)也更低隔显。
諺語 九個(gè)女人不能在一個(gè)月內(nèi)生一個(gè)孩子 與布魯克斯法則同出一轍却妨,特別是某些不可分割或者并行的工作。
這是《人月神話》的中心主題括眠。
參見:
康威定律 (Conway's Law)
這個(gè)定律說明了系統(tǒng)的技術(shù)邊界可以反應(yīng)一個(gè)組織的結(jié)構(gòu)彪标,它通常會(huì)在改進(jìn)組織時(shí)被提及≈啦颍康威定律表明捞烟,如果一個(gè)組織被分散成許多小而無聯(lián)系的單元薄声,那么它開發(fā)的軟件也是小而分散的。如果組織是更多地圍繞以功能或服務(wù)為導(dǎo)向的垂直結(jié)構(gòu)题画,那么軟件系統(tǒng)也會(huì)反映這一點(diǎn)默辨。
參見:
坎寧漢姆定律 (Cunningham's Law)
在網(wǎng)絡(luò)上想得到正確答案的最好方法不是提問題,而是發(fā)布一個(gè)錯(cuò)誤的答案苍息。
據(jù)史蒂芬·麥克基迪說缩幸,沃德·坎寧漢姆早在 20 世紀(jì) 80 年代早期的時(shí)候建議他,在互聯(lián)網(wǎng)上獲得正確答案的最好方法不是提問題竞思,而是發(fā)布一個(gè)錯(cuò)誤的答案表谊。麥克基迪稱這為坎寧漢姆定律,而坎寧漢姆不以為然盖喷,并覺得這是“錯(cuò)誤的引用”爆办。最初這條定律只是用于描述 Usenet 上的社交行為,但后來也漸漸用于其他的在線社區(qū)(如 Wikipedia课梳、Reddit距辆、Twitter、Facebook 等)惦界。
參見:
鄧巴數(shù)字 (Dunbar's Number)
鄧巴數(shù)字是對(duì)一個(gè)人能夠保持穩(wěn)定社會(huì)關(guān)系的人數(shù)的認(rèn)知極限——在這種關(guān)系中挑格,一個(gè)人知道每個(gè)人是誰,也知道每個(gè)人與其他人的關(guān)系如何沾歪。而對(duì)這一數(shù)字的確切值則有著一些不同意見漂彤。鄧巴指出,人僅能輕松地維持 150 個(gè)穩(wěn)定的關(guān)系灾搏。這樣的關(guān)系在一個(gè)更社會(huì)化的背景中挫望,便是當(dāng)你碰巧在酒吧里碰到這些人時(shí)候,你不會(huì)因?yàn)榧尤胨麄兌械綄擂慰褚ぁ`嚢蛿?shù)字的估計(jì)值一般在 100 至 250 之間媳板。
和人與人之間穩(wěn)定的關(guān)系一樣,開發(fā)人員與代碼庫的關(guān)系也需要努力維護(hù)泉哈。當(dāng)面對(duì)大型蛉幸、復(fù)雜的項(xiàng)目,或許多項(xiàng)目的歸屬權(quán)時(shí)丛晦,我們會(huì)依賴于約定奕纫、策略和建模過程來進(jìn)行擴(kuò)展。鄧巴數(shù)字不僅在辦公室規(guī)模的擴(kuò)大的過程中舉足輕重烫沙,而且在設(shè)置團(tuán)隊(duì)工作范圍,或決定系統(tǒng)何時(shí)應(yīng)該注重于輔助建模和組織管理開銷自動(dòng)化的工具時(shí)撑柔,也是非常重要的辆沦。將鄧巴數(shù)字放入工程內(nèi)容中進(jìn)行類比蔚晨,那就是您能加入并有信心隨叫隨到進(jìn)行輪換的項(xiàng)目數(shù)(亦或是單個(gè)項(xiàng)目的規(guī)范化復(fù)雜性)累舷。
參見:
蓋爾定律 (Gall's Law)
一個(gè)切實(shí)可行的復(fù)雜系統(tǒng)勢(shì)必是從一個(gè)切實(shí)可行的簡(jiǎn)單系統(tǒng)發(fā)展而來的只怎。從頭開始設(shè)計(jì)的復(fù)雜系統(tǒng)根本不切實(shí)可行,無法修修補(bǔ)補(bǔ)讓它切實(shí)可行。你必須由一個(gè)切實(shí)可行的簡(jiǎn)單系統(tǒng)重新開始莲蜘。
約翰·蓋爾 (John Gall)
蓋爾定律說明了設(shè)計(jì)高度復(fù)雜的系統(tǒng)很可能會(huì)失敗昂秃。它們很難一蹴而就蚀腿,更多是從簡(jiǎn)單的系統(tǒng)逐漸演變而來磁玉。
最典型的例子便是互聯(lián)網(wǎng)厚柳。如今的互聯(lián)網(wǎng)是一個(gè)高度復(fù)雜的系統(tǒng),而它最早只是被定義為一種在學(xué)術(shù)機(jī)構(gòu)之間共享內(nèi)容的方式预吆∷藿福互聯(lián)網(wǎng)成功實(shí)現(xiàn)了最初的目標(biāo)返吻,并且隨著時(shí)間不斷演化,最終成就了如今的復(fù)雜繁榮纲辽。
參見:
古德哈特定律 (Goodhart's Law)
當(dāng)壓力施于其上以進(jìn)行控制時(shí)怠硼,任何觀測(cè)到的統(tǒng)計(jì)恒性都傾向消散。
查爾斯·古德哈特 (Charles Goodhart)
另見:
當(dāng)一個(gè)措施本身成為目標(biāo)時(shí)星澳,它就不再是一個(gè)好的措施盒至。
瑪麗蓮·斯特拉騰 (Marilyn Strathern)
根據(jù)這一定律,由測(cè)量驅(qū)動(dòng)的優(yōu)化反而可能導(dǎo)致測(cè)量結(jié)果本身的說服力下降沸移。盲目使用一些過度嚴(yán)格篩選的方法 (KPIs) 可能會(huì)產(chǎn)生一些不良的影響痪伦。人們會(huì)傾向于用“鉆空子”的行為去做局部?jī)?yōu)化,從而滿足一些特定的度量標(biāo)準(zhǔn)雹锣,而不會(huì)在意整體的結(jié)果网沾。
現(xiàn)實(shí)中的例子:
- Assert-free 測(cè)試可以達(dá)到代碼覆蓋率的預(yù)期,但度量的目的應(yīng)該是創(chuàng)造經(jīng)過良好測(cè)試的軟件蕊爵。
- 由 commits 的行數(shù)來評(píng)價(jià)開發(fā)人員的表現(xiàn)辉哥,從而導(dǎo)致了不合理的代碼庫擴(kuò)增。
參見
漢隆的剃刀 (Hanlon's Razor)
能解釋為愚蠢的在辆,就不要解釋為惡意的证薇。
羅伯特·漢隆 (Robert J. Hanlon)
這一原則表明,一個(gè)行為所產(chǎn)生的消極結(jié)果并不是惡意匆篓。相反浑度,消極結(jié)果更有可能歸咎于這些沒有得到充分理解的行動(dòng)或影響。
侯世達(dá)定律 (Hofstadter's Law)
即使考慮到侯世達(dá)定律鸦概,它也總是比你預(yù)期的要長(zhǎng)箩张。
侯世達(dá) (Douglas Hofstadter)
在估計(jì)需要多長(zhǎng)時(shí)間開發(fā)時(shí)甩骏,你可能會(huì)聽到此定律。軟件開發(fā)似乎有這樣一條定理先慷,即我們往往不能準(zhǔn)確地估計(jì)需要多長(zhǎng)時(shí)間才能完成饮笛。
參見:
哈伯特定律 (Hutber's Law)
改善即惡化无午。
帕特里克·哈伯特 (Patrick Hutber)
這個(gè)定律說明了對(duì)一個(gè)系統(tǒng)的改進(jìn)會(huì)導(dǎo)致其他部分的惡化;或者它會(huì)將其他的惡化隱藏起來祝谚,并導(dǎo)致系統(tǒng)整體狀態(tài)的退化宪迟。
例如,某個(gè)端點(diǎn)的響應(yīng)延遲減少交惯,就可能導(dǎo)致請(qǐng)求流中的吞吐量和容量問題進(jìn)一步增加次泽,并影響到另一個(gè)完全不同的子系統(tǒng)。
技術(shù)成熟度曲線 (The Hype Cycle or Amara's Law)
我們傾向于過高估計(jì)技術(shù)在短期內(nèi)的影響席爽,并低估長(zhǎng)期效應(yīng)意荤。
羅伊·阿馬拉 (Roy Amara)
技術(shù)成熟度曲線是高德納咨詢公司對(duì)技術(shù)最初興起和發(fā)展的視覺展現(xiàn)。一圖頂千言:
(圖片來源: By Jeremykemp at English Wikipedia, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=10547051)
簡(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)用還沒有完全實(shí)現(xiàn)沈矿。經(jīng)過一段時(shí)間后上真,技術(shù)的能力提高了,使用它的實(shí)際機(jī)會(huì)會(huì)增加羹膳,最終團(tuán)隊(duì)也可以提高工作效率睡互。羅伊·阿馬拉簡(jiǎn)潔地總結(jié)了這一點(diǎn):我們傾向于高估技術(shù)短期內(nèi)的影響,并低估長(zhǎng)期效應(yīng)陵像。
隱式接口定律 (Hyrum's Law or The Law of Implicit Interfaces)
當(dāng) API 有足夠多的用戶時(shí)就珠,你在合同中的承諾已不重要:你系統(tǒng)的所有可觀察行為都將被某些人所依賴。
海倫·賴特 (Hyrum Wright)
隱式接口定律表明醒颖,當(dāng)你的 API 有足夠多的用戶時(shí)妻怎,API 的所有行為(包括那些未囊括在公共說明中的一部分)最終都會(huì)被其他人所依賴。 一個(gè)簡(jiǎn)單的例子是 API 的響應(yīng)時(shí)間這種非功能性因素泞歉,還有一個(gè)更微妙的例子是:用戶使用正則表達(dá)式判斷錯(cuò)誤信息的類型時(shí)逼侦,即使 API 的公共說明沒有說明消息的內(nèi)容匿辩,來指示用戶錯(cuò)誤的類型,一些用戶也可能會(huì)使用并更改該消息榛丢,而這實(shí)際上會(huì)破壞 API 的使用铲球。
參見:
柯林漢定律 (Kernighan's Law)
調(diào)試在一開始就比編寫程序困難一倍。因此晰赞,按照定義稼病,如果你的代碼寫得非常巧妙,那么你就沒有足夠的能力來調(diào)試它宾肺。
布萊恩·柯林漢 (Brian Kernighan)
柯林漢定律是以布萊恩·柯林漢 (Brian Kernighan) 的名字命名的溯饵,引述自柯林漢和普勞格 (P.J. Plauger) 的《編程格調(diào)》 (The Elements of Programming Style) 一書中的一句話:
每個(gè)人都知道,調(diào)試在一開始就比編寫程序困難一倍锨用。那么,如果您在編寫它時(shí)盡可能地巧妙隘谣,又如何來調(diào)試它增拥?
盡管這有些夸張,但它提出的論點(diǎn)是寻歧,簡(jiǎn)單的代碼會(huì)比復(fù)雜的代碼更可取掌栅,因?yàn)檎{(diào)試復(fù)雜代碼的過程中出現(xiàn)的任何問題都會(huì)十分棘手,甚至無法解決码泛。
參見:
梅特卡夫定律 (Metcalfe's Law)
在網(wǎng)絡(luò)理論中猾封,系統(tǒng)的價(jià)值約等于系統(tǒng)用戶數(shù)的平方。
這個(gè)定律基于一個(gè)系統(tǒng)中可能的連接對(duì)數(shù)量噪珊,并且與里德定律 (Reed's Law) 十分相近晌缘。奧德利茲科 (Odlyzko) 和其他人認(rèn)為,里德定律和梅特卡夫定律夸大了系統(tǒng)本身的價(jià)值痢站,因?yàn)樗鼈儧]有考慮到網(wǎng)絡(luò)效應(yīng)中人類認(rèn)知的限制磷箕。
參見:
摩爾定律 (Moore's Law)
集成電路中的晶體管數(shù)量大約每?jī)赡攴环?/p>
這條定律通常用于說明半導(dǎo)體和芯片技術(shù)提高的絕對(duì)速度。從 20 世紀(jì) 70 年代到 21 世紀(jì)前十年阵难,摩爾的預(yù)測(cè)被證明是高度準(zhǔn)確的岳枷。 近年來,這種趨勢(shì)略有變化呜叫,部分原因受到量子隧穿效應(yīng)影響空繁。然而,并行化計(jì)算的進(jìn)步以及半導(dǎo)體技術(shù)和量子計(jì)算潛在的革命性變化朱庆,可能意味著摩爾定律在未來幾十年內(nèi)繼續(xù)保持正確盛泡。
墨菲定律 (Murphy's Law / Sod's Law)
凡是可能出錯(cuò)的事就一定會(huì)出錯(cuò)。
出自 愛德華·A·墨菲 椎工, 墨菲定律 說明了如果一件事有可能出錯(cuò)饭于,那么就一定會(huì)出錯(cuò)蜀踏。
這是一句開發(fā)人員間的俗語,在開發(fā)掰吕、測(cè)試甚至在生產(chǎn)中都有可能會(huì)發(fā)生一些令人意想不到的事情果覆。而這一定律也可以參考在英式英語中更為常見的 索德定理 :
如果某件事可能出錯(cuò),那么它一定會(huì)在最糟糕的時(shí)候發(fā)生殖熟。
這些定律常常用于幽默嘲弄局待。但是,類似于 Confirmation Bias 和 Selection Bias 的現(xiàn)象很容易導(dǎo)致人們過分強(qiáng)調(diào)這些定律(即在大部分情況下菱属,一件事的成功會(huì)顯得司空見慣钳榨;而失敗才會(huì)引起更多的注意和討論)。
參見:
奧卡姆剃刀 (Occam's Razor)
如無必要纽门,勿增實(shí)體薛耻。
奧卡姆的威廉 (William of Ockham)
奧卡姆剃刀指出,在幾種可能的解決方案之中赏陵,最有可能的解決方案便是概念和假設(shè)最少的那個(gè)饼齿。因?yàn)檫@個(gè)解決方案最為簡(jiǎn)單,只解決了問題蝙搔,并且沒有引入額外的復(fù)雜度和可能的負(fù)面后果缕溉。
參見:
- 你不需要它原則 (YAGNI)
- 沒有銀彈:軟件工程的本質(zhì)性與附屬性工作
- No Silver Bullet: Accidental Complexity and Essential Complexity
例子:
帕金森定理 (Parkinson's Law)
在工作能夠完成的時(shí)限內(nèi),工作量會(huì)一直增加吃型,直到所有可用時(shí)間都被填滿為止证鸥。
基于官僚機(jī)構(gòu)的研究背景,該定律被應(yīng)用于軟件開發(fā)中勤晚。該理論認(rèn)為枉层,團(tuán)隊(duì)在截止日期之前效率低下,然后在截止日期前趕緊完成工作,從而使實(shí)際截止日期變得隨意。
將這個(gè)定理與侯世達(dá)定律相結(jié)合壮不,則會(huì)獲得更加悲觀的觀點(diǎn):為了在規(guī)定時(shí)間內(nèi)完成工作,工作將增多矩欠,花費(fèi)比預(yù)期更長(zhǎng)的時(shí)間。
參見:
過早優(yōu)化效應(yīng) (Premature Optimization Effect)
過早優(yōu)化是萬惡之源悠夯。
在高德納的《goto 語句的結(jié)構(gòu)化編程》論文中癌淮,他寫到:“程序員們浪費(fèi)了大量的時(shí)間去思考或者擔(dān)心他們的程序中的非關(guān)鍵部分的速度。而在考慮調(diào)試和維護(hù)的時(shí)候沦补,這些所謂提高效率的做法實(shí)際上十分不妥乳蓄。我們應(yīng)該放棄小的效率點(diǎn),并且要在 97% 的時(shí)間提醒自己夕膀,過早優(yōu)化是萬惡之源虚倒。而且連那關(guān)鍵的 3% 也不能夠放過美侦。”
然而魂奥,過早優(yōu)化 (簡(jiǎn)而言之)可以定義為在我們知道需要做什么之前進(jìn)行優(yōu)化菠剩。
普特定律 (Putt's Law)
技術(shù)由兩類人主導(dǎo),一類是純粹的管理人員耻煤, 一類是純粹的技術(shù)人員具壮。
普特定律常常遵循普特推論:
每一個(gè)技術(shù)層次,假以時(shí)日哈蝇,能力將逆轉(zhuǎn)棺妓。
這些結(jié)論表明,由于各種選擇標(biāo)準(zhǔn)和群體組織的趨勢(shì)炮赦,技術(shù)組織的工作層面將有一些技術(shù)人員怜跑,以及一些不了解復(fù)雜性和挑戰(zhàn)的管理人員。這種現(xiàn)象可能是由于 彼得原理 (The Peter Principle) 或 呆伯特法則 (The Dilbert Principle) 造成的吠勘。
但是妆艘,應(yīng)該強(qiáng)調(diào)的是,諸如此類的定律是一種廣泛的概括看幼,可能適用于某些類型的組織,而不適用于其他組織幌陕。
參見:
里德定律 (Reed's Law)
大型網(wǎng)絡(luò)诵姜,尤其是社交網(wǎng)絡(luò)的效用會(huì)隨著網(wǎng)絡(luò)的大小呈指數(shù)級(jí)擴(kuò)增。
這一定律基于圖論搏熄,圖論中的效用與可能的子組數(shù)量呈正比棚唆,并且該增長(zhǎng)速度會(huì)比參與者的數(shù)量和可能的連接對(duì)數(shù)量要快。奧德利茲科 (Odlyzko) 和其他人認(rèn)為心例,里德定律夸大了系統(tǒng)本身的價(jià)值宵凌,因?yàn)樗鼈儧]有考慮到網(wǎng)絡(luò)效應(yīng)中人類認(rèn)知的限制。
參見:
復(fù)雜性守恒定律 (The Law of Conservation of Complexity or Tesler's Law)
該定律表明系統(tǒng)中存在著一定程度的復(fù)雜性止后,并且不能減少瞎惫。
系統(tǒng)中的某些復(fù)雜性是無意的。這是由于結(jié)構(gòu)不良译株,錯(cuò)誤或者糟糕的建模造成的瓜喇。這種無意的復(fù)雜性可以減少或者消除。然而歉糜,由于待解決問題固有的復(fù)雜性乘寒,某些復(fù)雜性是內(nèi)在的。這種復(fù)雜性可以轉(zhuǎn)移匪补,但不能消除伞辛。
該定律有趣的一點(diǎn)是烂翰,即使簡(jiǎn)化整個(gè)系統(tǒng),內(nèi)在的復(fù)雜性也不會(huì)降低蚤氏。它會(huì)轉(zhuǎn)移到用戶甘耿,并且用戶必須以更復(fù)雜的方式行事。
抽象泄漏定律 (The Law of Leaky Abstractions)
在某種程度上瞧捌,所有非平凡的抽象都是有泄漏的棵里。
喬爾斯·波爾斯基 (Joel Spolsky)
該定律指出,通常用于簡(jiǎn)化復(fù)雜系統(tǒng)的抽象姐呐,在某些情況下將底層系統(tǒng)泄漏出來殿怜,使得抽象表現(xiàn)出意外的行為。
例如加載文件并讀取其內(nèi)容曙砂。文件系統(tǒng) API 是較低級(jí)別內(nèi)核系統(tǒng)的抽象头谜,它們本身是與磁盤(或 SSD 的閃存)上的數(shù)據(jù)更改相關(guān)的物理過程的抽象。在大多數(shù)情況下鸠澈,處理文件(如二進(jìn)制數(shù)據(jù)流)的抽象將起作用柱告。但是,對(duì)于磁盤驅(qū)動(dòng)器笑陈,順序讀取數(shù)據(jù)將比隨機(jī)訪問快得多(由于頁面錯(cuò)誤的開銷增加)际度。但對(duì)于 SSD 驅(qū)動(dòng)器,此開銷不會(huì)出現(xiàn)涵妥。需要理解基礎(chǔ)細(xì)節(jié)來處理這種情況(例如乖菱,數(shù)據(jù)庫索引文件的良好結(jié)構(gòu)可以減少隨機(jī)訪問的開銷),開發(fā)人員需要合理的抽象蓬网,來處理不同的細(xì)節(jié)窒所。
當(dāng)引入更多的抽象時(shí),上面的例子會(huì)變得更復(fù)雜帆锋。Linux 操作系統(tǒng)允許通過網(wǎng)絡(luò)訪問文件吵取,但在本地表示為普通文件。如果存在網(wǎng)絡(luò)故障锯厢,這種抽象將會(huì)泄漏皮官。如果開發(fā)人員將這些文件視為普通文件,而不考慮它們可能會(huì)受到網(wǎng)絡(luò)延遲和故障的影響哲鸳,那么解決方案就會(huì)出錯(cuò)臣疑。
描述該定律的文章表明,過度依賴抽象徙菠,加上對(duì)底層過程的理解不足讯沈,實(shí)際上使得問題在某些情況下更加復(fù)雜。
參見:
真實(shí)的例子:
- Photoshop 啟動(dòng)緩慢:我過去遇到過一個(gè)問題,就是 Photoshop 啟動(dòng)緩慢缺狠,有時(shí)需要幾分鐘问慎。問題好像是 Photoshop 啟動(dòng)時(shí),會(huì)讀取當(dāng)前默認(rèn)打印機(jī)的一些信息挤茄。但是如叼,如果該打印機(jī)實(shí)際上是一臺(tái)網(wǎng)絡(luò)打印機(jī),則可能需要很長(zhǎng)的時(shí)間穷劈。將網(wǎng)絡(luò)打印機(jī)與本地打印機(jī)當(dāng)作同樣的抽象笼恰,導(dǎo)致連接不良的情況下出現(xiàn)問題。
帕金森瑣碎定理 (The Law of Triviality)
該定理顯示歇终,群體將給予更多的時(shí)間和注意力來處理瑣碎的問題社证,而不是用來處理嚴(yán)肅而實(shí)質(zhì)性的問題。
常見的虛構(gòu)例子是委員會(huì)批準(zhǔn)核電站的計(jì)劃评凝,他們大部分時(shí)間都在討論自行車棚的結(jié)構(gòu)追葡,而不是電廠本身等更為重要的設(shè)計(jì)。如果沒有大量的專業(yè)知識(shí)或者準(zhǔn)備奕短,很難給非常大的復(fù)雜主題討論提供寶貴的意見宜肉。但是,人們希望看到更多意見翎碑。因此谬返,他們傾向于將大量時(shí)間集中在很容易推敲,但不一定被看重的小細(xì)節(jié)上日杈。
由上面的虛構(gòu)例子產(chǎn)生了 Bike Shedding 的說法朱浴,以形容在瑣碎細(xì)節(jié)上浪費(fèi)時(shí)間這一行為。
Unix 哲學(xué) (The Unix Philosophy)
Unix 哲學(xué)指軟件組件應(yīng)該很小达椰,并專注于做一件特定的事情。將小而簡(jiǎn)單以及定義良好的單元組合在一起项乒,而不是使用大而復(fù)雜的多用途程序啰劲,可以更輕松地構(gòu)建系統(tǒng)。
像微服務(wù)架構(gòu)這種現(xiàn)代實(shí)踐可以認(rèn)為是這種哲學(xué)的應(yīng)用檀何,其中服務(wù)很小蝇裤,集中于做一件特定的事情,由簡(jiǎn)單的構(gòu)建塊組成復(fù)雜的行為频鉴。
Spotify 模型 (The Spotify Model)
Spotify 模型是團(tuán)隊(duì)和組織結(jié)構(gòu)的一種方法栓辜,已被 Spotify 實(shí)驗(yàn)室推廣開來。在此模型中垛孔,團(tuán)隊(duì)圍繞功能而非技術(shù)進(jìn)行組織藕甩。
Spotify 模型還普及了部落、行會(huì)以及章節(jié)的概念周荐,這些是組織結(jié)構(gòu)的其他組成部分狭莱。
沃德勒定律 (Wadler's Law)
任何語言設(shè)計(jì)中僵娃,討論下面列表中某個(gè)要素所花費(fèi)的總時(shí)間與其位置成正比。
- 語義 (Semantics)
- 語法 (Syntax)
- 詞法 (Lexical syntax)
- 注釋語法 (Lexical syntax of comments)
(簡(jiǎn)而言之腋妙,在語義上花費(fèi)一個(gè)小時(shí)默怨,就要在注釋語法上花費(fèi)八個(gè)小時(shí))。
與 帕金森瑣碎定理 類似, 沃德勒定律指出骤素,在設(shè)計(jì)語言時(shí)匙睹,與這些特征的重要性相比,花在語言結(jié)構(gòu)上的時(shí)間過多济竹。
參見:
惠頓定律 (Wheaton's Law)
不要像個(gè)傻子一樣痕檬。
威爾·惠頓 (Wil Wheaton)
這條定律由威爾 · 惠頓(曾出演過星際迷航:下一代、生活大爆炸)創(chuàng)造规辱,這個(gè)簡(jiǎn)潔而有力的定律旨在專業(yè)組織內(nèi)營(yíng)造和諧和尊重的環(huán)境谆棺。它可以在與同事交談、代碼審查罕袋、反駁觀點(diǎn)和批評(píng)的時(shí)候派上用場(chǎng)改淑。而且通常情況下,人們之間的專業(yè)交互也同樣適用浴讯。
原則
原則通常是與設(shè)計(jì)相關(guān)的準(zhǔn)則朵夏。
呆伯特法則 (The Dilbert Principle)
公司會(huì)傾向于系統(tǒng)地將工作能力差的員工提升到管理層,以使他們脫離工作流程榆纽。
史考特·亞當(dāng)斯 (Scott Adams)
呆伯特原則是由史考特·亞當(dāng)斯 (Dilbert 漫畫連環(huán)畫的創(chuàng)建者) 開發(fā)的一個(gè)管理概念仰猖,靈感來源于彼得原理。根據(jù)呆伯特原則奈籽,工作能力差的員工會(huì)被提升到管理層饥侵,從而限制他們所能造成的損害。亞當(dāng)斯首先在 1995 年《華爾街日?qǐng)?bào)》的一篇文章中解釋了這一原則衣屏,隨后在他 1996 年的商業(yè)書籍《呆伯特原則》中進(jìn)行了擴(kuò)展躏升。
參見:
帕累托法則 (The Pareto Principle or The 80/20 Rule)
生活中大多數(shù)事情不是均勻分布的。
帕累托法則可以幫你認(rèn)識(shí)到大多數(shù)結(jié)果來自少數(shù)投入:
- 某個(gè)軟件的 80% 代碼只占了總分配時(shí)間的 20%(相反狼忱,最難的 20% 代碼部分占用了 80% 的時(shí)間)
- 20% 的努力產(chǎn)生了 80% 的結(jié)果
- 20% 的工作創(chuàng)造了 80% 的收入
- 20% 的錯(cuò)誤導(dǎo)致了 80% 的崩潰
- 20% 的功能導(dǎo)致了 80% 的使用量
在 20 世紀(jì) 40 年代膨疏,公認(rèn)為質(zhì)量控制之父的美國(guó)羅馬尼亞工程師約瑟夫·朱蘭博士,開始將帕累托法則應(yīng)用于質(zhì)量問題钻弄。
這個(gè)原則也被稱為二八法則佃却,重要的少數(shù)法則和因素稀疏原則。
現(xiàn)實(shí)的例子:
- 微軟 2002 年的報(bào)告表明窘俺,修復(fù)最常出現(xiàn)的 20% 錯(cuò)誤饲帅,將消除 Windows 和 Office 中 80% 的
錯(cuò)誤和崩潰。報(bào)告地址
彼得原理 (The Peter Principle)
在等級(jí)制度中,人往往會(huì)被提升到他們的“無法勝任的水平”洒闸。
勞倫斯·彼得 (Laurence J. Peter)
這是由勞倫斯·彼得提出的一個(gè)管理概念染坯。彼得原理認(rèn)為,擅長(zhǎng)工作的人會(huì)得到提升丘逸,直到他們達(dá)到不再成功的水平 (即他們所“無法勝任的水平”)单鹿。基于此深纲,由于他們資歷更高仲锄,被公司開除的可能性較小 (除非他們表現(xiàn)非常糟糕)。而且他們將繼續(xù)擔(dān)任幾乎沒有本職技能的職位湃鹊,即使那些原本讓他們成功的能力在新工作中并無必要儒喊。
有的工程師對(duì)此特別感興趣,它們最初從事的是深度的技術(shù)工作币呵,但走上了管理其他工程師的職業(yè)道路——這意味著需要一個(gè)完全不同的技能樹怀愧。
參見:
魯棒性原則 (The Robustness Principle or Postel's Law)
在自己所做的事情上要保守, 在接受別人的事情上要自由。
通常應(yīng)用于服務(wù)器應(yīng)用程序開發(fā)中余赢,該原則指出芯义,你發(fā)送給其他人的內(nèi)容應(yīng)盡可能最小且符合要求,并且處理不符合要求的輸入妻柒。
該原則的目標(biāo)是構(gòu)建穩(wěn)健的系統(tǒng)扛拨。如果可以理解意圖,它們可以處理不良的輸入举塔。但是绑警,接受錯(cuò)誤格式的輸入可能存在安全隱患,特別是此類的輸入未經(jīng)過充分測(cè)試央渣。
SOLID
這是一個(gè)縮寫计盒,指的是:
- S:單一功能原則 (The Single Responsibility Principle)
- O:開閉原則 (The Open/Closed Principle)
- L:里氏替換原則 (The Liskov Substitution Principle)
- I:接口隔離原則 (The Interface Segregation Principle)
- D:依賴反轉(zhuǎn)原則 (The Dependency Inversion Principle)
這些是 Object-Oriented Programming 的關(guān)鍵原則。諸如此類的設(shè)計(jì)原則能夠幫助開發(fā)人員構(gòu)建更易于維護(hù)的系統(tǒng)芽丹。
單一功能原則 (The Single Responsibility Principle)
每個(gè)模塊或者類只應(yīng)該有一項(xiàng)功能章郁。
SOLID 的第一個(gè)原則。這個(gè)原則表明模塊或者類只應(yīng)該做一件事志衍。實(shí)際上,這意味著對(duì)程序功能的單個(gè)小更改聊替,應(yīng)該只需要更改一個(gè)組件楼肪。例如,更改密碼驗(yàn)證復(fù)雜性的方式應(yīng)該只需要更改程序的一部分惹悄。
理論上講春叫,這使代碼更健壯,更容易更改。知道正在更改的組件只有一個(gè)功能暂殖,這意味著測(cè)試更改更容易价匠。使用前面的例子,更改密碼復(fù)雜性組件應(yīng)該只影響與密碼復(fù)雜性相關(guān)的功能呛每。變更具有許多功能的組件可能要困難得多踩窖。
參見:
開閉原則 (The Open/Closed Principle)
實(shí)體應(yīng)開放擴(kuò)展并關(guān)閉修改。
SOLID 的第二個(gè)原則晨横。這個(gè)原則指出實(shí)體(可以是類洋腮、模塊、函數(shù)等)應(yīng)該能夠使它們的行為易于擴(kuò)展手形,但是它們的擴(kuò)展行為不應(yīng)該被修改啥供。
舉一個(gè)假設(shè)的例子,想象一個(gè)能夠?qū)?Markdown 轉(zhuǎn)換為 HTML 的模塊库糠。如果可以擴(kuò)展模塊伙狐,而不修改內(nèi)部模塊來處理新的 markdown 特征,而無需修改內(nèi)部模塊瞬欧,則可以認(rèn)為是開放擴(kuò)展贷屎。如果用戶不能修改處理現(xiàn)有 Markdown 特征的模塊,那么它被認(rèn)為是關(guān)閉修改黍判。
這個(gè)原則與面向?qū)ο缶幊叹o密相關(guān)豫尽,讓我們可以設(shè)計(jì)對(duì)象以便于擴(kuò)展,但是可以避免以意想不到的方式改變其現(xiàn)有對(duì)象的行為顷帖。
參見:
里氏替換原則 (The Liskov Substitution Principle)
可以在不破壞系統(tǒng)的情況下美旧,用子類型替換類型。
SOLID 的第三個(gè)原則贬墩。該原則指出榴嗅,如果組件依賴于類型,那么它應(yīng)該能夠使用該類型的子類型陶舞,而不會(huì)導(dǎo)致系統(tǒng)失敗或者必須知道該子類型的詳細(xì)信息嗽测。
舉個(gè)例子,假設(shè)我們有一個(gè)方法肿孵,讀取 XML 文檔唠粥。如果該方法使用基類型 file,則從 file 派生的任何內(nèi)容停做,都能用在該方法中晤愧。 如果 file 支持反向查找,并且 xml 解析器使用該函數(shù)蛉腌,但是派生類型 network file 嘗試反向查找時(shí)失敗官份,則 network file 將違反該原則只厘。
該原則與面向?qū)ο缶幊叹o密相關(guān),必須仔細(xì)建模舅巷、層次結(jié)構(gòu)羔味,以避免讓系統(tǒng)用戶混淆。
參見:
接口隔離原則 (The Interface Segregation Principle)
不應(yīng)強(qiáng)制任何客戶端依賴于它不使用的方法钠右。
SOLID 的第四個(gè)原則赋元。該原則指出組件的消費(fèi)者不應(yīng)該依賴于它實(shí)際上不使用的組件函數(shù)。
舉一個(gè)例子爬舰,假設(shè)我們有一個(gè)方法们陆,讀取 XML 文檔。它只需要讀取文件中的字節(jié)情屹,向前移動(dòng)或向后移動(dòng)坪仇。如果由于一個(gè)與文件結(jié)構(gòu)不相關(guān)的功能發(fā)生更改(例如更新文件安全性的權(quán)限模型),需要更新此方法垃你,則該原則已失效椅文。文件最好實(shí)現(xiàn) 可查詢流 接口,并讓 XML 讀取器使用該接口惜颇。
該原則與面向?qū)ο缶幊叹o密相關(guān)皆刺,其中接口,層次結(jié)構(gòu)和抽象類型用于不同組件的 minimise the coupling凌摄。 Duck typing 是一種通過消除顯式接口來強(qiáng)制執(zhí)行該原則的方法羡蛾。
參見:
依賴反轉(zhuǎn)原則 (The Dependency Inversion Principle)
高級(jí)模塊不應(yīng)該依賴于低級(jí)實(shí)現(xiàn)。
SOLID 的第五個(gè)原則锨亏。該原則指出痴怨,更高級(jí)別的協(xié)調(diào)組件不應(yīng)該知道其依賴項(xiàng)的詳細(xì)信息。
舉個(gè)例子器予,假設(shè)我們有一個(gè)從網(wǎng)站讀取元數(shù)據(jù)的程序浪藻。我們假設(shè)主要組件必須知道下載網(wǎng)頁內(nèi)容的組件,以及可以讀取元數(shù)據(jù)的組件乾翔。如果我們考慮依賴反轉(zhuǎn)爱葵,主要組件將僅依賴于可以獲取字節(jié)數(shù)據(jù)的抽象組件,然后是一個(gè)能夠從字節(jié)流中讀取元數(shù)據(jù)的抽象組件反浓,主要組件不需要了解 TCP萌丈、IP、HTTP雷则、HTML 等辆雾。
這個(gè)原則很復(fù)雜,因?yàn)樗坪蹩梢苑崔D(zhuǎn)系統(tǒng)的預(yù)期依賴性(因此得名)巧婶。實(shí)踐中乾颁,這也意味著,單獨(dú)的編排組件必須確保抽象類型的正確實(shí)現(xiàn)被使用(例如在前面的例子中艺栈,必須提供元數(shù)據(jù)讀取器組件英岭、HTTP 文件下載功能和 HTML 元標(biāo)簽讀取器)。然后湿右,這涉及諸如 Inversion of Control 和 Dependency Injection 之類的模式诅妹。
參見:
不要重復(fù)你自己原則 (The DRY Principle)
系統(tǒng)中,每一塊知識(shí)都必須是單一毅人、明確而權(quán)威的吭狡。
DRY 是 Do not Repeat Yourself 的縮寫。這個(gè)原則旨在幫助開發(fā)人員減少代碼的重復(fù)性丈莺,并將公共代碼保存在一個(gè)地方划煮。最初由安德魯·亨特和戴夫·托馬斯在 1999 年出版的《程序員修煉之道》中引用。
與 DRY 相反的是 WET(功能實(shí)現(xiàn)兩次或者喜歡打字 Write Everything Twice or We Enjoy Typing)缔俄。
實(shí)際上弛秋,如果你在兩個(gè)或更多的地方有相同的功能,你可以使用 DRY 原則將它們合并為一個(gè)俐载,并在任何你需要的地方重復(fù)使用蟹略。
參見:
KISS 原則 (The KISS Principle)
保持簡(jiǎn)單和直白。
KISS 原則指明了如果大多數(shù)的系統(tǒng)能夠保持簡(jiǎn)單而非復(fù)雜化遏佣,那么他們便能夠工作在最佳狀態(tài)挖炬。因此,簡(jiǎn)單性應(yīng)該是設(shè)計(jì)時(shí)的關(guān)鍵指標(biāo)状婶,同時(shí)也要避免不必要的復(fù)雜度意敛。這個(gè)短語最初出自 1960 年的美國(guó)海軍飛機(jī)工程師凱利 · 約翰遜 (Kelly Johnson)。
這一原則的最好例證便是約翰遜給設(shè)計(jì)工程師一些實(shí)用工具的故事太抓。那時(shí)的他們正面臨著一個(gè)挑戰(zhàn)空闲,即他們參與設(shè)計(jì)的噴氣式飛機(jī)必須能夠讓普通的機(jī)械師在戰(zhàn)場(chǎng)上僅僅用這些工具進(jìn)行維修,因此走敌,“直白”這個(gè)詞應(yīng)指的是損壞的事物本身和修復(fù)用工具的復(fù)雜度兩者之間的關(guān)系碴倾,而非工程師們自身的能力水平。
參見:
你不需要它原則 (YAGNI)
這是 You Aren't Gonna Need It 的縮寫掉丽。
只有當(dāng)你需要某些東西的時(shí)候跌榔,才去實(shí)現(xiàn)它們,而不是在你預(yù)見的時(shí)候捶障。
Ron Jeffries 是極限編程的創(chuàng)始人之一以及書籍《Extreme Programming Installed》的作者僧须。
極限編程原則告誡開發(fā)人員,他們應(yīng)該只實(shí)現(xiàn)當(dāng)前所需的功能项炼,并避免實(shí)現(xiàn)未來需要的功能担平,僅在必要時(shí)才實(shí)現(xiàn)示绊。
遵守這一原則可以減小代碼庫大小,同時(shí)避免時(shí)間和生產(chǎn)力浪費(fèi)在沒有價(jià)值的功能上暂论。
參見:
分布式計(jì)算的謬論 (The Fallacies of Distributed Computing)
又稱 網(wǎng)絡(luò)計(jì)算的謬誤面褐,這是一系列關(guān)于分布式計(jì)算的猜想(或者看法),這些猜想可能會(huì)引起軟件開發(fā)中的失敗取胎。這些假設(shè)是:
- 網(wǎng)絡(luò)可靠
- 延遲為零
- 帶寬無限
- 網(wǎng)絡(luò)安全
- 拓?fù)浜愣?/li>
- 單一管理員
- 運(yùn)輸成本為零
- 網(wǎng)絡(luò)為同構(gòu)的
前 4 各項(xiàng)目由 Bill Joy 和 Tom Lyon 于 1991 左右提出展哭。并被 James Gosling 首次歸類于“網(wǎng)絡(luò)計(jì)算的謬誤”;后 L. Peter Deutsch 添加了第 5闻蛀、6匪傍、7 個(gè)謬誤;90 年代末觉痛,Gosling 添加了最后一個(gè)謬誤役衡。
這些內(nèi)容受到了 太陽微系統(tǒng) (Sun Microsystems) 內(nèi)部當(dāng)時(shí)所發(fā)生的事情的啟發(fā)。
在設(shè)計(jì)彈性代碼的時(shí)候秧饮,應(yīng)該仔細(xì)考慮這些謬誤映挂,并假設(shè)其中任何一個(gè)謬誤都可能引起處理分布式系統(tǒng)的復(fù)雜性和現(xiàn)實(shí)性時(shí)的邏輯缺陷。
參見:
閱讀清單
如果你覺得這些概念很有趣柑船,你可能會(huì)喜歡以下書籍。
- 《極限編程安裝》谷歌閱讀地址 - 涵蓋極限編程的核心原則泼各。
- 《人月神話》谷歌閱讀地址鞍时、豆瓣地址 - 軟件工程的經(jīng)典書籍。這本書的中心主題就是布魯克斯法則 扣蜻。
- 《哥德爾逆巍、艾舍爾、巴赫:集異璧之大成》谷歌閱讀地址莽使、豆瓣地址 - 這本書很難分類锐极。侯世達(dá)定律 來自此書。
- 《呆伯特原則》谷歌閱讀地址 - 一本審視美國(guó)企業(yè)的漫畫書芳肌,其作者創(chuàng)造了呆伯特法則灵再。
- 《彼得原理》谷歌閱讀地址 - 一本專注于大型組織和人員管理的挑戰(zhàn)的漫畫書,也是彼得原理的來源亿笤。
TODO
嗨翎迁!如果你讀到這里,點(diǎn)擊了一個(gè)我尚未編寫的主題鏈接净薛,我感到很抱歉汪榔。這是正在進(jìn)行中的工作!
隨意給 hacker-laws 和 hacker-laws-zh 提 Issue 或者 Pull Request肃拜。
參考資料
https://github.com/nusr/hacker-laws-zh
https://github.com/dwmkerr/hacker-laws
Kotlin開發(fā)者社區(qū)
專注分享 Java痴腌、 Kotlin雌团、Spring/Spring Boot、MySQL士聪、redis辱姨、neo4j、NoSQL戚嗅、Android、JavaScript枢舶、React懦胞、Node、函數(shù)式編程凉泄、編程思想躏尉、"高可用,高性能后众,高實(shí)時(shí)"大型分布式系統(tǒng)架構(gòu)設(shè)計(jì)主題胀糜。