8000 GitHub - z-lite/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

z-lite/hacker-laws-zh

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

hacker-laws 的的中文翻译。

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

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

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

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

介ç»

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

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

定律

现在我们开始å§ï¼

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

阿姆达尔定律是一个显示计算任务潜在加速能力的公å¼ã€‚è¿™ç§èƒ½åŠ›å¯ä»¥é€šè¿‡å¢žåŠ ç³»ç»Ÿèµ„æºæ¥å®žçŽ°ï¼Œé€šå¸¸ç”¨äºŽå¹¶è¡Œè®¡ç®—ä¸­ã€‚å®ƒå¯ä»¥é¢„测增加处ç†å™¨æ•°é‡çš„实际好处,然而增加处ç†å™¨æ•°é‡ä¼šå—到程åºå¹¶è¡Œæ€§çš„é™åˆ¶ã€‚

举例说明:如果程åºç”±ä¸¤éƒ¨åˆ†ç»„æˆï¼Œéƒ¨åˆ† 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)

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

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

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

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

å‚è§ï¼š

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

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

å‚è§ï¼š

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

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

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

å‚è§ï¼š

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

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

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

å‚è§ï¼š

盖尔定律 (Gall's Law)

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

约翰·盖尔 (John Gall)

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

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

å‚è§ï¼š

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

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

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

å¦è§ï¼š

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

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

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

现实中的例å­ï¼š

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

å‚è§

汉隆的剃刀 (Hanlon's Razor)

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

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

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

侯世达定律 (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 çš„å“应时间这ç§éžåŠŸèƒ½æ€§å› ç´ ï¼Œè¿˜æœ‰ä¸€ä¸ªæ›´å¾®å¦™çš„ä¾‹å­æ˜¯ï¼šç”¨æˆ·ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åˆ¤æ–­é”™è¯¯ä¿¡æ¯çš„类型时,å³ä½¿ API 的公共说明没有说明消æ¯çš„å†…å®¹ï¼Œæ¥æŒ‡ç¤ºç”¨æˆ·é”™è¯¯çš„类型,一些用户也å¯èƒ½ä¼šä½¿ç”¨å¹¶æ›´æ”¹è¯¥æ¶ˆæ¯ï¼Œè€Œè¿™å®žé™…上会破å API 的使用。

å‚è§ï¼š

柯林汉定律 (Kernighan's Law)

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

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

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

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

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

å‚è§ï¼š

梅特å¡å¤«å®šå¾‹ (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 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 6D40 syntax of comments)

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

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

å‚è§ï¼š

惠顿定律 (Wheaton's Law)

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

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

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

原则

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

呆伯特法则 (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 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)。

实际上,如果你在两个或更多的地方有ç 770A ›¸åŒçš„功能,你å¯ä»¥ä½¿ç”¨ 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