hacker-laws çš„çš„ä¸æ–‡ç¿»è¯‘。
对开å‘人员有用的定律ã€ç†è®ºã€åŽŸåˆ™å’Œæ¨¡å¼ã€‚(Laws, Theories, Principles and Patterns that developers will find useful.)
ä¸ºäº†æ–¹ä¾¿é˜…è¯»ï¼Œç»´åŸºç™¾ç§‘å¢žåŠ äº†ä¸æ–‡é“¾æŽ¥ã€‚英文链接表示 hacker-laws 项目尚未完æˆçš„主题。
ä¸å›½æ— 法访问维基百科说明
喜欢点 star ã€å…³æ³¨ç‚¹ watch ã€è´¡çŒ®ç‚¹ fork 。翻译错æ¼ä¹‹å¤„,欢迎指æ£ï¼
- 介ç»
- 定律
- 阿姆达尔定律 (Amdahl's Law)
- ç ´çª—æ•ˆåº” (The Broken Windows Theory)
- 布é²å…‹æ–¯æ³•则 (Brooks's Law)
- 康å¨å®šå¾‹ (Conway's Law)
- åŽå®æ±‰å§†å®šå¾‹ (Cunningham's Law)
- é‚“å·´æ•°å— (Dunbar's Number)
- 盖尔定律 (Gall's Law)
- å¤å¾·å“ˆç‰¹å®šå¾‹ (Goodhart's Law)
- 汉隆的剃刀 (Hanlon's Razor)
- 侯世达定律 (Hofstadter's Law)
- 哈伯特定律 (Hutber's Law)
- 技术æˆç†Ÿåº¦æ›²çº¿ (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)
- 过早优化效应 (Premature Optimization Effect)
- 普特定律 (Putt's Law)
- 里德定律 (Reed's Law)
- 夿‚性守æ’定律 (The Law of Conservation of Complexity or Tesler's Law)
- 抽象泄æ¼å®šå¾‹ (The Law of Leaky Abstractions)
- 帕金森çç¢Žå®šç† (The Law of Triviality)
- Unix å“²å¦ (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)
- ä¾èµ–å转原则 (The Dependency Inversion Principle)
- ä¸è¦é‡å¤ä½ 自己原则 (The DRY Principle)
- KISS 原则 (The KISS Principle)
- ä½ ä¸éœ€è¦å®ƒåŽŸåˆ™ (YAGNI)
- 分布å¼è®¡ç®—的谬论 (The Fallacies of Distributed Computing)
- 阅读清å•
- TODO
å½“äººä»¬è°ˆè®ºå¼€å‘æ—¶ï¼Œä¼šèŠåˆ°è®¸å¤šå®šå¾‹ã€‚这个仓库收录了一些最常è§çš„定律。
â—: 这个仓库包å«å¯¹ä¸€äº›å®šå¾‹ã€åŽŸåˆ™ä»¥åŠæ¨¡å¼çš„è§£é‡Šï¼Œä½†ä¸æå€¡å…¶ä¸ä»»ä½•一个。 它们的应用始终å˜åœ¨ç€äº‰è®ºï¼Œå¹¶ä¸”很大程度上å–å†³äºŽä½ æ£åœ¨åšä»€ä¹ˆã€‚
现在我们开始å§ï¼
é˜¿å§†è¾¾å°”å®šå¾‹æ˜¯ä¸€ä¸ªæ˜¾ç¤ºè®¡ç®—ä»»åŠ¡æ½œåœ¨åŠ é€Ÿèƒ½åŠ›çš„å…¬å¼ã€‚è¿™ç§èƒ½åŠ›å¯ä»¥é€šè¿‡å¢žåŠ ç³»ç»Ÿèµ„æºæ¥å®žçŽ°ï¼Œé€šå¸¸ç”¨äºŽå¹¶è¡Œè®¡ç®—ä¸ã€‚它å¯ä»¥é¢„æµ‹å¢žåŠ å¤„ç†å™¨æ•°é‡çš„å®žé™…å¥½å¤„ï¼Œç„¶è€Œå¢žåŠ å¤„ç†å™¨æ•°é‡ä¼šå—到程åºå¹¶è¡Œæ€§çš„é™åˆ¶ã€‚
举例说明:如果程åºç”±ä¸¤éƒ¨åˆ†ç»„æˆï¼Œéƒ¨åˆ† 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 或ç€è‰²å™¨å•å…ƒï¼‰çš„åŽŸå› ã€‚
å‚è§ï¼š
åœ¨ç ´çª—ç†è®ºä¸è®¤ä¸ºï¼Œä¸€äº›æ˜Žæ˜¾çš„犯罪迹象(或缺ä¹çŽ¯ä¿æ„识)会导致进一æ¥çš„ã€æ›´ä¸¥é‡çš„犯罪(æˆ–çŽ¯å¢ƒçš„è¿›ä¸€æ¥æ¶åŒ–)。
ç ´çª—ç†è®ºå·²åº”用于软件开å‘ä¸ï¼Œå®ƒè¡¨æ˜ŽåŠ£è´¨ä»£ç (或 Technical Debt)å¯èƒ½ä¼šå½±å“åŽç»ä¼˜åŒ–的效率,从而进一æ¥é€ æˆä»£ç 劣化;éšç€æ—¶é—´çš„æŽ¨ç§»ï¼Œè¿™ç§æ•ˆåº”将会导致代ç è´¨é‡å¤§å¹…下é™ã€‚
å‚è§ï¼š
例å:
- 《程åºå‘˜ä¿®ç‚¼ä¹‹é“:软件熵》(The Pragmatic Programming: Software Entropy)
- 《Coding Horrorï¼šç ´çª—æ•ˆåº”ã€‹(Coding Horror: The Broken Window Theory)
- 《开æºï¼šç¼–ç¨‹ä¹‹ä¹ - ç ´çª—æ•ˆåº”ã€‹(OpenSource: Joy of Programming - The Broken Window Theory)
软件开å‘åŽæœŸï¼Œæ·»åŠ äººåŠ›åªä¼šä½¿é¡¹ç›®å¼€å‘得更慢。
è¿™ä¸ªå®šå¾‹è¡¨æ˜Žï¼Œåœ¨è®¸å¤šæƒ…å†µä¸‹ï¼Œè¯•å›¾é€šè¿‡å¢žåŠ äººåŠ›æ¥åŠ é€Ÿå·²å»¶æœŸé¡¹ç›®çš„äº¤ä»˜ï¼Œå°†ä¼šä½¿é¡¹ç›®äº¤ä»˜å¾—æ›´æ™šã€‚å¸ƒé²å…‹æ–¯ä¹Ÿæ˜Žç™½ï¼Œè¿™æ˜¯ä¸€ç§è¿‡åº¦ç®€åŒ–ã€‚ä½†ä¸€èˆ¬çš„è®ºæ®æ˜¯ï¼Œæ–°èµ„æºçš„æ—¶é—´å¢žåŠ å’Œé€šä¿¡å¼€é”€ï¼Œä¼šåœ¨çŸæœŸå†…使开å‘é€Ÿåº¦å‡æ…¢ã€‚而且,许多任务是密ä¸å¯åˆ†çš„,æ¢å¥è¯è¯´ï¼Œè¿™æ ·å¯ä»¥ä½¿æ›´å¤šçš„资æºä¹‹é—´èƒ½è½»æ˜“分é…,这也æ„å‘³ç€æ½œåœ¨çš„速度增长也更低。
è°šè¯ ä¹ä¸ªå¥³äººä¸èƒ½åœ¨ä¸€ä¸ªæœˆå†…生一个å©å 与布é²å…‹æ–¯æ³•则åŒå‡ºä¸€è¾™ï¼Œç‰¹åˆ«æ˜¯æŸäº›ä¸å¯åˆ†å‰²æˆ–者并行的工作。
这是《人月神è¯ã€‹çš„ä¸å¿ƒä¸»é¢˜ã€‚
å‚è§ï¼š
这个定律说明了系统的技术边界å¯ä»¥å应一个组织的结构,它通常会在改进组织时被æåŠã€‚康å¨å®šå¾‹è¡¨æ˜Žï¼Œå¦‚果一个组织被分散æˆè®¸å¤šå°è€Œæ— è”系的å•元,那么它开å‘的软件也是å°è€Œåˆ†æ•£çš„。如果组织是更多地围绕以功能或æœåŠ¡ä¸ºå¯¼å‘çš„åž‚ç›´ç»“æž„ï¼Œé‚£ä¹ˆè½¯ä»¶ç³»ç»Ÿä¹Ÿä¼šåæ˜ 这一点。
å‚è§ï¼š
在网络上想得到æ£ç¡®ç”æ¡ˆçš„æœ€å¥½æ–¹æ³•ä¸æ˜¯æé—®é¢˜ï¼Œè€Œæ˜¯å‘å¸ƒä¸€ä¸ªé”™è¯¯çš„ç”æ¡ˆã€‚
æ®å²è’‚芬·麦克基迪说,沃德·åŽå®æ±‰å§†æ—©åœ¨ 20 世纪 80 年代早期的时候建议他,在互è”网上获得æ£ç¡®ç”æ¡ˆçš„æœ€å¥½æ–¹æ³•ä¸æ˜¯æé—®é¢˜ï¼Œè€Œæ˜¯å‘å¸ƒä¸€ä¸ªé”™è¯¯çš„ç”æ¡ˆã€‚麦克基迪称这为åŽå®æ±‰å§†å®šå¾‹ï¼Œè€ŒåŽå®æ±‰å§†ä¸ä»¥ä¸ºç„¶ï¼Œå¹¶è§‰å¾—这是“错误的引用â€ã€‚最åˆè¿™æ¡å®šå¾‹åªæ˜¯ç”¨äºŽæè¿° Usenet ä¸Šçš„ç¤¾äº¤è¡Œä¸ºï¼Œä½†åŽæ¥ä¹Ÿæ¸æ¸ç”¨äºŽå…¶ä»–的在线社区(如 Wikipediaã€Redditã€Twitterã€Facebook ç‰ï¼‰ã€‚
å‚è§ï¼š
é‚“å·´æ•°å—æ˜¯å¯¹ä¸€ä¸ªäººèƒ½å¤Ÿä¿æŒç¨³å®šç¤¾ä¼šå…³ç³»çš„人数的认知æžé™â€”—在这ç§å…³ç³»ä¸ï¼Œä¸€ä¸ªäººçŸ¥é“æ¯ä¸ªäººæ˜¯è°ï¼Œä¹ŸçŸ¥é“æ¯ä¸ªäººä¸Žå…¶ä»–人的关系如何。而对这一数å—的确切值则有ç€ä¸€äº›ä¸åŒæ„è§ã€‚邓巴指出,人仅能轻æ¾åœ°ç»´æŒ 150 ä¸ªç¨³å®šçš„å…³ç³»ã€‚è¿™æ ·çš„å…³ç³»åœ¨ä¸€ä¸ªæ›´ç¤¾ä¼šåŒ–çš„èƒŒæ™¯ä¸ï¼Œä¾¿æ˜¯å½“ä½ ç¢°å·§åœ¨é…’å§é‡Œç¢°åˆ°è¿™äº›äººæ—¶å€™ï¼Œä½ ä¸ä¼šå› ä¸ºåŠ å…¥ä»–ä»¬è€Œæ„Ÿåˆ°å°´å°¬ã€‚é‚“å·´æ•°å—的估计值一般在 100 至 250 之间。
å’Œäººä¸Žäººä¹‹é—´ç¨³å®šçš„å…³ç³»ä¸€æ ·ï¼Œå¼€å‘人员与代ç 库的关系也需è¦åŠªåŠ›ç»´æŠ¤ã€‚å½“é¢å¯¹å¤§åž‹ã€å¤æ‚çš„é¡¹ç›®ï¼Œæˆ–è®¸å¤šé¡¹ç›®çš„å½’å±žæƒæ—¶ï¼Œæˆ‘们会ä¾èµ–于约定ã€ç–略和建模过程æ¥è¿›è¡Œæ‰©å±•。邓巴数å—ä¸ä»…在办公室规模的扩大的过程ä¸ä¸¾è¶³è½»é‡ï¼Œè€Œä¸”在设置团队工作范围,或决定系统何时应该注é‡äºŽè¾…助建模和组织管ç†å¼€é”€è‡ªåŠ¨åŒ–çš„å·¥å…·æ—¶ï¼Œä¹Ÿæ˜¯éžå¸¸é‡è¦çš„ã€‚å°†é‚“å·´æ•°å—æ”¾å…¥å·¥ç¨‹å†…容ä¸è¿›è¡Œç±»æ¯”ï¼Œé‚£å°±æ˜¯æ‚¨èƒ½åŠ å…¥å¹¶æœ‰ä¿¡å¿ƒéšå«éšåˆ°è¿›è¡Œè½®æ¢çš„项目数(亦或是å•ä¸ªé¡¹ç›®çš„è§„èŒƒåŒ–å¤æ‚性)。
å‚è§ï¼š
一个切实å¯è¡Œçš„夿‚系统势必是从一个切实å¯è¡Œçš„简å•系统å‘展而æ¥çš„ã€‚ä»Žå¤´å¼€å§‹è®¾è®¡çš„å¤æ‚ç³»ç»Ÿæ ¹æœ¬ä¸åˆ‡å®žå¯è¡Œï¼Œæ— 法修修补补让它切实å¯è¡Œã€‚ä½ å¿…é¡»ç”±ä¸€ä¸ªåˆ‡å®žå¯è¡Œçš„简å•ç³»ç»Ÿé‡æ–°å¼€å§‹ã€‚
约翰·盖尔 (John Gall)
ç›–å°”å®šå¾‹è¯´æ˜Žäº†è®¾è®¡é«˜åº¦å¤æ‚的系统很å¯èƒ½ä¼šå¤±è´¥ã€‚它们很难一蹴而就,更多是从简å•çš„ç³»ç»Ÿé€æ¸æ¼”å˜è€Œæ¥ã€‚
最典型的例å便是互è”网。如今的互è”ç½‘æ˜¯ä¸€ä¸ªé«˜åº¦å¤æ‚çš„ç³»ç»Ÿï¼Œè€Œå®ƒæœ€æ—©åªæ˜¯è¢«å®šä¹‰ä¸ºä¸€ç§åœ¨å¦æœ¯æœºæž„之间共享内容的方å¼ã€‚互è”网æˆåŠŸå®žçŽ°äº†æœ€åˆçš„ç›®æ ‡ï¼Œå¹¶ä¸”éšç€æ—¶é—´ä¸æ–演化,最终æˆå°±äº†å¦‚ä»Šçš„å¤æ‚ç¹è£ã€‚
å‚è§ï¼š
å½“åŽ‹åŠ›æ–½äºŽå…¶ä¸Šä»¥è¿›è¡ŒæŽ§åˆ¶æ—¶ï¼Œä»»ä½•è§‚æµ‹åˆ°çš„ç»Ÿè®¡æ’æ€§éƒ½å€¾å‘消散。
查尔斯·å¤å¾·å“ˆç‰¹ (Charles Goodhart)
å¦è§ï¼š
当一个措施本身æˆä¸ºç›®æ ‡æ—¶ï¼Œå®ƒå°±ä¸å†æ˜¯ä¸€ä¸ªå¥½çš„æŽªæ–½ã€‚
玛丽莲·斯特拉腾 (Marilyn Strathern)
æ ¹æ®è¿™ä¸€å®šå¾‹ï¼Œç”±æµ‹é‡é©±åŠ¨çš„ä¼˜åŒ–å而å¯èƒ½å¯¼è‡´æµ‹é‡ç»“果本身的说æœåЛ䏋é™ã€‚ç›²ç›®ä½¿ç”¨ä¸€äº›è¿‡åº¦ä¸¥æ ¼ç›é€‰çš„æ–¹æ³• (KPIs) å¯èƒ½ä¼šäº§ç”Ÿä¸€äº›ä¸è‰¯çš„å½±å“。人们会倾å‘于用“钻空åâ€çš„行为去åšå±€éƒ¨ä¼˜åŒ–ï¼Œä»Žè€Œæ»¡è¶³ä¸€äº›ç‰¹å®šçš„åº¦é‡æ ‡å‡†ï¼Œè€Œä¸ä¼šåœ¨æ„整体的结果。
现实ä¸çš„例å:
- Assert-free 测试å¯ä»¥è¾¾åˆ°ä»£ç 覆盖率的预期,但度é‡çš„ç›®çš„åº”è¯¥æ˜¯åˆ›é€ ç»è¿‡è‰¯å¥½æµ‹è¯•的软件。
- ç”± commits 的行数æ¥è¯„ä»·å¼€å‘人员的表现,从而导致了ä¸åˆç†çš„代ç 库扩增。
å‚è§
èƒ½è§£é‡Šä¸ºæ„šè ¢çš„ï¼Œå°±ä¸è¦è§£é‡Šä¸ºæ¶æ„的。
罗伯特·汉隆 (Robert J. Hanlon)
这一原则表明,一个行为所产生的消æžç»“æžœå¹¶ä¸æ˜¯æ¶æ„。相å,消æžç»“果更有å¯èƒ½å½’咎于这些没有得到充分ç†è§£çš„行动或影å“。
å³ä½¿è€ƒè™‘åˆ°ä¾¯ä¸–è¾¾å®šå¾‹ï¼Œå®ƒä¹Ÿæ€»æ˜¯æ¯”ä½ é¢„æœŸçš„è¦é•¿ã€‚
侯世达 (Douglas Hofstadter)
在估计需è¦å¤šé•¿æ—¶é—´å¼€å‘æ—¶ï¼Œä½ å¯èƒ½ä¼šå¬åˆ°æ¤å®šå¾‹ã€‚软件开å‘ä¼¼ä¹Žæœ‰è¿™æ ·ä¸€æ¡å®šç†ï¼Œå³æˆ‘们往往ä¸èƒ½å‡†ç¡®åœ°ä¼°è®¡éœ€è¦å¤šé•¿æ—¶é—´æ‰èƒ½å®Œæˆã€‚
è¯å‡ºã€Šå“¥å¾·å°”ã€è‰¾èˆå°”ã€å·´èµ«ï¼šé›†å¼‚璧之大æˆã€‹ã€‚
å‚è§ï¼š
æ”¹å–„å³æ¶åŒ–。
帕特里克·哈伯特 (Patrick Hutber)
这个定律说明了对一个系统的改进会导致其他部分的æ¶åŒ–;或者它会将其他的æ¶åŒ–éšè—èµ·æ¥ï¼Œå¹¶å¯¼è‡´ç³»ç»Ÿæ•´ä½“状æ€çš„退化。
例如,æŸä¸ªç«¯ç‚¹çš„å“应延迟å‡å°‘,就å¯èƒ½å¯¼è‡´è¯·æ±‚æµä¸çš„åžåé‡å’Œå®¹é‡é—®é¢˜è¿›ä¸€æ¥å¢žåŠ ï¼Œå¹¶å½±å“到å¦ä¸€ä¸ªå®Œå…¨ä¸åŒçš„å系统。
我们倾å‘äºŽè¿‡é«˜ä¼°è®¡æŠ€æœ¯åœ¨çŸæœŸå†…的影å“,并低估长期效应。
罗伊·阿马拉 (Roy Amara)
技术æˆç†Ÿåº¦æ›²çº¿æ˜¯é«˜å¾·çº³å’¨è¯¢å…¬å¸å¯¹æŠ€æœ¯æœ€åˆå…´èµ·å’Œå‘展的视觉展现。一图顶åƒè¨€ï¼š
(å›¾ç‰‡æ¥æº: By Jeremykemp at English Wikipedia, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=10547051)
简而言之,这个周期表明,新技术åŠå…¶æ½œåœ¨å½±å“通常会引å‘一阵浪潮。团队快速使用这些新技术,有时会对结果感到失望。这å¯èƒ½æ˜¯å› 为该技术还ä¸å¤Ÿæˆç†Ÿï¼Œæˆ–者现实应用还没有完全实现。ç»è¿‡ä¸€æ®µæ—¶é—´åŽï¼ŒæŠ€æœ¯çš„能力æé«˜äº†ï¼Œä½¿ç”¨å®ƒçš„å®žé™…æœºä¼šä¼šå¢žåŠ ï¼Œæœ€ç»ˆå›¢é˜Ÿä¹Ÿå¯ä»¥æé«˜å·¥ä½œæ•ˆçŽ‡ã€‚ç½—ä¼ŠÂ·é˜¿é©¬æ‹‰ç®€æ´åœ°æ€»ç»“了这一点:我们倾å‘äºŽé«˜ä¼°æŠ€æœ¯çŸæœŸå†…的影å“,并低估长期效应。
当 API æœ‰è¶³å¤Ÿå¤šçš„ç”¨æˆ·æ—¶ï¼Œä½ åœ¨åˆåŒä¸çš„æ‰¿è¯ºå·²ä¸é‡è¦ï¼šä½ 系统的所有å¯è§‚察行为都将被æŸäº›äººæ‰€ä¾èµ–。
海伦·赖特 (Hyrum Wright)
éšå¼æŽ¥å£å®šå¾‹è¡¨æ˜Žï¼Œå½“ä½ çš„ API 有足够多的用户时,API 的所有行为(包括那些未囊括在公共说明ä¸çš„一部分)最终都会被其他人所ä¾èµ–。 一个简å•çš„ä¾‹åæ˜¯ API çš„å“应时间这ç§éžåŠŸèƒ½æ€§å› ç´ ï¼Œè¿˜æœ‰ä¸€ä¸ªæ›´å¾®å¦™çš„ä¾‹åæ˜¯ï¼šç”¨æˆ·ä½¿ç”¨æ£åˆ™è¡¨è¾¾å¼åˆ¤æ–错误信æ¯çš„类型时,å³ä½¿ API 的公共说明没有说明消æ¯çš„å†…å®¹ï¼Œæ¥æŒ‡ç¤ºç”¨æˆ·é”™è¯¯çš„类型,一些用户也å¯èƒ½ä¼šä½¿ç”¨å¹¶æ›´æ”¹è¯¥æ¶ˆæ¯ï¼Œè€Œè¿™å®žé™…ä¸Šä¼šç ´å API 的使用。
å‚è§ï¼š
调试在一开始就比编写程åºå›°éš¾ä¸€å€ã€‚å› æ¤ï¼ŒæŒ‰ç…§å®šä¹‰ï¼Œå¦‚æžœä½ çš„ä»£ç 写得éžå¸¸å·§å¦™ï¼Œé‚£ä¹ˆä½ 就没有足够的能力æ¥è°ƒè¯•它。
布莱æ©Â·æŸ¯æž—汉 (Brian Kernighan)
柯林汉定律是以布莱æ©Â·æŸ¯æž—汉 (Brian Kernighan) çš„åå—命åçš„ï¼Œå¼•è¿°è‡ªæŸ¯æž—æ±‰å’Œæ™®åŠ³æ ¼ (P.J. Plauger) çš„ã€Šç¼–ç¨‹æ ¼è°ƒã€‹ (The Elements of Programming Style) 一书ä¸çš„一å¥è¯ï¼š
æ¯ä¸ªäººéƒ½çŸ¥é“,调试在一开始就比编写程åºå›°éš¾ä¸€å€ã€‚那么,如果您在编写它时尽å¯èƒ½åœ°å·§å¦™ï¼Œåˆå¦‚何æ¥è°ƒè¯•它?
å°½ç®¡è¿™æœ‰äº›å¤¸å¼ ï¼Œä½†å®ƒæå‡ºçš„论点是,简å•的代ç ä¼šæ¯”å¤æ‚çš„ä»£ç æ›´å¯å–ï¼Œå› ä¸ºè°ƒè¯•å¤æ‚代ç 的过程ä¸å‡ºçŽ°çš„ä»»ä½•é—®é¢˜éƒ½ä¼šååˆ†æ£˜æ‰‹ï¼Œç”šè‡³æ— æ³•è§£å†³ã€‚
å‚è§ï¼š
在网络ç†è®ºä¸ï¼Œç³»ç»Ÿçš„价值约ç‰äºŽç³»ç»Ÿç”¨æˆ·æ•°çš„平方。
这个定律基于一个系统ä¸å¯èƒ½çš„连接对数é‡ï¼Œå¹¶ä¸”与里德定律 (Reed's Law) å分相近。奥德利兹科 (Odlyzko) 和其他人认为,里德定律和梅特å¡å¤«å®šå¾‹å¤¸å¤§äº†ç³»ç»Ÿæœ¬èº«çš„ä»·å€¼ï¼Œå› ä¸ºå®ƒä»¬æ²¡æœ‰è€ƒè™‘åˆ°ç½‘ç»œæ•ˆåº”ä¸äººç±»è®¤çŸ¥çš„é™åˆ¶ã€‚
å‚è§:
集æˆç”µè·¯ä¸çš„æ™¶ä½“管数é‡å¤§çº¦æ¯ä¸¤å¹´ç¿»ä¸€ç•ªã€‚
è¿™æ¡å®šå¾‹é€šå¸¸ç”¨äºŽè¯´æ˜ŽåŠå¯¼ä½“和芯片技术æé«˜çš„ç»å¯¹é€Ÿåº¦ã€‚从 20 世纪 70 年代到 21 世纪å‰åå¹´ï¼Œæ‘©å°”çš„é¢„æµ‹è¢«è¯æ˜Žæ˜¯é«˜åº¦å‡†ç¡®çš„。 è¿‘å¹´æ¥ï¼Œè¿™ç§è¶‹åŠ¿ç•¥æœ‰å˜åŒ–ï¼Œéƒ¨åˆ†åŽŸå› å—到é‡å隧穿效应影å“。然而,并行化计算的进æ¥ä»¥åŠåŠå¯¼ä½“技术和é‡å计算潜在的é©å‘½æ€§å˜åŒ–,å¯èƒ½æ„å‘³ç€æ‘©å°”定律在未æ¥å‡ å年内继ç»ä¿æŒæ£ç¡®ã€‚
凡是å¯èƒ½å‡ºé”™çš„事就一定会出错。
出自 爱德åŽÂ·AÂ·å¢¨è² ï¼Œ 墨è²å®šå¾‹ 说明了如果一件事有å¯èƒ½å‡ºé”™ï¼Œé‚£ä¹ˆå°±ä¸€å®šä¼šå‡ºé”™ã€‚
这是一å¥å¼€å‘人员间的俗è¯ï¼Œåœ¨å¼€å‘ã€æµ‹è¯•甚至在生产ä¸éƒ½æœ‰å¯èƒ½ä¼šå‘ç”Ÿä¸€äº›ä»¤äººæ„æƒ³ä¸åˆ°çš„事情。而这一定律也å¯ä»¥å‚考在英å¼è‹±è¯ä¸æ›´ä¸ºå¸¸è§çš„ ç´¢å¾·å®šç† ï¼š
如果æŸä»¶äº‹å¯èƒ½å‡ºé”™ï¼Œé‚£ä¹ˆå®ƒä¸€å®šä¼šåœ¨æœ€ç³Ÿç³•的时候å‘生。
这些定律常常用于幽默嘲弄。但是,类似于 Confirmation Bias å’Œ Selection Bias 的现象很容易导致人们过分强调这些定律(å³åœ¨å¤§éƒ¨åˆ†æƒ…况下,一件事的æˆåŠŸä¼šæ˜¾å¾—å¸ç©ºè§æƒ¯ï¼›è€Œå¤±è´¥æ‰ä¼šå¼•起更多的注æ„和讨论)。
å‚è§:
å¦‚æ— å¿…è¦ï¼Œå‹¿å¢žå®žä½“。
奥å¡å§†çš„å¨å»‰ (William of Ockham)
奥å¡å§†å‰ƒåˆ€æŒ‡å‡ºï¼Œåœ¨å‡ ç§å¯èƒ½çš„解决方案之ä¸ï¼Œæœ€æœ‰å¯èƒ½çš„解决方案便是概念和å‡è®¾æœ€å°‘çš„é‚£ä¸ªã€‚å› ä¸ºè¿™ä¸ªè§£å†³æ–¹æ¡ˆæœ€ä¸ºç®€å•,åªè§£å†³äº†é—®é¢˜ï¼Œå¹¶ä¸”没有引入é¢å¤–çš„å¤æ‚度和å¯èƒ½çš„è´Ÿé¢åŽæžœã€‚
å‚è§ï¼š
- ä½ ä¸éœ€è¦å®ƒåŽŸåˆ™ (YAGNI)
- 没有银弹:软件工程的本质性与附属性工作
- No Silver Bullet: Accidental Complexity and Essential Complexity
例å:
在工作能够完æˆçš„æ—¶é™å†…,工作é‡ä¼šä¸€ç›´å¢žåŠ ï¼Œç›´åˆ°æ‰€æœ‰å¯ç”¨æ—¶é—´éƒ½è¢«å¡«æ»¡ä¸ºæ¢ã€‚
åŸºäºŽå®˜åƒšæœºæž„çš„ç ”ç©¶èƒŒæ™¯ï¼Œè¯¥å®šå¾‹è¢«åº”ç”¨äºŽè½¯ä»¶å¼€å‘ä¸ã€‚该ç†è®ºè®¤ä¸ºï¼Œå›¢é˜Ÿåœ¨æˆªæ¢æ—¥æœŸä¹‹å‰æ•ˆçŽ‡ä½Žä¸‹ï¼Œç„¶åŽåœ¨æˆªæ¢æ—¥æœŸå‰èµ¶ç´§å®Œæˆå·¥ä½œï¼Œä»Žè€Œä½¿å®žé™…æˆªæ¢æ—¥æœŸå˜å¾—éšæ„。
将这个定ç†ä¸Žä¾¯ä¸–达定律相结åˆï¼Œåˆ™ä¼šèŽ·å¾—æ›´åŠ æ‚²è§‚çš„è§‚ç‚¹ï¼šä¸ºäº†åœ¨è§„å®šæ—¶é—´å†…å®Œæˆå·¥ä½œï¼Œå·¥ä½œå°†å¢žå¤šï¼ŒèŠ±è´¹æ¯”é¢„æœŸæ›´é•¿çš„æ—¶é—´ã€‚
å‚è§ï¼š
过早优化是万æ¶ä¹‹æºã€‚
在高德纳的《goto è¯å¥çš„结构化编程》论文ä¸ï¼Œä»–写到:“程åºå‘˜ä»¬æµªè´¹äº†å¤§é‡çš„æ—¶é—´åŽ»æ€è€ƒæˆ–者担心他们的程åºä¸çš„éžå…³é”®éƒ¨åˆ†çš„速度。而在考虑调试和维护的时候,这些所谓æé«˜æ•ˆçŽ‡çš„åšæ³•实际上å分ä¸å¦¥ã€‚我们应该放弃å°çš„æ•ˆçŽ‡ç‚¹ï¼Œå¹¶ä¸”è¦åœ¨ 97% 的时间æé†’自己,过早优化是万æ¶ä¹‹æºã€‚而且连那关键的 3% 也ä¸èƒ½å¤Ÿæ”¾è¿‡ã€‚â€
然而,过早优化 (简而言之)å¯ä»¥å®šä¹‰ä¸ºåœ¨æˆ‘们知é“需è¦åšä»€ä¹ˆä¹‹å‰è¿›è¡Œä¼˜åŒ–。
技术由两类人主导,一类是纯粹的管ç†äººå‘˜ï¼Œ 一类是纯粹的技术人员。
普特定律常常éµå¾ªæ™®ç‰¹æŽ¨è®ºï¼š
æ¯ä¸€ä¸ªæŠ€æœ¯å±‚次,å‡ä»¥æ—¶æ—¥ï¼Œèƒ½åŠ›å°†é€†è½¬ã€‚
这些结论表明,由于å„ç§é€‰æ‹©æ ‡å‡†å’Œç¾¤ä½“组织的趋势,技术组织的工作层é¢å°†æœ‰ä¸€äº›æŠ€æœ¯äººå‘˜ï¼Œä»¥åŠä¸€äº›ä¸äº†è§£å¤æ‚性和挑战的管ç†äººå‘˜ã€‚è¿™ç§çŽ°è±¡å¯èƒ½æ˜¯ç”±äºŽ å½¼å¾—åŽŸç† (The Peter Principle) 或 呆伯特法则 (The Dilbert Principle) é€ æˆçš„。
但是,应该强调的是,诸如æ¤ç±»çš„定律是一ç§å¹¿æ³›çš„æ¦‚括,å¯èƒ½é€‚用于æŸäº›ç±»åž‹çš„组织,而ä¸é€‚用于其他组织。
å‚è§ï¼š
大型网络,尤其是社交网络的效用会éšç€ç½‘络的大å°å‘ˆæŒ‡æ•°çº§æ‰©å¢žã€‚
这一定律基于图论,图论ä¸çš„æ•ˆç”¨ä¸Žå¯èƒ½çš„å组数é‡å‘ˆæ£æ¯”,并且该增长速度会比å‚与者的数é‡å’Œå¯èƒ½çš„连接对数é‡è¦å¿«ã€‚奥德利兹科 (Odlyzko) å’Œå…¶ä»–äººè®¤ä¸ºï¼Œé‡Œå¾·å®šå¾‹å¤¸å¤§äº†ç³»ç»Ÿæœ¬èº«çš„ä»·å€¼ï¼Œå› ä¸ºå®ƒä»¬æ²¡æœ‰è€ƒè™‘åˆ°ç½‘ç»œæ•ˆåº”ä¸äººç±»è®¤çŸ¥çš„é™åˆ¶ã€‚
å‚è§:
该定律表明系统ä¸å˜åœ¨ç€ä¸€å®šç¨‹åº¦çš„夿‚性,并且ä¸èƒ½å‡å°‘。
系统ä¸çš„æŸäº›å¤æ‚æ€§æ˜¯æ— æ„的。这是由于结构ä¸è‰¯ï¼Œé”™è¯¯æˆ–è€…ç³Ÿç³•çš„å»ºæ¨¡é€ æˆçš„ã€‚è¿™ç§æ— æ„çš„å¤æ‚性å¯ä»¥å‡å°‘æˆ–è€…æ¶ˆé™¤ã€‚ç„¶è€Œï¼Œç”±äºŽå¾…è§£å†³é—®é¢˜å›ºæœ‰çš„å¤æ‚性,æŸäº›å¤æ‚性是内在的。这ç§å¤æ‚性å¯ä»¥è½¬ç§»ï¼Œä½†ä¸èƒ½æ¶ˆé™¤ã€‚
该定律有趣的一点是,å³ä½¿ç®€åŒ–æ•´ä¸ªç³»ç»Ÿï¼Œå†…åœ¨çš„å¤æ‚性也ä¸ä¼šé™ä½Žã€‚å®ƒä¼šè½¬ç§»åˆ°ç”¨æˆ·ï¼Œå¹¶ä¸”ç”¨æˆ·å¿…é¡»ä»¥æ›´å¤æ‚的方å¼è¡Œäº‹ã€‚
在æŸç§ç¨‹åº¦ä¸Šï¼Œæ‰€æœ‰éžå¹³å‡¡çš„æŠ½è±¡éƒ½æ˜¯æœ‰æ³„æ¼çš„。
乔尔斯·波尔斯基 (Joel Spolsky)
è¯¥å®šå¾‹æŒ‡å‡ºï¼Œé€šå¸¸ç”¨äºŽç®€åŒ–å¤æ‚系统的抽象,在æŸäº›æƒ…况下将底层系统泄æ¼å‡ºæ¥ï¼Œä½¿å¾—抽象表现出æ„外的行为。
ä¾‹å¦‚åŠ è½½æ–‡ä»¶å¹¶è¯»å–其内容。文件系统 API æ˜¯è¾ƒä½Žçº§åˆ«å†…æ ¸ç³»ç»Ÿçš„æŠ½è±¡ï¼Œå®ƒä»¬æœ¬èº«æ˜¯ä¸Žç£ç›˜ï¼ˆæˆ– SSD 的闪å˜ï¼‰ä¸Šçš„æ•°æ®æ›´æ”¹ç›¸å…³çš„物ç†è¿‡ç¨‹çš„æŠ½è±¡ã€‚åœ¨å¤§å¤šæ•°æƒ…å†µä¸‹ï¼Œå¤„ç†æ–‡ä»¶ï¼ˆå¦‚äºŒè¿›åˆ¶æ•°æ®æµï¼‰çš„æŠ½è±¡å°†èµ·ä½œç”¨ã€‚但是,对于ç£ç›˜é©±åŠ¨å™¨ï¼Œé¡ºåºè¯»å–æ•°æ®å°†æ¯”éšæœºè®¿é—®å¿«å¾—多(由于页é¢é”™è¯¯çš„å¼€é”€å¢žåŠ ï¼‰ã€‚ä½†å¯¹äºŽ SSD 驱动器,æ¤å¼€é”€ä¸ä¼šå‡ºçŽ°ã€‚éœ€è¦ç†è§£åŸºç¡€ç»†èŠ‚æ¥å¤„ç†è¿™ç§æƒ…况(例如,数æ®åº“索引文件的良好结构å¯ä»¥å‡å°‘éšæœºè®¿é—®çš„开销),开å‘人员需è¦åˆç†çš„æŠ½è±¡ï¼Œæ¥å¤„ç†ä¸åŒçš„细节。
当引入更多的抽象时,上é¢çš„例å会å˜å¾—æ›´å¤æ‚。Linux æ“作系统å…许通过网络访问文件,但在本地表示为普通文件。如果å˜åœ¨ç½‘ç»œæ•…éšœï¼Œè¿™ç§æŠ½è±¡å°†ä¼šæ³„æ¼ã€‚如果开å‘人员将这些文件视为普通文件,而ä¸è€ƒè™‘它们å¯èƒ½ä¼šå—到网络延迟和故障的影å“,那么解决方案就会出错。
æè¿°è¯¥å®šå¾‹çš„æ–‡ç« 表明,过度ä¾èµ–æŠ½è±¡ï¼ŒåŠ ä¸Šå¯¹åº•å±‚è¿‡ç¨‹çš„ç†è§£ä¸è¶³ï¼Œå®žé™…上使得问题在æŸäº›æƒ…å†µä¸‹æ›´åŠ å¤æ‚。
å‚è§ï¼š
真实的例å:
- Photoshop å¯åŠ¨ç¼“æ…¢ï¼šæˆ‘è¿‡åŽ»é‡åˆ°è¿‡ä¸€ä¸ªé—®é¢˜ï¼Œå°±æ˜¯ Photoshop å¯åŠ¨ç¼“æ…¢ï¼Œæœ‰æ—¶éœ€è¦å‡ åˆ†é’Ÿã€‚é—®é¢˜å¥½åƒæ˜¯ Photoshop å¯åŠ¨æ—¶ï¼Œä¼šè¯»å–当å‰é»˜è®¤æ‰“å°æœºçš„一些信æ¯ã€‚ä½†æ˜¯ï¼Œå¦‚æžœè¯¥æ‰“å°æœºå®žé™…上是一å°ç½‘ç»œæ‰“å°æœºï¼Œåˆ™å¯èƒ½éœ€è¦å¾ˆé•¿çš„æ—¶é—´ã€‚å°†ç½‘ç»œæ‰“å°æœºä¸Žæœ¬åœ°æ‰“å°æœºå½“ä½œåŒæ ·çš„æŠ½è±¡ï¼Œå¯¼è‡´è¿žæŽ¥ä¸è‰¯çš„æƒ…况下出现问题。
è¯¥å®šç†æ˜¾ç¤ºï¼Œç¾¤ä½“将给予更多的时间和注æ„力æ¥å¤„ç†çç¢Žçš„é—®é¢˜ï¼Œè€Œä¸æ˜¯ç”¨æ¥å¤„ç†ä¸¥è‚ƒè€Œå®žè´¨æ€§çš„问题。
常è§çš„è™šæž„ä¾‹åæ˜¯å§”å‘˜ä¼šæ‰¹å‡†æ ¸ç”µç«™çš„è®¡åˆ’ï¼Œä»–ä»¬å¤§éƒ¨åˆ†æ—¶é—´éƒ½åœ¨è®¨è®ºè‡ªè¡Œè½¦æ£šçš„ç»“æž„ï¼Œè€Œä¸æ˜¯ç”µåŽ‚æœ¬èº«ç‰æ›´ä¸ºé‡è¦çš„设计。如果没有大é‡çš„专业知识或者准备,很难给éžå¸¸å¤§çš„夿‚主题讨论æä¾›å®è´µçš„æ„è§ã€‚但是,人们希望看到更多æ„è§ã€‚å› æ¤ï¼Œä»–们倾å‘äºŽå°†å¤§é‡æ—¶é—´é›†ä¸åœ¨å¾ˆå®¹æ˜“推敲,但ä¸ä¸€å®šè¢«çœ‹é‡çš„å°ç»†èŠ‚ä¸Šã€‚
由上é¢çš„虚构例å产生了 Bike Shedding 的说法,以形容在ç碎细节上浪费时间这一行为。
Unix 哲妿Œ‡è½¯ä»¶ç»„件应该很å°ï¼Œå¹¶ä¸“注于åšä¸€ä»¶ç‰¹å®šçš„事情。将å°è€Œç®€å•以åŠå®šä¹‰è‰¯å¥½çš„å•元组åˆåœ¨ä¸€èµ·ï¼Œè€Œä¸æ˜¯ä½¿ç”¨å¤§è€Œå¤æ‚的多用途程åºï¼Œå¯ä»¥æ›´è½»æ¾åœ°æž„建系统。
åƒå¾®æœåŠ¡æž¶æž„è¿™ç§çŽ°ä»£å®žè·µå¯ä»¥è®¤ä¸ºæ˜¯è¿™ç§å“²å¦çš„åº”ç”¨ï¼Œå…¶ä¸æœåŠ¡å¾ˆå°ï¼Œé›†ä¸äºŽåšä¸€ä»¶ç‰¹å®šçš„事情,由简å•的构建å—组æˆå¤æ‚的行为。
Spotify æ¨¡åž‹æ˜¯å›¢é˜Ÿå’Œç»„ç»‡ç»“æž„çš„ä¸€ç§æ–¹æ³•,已被 Spotify 实验室推广开æ¥ã€‚åœ¨æ¤æ¨¡åž‹ä¸ï¼Œå›¢é˜Ÿå›´ç»•åŠŸèƒ½è€ŒéžæŠ€æœ¯è¿›è¡Œç»„ç»‡ã€‚
Spotify 模型还普åŠäº†éƒ¨è½ã€è¡Œä¼šä»¥åŠç« 节的概念,这些是组织结构的其他组æˆéƒ¨åˆ†ã€‚
任何è¯è¨€è®¾è®¡ä¸ï¼Œè®¨è®ºä¸‹é¢åˆ—è¡¨ä¸æŸä¸ªè¦ç´ 所花费的总时间与其ä½ç½®æˆæ£æ¯”。
- è¯ä¹‰ (Semantics)
- è¯æ³• (Syntax)
- è¯æ³• (Lexical syntax)
- æ³¨é‡Šè¯æ³• (Lexical 6D40 syntax of comments)
(简而言之,在è¯ä¹‰ä¸ŠèŠ±è´¹ä¸€ä¸ªå°æ—¶ï¼Œå°±è¦åœ¨æ³¨é‡Šè¯æ³•ä¸ŠèŠ±è´¹å…«ä¸ªå°æ—¶ï¼‰ã€‚
与 帕金森çç¢Žå®šç† ç±»ä¼¼, 沃德勒定律指出,在设计è¯è¨€æ—¶ï¼Œä¸Žè¿™äº›ç‰¹å¾çš„é‡è¦æ€§ç›¸æ¯”,花在è¯è¨€ç»“构上的时间过多。
å‚è§ï¼š
ä¸è¦åƒä¸ªå‚»åä¸€æ ·ã€‚
å¨å°”Â·æƒ é¡¿ (Wil Wheaton)
è¿™æ¡å®šå¾‹ç”±å¨å°” · æƒ é¡¿ï¼ˆæ›¾å‡ºæ¼”è¿‡æ˜Ÿé™…è¿·èˆªï¼šä¸‹ä¸€ä»£ã€ç”Ÿæ´»å¤§çˆ†ç‚¸ï¼‰åˆ›é€ ,这个简æ´è€Œæœ‰åŠ›çš„å®šå¾‹æ—¨åœ¨ä¸“ä¸šç»„ç»‡å†…è¥é€ å’Œè°å’Œå°Šé‡çš„环境。它å¯ä»¥åœ¨ä¸ŽåŒäº‹äº¤è°ˆã€ä»£ç 审查ã€åé©³è§‚ç‚¹å’Œæ‰¹è¯„çš„æ—¶å€™æ´¾ä¸Šç”¨åœºã€‚è€Œä¸”é€šå¸¸æƒ…å†µä¸‹ï¼Œäººä»¬ä¹‹é—´çš„ä¸“ä¸šäº¤äº’ä¹ŸåŒæ ·é€‚用。
原则通常是与设计相关的准则。
å…¬å¸ä¼šå€¾å‘于系统地将工作能力差的员工æå‡åˆ°ç®¡ç†å±‚,以使他们脱离工作æµç¨‹ã€‚
å²è€ƒç‰¹Â·äºšå½“æ–¯ (Scott Adams)
呆伯特原则是由å²è€ƒç‰¹Â·äºšå½“æ–¯ (Dilbert 漫画连环画的创建者) å¼€å‘çš„ä¸€ä¸ªç®¡ç†æ¦‚å¿µï¼Œçµæ„Ÿæ¥æºäºŽå½¼å¾—原ç†ã€‚æ ¹æ®å‘†ä¼¯ç‰¹åŽŸåˆ™ï¼Œå·¥ä½œèƒ½åŠ›å·®çš„å‘˜å·¥ä¼šè¢«æå‡åˆ°ç®¡ç†å±‚,从而é™åˆ¶ä»–ä»¬æ‰€èƒ½é€ æˆçš„æŸå®³ã€‚äºšå½“æ–¯é¦–å…ˆåœ¨ 1995 年《åŽå°”è¡—æ—¥æŠ¥ã€‹çš„ä¸€ç¯‡æ–‡ç« ä¸è§£é‡Šäº†è¿™ä¸€åŽŸåˆ™ï¼ŒéšåŽåœ¨ä»– 1996 年的商业书ç±ã€Šå‘†ä¼¯ç‰¹åŽŸåˆ™ã€‹ä¸è¿›è¡Œäº†æ‰©å±•。
å‚è§ï¼š
生活ä¸å¤§å¤šæ•°äº‹æƒ…䏿˜¯å‡åŒ€åˆ†å¸ƒçš„。
帕累托法则å¯ä»¥å¸®ä½ 认识到大多数结果æ¥è‡ªå°‘数投入:
- æŸä¸ªè½¯ä»¶çš„ 80ï¼… 代ç åªå äº†æ€»åˆ†é…æ—¶é—´çš„ 20%(相å,最难的 20ï¼… 代ç 部分å 用了 80ï¼… 的时间)
- 20% 的努力产生了 80% 的结果
- 20ï¼… çš„å·¥ä½œåˆ›é€ äº† 80ï¼… 的收入
- 20% 的错误导致了 80% 的崩溃
- 20ï¼… 的功能导致了 80ï¼… 的使用é‡
在 20 世纪 40 å¹´ä»£ï¼Œå…¬è®¤ä¸ºè´¨é‡æŽ§åˆ¶ä¹‹çˆ¶çš„ç¾Žå›½ç½—é©¬å°¼äºšå·¥ç¨‹å¸ˆçº¦ç‘Ÿå¤«Â·æœ±å…°åšå£«ï¼Œå¼€å§‹å°†å¸•累托法则应用于质é‡é—®é¢˜ã€‚
这个原则也被称为二八法则,é‡è¦çš„å°‘æ•°æ³•åˆ™å’Œå› ç´ ç¨€ç–原则。
现实的例å:
- 微软 2002 å¹´çš„æŠ¥å‘Šè¡¨æ˜Žï¼Œä¿®å¤æœ€å¸¸å‡ºçŽ°çš„ 20ï¼… 错误,将消除 Windows å’Œ Office ä¸ 80ï¼… çš„ 错误和崩溃。报告地å€
在ç‰çº§åˆ¶åº¦ä¸ï¼Œäººå¾€å¾€ä¼šè¢«æå‡åˆ°ä»–ä»¬çš„â€œæ— æ³•èƒœä»»çš„æ°´å¹³â€ã€‚
劳伦斯·彼得 (Laurence J. Peter)
这是由劳伦斯·彼得æå‡ºçš„ä¸€ä¸ªç®¡ç†æ¦‚念。彼得原ç†è®¤ä¸ºï¼Œæ“…长工作的人会得到æå‡ï¼Œç›´åˆ°ä»–们达到ä¸å†æˆåŠŸçš„æ°´å¹³ (å³ä»–ä»¬æ‰€â€œæ— æ³•èƒœä»»çš„æ°´å¹³â€)。基于æ¤ï¼Œç”±äºŽä»–们资历更高,被公å¸å¼€é™¤çš„å¯èƒ½æ€§è¾ƒå° (除éžä»–们表现éžå¸¸ç³Ÿç³•)ã€‚è€Œä¸”ä»–ä»¬å°†ç»§ç»æ‹…ä»»å‡ ä¹Žæ²¡æœ‰æœ¬èŒæŠ€èƒ½çš„èŒä½ï¼Œå³ä½¿é‚£äº›åŽŸæœ¬è®©ä»–ä»¬æˆåŠŸçš„èƒ½åŠ›åœ¨æ–°å·¥ä½œä¸å¹¶æ— å¿…è¦ã€‚
有的工程师对æ¤ç‰¹åˆ«æ„Ÿå…´è¶£ï¼Œå®ƒä»¬æœ€åˆä»Žäº‹çš„æ˜¯æ·±åº¦çš„æŠ€æœ¯å·¥ä½œï¼Œä½†èµ°ä¸Šäº†ç®¡ç†å…¶ä»–工程师的èŒä¸šé“路——这æ„味ç€éœ€è¦ä¸€ä¸ªå®Œå…¨ä¸åŒçš„æŠ€èƒ½æ ‘。
å‚è§ï¼š
在自己所åšçš„事情上è¦ä¿å®ˆ, 在接å—别人的事情上è¦è‡ªç”±ã€‚
通常应用于æœåŠ¡å™¨åº”ç”¨ç¨‹åºå¼€å‘ä¸ï¼Œè¯¥åŽŸåˆ™æŒ‡å‡ºï¼Œä½ å‘é€ç»™å…¶ä»–人的内容应尽å¯èƒ½æœ€å°ä¸”符åˆè¦æ±‚,并且处ç†ä¸ç¬¦åˆè¦æ±‚的输入。
è¯¥åŽŸåˆ™çš„ç›®æ ‡æ˜¯æž„å»ºç¨³å¥çš„系统。如果å¯ä»¥ç†è§£æ„图,它们å¯ä»¥å¤„ç†ä¸è‰¯çš„输入。但是,接å—é”™è¯¯æ ¼å¼çš„输入å¯èƒ½å˜åœ¨å®‰å…¨éšæ‚£ï¼Œç‰¹åˆ«æ˜¯æ¤ç±»çš„输入未ç»è¿‡å……分测试。
这是一个缩写,指的是:
- S:å•一功能原则 (The Single Responsibility Principle)
- O:开é—原则 (The Open/Closed Principle)
- Lï¼šé‡Œæ°æ›¿æ¢åŽŸåˆ™ (The Liskov Substitution Principle)
- I:接å£éš”离原则 (The Interface Segregation Principle)
- D:ä¾èµ–å转原则 (The Dependency Inversion Principle)
这些是 Object-Oriented Programming 的关键原则。诸如æ¤ç±»çš„设计原则能够帮助开å‘人员构建更易于维护的系统。
æ¯ä¸ªæ¨¡å—或者类åªåº”该有一项功能。
SOLID çš„ç¬¬ä¸€ä¸ªåŽŸåˆ™ã€‚è¿™ä¸ªåŽŸåˆ™è¡¨æ˜Žæ¨¡å—æˆ–者类åªåº”该åšä¸€ä»¶äº‹ã€‚实际上,这æ„味ç€å¯¹ç¨‹åºåŠŸèƒ½çš„å•ä¸ªå°æ›´æ”¹ï¼Œåº”该åªéœ€è¦æ›´æ”¹ä¸€ä¸ªç»„件。例如,更改密ç 验è¯å¤æ‚性的方å¼åº”该åªéœ€è¦æ›´æ”¹ç¨‹åºçš„一部分。
ç†è®ºä¸Šè®²ï¼Œè¿™ä½¿ä»£ç æ›´å¥å£®ï¼Œæ›´å®¹æ˜“æ›´æ”¹ã€‚çŸ¥é“æ£åœ¨æ›´æ”¹çš„ç»„ä»¶åªæœ‰ä¸€ä¸ªåŠŸèƒ½ï¼Œè¿™æ„å‘³ç€æµ‹è¯•更改更容易。使用å‰é¢çš„例å,更改密ç 夿‚性组件应该åªå½±å“与密ç 夿‚æ€§ç›¸å…³çš„åŠŸèƒ½ã€‚å˜æ›´å…·æœ‰è®¸å¤šåŠŸèƒ½çš„ç»„ä»¶å¯èƒ½è¦å›°éš¾å¾—多。
å‚è§ï¼š
实体应开放扩展并关é—修改。
SOLID 的第二个原则。这个原则指出实体(å¯ä»¥æ˜¯ç±»ã€æ¨¡å—ã€å‡½æ•°ç‰ï¼‰åº”该能够使它们的行为易于扩展,但是它们的扩展行为ä¸åº”该被修改。
举一个å‡è®¾çš„例å,想象一个能够将 Markdown 转æ¢ä¸º HTML 的模å—。如果å¯ä»¥æ‰©å±•模å—,而ä¸ä¿®æ”¹å†…éƒ¨æ¨¡å—æ¥å¤„ç†æ–°çš„ markdown 特å¾ï¼Œè€Œæ— 需修改内部模å—,则å¯ä»¥è®¤ä¸ºæ˜¯å¼€æ”¾æ‰©å±•。如果用户ä¸èƒ½ä¿®æ”¹å¤„ç†çŽ°æœ‰ Markdown 特å¾çš„æ¨¡å—,那么它被认为是关é—修改。
这个原则与é¢å‘对象编程紧密相关,让我们å¯ä»¥è®¾è®¡å¯¹è±¡ä»¥ä¾¿äºŽæ‰©å±•,但是å¯ä»¥é¿å…ä»¥æ„æƒ³ä¸åˆ°çš„æ–¹å¼æ”¹å˜å…¶çŽ°æœ‰å¯¹è±¡çš„è¡Œä¸ºã€‚
å‚è§ï¼š
å¯ä»¥åœ¨ä¸ç ´å系统的情况下,用å类型替æ¢ç±»åž‹ã€‚
SOLID 的第三个原则。该原则指出,如果组件ä¾èµ–于类型,那么它应该能够使用该类型的å类型,而ä¸ä¼šå¯¼è‡´ç³»ç»Ÿå¤±è´¥æˆ–者必须知é“该å类型的详细信æ¯ã€‚
举个例å,å‡è®¾æˆ‘ä»¬æœ‰ä¸€ä¸ªæ–¹æ³•ï¼Œè¯»å– XML 文档。如果该方法使用基类型 file,则从 file 派生的任何内容,都能用在该方法ä¸ã€‚ 如果 file 支æŒå呿Ÿ¥æ‰¾ï¼Œå¹¶ä¸” xml è§£æžå™¨ä½¿ç”¨è¯¥å‡½æ•°ï¼Œä½†æ˜¯æ´¾ç”Ÿç±»åž‹ network file å°è¯•å呿Ÿ¥æ‰¾æ—¶å¤±è´¥ï¼Œåˆ™ network file å°†è¿å该原则。
该原则与é¢å‘对象编程紧密相关,必须仔细建模ã€å±‚次结构,以é¿å…让系统用户混淆。
å‚è§ï¼š
ä¸åº”强制任何客户端ä¾èµ–于它ä¸ä½¿ç”¨çš„æ–¹æ³•。
SOLID 的第四个原则。该原则指出组件的消费者ä¸åº”该ä¾èµ–于它实际上ä¸ä½¿ç”¨çš„组件函数。
举一个例å,å‡è®¾æˆ‘ä»¬æœ‰ä¸€ä¸ªæ–¹æ³•ï¼Œè¯»å– XML 文档。它åªéœ€è¦è¯»å–文件ä¸çš„å—节,å‘å‰ç§»åŠ¨æˆ–å‘åŽç§»åŠ¨ã€‚å¦‚æžœç”±äºŽä¸€ä¸ªä¸Žæ–‡ä»¶ç»“æž„ä¸ç›¸å…³çš„功能å‘生更改(例如更新文件安全性的æƒé™æ¨¡åž‹ï¼‰ï¼Œéœ€è¦æ›´æ–°æ¤æ–¹æ³•,则该原则已失效。文件最好实现 坿Ÿ¥è¯¢æµ 接å£ï¼Œå¹¶è®© XML 读å–器使用该接å£ã€‚
该原则与é¢å‘å¯¹è±¡ç¼–ç¨‹ç´§å¯†ç›¸å…³ï¼Œå…¶ä¸æŽ¥å£ï¼Œå±‚次结构和抽象类型用于ä¸åŒç»„ä»¶çš„ minimise the coupling。 Duck typing 是一ç§é€šè¿‡æ¶ˆé™¤æ˜¾å¼æŽ¥å£æ¥å¼ºåˆ¶æ‰§è¡Œè¯¥åŽŸåˆ™çš„æ–¹æ³•ã€‚
å‚è§ï¼š
高级模å—ä¸åº”该ä¾èµ–于低级实现。
SOLID 的第五个原则。该原则指出,更高级别的å调组件ä¸åº”该知é“å…¶ä¾èµ–项的详细信æ¯ã€‚
举个例å,å‡è®¾æˆ‘们有一个从网站读å–元数æ®çš„程åºã€‚我们å‡è®¾ä¸»è¦ç»„件必须知é“下载网页内容的组件,以åŠå¯ä»¥è¯»å–元数æ®çš„组件。如果我们考虑ä¾èµ–å转,主è¦ç»„件将仅ä¾èµ–于å¯ä»¥èŽ·å–å—节数æ®çš„æŠ½è±¡ç»„ä»¶ï¼Œç„¶åŽæ˜¯ä¸€ä¸ªèƒ½å¤Ÿä»Žå—节æµä¸è¯»å–元数æ®çš„æŠ½è±¡ç»„件,主è¦ç»„ä»¶ä¸éœ€è¦äº†è§£ TCPã€IPã€HTTPã€HTML ç‰ã€‚
è¿™ä¸ªåŽŸåˆ™å¾ˆå¤æ‚ï¼Œå› ä¸ºå®ƒä¼¼ä¹Žå¯ä»¥å转系统的预期ä¾èµ–æ€§ï¼ˆå› æ¤å¾—å)。实践ä¸ï¼Œè¿™ä¹Ÿæ„味ç€ï¼Œå•ç‹¬çš„ç¼–æŽ’ç»„ä»¶å¿…é¡»ç¡®ä¿æŠ½è±¡ç±»åž‹çš„æ£ç¡®å®žçŽ°è¢«ä½¿ç”¨ï¼ˆä¾‹å¦‚åœ¨å‰é¢çš„例åä¸ï¼Œå¿…é¡»æä¾›å…ƒæ•°æ®è¯»å–器组件ã€HTTP 文件下载功能和 HTML å…ƒæ ‡ç¾è¯»å–器)。然åŽï¼Œè¿™æ¶‰åŠè¯¸å¦‚ Inversion of Control å’Œ Dependency Injection 之类的模å¼ã€‚
å‚è§ï¼š
系统ä¸ï¼Œæ¯ä¸€å—知识都必须是å•ä¸€ã€æ˜Žç¡®è€Œæƒå¨çš„。
DRY 是 Do not Repeat Yourself 的缩写。这个原则旨在帮助开å‘人员å‡å°‘代ç çš„é‡å¤æ€§ï¼Œå¹¶å°†å…¬å…±ä»£ç ä¿å˜åœ¨ä¸€ä¸ªåœ°æ–¹ã€‚最åˆç”±å®‰å¾·é²Â·äº¨ç‰¹å’Œæˆ´å¤«Â·æ‰˜é©¬æ–¯åœ¨ 1999 年出版的《程åºå‘˜ä¿®ç‚¼ä¹‹é“》ä¸å¼•用。
与 DRY 相å的是 WETï¼ˆåŠŸèƒ½å®žçŽ°ä¸¤æ¬¡æˆ–è€…å–œæ¬¢æ‰“å— Write Everything Twice or We Enjoy Typing)。
å®žé™…ä¸Šï¼Œå¦‚æžœä½ åœ¨ä¸¤ä¸ªæˆ–æ›´å¤šçš„åœ°æ–¹æœ‰ç 770A ›¸åŒçš„åŠŸèƒ½ï¼Œä½ å¯ä»¥ä½¿ç”¨ DRY 原则将它们åˆå¹¶ä¸ºä¸€ä¸ªï¼Œå¹¶åœ¨ä»»ä½•ä½ éœ€è¦çš„地方é‡å¤ä½¿ç”¨ã€‚
å‚è§ï¼š
- 《程åºå‘˜ä¿®ç‚¼ä¹‹é“》英文维基百科
- 《程åºå‘˜ä¿®ç‚¼ä¹‹é“》豆瓣
ä¿æŒç®€å•和直白。
KISS åŽŸåˆ™æŒ‡æ˜Žäº†å¦‚æžœå¤§å¤šæ•°çš„ç³»ç»Ÿèƒ½å¤Ÿä¿æŒç®€å•而éžå¤æ‚化,那么他们便能够工作在最佳状æ€ã€‚å› æ¤ï¼Œç®€å•æ€§åº”è¯¥æ˜¯è®¾è®¡æ—¶çš„å…³é”®æŒ‡æ ‡ï¼ŒåŒæ—¶ä¹Ÿè¦é¿å…ä¸å¿…è¦çš„夿‚度。这个çŸè¯æœ€åˆå‡ºè‡ª 1960 年的美国海军飞机工程师凯利 · 约翰逊 (Kelly Johnson)。
这一原则的最好例è¯ä¾¿æ˜¯çº¦ç¿°é€Šç»™è®¾è®¡å·¥ç¨‹å¸ˆä¸€äº›å®žç”¨å·¥å…·çš„æ•…事。那时的他们æ£é¢ä¸´ç€ä¸€ä¸ªæŒ‘战,å³ä»–们å‚与设计的喷气å¼é£žæœºå¿…é¡»èƒ½å¤Ÿè®©æ™®é€šçš„æœºæ¢°å¸ˆåœ¨æˆ˜åœºä¸Šä»…ä»…ç”¨è¿™äº›å·¥å…·è¿›è¡Œç»´ä¿®ï¼Œå› æ¤ï¼Œâ€œç›´ç™½â€è¿™ä¸ªè¯åº”指的是æŸå的事物本身和修å¤ç”¨å·¥å…·çš„夿‚度两者之间的关系,而éžå·¥ç¨‹å¸ˆä»¬è‡ªèº«çš„能力水平。
å‚è§ï¼š
这是 You Aren't Gonna Need It 的缩写。
åªæœ‰å½“ä½ éœ€è¦æŸäº›ä¸œè¥¿çš„æ—¶å€™ï¼Œæ‰åŽ»å®žçŽ°å®ƒä»¬ï¼Œè€Œä¸æ˜¯åœ¨ä½ 预è§çš„æ—¶å€™ã€‚
Ron Jeffries 是æžé™ç¼–程的创始人之一以åŠä¹¦ç±ã€ŠExtreme Programming Installed》的作者。
æžé™ç¼–程原则告诫开å‘人员,他们应该åªå®žçް当剿‰€éœ€çš„功能,并é¿å…实现未æ¥éœ€è¦çš„åŠŸèƒ½ï¼Œä»…åœ¨å¿…è¦æ—¶æ‰å®žçŽ°ã€‚
éµå®ˆè¿™ä¸€åŽŸåˆ™å¯ä»¥å‡å°ä»£ç 库大å°ï¼ŒåŒæ—¶é¿å…时间和生产力浪费在没有价值的功能上。
å‚è§ï¼š
åˆç§° 网络计算的谬误,这是一系列关于分布å¼è®¡ç®—的猜想(或者看法),这些猜想å¯èƒ½ä¼šå¼•起软件开å‘ä¸çš„失败。这些å‡è®¾æ˜¯ï¼š
- 网络å¯é
- 延迟为零
- å¸¦å®½æ— é™
- 网络安全
- 拓扑æ’定
- å•一管ç†å‘˜
- è¿è¾“æˆæœ¬ä¸ºé›¶
- ç½‘ç»œä¸ºåŒæž„çš„
å‰ 4 å„项目由 Bill Joy å’Œ Tom Lyon 于 1991 å·¦å³æå‡ºã€‚å¹¶è¢« James Gosling 首次归类于“网络计算的谬误â€ï¼›åŽ L. Peter Deutsch æ·»åŠ äº†ç¬¬ 5ã€6ã€7 个谬误;90 年代末,Gosling æ·»åŠ äº†æœ€åŽä¸€ä¸ªè°¬è¯¯ã€‚
这些内容å—到了 太阳微系统 (Sun Microsystems) 内部当时所å‘生的事情的å¯å‘。
在设计弹性代ç 的时候,应该仔细考虑这些谬误,并å‡è®¾å…¶ä¸ä»»ä½•一个谬误都å¯èƒ½å¼•起处ç†åˆ†å¸ƒå¼ç³»ç»Ÿçš„夿‚性和现实性时的逻辑缺陷。
å‚è§:
- 寻找分布å¼è®¡ç®—的谬误(第一部分) - Vaidehi Joshion Medium
- åå¹´åŽï¼Œå¾·æ„å¿— (Peter Deutsch) 的谬论
å¦‚æžœä½ è§‰å¾—è¿™äº›æ¦‚å¿µå¾ˆæœ‰è¶£ï¼Œä½ å¯èƒ½ä¼šå–œæ¬¢ä»¥ä¸‹ä¹¦ç±ã€‚
- 《æžé™ç¼–程安装》谷æŒé˜…è¯»åœ°å€ - 涵盖æžé™ç¼–ç¨‹çš„æ ¸å¿ƒåŽŸåˆ™ã€‚
- 《人月神è¯ã€‹è°·æŒé˜…读地å€ã€è±†ç“£åœ°å€ - 软件工程的ç»å…¸ä¹¦ç±ã€‚这本书的ä¸å¿ƒä¸»é¢˜å°±æ˜¯å¸ƒé²å…‹æ–¯æ³•则 。
- 《哥德尔ã€è‰¾èˆå°”ã€å·´èµ«ï¼šé›†å¼‚璧之大æˆã€‹è°·æŒé˜…读地å€ã€è±†ç“£åœ°å€ - 这本书很难分类。侯世达定律 æ¥è‡ªæ¤ä¹¦ã€‚
- 《呆伯特原则》谷æŒé˜…è¯»åœ°å€ - 一本审视美国ä¼ä¸šçš„æ¼«ç”»ä¹¦ï¼Œå…¶ä½œè€…åˆ›é€ äº†å‘†ä¼¯ç‰¹æ³•åˆ™ã€‚
- 《彼得原ç†ã€‹è°·æŒé˜…è¯»åœ°å€ - 一本专注于大型组织和人员管ç†çš„æŒ‘战的漫画书,也是彼得原ç†çš„æ¥æºã€‚
å—¨ï¼å¦‚æžœä½ è¯»åˆ°è¿™é‡Œï¼Œç‚¹å‡»äº†ä¸€ä¸ªæˆ‘å°šæœªç¼–å†™çš„ä¸»é¢˜é“¾æŽ¥ï¼Œæˆ‘æ„Ÿåˆ°å¾ˆæŠ±æ‰ã€‚这是æ£åœ¨è¿›è¡Œä¸çš„工作ï¼
éšæ„ç»™ hacker-laws å’Œ hacker-laws-zh æ Issue 或者 Pull Request。