8000 GitHub - sunqqq1987/hacker-laws-zh: 💻📖对开å‘人员有用的定律ã€ç†è®ºã€åŽŸåˆ™å’Œæ¨¡å¼ã€‚(Laws, Theories, Principles and Patterns that developers will find useful.)
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

💻📖对开å‘人员有用的定律ã€ç†è®ºã€åŽŸåˆ™å’Œæ¨¡å¼ã€‚(Laws, Theories, Principles and Patterns that developers will find useful.)

License

Notifications You must be signed in to change notification settings

sunqqq1987/hacker-laws-zh

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

hacker-laws 的中文翻译。

对开å‘人员有用的定律ã€ç†è®ºã€åŽŸåˆ™å’Œæ¨¡å¼ã€‚(Laws, Theories, Principles and Patterns that developers will find useful.)

为了方便阅读,维基百科增加了中文链接。英文链接表示 hacker-laws 项目尚未完æˆçš„主题。

中国无法访问维基百科说明

喜欢点 star ã€å…³æ³¨ç‚¹ watch ã€è´¡çŒ®ç‚¹ fork 。翻译错æ¼ä¹‹å¤„,欢迎指正ï¼

介ç»

å½“äººä»¬è°ˆè®ºå¼€å‘æ—¶ï¼Œä¼šèŠåˆ°è®¸å¤šå®šå¾‹ã€‚这个仓库收录了一些最常è§çš„定律。

â—: 这个仓库包å«å¯¹ä¸€äº›å®šå¾‹ã€åŽŸåˆ™ä»¥åŠæ¨¡å¼çš„è§£é‡Šï¼Œä½†ä¸æå€¡å…¶ä¸­ä»»ä½•ä¸€ä¸ªã€‚ 它们的应用始终存在ç€äº‰è®ºï¼Œå¹¶ä¸”很大程度上å–决于你正在åšä»€ä¹ˆã€‚

定律

现在我们开始å§ï¼

90-9-1 法则 (90–9–1 Principle or 1% Rule)

90-9-1 法则表明,在诸如维基这样的互è”网社区中,90% 的用户åªçœ‹å†…容并ä¸å‚与互动,9% 的用户会å‚ä¸Žè®¨è®ºï¼Œè€Œåªæœ‰ 1% 的用户会创造内容。

现实世界的例å­ï¼š

  • 2014 年,对四个å¥åº·çš„æ•°å­—社交网络进行的一项研究å‘现,排åå‰ 1% 的人创造了 73% 的帖å­ï¼Œç´§éšå…¶åŽçš„ 9% å¹³å‡å  25%,其余的 90% 的人平å‡å  2%。 (å‚考)

å‚è§ï¼š

