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)
- é¿å§è¾¾å°å®å¾ (Amdahl's Law)
- ç?´çªæåº (The Broken Windows Theory)
- å¸é²å æ¯æ³å (Brooks's Law)
- CAP å®ç (CAP Theorem or Brewer's Theorem)
- 康å¨å®å¾ (Conway's Law)
- å宿±å§å®å¾ (Cunningham's Law)
- éå·´æ°å (Dunbar's Number)
- éå®-å 鲿?¼æåº (The Dunning-Kruger Effect)
- è´¹è¨æ³å (Fitts's Law)
- çå°å®å¾ (Gall's Law)
- å¤å¾·åç¹å®å¾ (Goodhart's Law)
- æ±éçåå (Hanlon's Razor)
- å¸å å®å¾ (Hick's Law or Hick-Hyman Law)
- 侯ä¸è¾¾å®å¾ (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)
- æçº³æ¯å®å¾ (Linus'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 Demeter)
- æ½è±¡æ³æ¼å®å¾ (The Law of Leaky Abstractions)
- å¸é森çç¢å®ç (The Law of Triviality)
- Unix å²å¦ (The Unix Philosophy)
- Spotify 模å (The Spotify Model)
- æ²å¾·åå®å¾ (Wadler's Law)
- æ?é¡¿å®å¾ (Wheaton's Law)
- åå
- 乿²»Â·ä¼¯å æ¯å®å¾ (All Models Are Wrong or George Box's Law)
- åæ¯ç¹æ£®å´æ? (Chesterson's Fence)
- æ»æµ·æåº (The Dead Sea Effect)
- åä¼¯ç¹æ³å (The Dilbert Principle)
- å¸ç´¯ææ³å (The Pareto Principle or The 80/20 Rule)
- èåºåç (The Shirky Principle)
- å½¼å¾åç (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
ä»ç»
å½äººä»¬è°è®ºå¼åæ¶ï¼ä¼èå°è®¸å¤å®å¾ãè¿ä¸ªä»åºæ¶å½äºä¸äºæå¸¸è§çå®å¾ã
å®å¾
ç°å¨æä»¬å¼å§å§ï¼
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)å¯è½ä¼å½±ååç»ä¼åçæçï¼ä»èè¿ä¸æ¥é?æä»£ç?å£åï¼éçæ¶é´çæ¨ç§»ï¼è¿ç§æåºå°ä¼å¯¼è´ä»£ç?è´¨éå¤§å¹ ä¸éã
åè§ï¼
ä¾åï¼
- ãç¨åºåä¿®ç¼ä¹éï¼è½¯ä»¶çµã(The Pragmatic Programming: Software Entropy)
- ãCoding Horrorï¼ç?´çªæåºã(Coding Horror: The Broken Window Theory)
- ã弿ºï¼ç¼ç¨ä¹ä¹ - ç?´çªæåºã(OpenSource: Joy of Programming - The Broken Window Theory)
å¸é²å æ¯æ³å (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)
æ?è½ç人å¾å¾ä¸ä¼æè¯å°èªå·±çæ?è½ãèå¾åºæ£ç¡®çæ¡æéè¦çæè½ï¼æ£æ¯ä½?认è¯å°ä½ä¸ºæ£ç¡®çæ¡æéè¦çæè½ã
éå®-å 鲿?¼æåºæ¯ä¸ç§ç论ä¸ç认ç¥åå·®ï¼å¤§å«Â·éå®åè´¾æ¯æ±Â·å 鲿?¼å¨ 1999 å¹´çä¸é¡¹å¿çå¦ç?ç©¶å论æä¸å¯¹æ¤è¿è¡äºæè¿°ãç?究表æï¼å¨ä¸é¡¹ä»»å¡ä¸è½åæ°´å¹³è¾ä½çäººä¼æ´å®¹æé«ä¼°èªå·±çè½åã乿以ä¼äº§çè¿ç§ååï¼æ¯å?为ä¸ä¸ªäººå¯¹é®é¢æé¢åçå¤ææ§æè¶³å¤çè®¤è¯æ¶ï¼æè½å¤é对èªå·±å¨è¯¥é¢åçå·¥ä½è½åæåºææºçæè§ã
éå®-å 鲿?¼æåºä¹æå¦ä¸ä¸ªç±»ä¼¼çï¼æ´æ¾å¼çæè¿°ï¼å³âä¸ä¸ªäººå¯¹æä¸ªé¢åçäºè§£è¶å°ï¼ä»å°±è¶å®¹æè½»è§è¿ä¸ªé¢åçé¾åº¦ï¼ä»èæ´å¾åäºç¸ä¿¡èªå·±å¯ä»¥è½»æå°è§£å³è¯¥é¢åçé®é¢âã该æåºä¸ææ¯é«åº¦ç¸å ³ï¼å ·ä½è¡¨ç°ä¸ºä¸å¤ªçææä¸ªé¢åç个人(å¦éææ¯å¢éæåæç»éªè¾å°çå¢éæå)伿´æå¯è½ä½ä¼°è§£å³è¯¥é¢åé®é¢æéçå·¥ä½éã
éç对æä¸é¢åççè§£åç»éªçå¢é¿ï¼äººä»¬å¾å¯è½ä¼éå°å¦ä¸ç§æåº-èå¹»çä¼è¶æ§ (Illusory superiority)ï¼å³ç¹å®é¢åå ç丰å¯ç»éªä½¿å¾ä»ä»¬æ´å®¹æé«ä¼°ä»äººçè½åï¼æä½ä¼°èªå·±çè½åãæ»èè¨ä¹ï¼è¿äºå½±åé½å½åäºè®¤ç¥åå·®ã彿è¯å°åå·®å卿¶ï¼æä»¬å¯ä»¥å°½éæåºæè§æ¥æ¶é¤è¿äºåå·®ï¼è¿æ?·å¾å¾å¯ä»¥é¿å å¼è®®ã
ç宿¡ä¾:
- è¹æå ¬å¸ vs èé¦è°æ¥å±ï¼ä¸ºä»ä¹è¿ä¸ªåæé¹°æ´¾æ¹åäºç«åº (Apple vs. FBI: Why This Anti-Terror Hawk Switched Sides) - 2016 å¹´ï¼åè®®åæèµÂ·æ?¼é·åå§æ¹åäºä»å¯¹è¹æå¨è®¾å¤å?å¯ä¸å建âåé¨âçç«åºãèµ·åï¼æ?¼é·åå§æ¾æ¹è¯è¹æå ¬å¸å对å建âåé¨âï¼å?为ä»è®¤ä¸ºè¿å¯¹è°æ¥æ½å¨çææè®¡åæ¯å¿ è¦çãç¶èï¼éçä»å¯¹è¿ä¸ªé¢åçææ¯å¤ææ§æäºæ´å¤çäºè§£ï¼æ?¼é·åå§æè¯å°è¿æ¯ä»åå æ³çè¦å°é¾å¾å¤ï¼å¹¶å¯è½ä¼äº§ç严éçè´é¢åæãè¿ä¾¿æ¯éå®-å 鲿?¼æåºçç宿¡ä¾--ç½ç»å®å ¨ä¸å®¶ä¼æ´æ¸ æ¥å¦ä½å©ç¨è¿æ?·çåé¨ï¼å?为ä»ä»¬å¯¹è¯¥é¢åææ·±å»ççè§£ï¼èå¤è¡äººå£«å¯è½ä¼ç®åå°å°è®¾å¤å®å ¨ç±»æ¯äºç©çä¸çå®å ¨ï¼æ§æ³æ¶å¯ä»¥ä½¿ç¨âä¸è½é¥åâï¼ä½è¿æ¾ç¶ä¸ç½ç»å®å ¨ä¸çç°ä»£å?å¯ä¸å¯åæ¥èè¯ã
è´¹è¨æ³å (Fitts's 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)
ææ¯æç度æ²çº¿æ¯é«å¾·çº³å¨è¯¢å ¬å¸å¯¹ææ¯æåå ´èµ·ååå±çè§è§å±ç°ãä¸å¾é¡¶åè¨ï¼
(å¾çæ¥æº: 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 ææ¡£ä¸æ²¡æä»»ä½å ³äºé误æç¤ºçå 容ï¼èæ¯æå¯¼ç¨æ·åºè¯¥ä½¿ç¨ç¸åºçé误代ç?ãä¸äºç¨æ·ä¾ç¶ä¼ä½¿ç¨é误æç¤ºå 容ï¼èéé误代ç?ï¼ï¼è¿ç§æ åµä¸åæ´ 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)
奥å¡å§ååæåºï¼å¨å?ç§å¯è½çè§£å³æ¹æ¡ä¹ä¸ï¼ææå¯è½çè§£å³æ¹æ¡ä¾¿æ¯æ¦å¿µåå设æå°çé£ä¸ªãå?为è¿ä¸ªè§£å³æ¹æ¡æä¸ºç®åï¼åªè§£å³äºé®é¢ï¼å¹¶ä¸æ²¡æå¼å ¥é¢å¤çå¤æåº¦åå¯è½çè´é¢åæã
åè§ï¼
- ä½?ä¸éè¦å®åå (YAGNI)
- 没æé¶å¼¹ï¼è½¯ä»¶å·¥ç¨çæ¬è´¨æ§ä¸é屿§å·¥ä½
- No Silver Bullet: Accidental Complexity and Essential Complexity
ä¾åï¼
å¸é森å®ç (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)
ä»»ä½è¯è¨è®¾è®¡ä¸ï¼è®¨è®ºä¸é¢åè¡¨ä¸æä¸ªè¦ç´?æè±è´¹çæ»æ¶é´ä¸å ¶ä½ç½®ææ£æ¯ã
- è¯ä¹ (Semantics)
- è¯æ³ (Syntax)
- è¯æ³ (Lexical syntax)
- 注éè¯æ³ (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
è¿æ¯ä¸ä¸ªç¼©åï¼æçæ¯ï¼
- 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 çå ³é®ååãè¯¸å¦æ¤ç±»ç设计ååè½å¤å¸®å©å¼å人åæå»ºæ´æäºç»´æ¤çç³»ç»ã
åä¸åè½åå (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) å é¨å½æ¶æåççäºæ çå¯åã
å¨è®¾è®¡å¼¹æ§ä»£ç?çæ¶åï¼åºè¯¥ä»ç»èèè¿äºè°¬è¯¯ï¼å¹¶åè®¾å ¶ä¸ä»»ä½ä¸ä¸ªè°¬è¯¯é½å¯è½å¼èµ·å¤çåå¸å¼ç³»ç»ç夿æ§åç°å®æ§æ¶çé»è¾ç¼ºé·ã
åè§:
é è¯»æ¸ å
妿ä½?è§å¾è¿äºæ¦å¿µå¾æè¶£ï¼ä½?å¯è½ä¼å欢以ä¸ä¹¦ç±ã
- ãæéç¼ç¨å®è£ ãè°·æé 读å°å - æ¶µçæéç¼ç¨çæ?¸å¿ååã
- ã人æç¥è¯ãè°·æé 读å°åãè±ç£å°å - 软件工ç¨çç»å ¸ä¹¦ç±ãè¿æ¬ä¹¦çä¸å¿ä¸»é¢å°±æ¯å¸é²å æ¯æ³å ã
- ãå¥å¾·å°ãè¾èå°ã巴赫ï¼éå¼ç§ä¹å¤§æãè°·æé 读å°åãè±ç£å°å - è¿æ¬ä¹¦å¾é¾åç±»ã侯ä¸è¾¾å®å¾ æ¥èªæ¤ä¹¦ã
- ã大æå?ä¸å¸éãè±æç»´åºç¾ç§ - 䏿¬å ³äºå¼æºçæéï¼æçº³æ¯å®å¾ (Linus's Law)æºäºæ¤ä¹¦ã
- ãå伯ç¹ååãè°·æé 读å°å - 䏿¬å®¡è§ç¾å½ä¼ä¸ç漫ç»ä¹¦ï¼å ¶ä½è åé?äºåä¼¯ç¹æ³åã
- ãå½¼å¾åçãè°·æé 读å°å - 䏿¬ä¸æ³¨äºå¤§åç»ç»å人å管ççææçæ¼«ç»ä¹¦ï¼ä¹æ¯å½¼å¾åççæ¥æºã
- ãè®¡ç®æºç¨åºçæé?åè§£éãè°·æé 读å°å - 妿ä½?æ¯ MIT æå桥大å¦ç CSãEE å¦çï¼è¿æ¯ä¸æ¬ç¼ç¨çå ¥é¨ä¹¦ï¼å¹¶ä¸è¢«ç§°ä¸ºâ人çç转æç¹âã
å¨çº¿èµæº
ä¸äºæç¨çèµæºåé è¯»èµæã
- CB Insights: 8 Laws Driving Success In Tech: Amazon's 2-Pizza Rule, The 80/20 Principle, & More - è¿æ¯ä»¥åæè¶£çæç«?ï¼ä»ç»äºä¸äºå¯¹ææ¯ä¸äº§çäºå¾å¤§å½±åçå®å¾ã
ç¸å ³é¡¹ç®
- Tip of the Day - Receive a daily hacker law/principle.
- Hacker Laws CLI - List, view and see random laws from the terminal!
- Hacker Laws Action - Adds a random Hacker Law to a pull request as a small gift for the contributor, thanks Umut IÅık
TODO
å¨ï¼å¦æä½?读å°è¿éï¼ç¹å»äºä¸ä¸ªæå°æªç¼åç主é¢é¾æ¥ï¼ææå°å¾æ±æãè¿æ¯æ£å¨è¿è¡ä¸çå·¥ä½ï¼
éæç» hacker-laws å hacker-laws-zh æ Issue æè Pull Requestã