阿姆达尔定律 (Amdahl's Law)

阿姆达尔定律显示了计算任务通过增加系统资æºå¯ä»¥èŽ·å¾—çš„åŠ é€Ÿæ½œåŠ›ã€‚è¯¥å…¬å¼é€šå¸¸ç”¨äºŽå¹¶è¡Œè®¡ç®—中。它å¯ä»¥é¢„测增加处ç†å™¨æ•°é‡çš„实际收益,该收益å—到程åºå¯å¹¶è¡Œæ¯”例的é™åˆ¶ã€‚

举例说明:如果程åºç”± Aã€B 两个部分组æˆï¼ŒA 部分必须由å•个处ç†å™¨æ‰§è¡Œï¼ŒB 部分å¯ä»¥å¹¶è¡Œè¿è¡Œã€‚é‚£ä¹ˆå‘æ‰§è¡Œç¨‹åºçš„系统添加多个处ç†å™¨åªèƒ½èŽ·å¾—æœ‰é™çš„好处。它å¯ä»¥æžå¤§åœ°æå‡ B 部分的è¿è¡Œé€Ÿåº¦ï¼Œä½† A 部分的è¿è¡Œé€Ÿåº¦å°†ä¿æŒä¸å˜ã€‚

下图展示了一些è¿è¡Œé€Ÿåº¦çš„æå‡æ½œèƒ½çš„例å­ï¼š

阿姆达尔定律

(å›¾ç‰‡æ¥æºï¼šBy Daniels220 at English Wikipedia, Creative Commons Attribution-Share Alike 3.0 Unported, https://en.wikipedia.org/wiki/File:AmdahlsLaw.svg)

å¯ä»¥çœ‹å‡ºï¼Œ50ï¼… 并行化的程åºåœ¨ä½¿ç”¨å¤§äºŽ 10 个处ç†å•元之åŽçš„速度æå‡æ”¶æ•ˆç”šå¾®ï¼Œè€Œ 95ï¼… 并行化的程åºåœ¨ä½¿ç”¨è¶…过一åƒä¸ªå¤„ç†å•元之åŽä»ç„¶å¯ä»¥æ˜¾è‘—æå‡é€Ÿåº¦ã€‚

éšç€æ‘©å°”å®šå¾‹å‡æ…¢ï¼Œå•个处ç†å™¨çš„速度增加缓慢,并行化是æé«˜æ€§èƒ½çš„关键。图形编程是一个æžå¥½çš„例å­ï¼Œçް代ç€è‰²å™¨å¯ä»¥å¹¶è¡Œæ¸²æŸ“å•个åƒç´ æˆ–片段。这也是现代显å¡é€šå¸¸å…·æœ‰æ•°åƒä¸ªå¤„ç†æ ¸å¿ƒï¼ˆGPU 或ç€è‰²å™¨å•元)的原因。

å‚è§ï¼š

破窗效应 (The Broken Windows Theory)

在破窗ç†è®ºä¸­è®¤ä¸ºï¼Œä¸€äº›æ˜Žæ˜¾çš„犯罪迹象(或缺ä¹çŽ¯ä¿æ„识)ä¼šå¯¼è‡´è¿›ä¸€æ­¥çš„ã€æ›´ä¸¥é‡çš„犯罪(或环境的进一步æ¶åŒ–)。

破窗ç†è®ºå·²åº”用于软件开å‘中,它表明劣质代ç (或 Technical Debt)å¯èƒ½ä¼šå½±å“åŽç»­ä¼˜åŒ–的效率,从而进一步造æˆä»£ç åŠ£åŒ–ï¼›éšç€æ—¶é—´çš„æŽ¨ç§»ï¼Œè¿™ç§æ•ˆåº”将会导致代ç è´¨é‡å¤§å¹…下é™ã€‚

å‚è§ï¼š

例å­ï¼š

布é²å…‹æ–¯æ³•则 (Brooks's Law)

软件开å‘åŽæœŸï¼Œæ·»åŠ äººåŠ›åªä¼šä½¿é¡¹ç›®å¼€å‘得更慢。

这个定律表明,在许多情况下,试图通过增加人力æ¥åŠ é€Ÿå·²å»¶æœŸé¡¹ç›®çš„äº¤ä»˜ï¼Œå°†ä¼šä½¿é¡¹ç›®äº¤ä»˜å¾—æ›´æ™šã€‚å¸ƒé²å…‹æ–¯ä¹Ÿæ˜Žç™½ï¼Œè¿™æ˜¯ä¸€ç§è¿‡åº¦ç®€åŒ–ã€‚ä½†ä¸€èˆ¬çš„è®ºæ®æ˜¯ï¼Œæ–°èµ„æºçš„æ—¶é—´å¢žåŠ å’Œé€šä¿¡å¼€é”€ï¼Œä¼šåœ¨çŸ­æœŸå†…ä½¿å¼€å‘é€Ÿåº¦å‡æ…¢ã€‚而且,许多任务是密ä¸å¯åˆ†çš„,æ¢å¥è¯è¯´ï¼Œè¿™æ ·å¯ä»¥ä½¿æ›´å¤šçš„资æºä¹‹é—´èƒ½è½»æ˜“分é…,这也æ„å‘³ç€æ½œåœ¨çš„速度增长也更低。

谚语 ä¹ä¸ªå¥³äººä¸èƒ½åœ¨ä¸€ä¸ªæœˆå†…ç”Ÿä¸€ä¸ªå­©å­ ä¸Žå¸ƒé²å…‹æ–¯æ³•则åŒå‡ºä¸€è¾™ï¼Œç‰¹åˆ«æ˜¯æŸäº›ä¸å¯åˆ†å‰²æˆ–者并行的工作。

这是《人月神è¯ã€‹çš„中心主题。

å‚è§ï¼š

CAP å®šç† (CAP Theorem or Brewer's Theorem)

CAP 定ç†ç”± Eric Brewer æ‰€å®šä¹‰ï¼Œå®ƒæŒ‡å‡ºå¯¹äºŽåˆ†å¸ƒå¼æ•°æ®å­˜å‚¨æ¥è¯´ï¼Œä¸å¯èƒ½åŒæ—¶æ»¡è¶³ä»¥ä¸‹ä¸‰ç‚¹ï¼š

  • 一致性 (Consistency)ï¼šåœ¨è¯»å–æ•°æ®æ—¶ï¼Œæ¯ä¸ªè¯·æ±‚都会接收到 最新的 æ•°æ®ï¼Œæˆ–者返回错误。
  • å¯ç”¨æ€§ (Availability): åœ¨è¯»å–æ•°æ®æ—¶ï¼Œæ¯ä¸ªè¯·æ±‚都会接收到一个 éžé”™è¯¯çš„å“应,但ä¸èƒ½ä¿è¯è¯¥æ•°æ®æ˜¯ 最新的 æ•°æ®ã€‚
  • 分区容错性 (Partition Tolerance)ï¼šå½“èŠ‚ç‚¹ä¹‹é—´ä»»æ„æ•°é‡çš„网络请求失败时,系统能按预期继续è¿è¡Œã€‚

核心论è¯å¦‚下:因为无法ä¿è¯ä¸ä¼šå­˜åœ¨ç½‘络分区(å‚è§åˆ†å¸ƒå¼è®¡ç®—的谬论 (The Fallacies of Distributed Computing)),所以在分区的情况下,我们å¯ä»¥é€‰æ‹©å–æ¶ˆå½“å‰æ“作(增加一致性并é™ä½Žå¯ç”¨æ€§ï¼‰ï¼Œæˆ–者选择继续进行该æ“作(增加å¯ç”¨æ€§é™ä½Žä¸€è‡´æ€§ï¼‰ã€‚

该定ç†çš„åå­—æ¥æºäºŽä¸€è‡´æ€§ (Consistency)ã€å¯ç”¨æ€§ (Availability)ã€åˆ†åŒºå®¹é”™æ€§ (Partition Tolerance) 的首字æ¯ã€‚请注æ„,这与 ACID 没有任何关系,因为其对一致性有å¦ä¸€ç§å®šä¹‰ã€‚最近å‘展出æ¥çš„ PACELC 定ç†ä¸Ž CAP 定ç†ç›¸æ¯”,增加了对网络 未 分区时(å³ç³»ç»ŸæŒ‰é¢„期æ“作时)的延迟和一致性的约æŸã€‚

大多数的现代数æ®åº“å¹³å°ä¼šé€šè¿‡å‘æ•°æ®åº“用户æä¾›é€‰é¡¹çš„æ–¹å¼ï¼Œæ¥é€‰æ‹©æ˜¯éœ€è¦é«˜åº¦å¯ç”¨çš„æ“ä½œï¼ˆæ¯”å¦‚â€œè„读 (dirty read)â€ï¼‰ï¼Œè¿˜æ˜¯é«˜åº¦ä¸€è‡´çš„æ“ä½œ(比如“法定确认写写入 (quorum acknowledged write)â€)——这间接地承认了这一定ç†ã€‚

现实世界的例å­ï¼š

  • Inside Google Cloud Spanner and the CAP Theorem - 该文详细介ç»äº† Cloud Spanner 是如何工作的,表é¢ä¸Šè¯¥å¹³å°ä¼¼ä¹Žèƒ½å¤Ÿä¿è¯ CAP 三者,但实际上ä¾ç„¶æ˜¯ä¸€ä¸ª CP 系统,å³åªæœ‰ä¸€è‡´æ€§å’Œåˆ†åŒºå®¹é”™æ€§ã€‚

å‚è§ï¼š

康å¨å®šå¾‹ (Conway's Law)

这个定律说明了系统的技术边界å¯ä»¥å应一个组织的结构,它通常会在改进组织时被æåŠã€‚康å¨å®šå¾‹è¡¨æ˜Žï¼Œå¦‚果一个组织被分散æˆè®¸å¤šå°è€Œæ— è”系的å•元,那么它开å‘的软件也是å°è€Œåˆ†æ•£çš„。如果组织是更多地围绕以功能或æœåŠ¡ä¸ºå¯¼å‘çš„åž‚ç›´ç»“æž„ï¼Œé‚£ä¹ˆè½¯ä»¶ç³»ç»Ÿä¹Ÿä¼šåæ˜ è¿™ä¸€ç‚¹ã€‚

å‚è§ï¼š

åŽå®æ±‰å§†å®šå¾‹ (Cunningham's Law)

åœ¨ç½‘ç»œä¸Šæƒ³å¾—åˆ°æ­£ç¡®ç­”æ¡ˆçš„æœ€å¥½æ–¹æ³•ä¸æ˜¯æé—®é¢˜ï¼Œè€Œæ˜¯å‘布一个错误的答案。

æ®å²è’‚芬·麦克基迪说,沃德·åŽå®æ±‰å§†æ—©åœ¨ 20 世纪 80 年代早期的时候建议他,在互è”ç½‘ä¸ŠèŽ·å¾—æ­£ç¡®ç­”æ¡ˆçš„æœ€å¥½æ–¹æ³•ä¸æ˜¯æé—®é¢˜ï¼Œè€Œæ˜¯å‘布一个错误的答案。麦克基迪称这为åŽå®æ±‰å§†å®šå¾‹ï¼Œè€ŒåŽå®æ±‰å§†ä¸ä»¥ä¸ºç„¶ï¼Œå¹¶è§‰å¾—这是“错误的引用â€ã€‚最åˆè¿™æ¡å®šå¾‹åªæ˜¯ç”¨äºŽæè¿° Usenet ä¸Šçš„ç¤¾äº¤è¡Œä¸ºï¼Œä½†åŽæ¥ä¹Ÿæ¸æ¸ç”¨äºŽå…¶ä»–的在线社区(如 Wikipediaã€Redditã€Twitterã€Facebook 等)。

å‚è§ï¼š

é‚“å·´æ•°å­— (Dunbar's Number)

é‚“å·´æ•°å­—æ˜¯å¯¹ä¸€ä¸ªäººèƒ½å¤Ÿä¿æŒç¨³å®šç¤¾ä¼šå…³ç³»çš„人数的认知æžé™â€”—在这ç§å…³ç³»ä¸­ï¼Œä¸€ä¸ªäººçŸ¥é“æ¯ä¸ªäººæ˜¯è°ï¼Œä¹ŸçŸ¥é“æ¯ä¸ªäººä¸Žå…¶ä»–人的关系如何。而对这一数字的确切值则有ç€ä¸€äº›ä¸åŒæ„è§ã€‚邓巴指出,人仅能轻æ¾åœ°ç»´æŒ 150 个稳定的关系。这样的关系在一个更社会化的背景中,便是当你碰巧在酒å§é‡Œç¢°åˆ°è¿™äº›äººæ—¶å€™ï¼Œä½ ä¸ä¼šå› ä¸ºåŠ å…¥ä»–ä»¬è€Œæ„Ÿåˆ°å°´å°¬ã€‚é‚“å·´æ•°å­—çš„ä¼°è®¡å€¼ä¸€èˆ¬åœ¨ 100 至 250 之间。

和人与人之间稳定的关系一样,开å‘人员与代ç åº“的关系也需è¦åŠªåŠ›ç»´æŠ¤ã€‚å½“é¢å¯¹å¤§åž‹ã€å¤æ‚çš„é¡¹ç›®ï¼Œæˆ–è®¸å¤šé¡¹ç›®çš„å½’å±žæƒæ—¶ï¼Œæˆ‘们会ä¾èµ–于约定ã€ç­–略和建模过程æ¥è¿›è¡Œæ‰©å±•。邓巴数字ä¸ä»…在办公室规模的扩大的过程中举足轻é‡ï¼Œè€Œä¸”在设置团队工作范围,或决定系统何时应该注é‡äºŽè¾…助建模和组织管ç†å¼€é”€è‡ªåŠ¨åŒ–çš„å·¥å…·æ—¶ï¼Œä¹Ÿæ˜¯éžå¸¸é‡è¦çš„。将邓巴数字放入工程内容中进行类比,那就是您能加入并有信心éšå«éšåˆ°è¿›è¡Œè½®æ¢çš„项目数(亦或是å•ä¸ªé¡¹ç›®çš„è§„èŒƒåŒ–å¤æ‚性)。

å‚è§ï¼š

é‚“å®-克鲿 ¼æ•ˆåº” (The Dunning-Kruger Effect)

无能的人往往ä¸ä¼šæ„识到自己的无能。而得出正确答案所需è¦çš„æŠ€èƒ½ï¼Œæ­£æ˜¯ä½ è®¤è¯†åˆ°ä½•为正确答案所需è¦çš„æŠ€èƒ½ã€‚

(大å«Â·é‚“å® (David Dunning))

é‚“å®-克鲿 ¼æ•ˆåº”是一ç§ç†è®ºä¸Šçš„认知å差,大å«Â·é‚“å®å’Œè´¾æ–¯æ±€Â·å…‹é²æ ¼åœ¨ 1999 年的一项心ç†å­¦ç ”究和论文中对此进行了æè¿°ã€‚研究表明,在一项任务中能力水平较低的人会更容易高估自己的能力。之所以会产生这ç§åå‘ï¼Œæ˜¯å› ä¸ºä¸€ä¸ªäººå¯¹é—®é¢˜æˆ–é¢†åŸŸçš„å¤æ‚性有足够的认识时,æ‰èƒ½å¤Ÿé’ˆå¯¹è‡ªå·±åœ¨è¯¥é¢†åŸŸçš„工作能力æå‡ºæ˜Žæ™ºçš„æ„è§ã€‚

é‚“å®-克鲿 ¼æ•ˆåº”也有å¦ä¸€ä¸ªç±»ä¼¼çš„,更显å¼çš„æè¿°ï¼Œå³â€œä¸€ä¸ªäººå¯¹æŸä¸ªé¢†åŸŸçš„了解越少,他就越容易轻视这个领域的难度,从而更倾å‘于相信自己å¯ä»¥è½»æ˜“地解决该领域的问题â€ã€‚该效应与技术高度相关,具体表现为ä¸å¤ªç†Ÿæ‚‰æŸä¸ªé¢†åŸŸçš„个人(å¦‚éžæŠ€æœ¯å›¢é˜Ÿæˆå‘˜æˆ–ç»éªŒè¾ƒå°‘的团队æˆå‘˜)会更有å¯èƒ½ä½Žä¼°è§£å†³è¯¥é¢†åŸŸé—®é¢˜æ‰€éœ€çš„工作é‡ã€‚

éšç€å¯¹æŸä¸€é¢†åŸŸçš„ç†è§£å’Œç»éªŒçš„增长,人们很å¯èƒ½ä¼šé‡åˆ°å¦ä¸€ç§æ•ˆåº”-虚幻的优越性 (Illusory superiority),å³ç‰¹å®šé¢†åŸŸå†…的丰富ç»éªŒä½¿å¾—他们更容易高估他人的能力,或低估自己的能力。总而言之,这些影å“都归咎于认知å差。当æ„识到å差存在时,我们å¯ä»¥å°½é‡æå‡ºæ„è§æ¥æ¶ˆé™¤è¿™äº›å差,这样往往å¯ä»¥é¿å…异议。

真实案例:

  • è‹¹æžœå…¬å¸ vs è”邦调查局:为什么这个åæé¹°æ´¾æ”¹å˜äº†ç«‹åœº (Apple vs. FBI: Why This Anti-Terror Hawk Switched Sides) - 2016 年,å‚议员林赛·格雷厄姆改å˜äº†ä»–对苹果在设备加密中创建“åŽé—¨â€çš„立场。起åˆï¼Œæ ¼é›·åŽ„å§†æ›¾æ‰¹è¯„è‹¹æžœå…¬å¸å对创建“åŽé—¨â€ï¼Œå› ä¸ºä»–è®¤ä¸ºè¿™å¯¹è°ƒæŸ¥æ½œåœ¨çš„ææ€–计划是必è¦çš„。然而,éšç€ä»–å¯¹è¿™ä¸ªé¢†åŸŸçš„æŠ€æœ¯å¤æ‚性有了更多的了解,格雷厄姆æ„识到这比他原先想的è¦å›°éš¾å¾ˆå¤šï¼Œå¹¶å¯èƒ½ä¼šäº§ç”Ÿä¸¥é‡çš„è´Ÿé¢åŽæžœã€‚这便是邓å®-克鲿 ¼æ•ˆåº”的真实案例--网络安全专家会更清楚如何利用这样的åŽé—¨ï¼Œå› ä¸ºä»–们对该领域有深刻的ç†è§£ï¼›è€Œå¤–行人士å¯èƒ½ä¼šç®€å•地将设备安全类比于物ç†ä¸Šçš„安全,执法时å¯ä»¥ä½¿ç”¨â€œä¸‡èƒ½é’¥åŒ™â€ï¼Œä½†è¿™æ˜¾ç„¶ä¸Žç½‘络安全中的现代加密ä¸å¯åŒæ—¥è€Œè¯­ã€‚

费茨法则 (Fitts's Law)

该法则指出,移动到目标区域所需的时间是到目标的è·ç¦»é™¤ä»¥ç›®æ ‡å®½åº¦çš„函数。

Diagram: Fitts Law

(å›¾ç‰‡æ¥æºï¼šBy Foobar628 at English Wikipedia, Creative Commons Attribution-Share Alike 3.0 Unported, https://en.wikipedia.org/wiki/Fitts%27s_law#/media/File:Fitts_Law.svg)

费茨法则决定了在设计 UX 或 UI 时,交互元素应该尽å¯èƒ½å¤§ï¼Œè€Œç”¨æˆ·æ³¨æ„力区域和交互元素之间的è·ç¦»åº”该尽å¯èƒ½å°ã€‚这会对设计产生影å“,例如将相近的任务进行归类分组等。

åŒæ—¶å®ƒè¿˜å°†â€œé­”è§’ (Magic Corners)â€è¿™ä¸€æ¦‚念正å¼åŒ–,å³åœ¨è§’è½æ”¾ç½®å…³é”®çš„ UI 元素,从而使得用户å¯ä»¥é€šè¿‡ç§»åŠ¨é¼ æ ‡è½»æ¾ç‚¹å‡»åˆ°ã€‚Windows 的开始按钮便ä½äºŽé­”角处便于选择,而有趣的是 MacOS æ°æ°ç›¸å,它的“关闭窗å£â€æŒ‰é’® ä¸å¤„于 魔角处,从而能有效å‡å°è¢«è¯¯ç‚¹å‡»çš„æ¦‚率。

å‚è§ï¼š

盖尔定律 (Gall's Law)

一个切实å¯è¡Œçš„夿‚系统势必是从一个切实å¯è¡Œçš„简å•系统å‘展而æ¥çš„ã€‚ä»Žå¤´å¼€å§‹è®¾è®¡çš„å¤æ‚系统根本ä¸åˆ‡å®žå¯è¡Œï¼Œæ— æ³•修修补补让它切实å¯è¡Œã€‚你必须由一个切实å¯è¡Œçš„简å•ç³»ç»Ÿé‡æ–°å¼€å§‹ã€‚

约翰·盖尔 (John Gall)

ç›–å°”å®šå¾‹è¯´æ˜Žäº†è®¾è®¡é«˜åº¦å¤æ‚的系统很å¯èƒ½ä¼šå¤±è´¥ã€‚它们很难一蹴而就,更多是从简å•çš„ç³»ç»Ÿé€æ¸æ¼”å˜è€Œæ¥ã€‚

最典型的例å­ä¾¿æ˜¯äº’è”网。如今的互è”ç½‘æ˜¯ä¸€ä¸ªé«˜åº¦å¤æ‚çš„ç³»ç»Ÿï¼Œè€Œå®ƒæœ€æ—©åªæ˜¯è¢«å®šä¹‰ä¸ºä¸€ç§åœ¨å­¦æœ¯æœºæž„之间共享内容的方å¼ã€‚互è”网æˆåŠŸå®žçŽ°äº†æœ€åˆçš„目标,并且éšç€æ—¶é—´ä¸æ–­æ¼”化,最终æˆå°±äº†å¦‚ä»Šçš„å¤æ‚ç¹è£ã€‚

å‚è§ï¼š

å¤å¾·å“ˆç‰¹å®šå¾‹ (Goodhart's Law)

å½“åŽ‹åŠ›æ–½äºŽå…¶ä¸Šä»¥è¿›è¡ŒæŽ§åˆ¶æ—¶ï¼Œä»»ä½•è§‚æµ‹åˆ°çš„ç»Ÿè®¡æ’æ€§éƒ½å€¾å‘消散。

查尔斯·å¤å¾·å“ˆç‰¹ (Charles Goodhart)

å¦è§ï¼š

当一个措施本身æˆä¸ºç›®æ ‡æ—¶ï¼Œå®ƒå°±ä¸å†æ˜¯ä¸€ä¸ªå¥½çš„æŽªæ–½ã€‚

玛丽莲·斯特拉腾 (Marilyn Strathern)

æ ¹æ®è¿™ä¸€å®šå¾‹ï¼Œç”±æµ‹é‡é©±åŠ¨çš„ä¼˜åŒ–å而å¯èƒ½å¯¼è‡´æµ‹é‡ç»“果本身的说æœåЛ䏋é™ã€‚盲目使用一些过度严格筛选的方法 (KPIs) å¯èƒ½ä¼šäº§ç”Ÿä¸€äº›ä¸è‰¯çš„å½±å“。人们会倾å‘于用“钻空å­â€çš„行为去åšå±€éƒ¨ä¼˜åŒ–ï¼Œä»Žè€Œæ»¡è¶³ä¸€äº›ç‰¹å®šçš„åº¦é‡æ ‡å‡†ï¼Œè€Œä¸ä¼šåœ¨æ„整体的结果。

现实中的例å­ï¼š

  • Assert-free 测试å¯ä»¥è¾¾åˆ°ä»£ç è¦†ç›–率的预期,但度é‡çš„目的应该是创造ç»è¿‡è‰¯å¥½æµ‹è¯•的软件。
  • ç”± commits 的行数æ¥è¯„ä»·å¼€å‘人员的表现,从而导致了ä¸åˆç†çš„代ç åº“扩增。

å‚è§

汉隆的剃刀 (Hanlon's Razor)

能解释为愚蠢的,就ä¸è¦è§£é‡Šä¸ºæ¶æ„的。

罗伯特·汉隆 (Robert J. Hanlon)

这一原则表明,一个行为所产生的消æžç»“æžœå¹¶ä¸æ˜¯æ¶æ„。相å,消æžç»“果更有å¯èƒ½å½’咎于这些没有得到充分ç†è§£çš„行动或影å“。

席克定律 (Hick's Law or Hick-Hyman Law)

决策时间和å¯ä¾›é€‰æ‹©çš„选项数é‡å‘ˆå¯¹æ•°å¢žé•¿å…³ç³»ã€‚

William Edmund Hick and Ray Hyman

在下方的等å¼ä¸­ï¼ŒT 是åšå‡ºå†³å®šæ‰€èŠ±è´¹çš„æ—¶é—´ï¼Œn 是选项的数é‡ï¼Œb 是一个由数æ®åˆ†æžæ‰€ç¡®å®šçš„常数。

席克定律

(图片å‚考:Creative Commons Attribution-Share Alike 3.0 Unported, https://en.wikipedia.org/wiki/Hick%27s_law)

该定律仅适用于选项 æŒ‰é¡ºåºæŽ’åˆ— 的情况,例如 ABCD。这éšå«åœ¨ä»¥äºŒä¸ºåº•的对数中,也就是说决策者本质上在进行 äºŒåˆ†æ³•æŸ¥æ‰¾ã€‚å®žéªŒè¡¨æ˜Žï¼Œå¦‚æžœé€‰é¡¹ä¸æ˜¯æŒ‰é¡ºåºæŽ’列的,那么所花费时间与选项个数将会呈线性增长关系。

这在 UI 设计中,该定律也å¯ä»¥æœ‰æ•ˆåœ°ç¡®ä¿ç”¨æˆ·åœ¨æœç´¢é€‰é¡¹æ—¶æ›´è½»æ¾æ„‰å¿«åœ°åšå‡ºå†³ç­–。

在 Speed of Information Processing: Developmental Change and Links to Intelligence 一文中å¯è§ï¼Œæ™ºå•†å’Œå应时间之间的相关性也满足席克定律。

å‚è§ï¼š

侯世达定律 (Hofstadter's Law)

å³ä½¿è€ƒè™‘到侯世达定律,它也总是比你预期的è¦é•¿ã€‚

侯世达 (Douglas Hofstadter)

在估计需è¦å¤šé•¿æ—¶é—´å¼€å‘时,你å¯èƒ½ä¼šå¬åˆ°æ­¤å®šå¾‹ã€‚软件开å‘似乎有这样一æ¡å®šç†ï¼Œå³æˆ‘们往往ä¸èƒ½å‡†ç¡®åœ°ä¼°è®¡éœ€è¦å¤šé•¿æ—¶é—´æ‰èƒ½å®Œæˆã€‚

语出《哥德尔ã€è‰¾èˆå°”ã€å·´èµ«ï¼šé›†å¼‚璧之大æˆã€‹ã€‚

å‚è§ï¼š

哈特伯定律 (Hutber's Law)

æ”¹å–„å³æ¶åŒ–。

帕特里克·哈特伯 (Patrick Hutber)

这个定律说明了对一个系统的改进会导致其他部分的æ¶åŒ–;或者它会将其他的æ¶åŒ–éšè—èµ·æ¥ï¼Œå¹¶å¯¼è‡´ç³»ç»Ÿæ•´ä½“状æ€çš„退化。

例如,æŸä¸ªç«¯ç‚¹çš„å“应延迟å‡å°‘,就å¯èƒ½å¯¼è‡´è¯·æ±‚æµä¸­çš„åžåé‡å’Œå®¹é‡é—®é¢˜è¿›ä¸€æ­¥å¢žåŠ ï¼Œå¹¶å½±å“到å¦ä¸€ä¸ªå®Œå…¨ä¸åŒçš„å­ç³»ç»Ÿã€‚

技术æˆç†Ÿåº¦æ›²çº¿ (The Hype Cycle or Amara's Law)

我们倾å‘于过高估计技术在短期内的影å“,并低估长期效应。

罗伊·阿马拉 (Roy Amara)

技术æˆç†Ÿåº¦æ›²çº¿æ˜¯é«˜å¾·çº³å’¨è¯¢å…¬å¸å¯¹æŠ€æœ¯æœ€åˆå…´èµ·å’Œå‘展的视觉展现。一图顶åƒè¨€ï¼š

The Hype Cycle

(å›¾ç‰‡æ¥æº: By Jeremykemp at English Wikipedia, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=10547051)

简而言之,这个周期表明,新技术åŠå…¶æ½œåœ¨å½±å“通常会引å‘一阵浪潮。团队快速使用这些新技术,有时会对结果感到失望。这å¯èƒ½æ˜¯å› ä¸ºè¯¥æŠ€æœ¯è¿˜ä¸å¤Ÿæˆç†Ÿï¼Œæˆ–者现实应用还没有完全实现。ç»è¿‡ä¸€æ®µæ—¶é—´åŽï¼ŒæŠ€æœ¯çš„能力æé«˜äº†ï¼Œä½¿ç”¨å®ƒçš„实际机会会增加,最终团队也å¯ä»¥æé«˜å·¥ä½œæ•ˆçŽ‡ã€‚ç½—ä¼ŠÂ·é˜¿é©¬æ‹‰ç®€æ´åœ°æ€»ç»“了这一点:我们倾å‘于高估技术短期内的影å“,并低估长期效应。

éšå¼æŽ¥å£å®šå¾‹ (Hyrum's Law or The Law of Implicit Interfaces)

当 API 有足够多的用户时,你在åˆåŒä¸­çš„æ‰¿è¯ºå·²ä¸é‡è¦ï¼šä½ ç³»ç»Ÿçš„æ‰€æœ‰å¯è§‚察行为都将被æŸäº›äººæ‰€ä¾èµ–。

海勒姆·赖特 (Hyrum Wright)

éšå¼æŽ¥å£å®šå¾‹è¡¨æ˜Žï¼Œå½“ä½ çš„ API 有足够多的用户时,API 的所有行为(包括那些未囊括在公共说明中的一部分)最终都会被其他人所ä¾èµ–。 一个简å•çš„ä¾‹å­æ˜¯ API çš„å“应时间这ç 9E88 §éžåŠŸèƒ½æ€§å› ç´ ï¼›è¿˜æœ‰ä¸€ä¸ªæ›´å¾®å¦™çš„ä¾‹å­æ˜¯ï¼šç”¨æˆ·ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é…错误æç¤ºæ¥åˆ¤æ–­ API 的错误类型,å³ä½¿ API 文档中没有任何关于错误æç¤ºçš„内容,而是指导用户应该使用相应的错误代ç ã€‚一些用户ä¾ç„¶ä¼šä½¿ç”¨é”™è¯¯æç¤ºå†…容(而éžé”™è¯¯ä»£ç ï¼‰ï¼Œè¿™ç§æƒ…å†µä¸‹å˜æ›´ API 错误æç¤ºä¿¡æ¯ï¼Œå®žé™…上会破å API 的使用。

å‚è§ï¼š

柯林汉定律 (Kernighan's Law)

调试在一开始就比编写程åºå›°éš¾ä¸€å€ã€‚因此,按照定义,如果你的代ç å†™å¾—éžå¸¸å·§å¦™ï¼Œé‚£ä¹ˆä½ å°±æ²¡æœ‰è¶³å¤Ÿçš„能力æ¥è°ƒè¯•它。

布莱æ©Â·æŸ¯æž—汉 (Brian Kernighan)

柯林汉定律是以布莱æ©Â·æŸ¯æž—汉 (Brian Kernighan) çš„å字命å的,引述自柯林汉和普劳格 (P.J. Plauger) 的《编程格调》 (The Elements of Programming Style) 一书中的一å¥è¯ï¼š

æ¯ä¸ªäººéƒ½çŸ¥é“,调试在一开始就比编写程åºå›°éš¾ä¸€å€ã€‚那么,如果您在编写它时尽å¯èƒ½åœ°å·§å¦™ï¼Œåˆå¦‚何æ¥è°ƒè¯•它?

尽管这有些夸张,但它æå‡ºçš„论点是,简å•的代ç ä¼šæ¯”夿‚çš„ä»£ç æ›´å¯å–ï¼Œå› ä¸ºè°ƒè¯•å¤æ‚代ç çš„过程中出现的任何问题都会å分棘手,甚至无法解决。

å‚è§ï¼š

林纳斯定律 (Linus's Law)

足够多的眼ç›ï¼Œå°±å¯è®©æ‰€æœ‰é—®é¢˜æµ®çŽ°ã€‚

Eric S. Raymond

简å•地说,能够看到问题的人越多,有人解决过相关的问题或事情的å¯èƒ½æ€§å°±è¶Šé«˜ã€‚

最åˆè¯¥å®šå¾‹æ˜¯ç”¨æ¥æè¿°å¼€æºæ¨¡åž‹å¯¹äºŽé¡¹ç›®çš„价值的,并适用于任æ„çš„è½¯ä»¶é¡¹ç›®ã€‚åŒæ—¶å®ƒä¹Ÿå¯ä»¥æ‰©å±•åˆ°å¼€å‘æµç¨‹ä¹‹ä¸­â€”—更多的代ç å®¡æŸ¥ã€æ›´å¤šçš„陿€åˆ†æžå’Œå¤šé‡æµ‹è¯•å¯ä»¥è®©é—®é¢˜æ›´åŠ æ˜Žæ˜¾å’Œå®¹æ˜“è¯†åˆ«ã€‚

林纳斯定律的一个更正å¼çš„说法如下:

如果有足够大的测试员和è”åˆå¼€å‘人员基础,那么几乎æ¯ä¸ªé—®é¢˜éƒ½èƒ½å¾ˆå¿«è¢«ç‰¹å¾åŒ–,从而让以å‰é‡åˆ°è¿‡ç±»ä¼¼é—®é¢˜çš„人解决。

è¿™æ¡å®šå¾‹æœ€æ—©å‡ºçŽ°åœ¨ Eric S. Raymond 所著书 "The Cathedral and the Bazaar" 中,并以 Linus Torvalds çš„å字命å以作纪念。

梅特å¡å¤«å®šå¾‹ (Metcalfe's Law)

在网络ç†è®ºä¸­ï¼Œç³»ç»Ÿçš„价值约等于系统用户数的平方。

这个定律基于一个系统中å¯èƒ½çš„连接对数é‡ï¼Œå¹¶ä¸”与里德定律 (Reed's Law) å分相近。奥德利兹科 (Odlyzko) 和其他人认为,里德定律和梅特å¡å¤«å®šå¾‹å¤¸å¤§äº†ç³»ç»Ÿæœ¬èº«çš„价值,因为它们没有考虑到网络效应中人类认知的é™åˆ¶ã€‚

å‚è§:

摩尔定律 (Moore's Law)

集æˆç”µè·¯ä¸­çš„æ™¶ä½“管数é‡å¤§çº¦æ¯ä¸¤å¹´ç¿»ä¸€ç•ªã€‚

è¿™æ¡å®šå¾‹é€šå¸¸ç”¨äºŽè¯´æ˜ŽåŠå¯¼ä½“和芯片技术æé«˜çš„ç»å¯¹é€Ÿåº¦ã€‚从 20 世纪 70 年代到 21 世纪å‰åå¹´ï¼Œæ‘©å°”çš„é¢„æµ‹è¢«è¯æ˜Žæ˜¯é«˜åº¦å‡†ç¡®çš„。 è¿‘å¹´æ¥ï¼Œè¿™ç§è¶‹åŠ¿ç•¥æœ‰å˜åŒ–,部分原因å—到é‡å­éš§ç©¿æ•ˆåº”å½±å“。然而,并行化计算的进步以åŠåŠå¯¼ä½“技术和é‡å­è®¡ç®—潜在的é©å‘½æ€§å˜åŒ–,å¯èƒ½æ„å‘³ç€æ‘©å°”定律在未æ¥å‡ åå¹´å†…ç»§ç»­ä¿æŒæ­£ç¡®ã€‚

墨è²å®šå¾‹ (Murphy's Law / Sod's Law)

凡是å¯èƒ½å‡ºé”™çš„事就一定会出错。

出自 爱德åŽÂ·AÂ·å¢¨è² ï¼Œ 墨è²å®šå¾‹ 说明了如果一件事有å¯èƒ½å‡ºé”™ï¼Œé‚£ä¹ˆå°±ä¸€å®šä¼šå‡ºé”™ã€‚

这是一å¥å¼€å‘人员间的俗语,在开å‘ã€æµ‹è¯•甚至在生产中都有å¯èƒ½ä¼šå‘ç”Ÿä¸€äº›ä»¤äººæ„æƒ³ä¸åˆ°çš„事情。而这一定律也å¯ä»¥å‚考在英å¼è‹±è¯­ä¸­æ›´ä¸ºå¸¸è§çš„ ç´¢å¾·å®šç† ï¼š

如果æŸä»¶äº‹å¯èƒ½å‡ºé”™ï¼Œé‚£ä¹ˆå®ƒä¸€å®šä¼šåœ¨æœ€ç³Ÿç³•的时候å‘生。

这些定律常常用于幽默嘲弄。但是,类似于 Confirmation Bias å’Œ Selection Bias 的现象很容易导致人们过分强调这些定律(å³åœ¨å¤§éƒ¨åˆ†æƒ…况下,一件事的æˆåŠŸä¼šæ˜¾å¾—å¸ç©ºè§æƒ¯ï¼›è€Œå¤±è´¥æ‰ä¼šå¼•起更多的注æ„和讨论)。

å‚è§:

奥å¡å§†å‰ƒåˆ€ (Occam's Razor)

如无必è¦ï¼Œå‹¿å¢žå®žä½“。

奥å¡å§†çš„å¨å»‰ (William of Ockham)

奥å¡å§†å‰ƒåˆ€æŒ‡å‡ºï¼Œåœ¨å‡ ç§å¯èƒ½çš„解决方案之中,最有å¯èƒ½çš„解决方案便是概念和å‡è®¾æœ€å°‘的那个。因为这个解决方案最为简å•,åªè§£å†³äº†é—®é¢˜ï¼Œå¹¶ä¸”没有引入é¢å¤–çš„å¤æ‚度和å¯èƒ½çš„è´Ÿé¢åŽæžœã€‚

å‚è§ï¼š

例å­ï¼š

å¸•é‡‘æ£®å®šç† (Parkinson's Law)

在工作能够完æˆçš„æ—¶é™å†…,工作é‡ä¼šä¸€ç›´å¢žåŠ ï¼Œç›´åˆ°æ‰€æœ‰å¯ç”¨æ—¶é—´éƒ½è¢«å¡«æ»¡ä¸ºæ­¢ã€‚

基于官僚机构的研究背景,该定律被应用于软件开å‘中。该ç†è®ºè®¤ä¸ºï¼Œå›¢é˜Ÿåœ¨æˆªæ­¢æ—¥æœŸä¹‹å‰æ•ˆçŽ‡ä½Žä¸‹ï¼Œç„¶åŽåœ¨æˆªæ­¢æ—¥æœŸå‰èµ¶ç´§å®Œæˆå·¥ä½œï¼Œä»Žè€Œä½¿å®žé™…截止日期å˜å¾—éšæ„。

将这个定ç†ä¸Žä¾¯ä¸–达定律相结åˆï¼Œåˆ™ä¼šèŽ·å¾—æ›´åŠ æ‚²è§‚çš„è§‚ç‚¹ï¼šä¸ºäº†åœ¨è§„å®šæ—¶é—´å†…å®Œæˆå·¥ä½œï¼Œå·¥ä½œå°†å¢žå¤šï¼ŒèŠ±è´¹æ¯”é¢„æœŸæ›´é•¿çš„æ—¶é—´ã€‚

å‚è§ï¼š

过早优化效应 (Premature Optimization Effect)

过早优化是万æ¶ä¹‹æºã€‚

高德纳 (å”纳德克努特的中文å)

在高德纳的《goto 语å¥çš„结构化编程》论文中,他写到:“程åºå‘˜ä»¬æµªè´¹äº†å¤§é‡çš„æ—¶é—´åŽ»æ€è€ƒæˆ–者担心他们的程åºä¸­çš„éžå…³é”®éƒ¨åˆ†çš„速度。而在考虑调试和维护的时候,这些所谓æé«˜æ•ˆçŽ‡çš„åšæ³•实际上å分ä¸å¦¥ã€‚我们应该放弃å°çš„æ•ˆçŽ‡ç‚¹ï¼Œå¹¶ä¸”è¦åœ¨ 97% 的时间æé†’自己,过早优化是万æ¶ä¹‹æºã€‚而且连那关键的 3% 也ä¸èƒ½å¤Ÿæ”¾è¿‡ã€‚â€

然而,过早优化 (简而言之)å¯ä»¥å®šä¹‰ä¸ºåœ¨æˆ‘们知é“需è¦åšä»€ä¹ˆä¹‹å‰è¿›è¡Œä¼˜åŒ–。

普特定律 (Putt's Law)

技术由两类人主导,一类是纯粹的管ç†äººå‘˜ï¼Œ 一类是纯粹的技术人员。

普特定律常常éµå¾ªæ™®ç‰¹æŽ¨è®ºï¼š

æ¯ä¸€ä¸ªæŠ€æœ¯å±‚次,å‡ä»¥æ—¶æ—¥ï¼Œèƒ½åŠ›å°†é€†è½¬ã€‚

这些结论表明,由于å„ç§é€‰æ‹©æ ‡å‡†å’Œç¾¤ä½“组织的趋势,技术组织的工作层é¢å°†æœ‰ä¸€äº›æŠ€æœ¯äººå‘˜ï¼Œä»¥åŠä¸€äº›ä¸äº†è§£å¤æ‚性和挑战的管ç†äººå‘˜ã€‚è¿™ç§çŽ°è±¡å¯èƒ½æ˜¯ç”±äºŽ å½¼å¾—åŽŸç† (The Peter Principle) 或 呆伯特法则 (The Dilbert Principle) 造æˆçš„。

但是,应该强调的是,诸如此类的定律是一ç§å¹¿æ³›çš„æ¦‚括,å¯èƒ½é€‚用于æŸäº›ç±»åž‹çš„组织,而ä¸é€‚用于其他组织。

å‚è§ï¼š

里德定律 (Reed's Law)

大型网络,尤其是社交网络的效用会éšç€ç½‘络的大å°å‘ˆæŒ‡æ•°çº§æ‰©å¢žã€‚

这一定律基于图论,图论中的效用与å¯èƒ½çš„å­ç»„æ•°é‡å‘ˆæ­£æ¯”,并且该增长速度会比å‚与者的数é‡å’Œå¯èƒ½çš„连接对数é‡è¦å¿«ã€‚奥德利兹科 (Odlyzko) 和其他人认为,里德定律夸大了系统本身的价值,因为它们没有考虑到网络效应中人类认知的é™åˆ¶ã€‚

å‚è§:

夿‚性守æ’定律 (The Law of Conservation of Complexity or Tesler's Law)

该定律表明系统中存在ç€ä¸€å®šç¨‹åº¦çš„夿‚性,并且ä¸èƒ½å‡å°‘。

系统中的æŸäº›å¤æ‚性是无æ„的。这是由于结构ä¸è‰¯ï¼Œé”™è¯¯æˆ–者糟糕的建模造æˆçš„ã€‚è¿™ç§æ— æ„çš„å¤æ‚性å¯ä»¥å‡å°‘æˆ–è€…æ¶ˆé™¤ã€‚ç„¶è€Œï¼Œç”±äºŽå¾…è§£å†³é—®é¢˜å›ºæœ‰çš„å¤æ‚性,æŸäº›å¤æ‚性是内在的。这ç§å¤æ‚性å¯ä»¥è½¬ç§»ï¼Œä½†ä¸èƒ½æ¶ˆé™¤ã€‚

该定律有趣的一点是,å³ä½¿ç®€åŒ–æ•´ä¸ªç³»ç»Ÿï¼Œå†…åœ¨çš„å¤æ‚性也ä¸ä¼šé™ä½Žã€‚å®ƒä¼šè½¬ç§»åˆ°ç”¨æˆ·ï¼Œå¹¶ä¸”ç”¨æˆ·å¿…é¡»ä»¥æ›´å¤æ‚的方å¼è¡Œäº‹ã€‚

得墨忒耳定律 (The Law of Demeter)

别和陌生人讲è¯ã€‚

得墨忒耳定律åˆç§°æœ€å°‘知识原则,是一æ¡ä¸Žé¢å‘对象语言有关的软件设计原则。

该定律表明,软件的一个å•元应该åªä¸Žå…¶ç›´æŽ¥åˆä½œè€…交谈。比如对象 A 引用了对象 B,对象 B 引用了对象 C,则 A å¯ä»¥ç›´æŽ¥è°ƒç”¨ B 的方法,但ä¸åº”直接调用 C 的方法。所以如果 C 有一个 dothing() 的方法,A ä¸åº”该直接调用,而是使用 B.getC().doThis()。

éµå¾ªè¿™ä¸€å®šå¾‹å¯ä»¥é™åˆ¶ä»£ç æ›´æ”¹çš„èŒƒå›´ï¼Œä½¿å…¶ä»¥åŽæ›´å®¹æ˜“ç»´æŠ¤ã€æ›´å®‰å…¨ã€‚

抽象泄æ¼å®šå¾‹ (The Law of Leaky Abstractions)

在æŸç§ç¨‹åº¦ä¸Šï¼Œæ‰€æœ‰éžå¹³å‡¡çš„æŠ½è±¡éƒ½æ˜¯æœ‰æ³„æ¼çš„。

乔尔斯·波尔斯基 (Joel Spolsky)

è¯¥å®šå¾‹æŒ‡å‡ºï¼Œé€šå¸¸ç”¨äºŽç®€åŒ–å¤æ‚系统的抽象,在æŸäº›æƒ…况下将底层系统泄æ¼å‡ºæ¥ï¼Œä½¿å¾—抽象表现出æ„外的行为。

例如加载文件并读å–其内容。文件系统 API 是较低级别内核系统的抽象,它们本身是与ç£ç›˜ï¼ˆæˆ– SSD çš„é—ªå­˜ï¼‰ä¸Šçš„æ•°æ®æ›´æ”¹ç›¸å…³çš„物ç†è¿‡ç¨‹çš„æŠ½è±¡ã€‚åœ¨å¤§å¤šæ•°æƒ…å†µä¸‹ï¼Œå¤„ç†æ–‡ä»¶ï¼ˆå¦‚äºŒè¿›åˆ¶æ•°æ®æµï¼‰çš„æŠ½è±¡å°†èµ·ä½œç”¨ã€‚但是,对于ç£ç›˜é©±åŠ¨å™¨ï¼Œé¡ºåºè¯»å–æ•°æ®å°†æ¯”éšæœºè®¿é—®å¿«å¾—多(由于页é¢é”™è¯¯çš„开销增加)。但对于 SSD 驱动器,此开销ä¸ä¼šå‡ºçŽ°ã€‚éœ€è¦ç†è§£åŸºç¡€ç»†èŠ‚æ¥å¤„ç†è¿™ç§æƒ…况(例如,数æ®åº“索引文件的良好结构å¯ä»¥å‡å°‘éšæœºè®¿é—®çš„开销),开å‘人员需è¦åˆç†çš„æŠ½è±¡ï¼Œæ¥å¤„ç†ä¸åŒçš„细节。

当引入更多的抽象时,上é¢çš„例å­ä¼šå˜å¾—æ›´å¤æ‚。Linux æ“作系统å…è®¸é€šè¿‡ç½‘ç»œè®¿é—®æ–‡ä»¶ï¼Œä½†åœ¨æœ¬åœ°è¡¨ç¤ºä¸ºæ™®é€šæ–‡ä»¶ã€‚å¦‚æžœå­˜åœ¨ç½‘ç»œæ•…éšœï¼Œè¿™ç§æŠ½è±¡å°†ä¼šæ³„æ¼ã€‚如果开å‘人员将这些文件视为普通文件,而ä¸è€ƒè™‘它们å¯èƒ½ä¼šå—到网络延迟和故障的影å“,那么解决方案就会出错。

æè¿°è¯¥å®šå¾‹çš„æ–‡ç« è¡¨æ˜Žï¼Œè¿‡åº¦ä¾èµ–抽象,加上对底层过程的ç†è§£ä¸è¶³ï¼Œå®žé™…上使得问题在æŸäº›æƒ…å†µä¸‹æ›´åŠ å¤æ‚。

å‚è§ï¼š

真实的例å­ï¼š

  • Photoshop å¯åŠ¨ç¼“æ…¢ï¼šæˆ‘è¿‡åŽ»é‡åˆ°è¿‡ä¸€ä¸ªé—®é¢˜ï¼Œå°±æ˜¯ Photoshop å¯åŠ¨ç¼“æ…¢ï¼Œæœ‰æ—¶éœ€è¦å‡ åˆ†é’Ÿã€‚é—®é¢˜å¥½åƒæ˜¯ Photoshop å¯åŠ¨æ—¶ï¼Œä¼šè¯»å–当å‰é»˜è®¤æ‰“å°æœºçš„一些信æ¯ã€‚ä½†æ˜¯ï¼Œå¦‚æžœè¯¥æ‰“å°æœºå®žé™…上是一å°ç½‘ç»œæ‰“å°æœºï¼Œåˆ™å¯èƒ½éœ€è¦å¾ˆé•¿çš„æ—¶é—´ã€‚å°†ç½‘ç»œæ‰“å°æœºä¸Žæœ¬åœ°æ‰“å°æœºå½“ä½œåŒæ ·çš„æŠ½è±¡ï¼Œå¯¼è‡´è¿žæŽ¥ä¸è‰¯çš„æƒ…况下出现问题。

帕金森çç¢Žå®šç† (The Law of Triviality)

è¯¥å®šç†æ˜¾ç¤ºï¼Œç¾¤ä½“将给予更多的时间和注æ„力æ¥å¤„ç†çç¢Žçš„é—®é¢˜ï¼Œè€Œä¸æ˜¯ç”¨æ¥å¤„ç†ä¸¥è‚ƒè€Œå®žè´¨æ€§çš„问题。

常è§çš„è™šæž„ä¾‹å­æ˜¯å§”å‘˜ä¼šæ‰¹å‡†æ ¸ç”µç«™çš„è®¡åˆ’ï¼Œä»–ä»¬å¤§éƒ¨åˆ†æ—¶é—´éƒ½åœ¨è®¨è®ºè‡ªè¡Œè½¦æ£šçš„ç»“æž„ï¼Œè€Œä¸æ˜¯ç”µåŽ‚æœ¬èº«ç­‰æ›´ä¸ºé‡è¦çš„设计。如果没有大é‡çš„专业知识或者准备,很难给éžå¸¸å¤§çš„夿‚主题讨论æä¾›å®è´µçš„æ„è§ã€‚但是,人们希望看到更多æ„è§ã€‚因此,他们倾å‘äºŽå°†å¤§é‡æ—¶é—´é›†ä¸­åœ¨å¾ˆå®¹æ˜“推敲,但ä¸ä¸€å®šè¢«çœ‹é‡çš„å°ç»†èŠ‚ä¸Šã€‚

由上é¢çš„虚构例å­äº§ç”Ÿäº† Bike Shedding 的说法,以形容在ç碎细节上浪费时间这一行为。

Unix 哲学 (The Unix Philosophy)

Unix 哲学指软件组件应该很å°ï¼Œå¹¶ä¸“注于åšä¸€ä»¶ç‰¹å®šçš„事情。将å°è€Œç®€å•以åŠå®šä¹‰è‰¯å¥½çš„å•元组åˆåœ¨ä¸€èµ·ï¼Œè€Œä¸æ˜¯ä½¿ç”¨å¤§è€Œå¤æ‚的多用途程åºï¼Œå¯ä»¥æ›´è½»æ¾åœ°æž„建系统。

åƒå¾®æœåŠ¡æž¶æž„è¿™ç§çŽ°ä»£å®žè·µå¯ä»¥è®¤ä¸ºæ˜¯è¿™ç§å“²å­¦çš„应用,其中æœåŠ¡å¾ˆå°ï¼Œé›†ä¸­äºŽåšä¸€ä»¶ç‰¹å®šçš„事情,由简å•的构建å—组æˆå¤æ‚的行为。

Spotify 模型 (The Spotify Model)

Spotify æ¨¡åž‹æ˜¯å›¢é˜Ÿå’Œç»„ç»‡ç»“æž„çš„ä¸€ç§æ–¹æ³•,已被 Spotify 实验室推广开æ¥ã€‚åœ¨æ­¤æ¨¡åž‹ä¸­ï¼Œå›¢é˜Ÿå›´ç»•åŠŸèƒ½è€ŒéžæŠ€æœ¯è¿›è¡Œç»„ç»‡ã€‚

Spotify 模型还普åŠäº†éƒ¨è½ã€è¡Œä¼šä»¥åŠç« èŠ‚çš„æ¦‚å¿µï¼Œè¿™äº›æ˜¯ç»„ç»‡ç»“æž„çš„å…¶ä»–ç»„æˆéƒ¨åˆ†ã€‚

沃德勒定律 (Wadler's Law)

任何语言设计中,讨论下é¢åˆ—表中æŸä¸ªè¦ç´ æ‰€èŠ±è´¹çš„æ€»æ—¶é—´ä¸Žå…¶ä½ç½®æˆæ­£æ¯”。

  1. 语义 (Semantics)
  2. 语法 (Syntax)
  3. è¯æ³• (Lexical syntax)
  4. 注释语法 (Lexical syntax of comments)

ï¼ˆç®€è€Œè¨€ä¹‹ï¼Œåœ¨è¯­ä¹‰ä¸ŠèŠ±è´¹ä¸€ä¸ªå°æ—¶ï¼Œå°±è¦åœ¨æ³¨é‡Šè¯­æ³•ä¸ŠèŠ±è´¹å…«ä¸ªå°æ—¶ï¼‰ã€‚

与 帕金森çç¢Žå®šç† ç±»ä¼¼, 沃德勒定律指出,在设计语言时,与这些特å¾çš„é‡è¦æ€§ç›¸æ¯”,花在语言结构上的时间过多。

å‚è§ï¼š

惠顿定律 (Wheaton's Law)

ä¸è¦åƒä¸ªå‚»å­ä¸€æ ·ã€‚

å¨å°”·惠顿 (Wil Wheaton)

è¿™æ¡å®šå¾‹ç”±å¨å°” · 惠顿(曾出演过星际迷航:下一代ã€ç”Ÿæ´»å¤§çˆ†ç‚¸ï¼‰åˆ›é€ ï¼Œè¿™ä¸ªç®€æ´è€Œæœ‰åŠ›çš„å®šå¾‹æ—¨åœ¨ä¸“ä¸šç»„ç»‡å†…è¥é€ å’Œè°å’Œå°Šé‡çš„环境。它å¯ä»¥åœ¨ä¸ŽåŒäº‹äº¤è°ˆã€ä»£ç å®¡æŸ¥ã€åé©³è§‚ç‚¹å’Œæ‰¹è¯„çš„æ—¶å€™æ´¾ä¸Šç”¨åœºã€‚è€Œä¸”é€šå¸¸æƒ…å†µä¸‹ï¼Œäººä»¬ä¹‹é—´çš„ä¸“ä¸šäº¤äº’ä¹ŸåŒæ ·é€‚用。

原则

原则通常是与设计相关的准则。

乔治·伯克斯定律 (All Models Are Wrong or George Box's Law)

All models are wrong, but some are useful. 所有的模型都是错的,但有些是有用的。

乔治·伯克斯 (George Box)

这一原则表明,所有的系统模型都是有缺陷的,但åªè¦å®ƒä»¬æ²¡æœ‰å¤ªå¤šç¼ºé™·ï¼Œé‚£ä¾¿æœ‰å¯èƒ½æ˜¯æœ‰ç”¨çš„。这一原则æºäºŽç»Ÿè®¡å­¦ï¼ŒåŒæ—¶ä¹Ÿé€‚用于科学和计算模型。

å¤§å¤šæ•°è½¯ä»¶çš„ä¸€ä¸ªåŸºæœ¬è¦æ±‚都是对æŸç§ç‰¹å®šç³»ç»Ÿè¿›è¡Œå»ºæ¨¡ã€‚无论是计算机网络ã€èµ„æºåº“ã€ç¤¾ä¼šå…³ç³»å›¾è¿˜æ˜¯ä»»ä½•å…¶ä»–ç±»åž‹çš„ç³»ç»Ÿï¼Œè®¾è®¡è€…éƒ½å¿…é¡»ä¾æ®é€‚当的细节程度æ¥å»ºæ¨¡ã€‚过多的细节å¯èƒ½ä¼šå¯¼è‡´å¤ªé«˜çš„夿‚度,过少的细节å¯èƒ½ä¼šä½¿æ¨¡åž‹æ— æ³•正常工作。

å‚è§:

åˆ‡æ–¯ç‰¹æ£®å›´æ  (Chesterson's Fence)

在了解现有情况背åŽçš„原因之å‰ï¼Œä¸åº”该进行改进。

该原则与软件工程中的消除技术负债 (Technical debt) 相关。程åºçš„æ¯ä¸€è¡Œæœ€åˆéƒ½æ˜¯å‡ºäºŽæŸç§åŽŸå› ç¼–å†™çš„ï¼Œå› æ­¤æ ¹æ®åˆ‡æ–¯ç‰¹æ£®å›´æ åŽŸåˆ™ï¼Œåœ¨æ›´æ”¹æˆ–åˆ é™¤ä»£ç ä¹‹å‰ï¼Œå³ä½¿çœ‹èµ·æ¥ä¼¼ä¹Žæ˜¯å¤šä½™çš„æˆ–䏿­£ç¡®çš„,也应该å°è¯•完全ç†è§£ä»£ç çš„上下文和å«ä¹‰ã€‚

该原则的åå­—æ¥æºäºŽ G.K. Chesterson 的一则故事。一个男人横穿马路中央的栅æ ï¼Œä»–å‘å¸‚é•¿æŠ±æ€¨è¿™é“æ …æ æ²¡æœ‰ç”¨è¿˜æŒ¡è·¯ï¼Œå¹¶è¦æ±‚拆除它。市长问他为什么è¦åœ¨é‚£é‡Œå»ºæ …æ ï¼Œé‚£ä¸ªäººå›žç­”说ä¸çŸ¥é“。市长接ç€è¯´ï¼šâ€œå¦‚果你ä¸çŸ¥é“它的用途,我肯定ä¸ä¼šè®©ä½ æŠŠå®ƒæ‹†äº†ã€‚ä½ åŽ»æŸ¥æŸ¥å®ƒçš„ç”¨é€”ï¼Œä¹‹åŽæˆ‘å¯èƒ½ä¼šå…许你拆掉它。â€

死海效应 (The Dead Sea Effect)

"... 那些更有æ‰åŽï¼Œæ›´æœ‰æ•ˆçŽ‡çš„ IT 工程师最有å¯èƒ½ç¦»å¼€â€”—消失 ... (而那些倾å‘于)留下æ¥çš„“剩下的人â€â€”—是最没有æ‰åŽå’Œæ•ˆçŽ‡çš„ IT 工程师。"

Bruce F. Webster

æ­»æµ·æ•ˆåº”è¡¨æ˜Žï¼Œåœ¨ä»»ä½•ä¸€ä¸ªç»„ç»‡ä¸­ï¼Œå·¥ç¨‹å¸ˆçš„æŠ€èƒ½ã€æ‰åŽå’Œæ•ˆèƒ½å¾€å¾€ä¸Žä»–们在公å¸çš„æ—¶é—´å‘ˆå比。

通常情况下,技术好的工程师很容易在其他的地方找到工作,并且他们往往也会这样åšã€‚而技能过时或技术薄弱的工程师则会留在公å¸ï¼Œå› ä¸ºå…¶ä»–地方很难找到工作。如果这些工程师在公å¸é‡ŒèŽ·å¾—äº†åŠ è–ªï¼Œä»–ä»¬ä¼šæ›´æ„¿æ„留在公å¸ï¼Œå› ä¸ºåœ¨å…¶ä»–地方找到åŒç­‰è–ªé…¬çš„工作会很有挑战性。

呆伯特法则 (The Dilbert Principle)

å…¬å¸ä¼šå€¾å‘于系统地将工作能力差的员工æå‡åˆ°ç®¡ç†å±‚,以使他们脱离工作æµç¨‹ã€‚

å²è€ƒç‰¹Â·äºšå½“æ–¯ (Scott Adams)

呆伯特原则是由å²è€ƒç‰¹Â·äºšå½“æ–¯ (Dilbert 漫画连环画的创建者) å¼€å‘çš„ä¸€ä¸ªç®¡ç†æ¦‚å¿µï¼Œçµæ„Ÿæ¥æºäºŽå½¼å¾—原ç†ã€‚æ ¹æ®å‘†ä¼¯ç‰¹åŽŸåˆ™ï¼Œå·¥ä½œèƒ½åŠ›å·®çš„å‘˜å·¥ä¼šè¢«æå‡åˆ°ç®¡ç†å±‚,从而é™åˆ¶ä»–们所能造æˆçš„æŸå®³ã€‚äºšå½“æ–¯é¦–å…ˆåœ¨ 1995 年《åŽå°”街日报》的一篇文章中解释了这一原则,éšåŽåœ¨ä»– 1996 年的商业书ç±ã€Šå‘†ä¼¯ç‰¹åŽŸåˆ™ã€‹ä¸­è¿›è¡Œäº†æ‰©å±•ã€‚

å‚è§ï¼š

帕累托法则 (The Pareto Principle or The 80/20 Rule)

ç”Ÿæ´»ä¸­å¤§å¤šæ•°äº‹æƒ…ä¸æ˜¯å‡åŒ€åˆ†å¸ƒçš„。

帕累托法则å¯ä»¥å¸®ä½ è®¤è¯†åˆ°å¤§å¤šæ•°ç»“æžœæ¥è‡ªå°‘数投入:

  • æŸä¸ªè½¯ä»¶çš„ 80ï¼… 代ç åªå äº†æ€»åˆ†é…æ—¶é—´çš„ 20%(相å,最难的 20ï¼… 代ç éƒ¨åˆ†å ç”¨äº† 80ï¼… 的时间)
  • 20ï¼… 的努力产生了 80ï¼… 的结果
  • 20ï¼… 的工作创造了 80ï¼… 的收入
  • 20ï¼… 的错误导致了 80ï¼… 的崩溃
  • 20ï¼… 的功能导致了 80ï¼… 的使用é‡

在 20 世纪 40 å¹´ä»£ï¼Œå…¬è®¤ä¸ºè´¨é‡æŽ§åˆ¶ä¹‹çˆ¶çš„ç¾Žå›½ç½—é©¬å°¼äºšå·¥ç¨‹å¸ˆçº¦ç‘Ÿå¤«Â·æœ±å…°åšå£«ï¼Œå¼€å§‹å°†å¸•累托法则应用于质é‡é—®é¢˜ã€‚

这个原则也被称为二八法则,é‡è¦çš„少数法则和因素稀ç–原则。

现实的例å­ï¼š

  • 微软 2002 å¹´çš„æŠ¥å‘Šè¡¨æ˜Žï¼Œä¿®å¤æœ€å¸¸å‡ºçŽ°çš„ 20ï¼… 错误,将消除 Windows å’Œ Office 中 80ï¼… çš„ 错误和崩溃。报告地å€

èˆåŸºåŽŸç† (The Shirky Principle)

èˆåŸºåŽŸç†è§£é‡Š

Institutions will try to preserve the problem to which they are the solution. 儿œºæž„会努力ä¿ç•™ä»–们能够解决的问题。

克莱·èˆåŸº (Clay Shirky)

èˆåŸºåŽŸç†è¡¨æ˜Žï¼Œå¤æ‚的解决方案——一家公å¸ã€ä¸€ä¸ªè¡Œä¸šæˆ–一项技术——å¯èƒ½ä¼šè¿‡äºŽä¸“注于他们正在解决的问题,以至于在无æ„中使问题本身å˜å¾—永久化。这å¯èƒ½æ˜¯æœ‰æ„为之(公å¸åŠªåŠ›ä¸ºé—®é¢˜æ‰¾åˆ°æ–°çš„ç»†å¾®å·®åˆ«ï¼Œä»¥è¯æ˜Žç»§ç»­å¼€å‘解决方案是åˆç†çš„),也å¯èƒ½æ˜¯æ— æ„ä¹‹ä¸¾ï¼ˆä¸æ„¿æ„接å—和构建一个完全解决或é¿å…问题的解决方案)。

相关内容:

  • “当一个人ä¸ç†è§£è‡ªå·±çš„工作就能够获得酬劳时,那么他就很难å†åŽ»äº†è§£è¿™ä»½å·¥ä½œäº†ï¼â€â€”—厄普顿·辛克莱
  • 《创新者的困境》克莱·克里斯滕森

å‚è§:

å½¼å¾—åŽŸç† (The Peter Principle)

在等级制度中,人往往会被æå‡åˆ°ä»–们的“无法胜任的水平â€ã€‚

劳伦斯·彼得 (Laurence J. Peter)

这是由劳伦斯·彼得æå‡ºçš„ä¸€ä¸ªç®¡ç†æ¦‚念。彼得原ç†è®¤ä¸ºï¼Œæ“…长工作的人会得到æå‡ï¼Œç›´åˆ°ä»–们达到ä¸å†æˆåŠŸçš„æ°´å¹³ (å³ä»–们所“无法胜任的水平â€)。基于此,由于他们资历更高,被公å¸å¼€é™¤çš„å¯èƒ½æ€§è¾ƒå° (除éžä»–们表现éžå¸¸ç³Ÿç³•)ã€‚è€Œä¸”ä»–ä»¬å°†ç»§ç»­æ‹…ä»»å‡ ä¹Žæ²¡æœ‰æœ¬èŒæŠ€èƒ½çš„èŒä½ï¼Œå³ä½¿é‚£äº›åŽŸæœ¬è®©ä»–ä»¬æˆåŠŸçš„èƒ½åŠ›åœ¨æ–°å·¥ä½œä¸­å¹¶æ— å¿…è¦ã€‚

有的工程师对此特别感兴趣,它们最åˆä»Žäº‹çš„æ˜¯æ·±åº¦çš„æŠ€æœ¯å·¥ä½œï¼Œä½†èµ°ä¸Šäº†ç®¡ç†å…¶ä»–工程师的èŒä¸šé“路——这æ„味ç€éœ€è¦ä¸€ä¸ªå®Œå…¨ä¸åŒçš„æŠ€èƒ½æ ‘。

å‚è§ï¼š

鲿£’性原则 (The Robustness Principle or Postel's Law)

在自己所åšçš„事情上è¦ä¿å®ˆ, 在接å—别人的事情上è¦è‡ªç”±ã€‚

通常应用于æœåŠ¡å™¨åº”ç”¨ç¨‹åºå¼€å‘中,该原则指出,你å‘é€ç»™å…¶ä»–人的内容应尽å¯èƒ½æœ€å°ä¸”符åˆè¦æ±‚,并且处ç†ä¸ç¬¦åˆè¦æ±‚的输入。

该原则的目标是构建稳å¥çš„系统。如果å¯ä»¥ç†è§£æ„图,它们å¯ä»¥å¤„ç†ä¸è‰¯çš„输入。但是,接å—错误格å¼çš„输入å¯èƒ½å­˜åœ¨å®‰å…¨éšæ‚£ï¼Œç‰¹åˆ«æ˜¯æ­¤ç±»çš„è¾“å…¥æœªç»è¿‡å……分测试。

SOLID

这是一个缩写,指的是:

这些是 Object-Oriented Programming 的关键原则。诸如此类的设计原则能够帮助开å‘人员构建更易于维护的系统。

å•一功能原则 (The Single Responsibility Principle)

æ¯ä¸ªæ¨¡å—或者类åªåº”该有一项功能。

SOLID çš„ç¬¬ä¸€ä¸ªåŽŸåˆ™ã€‚è¿™ä¸ªåŽŸåˆ™è¡¨æ˜Žæ¨¡å—æˆ–者类åªåº”该åšä¸€ä»¶äº‹ã€‚实际上,这æ„味ç€å¯¹ç¨‹åºåŠŸèƒ½çš„å•ä¸ªå°æ›´æ”¹ï¼Œåº”该åªéœ€è¦æ›´æ”¹ä¸€ä¸ªç»„件。例如,更改密ç éªŒè¯å¤æ‚性的方å¼åº”该åªéœ€è¦æ›´æ”¹ç¨‹åºçš„一部分。

ç†è®ºä¸Šè®²ï¼Œè¿™ä½¿ä»£ç æ›´å¥å£®ï¼Œæ›´å®¹æ˜“æ›´æ”¹ã€‚çŸ¥é“æ­£åœ¨æ›´æ”¹çš„ç»„ä»¶åªæœ‰ä¸€ä¸ªåŠŸèƒ½ï¼Œè¿™æ„å‘³ç€æµ‹è¯•更改更容易。使用å‰é¢çš„例å­ï¼Œæ›´æ”¹å¯†ç å¤æ‚性组件应该åªå½±å“与密ç å¤æ‚æ€§ç›¸å…³çš„åŠŸèƒ½ã€‚å˜æ›´å…·æœ‰è®¸å¤šåŠŸèƒ½çš„ç»„ä»¶å¯èƒ½è¦å›°éš¾å¾—多。

å‚è§ï¼š

开闭原则 (The Open/Closed Principle)

实体应开放扩展并关闭修改。

SOLID 的第二个原则。这个原则指出实体(å¯ä»¥æ˜¯ç±»ã€æ¨¡å—ã€å‡½æ•°ç­‰ï¼‰åº”该能够使它们的行为易于扩展,但是它们的扩展行为ä¸åº”该被修改。

举一个å‡è®¾çš„例å­ï¼Œæƒ³è±¡ä¸€ä¸ªèƒ½å¤Ÿå°† Markdown 转æ¢ä¸º HTML 的模å—。如果å¯ä»¥æ‰©å±•模å—,而ä¸ä¿®æ”¹å†…éƒ¨æ¨¡å—æ¥å¤„ç†æ–°çš„ markdown 特å¾ï¼Œè€Œæ— éœ€ä¿®æ”¹å†…部模å—,则å¯ä»¥è®¤ä¸ºæ˜¯å¼€æ”¾æ‰©å±•。如果用户ä¸èƒ½ä¿®æ”¹å¤„ç†çŽ°æœ‰ Markdown 特å¾çš„æ¨¡å—,那么它被认为是关闭修改。

这个原则与é¢å‘对象编程紧密相关,让我们å¯ä»¥è®¾è®¡å¯¹è±¡ä»¥ä¾¿äºŽæ‰©å±•,但是å¯ä»¥é¿å…ä»¥æ„æƒ³ä¸åˆ°çš„æ–¹å¼æ”¹å˜å…¶çŽ°æœ‰å¯¹è±¡çš„è¡Œä¸ºã€‚

å‚è§ï¼š

é‡Œæ°æ›¿æ¢åŽŸåˆ™ (The Liskov Substitution Principle)

å¯ä»¥åœ¨ä¸ç ´å系统的情况下,用å­ç±»åž‹æ›¿æ¢ç±»åž‹ã€‚

SOLID 的第三个原则。该原则指出,如果组件ä¾èµ–于类型,那么它应该能够使用该类型的å­ç±»åž‹ï¼Œè€Œä¸ä¼šå¯¼è‡´ç³»ç»Ÿå¤±è´¥æˆ–者必须知é“该å­ç±»åž‹çš„详细信æ¯ã€‚

举个例å­ï¼Œå‡è®¾æˆ‘ä»¬æœ‰ä¸€ä¸ªæ–¹æ³•ï¼Œè¯»å– XML 文档。如果该方法使用基类型 file,则从 file 派生的任何内容,都能用在该方法中。 如果 file 支æŒå呿Ÿ¥æ‰¾ï¼Œå¹¶ä¸” xml è§£æžå™¨ä½¿ç”¨è¯¥å‡½æ•°ï¼Œä½†æ˜¯æ´¾ç”Ÿç±»åž‹ network file å°è¯•å呿Ÿ¥æ‰¾æ—¶å¤±è´¥ï¼Œåˆ™ network file å°†è¿å该原则。

该原则与é¢å‘对象编程紧密相关,必须仔细建模ã€å±‚次结构,以é¿å…让系统用户混淆。

å‚è§ï¼š

接å£éš”离原则 (The Interface Segregation Principle)

ä¸åº”强制任何客户端ä¾èµ–于它ä¸ä½¿ç”¨çš„æ–¹æ³•。

SOLID 的第四个原则。该原则指出组件的消费者ä¸åº”该ä¾èµ–于它实际上ä¸ä½¿ç”¨çš„组件函数。

举一个例å­ï¼Œå‡è®¾æˆ‘ä»¬æœ‰ä¸€ä¸ªæ–¹æ³•ï¼Œè¯»å– XML 文档。它åªéœ€è¦è¯»å–文件中的字节,å‘å‰ç§»åŠ¨æˆ–å‘åŽç§»åŠ¨ã€‚å¦‚æžœç”±äºŽä¸€ä¸ªä¸Žæ–‡ä»¶ç»“æž„ä¸ç›¸å…³çš„功能å‘生更改(例如更新文件安全性的æƒé™æ¨¡åž‹ï¼‰ï¼Œéœ€è¦æ›´æ–°æ­¤æ–¹æ³•,则该原则已失效。文件最好实现 坿Ÿ¥è¯¢æµ 接å£ï¼Œå¹¶è®© XML 读å–器使用该接å£ã€‚

该原则与é¢å‘对象编程紧密相关,其中接å£ï¼Œå±‚次结构和抽象类型用于ä¸åŒç»„ä»¶çš„ minimise the coupling。 Duck typing 是一ç§é€šè¿‡æ¶ˆé™¤æ˜¾å¼æŽ¥å£æ¥å¼ºåˆ¶æ‰§è¡Œè¯¥åŽŸåˆ™çš„æ–¹æ³•ã€‚

å‚è§ï¼š

ä¾èµ–å转原则 (The Dependency Inversion Principle)

高级模å—ä¸åº”该ä¾èµ–于低级实现。

SOLID 的第五个原则。该原则指出,更高级别的å调组件ä¸åº”该知é“å…¶ä¾èµ–项的详细信æ¯ã€‚

举个例å­ï¼Œå‡è®¾æˆ‘们有一个从网站读å–元数æ®çš„程åºã€‚我们å‡è®¾ä¸»è¦ç»„件必须知é“下载网页内容的组件,以åŠå¯ä»¥è¯»å–元数æ®çš„组件。如果我们考虑ä¾èµ–å转,主è¦ç»„件将仅ä¾èµ–于å¯ä»¥èŽ·å–字节数æ®çš„æŠ½è±¡ç»„ä»¶ï¼Œç„¶åŽæ˜¯ä¸€ä¸ªèƒ½å¤Ÿä»Žå­—节æµä¸­è¯»å–元数æ®çš„æŠ½è±¡ç»„件,主è¦ç»„ä»¶ä¸éœ€è¦äº†è§£ TCPã€IPã€HTTPã€HTML 等。

è¿™ä¸ªåŽŸåˆ™å¾ˆå¤æ‚,因为它似乎å¯ä»¥å转系统的预期ä¾èµ–性(因此得å)。实践中,这也æ„味ç€ï¼Œå•ç‹¬çš„ç¼–æŽ’ç»„ä»¶å¿…é¡»ç¡®ä¿æŠ½è±¡ç±»åž‹çš„æ­£ç¡®å®žçŽ°è¢«ä½¿ç”¨ï¼ˆä¾‹å¦‚åœ¨å‰é¢çš„例å­ä¸­ï¼Œå¿…é¡»æä¾›å…ƒæ•°æ®è¯»å–器组件ã€HTTP 文件下载功能和 HTML 元标签读å–器)。然åŽï¼Œè¿™æ¶‰åŠè¯¸å¦‚ Inversion of Control å’Œ Dependency Injection 之类的模å¼ã€‚

å‚è§ï¼š

ä¸è¦é‡å¤ä½ è‡ªå·±åŽŸåˆ™ (The DRY Principle)

系统中,æ¯ä¸€å—知识都必须是å•ä¸€ã€æ˜Žç¡®è€Œæƒå¨çš„。

DRY 是 Do not Repeat Yourself 的缩写。这个原则旨在帮助开å‘人员å‡å°‘代ç çš„é‡å¤æ€§ï¼Œå¹¶å°†å…¬å…±ä»£ç ä¿å­˜åœ¨ä¸€ä¸ªåœ°æ–¹ã€‚最åˆç”±å®‰å¾·é²Â·äº¨ç‰¹å’Œæˆ´å¤«Â·æ‰˜é©¬æ–¯åœ¨ 1999 年出版的《程åºå‘˜ä¿®ç‚¼ä¹‹é“》中引用。

与 DRY 相å的是 WET(功能实现两次或者喜欢打字 Write Everything Twice or We Enjoy Typing)。

实际上,如果你在两个或更多的地方有相åŒçš„功能,你å¯ä»¥ä½¿ç”¨ DRY 原则将它们åˆå¹¶ä¸ºä¸€ä¸ªï¼Œå¹¶åœ¨ä»»ä½•你需è¦çš„地方é‡å¤ä½¿ç”¨ã€‚

å‚è§ï¼š

KISS 原则 (The KISS Principle)

ä¿æŒç®€å•和直白。

KISS åŽŸåˆ™æŒ‡æ˜Žäº†å¦‚æžœå¤§å¤šæ•°çš„ç³»ç»Ÿèƒ½å¤Ÿä¿æŒç®€å•而éžå¤æ‚化,那么他们便能够工作在最佳状æ€ã€‚å› æ­¤ï¼Œç®€å•æ€§åº”è¯¥æ˜¯è®¾è®¡æ—¶çš„å…³é”®æŒ‡æ ‡ï¼ŒåŒæ—¶ä¹Ÿè¦é¿å…ä¸å¿…è¦çš„夿‚度。这个短语最åˆå‡ºè‡ª 1960 年的美国海军飞机工程师凯利 · 约翰逊 (Kelly Johnson)。

这一原则的最好例è¯ä¾¿æ˜¯çº¦ç¿°é€Šç»™è®¾è®¡å·¥ç¨‹å¸ˆä¸€äº›å®žç”¨å·¥å…·çš„æ•…事。那时的他们正é¢ä¸´ç€ä¸€ä¸ªæŒ‘战,å³ä»–们å‚与设计的喷气å¼é£žæœºå¿…须能够让普通的机械师在战场上仅仅用这些工具进行维修,因此,“直白â€è¿™ä¸ªè¯åº”指的是æŸå的事物本身和修å¤ç”¨å·¥å…·çš„夿‚度两者之间的关系,而éžå·¥ç¨‹å¸ˆä»¬è‡ªèº«çš„能力水平。

å‚è§ï¼š

ä½ ä¸éœ€è¦å®ƒåŽŸåˆ™ (YAGNI)

这是 You Aren't Gonna Need It 的缩写。

åªæœ‰å½“ä½ éœ€è¦æŸäº›ä¸œè¥¿çš„æ—¶å€™ï¼Œæ‰åŽ»å®žçŽ°å®ƒä»¬ï¼Œè€Œä¸æ˜¯åœ¨ä½ é¢„è§çš„æ—¶å€™ã€‚

Ron Jeffries 是æžé™ç¼–程的创始人之一以åŠä¹¦ç±ã€ŠExtreme Programming Installed》的作者。

æžé™ç¼–程原则告诫开å‘人员,他们应该åªå®žçް当剿‰€éœ€çš„功能,并é¿å…实现未æ¥éœ€è¦çš„åŠŸèƒ½ï¼Œä»…åœ¨å¿…è¦æ—¶æ‰å®žçŽ°ã€‚

éµå®ˆè¿™ä¸€åŽŸåˆ™å¯ä»¥å‡å°ä»£ç åº“大å°ï¼ŒåŒæ—¶é¿å…时间和生产力浪费在没有价值的功能上。

å‚è§ï¼š

分布å¼è®¡ç®—的谬论 (The Fallacies of Distributed Computing)

英文维基百科

åˆç§° 网络计算的谬误,这是一系列关于分布å¼è®¡ç®—的猜想(或者看法),这些猜想å¯èƒ½ä¼šå¼•起软件开å‘中的失败。这些å‡è®¾æ˜¯ï¼š

  • 网络å¯é 
  • 延迟为零
  • 带宽无é™
  • 网络安全
  • 拓扑æ’定
  • å•一管ç†å‘˜
  • è¿è¾“æˆæœ¬ä¸ºé›¶
  • ç½‘ç»œä¸ºåŒæž„çš„

å‰ 4 个项目由 Bill Joy å’Œ Tom Lyon 于 1991 å·¦å³æå‡ºã€‚å¹¶è¢« James Gosling 首次归类于“网络计算的谬误â€ï¼›åŽ L. Peter Deutsch 添加了第 5ã€6ã€7 个谬误;90 年代末,Gosling 添加了最åŽä¸€ä¸ªè°¬è¯¯ã€‚

这些内容å—到了 太阳微系统 (Sun Microsystems) 内部当时所å‘生的事情的å¯å‘。

在设计弹性代ç çš„æ—¶å€™ï¼Œåº”该仔细考虑这些谬误,并å‡è®¾å…¶ä¸­ä»»ä½•一个谬误都å¯èƒ½å¼•起处ç†åˆ†å¸ƒå¼ç³»ç»Ÿçš„夿‚性和现实性时的逻辑缺陷。

å‚è§:

阅读清å•

如果你觉得这些概念很有趣,你å¯èƒ½ä¼šå–œæ¬¢ä»¥ä¸‹ä¹¦ç±ã€‚

在线资æº

一些有用的资æºå’Œé˜…读资料。

相关项目

TODO

å—¨ï¼å¦‚果你读到这里,点击了一个我尚未编写的主题链接,我感到很抱歉。这是正在进行中的工作ï¼

éšæ„ç»™ hacker-laws å’Œ hacker-laws-zh æ Issue 或者 Pull Request。

About

💻📖对开å‘人员有用的定律ã€ç†è®ºã€åŽŸåˆ™å’Œæ¨¡å¼ã€‚(Laws, Theories, Principles and Patterns that developers will find useful.)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0