原则与价值(程序员版)
收集程序员徐亚对开发人员有用的定律、理论、原则和模式
知识大胖
这个作者很懒,什么都没留下…
展开
-
编程名言 之 苹果Swift团队成员对多线程对看法
戴维·史密斯(David Smith)的这段话:他是苹果公司的Swift团队中的一员,以前曾在苹果框架的核心部分工作过多年:我的具体建议是:您应该强烈考虑不编写异步/并发代码。我知道这在2018年听起来很奇怪,但是复杂性和性能方面的成本却很高。加入我们一起学习SwiftUIQQ:3365059189SwiftUI技术交流QQ群:518696470教程网站:www.openswiftui.com...原创 2021-04-01 12:59:51 · 125 阅读 · 0 评论 -
2021年新书推荐之《Read Write Code阅读编写代码》代码就是未来的书籍
2021年新书推荐之《Read Write Code阅读编写代码》代码就是未来的书籍代码就是未来的书籍(Code is the new literacy)600年前,大多数人不识字无法看书。1440年,印刷机的发明为扫盲工作的大量开展奠定了基础,并迎来了现代时代。如今,计算机和互联网正在引起类似的构造转变。读写是基础技能,在我们的数字世界中,编码也是如此。但是编码可能会令人难以学习。什么是代码?你从哪里开始?杰里米·基辛(Jeremy Keeshin)在《读写代码》中,揭开了计算机世界的神秘原创 2021-02-18 12:49:45 · 403 阅读 · 0 评论 -
程序员应知必会的思维模型之 25 普特定律 (Putt‘s Law)
普特定律 (Putt’s Law)技术由两类人主导,一类是纯粹的管理人员, 一类是纯粹的技术人员。普特定律常常遵循普特推论:每一个技术层次,假以时日,能力将逆转。这些结论表明,由于各种选择标准和群体组织的趋势,技术组织的工作层面将有一些技术人员,以及一些不了解复杂性和挑战的管理人员。这种现象可能是由于 彼得原理 (The Peter Principle) 或 呆伯特法则 (The Dilbert Principle) 造成的。但是,应该强调的是,诸如此类的定律是一种广泛的概括,可能适用于某原创 2020-11-29 10:58:16 · 796 阅读 · 1 评论 -
程序员应知必会的思维模型之 24 过早优化效应 (Premature Optimization Effect)
过早优化效应 (Premature Optimization Effect)过早优化是万恶之源。 --高德纳在高德纳的《goto 语句的结构化编程》论文中,他写到:“程序员们浪费了大量的时间去思考或者担心他们的程序中的非关键部分的速度。而在考虑调试和维护的时候,这些所谓提高效率的做法实际上十分不妥。我们应该放弃小的效率点,并且要在 97% 的时间提醒自己,过早优化是万恶之源。而且连那关键的 3% 也不能够放过。”然而,过早优化 (简而言之)可以定义为在我们知道需要做什么之前进行优化。加入我们共原创 2020-11-29 10:35:54 · 657 阅读 · 1 评论 -
程序员应知必会的思维模型之 23 帕金森定理 (Parkinson‘s Law)
帕金森定理 (Parkinson’s Law)在工作能够完成的时限内,工作量会一直增加,直到所有可用时间都被填满为止。基于官僚机构的研究背景,该定律被应用于软件开发中。该理论认为,团队在截止日期之前效率低下,然后在截止日期前赶紧完成工作,从而使实际截止日期变得随意。将这个定理与侯世达定律相结合,则会获得更加悲观的观点:为了在规定时间内完成工作,工作将增多,花费比预期更长的时间。观点今天,我在个人理财方面遇到了一个新名词:帕金森定律 。Pakinson’s Law说我们的支出总是会增加以匹配原创 2020-11-27 23:25:40 · 664 阅读 · 0 评论 -
程序员应知必会的思维模型之 22 奥卡姆剃刀 (Occam‘s Razor)
奥卡姆剃刀 (Occam’s Razor)如无必要,勿增实体。 – 奥卡姆的威廉 (William of Ockham)奥卡姆剃刀指出,在几种可能的解决方案之中,最有可能的解决方案便是概念和假设最少的那个。因为这个解决方案最为简单,只解决了问题,并且没有引入额外的复杂度和可能的负面后果。软件开发精益软件开发:精益开发可以归纳为七个原则,它们在概念上与精益生产原则非常接近:消除浪费扩大学习决定越晚越好尽快交付授权团队建立诚信优化整体奥卡姆剃刀的鲜为人知的变体:最痛原创 2020-11-27 23:14:21 · 622 阅读 · 0 评论 -
程序员应知必会的思维模型之 21 墨菲定律 (Murphy‘s Law / Sod‘s Law)
墨菲定律 (Murphy’s Law / Sod’s Law)凡是可能出错的事就一定会出错出自 爱德华·A·墨菲 , 墨菲定律 说明了如果一件事有可能出错,那么就一定会出错。这是一句开发人员间的俗语,在开发、测试甚至在生产中都有可能会发生一些令人意想不到的事情。而这一定律也可以参考在英式英语中更为常见的 索德定理 :如果某件事可能出错,那么它一定会在最糟糕的时候发生。这些定律常常用于幽默嘲弄。但是,类似于 Confirmation Bias 和 Selection Bias 的现象很容易导原创 2020-11-27 23:03:47 · 1063 阅读 · 1 评论 -
程序员应知必会的思维模型之 20 摩尔定律 (Moore‘s Law)
摩尔定律 (Moore’s Law)集成电路中的晶体管数量大约每两年翻一番。这条定律通常用于说明半导体和芯片技术提高的绝对速度。从 20 世纪 70 年代到 21 世纪前十年,摩尔的预测被证明是高度准确的。 近年来,这种趋势略有变化,部分原因受到量子隧穿效应影响。然而,并行化计算的进步以及半导体技术和量子计算潜在的革命性变化,可能意味着摩尔定律在未来几十年内继续保持正确。观点摩尔定律 (以及为什么人们老是错误地预测摩尔定律要终结)我觉得一些有效实用的想法,概念或思维模型 (学校里基本不教):原创 2020-11-24 14:07:41 · 1169 阅读 · 0 评论 -
程序员应知必会的思维模型之 19 梅特卡夫定律 (Metcalfe‘s Law)
梅特卡夫定律 (Metcalfe’s Law)在网络理论中,系统的价值约等于系统用户数的平方。这个定律基于一个系统中可能的连接对数量,并且与里德定律 (Reed’s Law) 十分相近。奥德利兹科 (Odlyzko) 和其他人认为,里德定律和梅特卡夫定律夸大了系统本身的价值,因为它们没有考虑到网络效应中人类认知的限制。观点【硅谷增长大神 Andrew Chen 的blog,总结出这7点干货】➊糟糕点击率法则➋简化用户抛弃路径➌梅特卡夫定律➍上瘾的科学➎ “最小化可行产品”和“最小化期望产品”原创 2020-11-24 13:56:59 · 3673 阅读 · 0 评论 -
程序员应知必会的思维模型之 18 林纳斯定律 (Linus‘s Law)
林纳斯定律 (Linus’s Law)足够多的眼睛,就可让所有问题浮现。–Eric S. Raymond简单地说,能够看到问题的人越多,有人解决过相关的问题或事情的可能性就越高。最初该定律是用来描述开源模型对于项目的价值的,并适用于任意的软件项目。同时它也可以扩展到开发流程之中——更多的代码审查、更多的静态分析和多重测试可以让问题更加明显和容易识别。林纳斯定律的一个更正式的说法如下:如果有足够大的测试员和联合开发人员基础,那么几乎每个问题都能很快被特征化,从而让以前遇到过类似问题的人解决。原创 2020-11-22 09:15:56 · 737 阅读 · 2 评论 -
程序员应知必会的思维模型之 17 柯林汉定律 (Kernighan‘s Law)
柯林汉定律 (Kernighan’s Law)调试在一开始就比编写程序困难一倍。因此,按照定义,如果你的代码写得非常巧妙,那么你就没有足够的能力来调试它。 --布莱恩·柯林汉 (Brian Kernighan)历史柯林汉定律是以布莱恩·柯林汉 (Brian Kernighan) 的名字命名的,引述自柯林汉和普劳格 (P.J. Plauger) 的《编程格调》 (The Elements of Programming Style) 一书中的一句话:每个人都知道,调试在一开始就比编写程序困难一倍。那原创 2020-11-21 15:04:12 · 732 阅读 · 0 评论 -
程序员应知必会的思维模型之 16 隐式接口定律 (Hyrum‘s Law or The Law of Implicit Interfaces)
隐式接口定律 (Hyrum’s Law or The Law of Implicit Interfaces)当 API 有足够多的用户时,你在合约中的承诺已不重要:你系统的所有可观察行为都将被某些人所依赖。–海伦·赖特 (Hyrum Wright)隐式接口定律表明,当你的 API 有足够多的用户时,API 的所有行为(包括那些未囊括在公共说明中的一部分)最终都会被其他人所依赖。 一个简单的例子是 API 的响应时间这种非功能性因素,还有一个更微妙的例子是:用户使用正则表达式判断错误信息的类型时,即使原创 2020-11-19 21:46:31 · 652 阅读 · 1 评论 -
程序员应知必会的思维模型之 15 技术成熟度曲线 (The Hype Cycle or Amara‘s Law)
技术成熟度曲线 (The Hype Cycle or Amara’s Law)我们倾向于过高估计技术在短期内的影响,并低估长期效应。–罗伊·阿马拉 (Roy Amara)技术成熟度曲线是高德纳咨询公司对技术最初兴起和发展的视觉展现。一图顶千言:简而言之,这个周期表明,新技术及其潜在影响通常会引发一阵浪潮。团队快速使用这些新技术,有时会对结果感到失望。这可能是因为该技术还不够成熟,或者现实应用还没有完全实现。经过一段时间后,技术的能力提高了,使用它的实际机会会增加,最终团队也可以提高工作效率。罗伊原创 2020-11-19 09:23:06 · 1302 阅读 · 0 评论 -
程序员应知必会的思维模型之 14 哈伯特定律 (Hutber‘s Law)
哈伯特定律 (Hutber’s Law)改善即恶化。这个定律说明了对一个系统的改进会导致其他部分的恶化;或者它会将其他的恶化隐藏起来,并导致系统整体状态的退化。软件领域应用某个端点的响应延迟减少,就可能导致请求流中的吞吐量和容量问题进一步增加,并影响到另一个完全不同的子系统。观点任何察觉到的增强都会不可避免地导致网络恶化。帕特里克·赫伯(Patrick Hutber)加入我们共同进步群名称:程序员思维模型群 号:144079203...原创 2020-11-17 22:58:33 · 610 阅读 · 2 评论 -
程序员应知必会的思维模型之 13 侯世达定律 (Hofstadter‘s Law)
侯世达定律 (Hofstadter’s Law)在估计需要多长时间开发时,你可能会听到此定律。软件开发似乎有这样一条定理,即我们往往不能准确地估计需要多长时间才能完成。语出《哥德尔、艾舍尔、巴赫:集异璧之大成》。观点帕金森定律:工作会自发地增长,填满所有空闲时间。侯世达定律:做事所需的时间总是比预计的长,哪怕你预先考虑到这一点,仍然如此。墨菲定律:当情况有可能变得更糟时,情况就会变得更糟。熵增定律是一切定律。 这就像霍夫施塔特定律-事情总是比您计划的工作更多,即使您考虑霍夫施塔特定律原创 2020-11-16 08:30:59 · 1054 阅读 · 0 评论 -
程序员应知必会的思维模型之 12 席克定律 (Hick‘s Law or Hick-Hyman Law)
席克定律 (Hick’s Law or Hick-Hyman Law)决策时间和可供选择的选项数量呈对数增长关系。 – William Edmund Hick and Ray Hyman解释在下方的等式中,T 是做出决定所花费的时间,n 是选项的数量,b 是一个由数据分析所确定的常数。该定律仅适用于选项按顺序排列的情况,例如 ABCD。这隐含在以二为底的对数中,也就是说决策者本质上在进行二分法查找。实验表明,如果选项不是按顺序排列的,那么所花费时间与选项个数将会呈线性增长关系。这在 UI原创 2020-11-15 10:58:33 · 1450 阅读 · 0 评论 -
程序员必会知识点之 Doherty Threshold (Doherty阈值)App和网站的加载数据的时间用户最大忍受时间是多长
问题App和网站的加载数据的时间用户最大忍受时间是多长解释在70年代,通常认为一台计算机需要大约2秒钟才能响应请求。这是基于一个人计划下一个任务所花费的时间。这个神奇的两秒时间范围仍然被视为网页的最佳加载时间。但这实际上是在80年代就矛盾的!由于计算机的处理时间一直在改善,即使到了1980年代,该水平也降至2秒以下。结果,人们计划下一个任务所需的时间也减少了。1982年,IBM的Walter Doherty发表了一项研究,该研究表明计算机响应请求的最佳时间大约为400毫秒!被称为“ Doher原创 2020-11-15 10:54:43 · 480 阅读 · 0 评论 -
程序员应知必会的思维模型之 11 汉隆的剃刀 (Hanlon‘s Razor)
汉隆的剃刀 (Hanlon’s Razor)能解释为愚蠢的,就不要解释为恶意的。–罗伯特·汉隆 (Robert J. Hanlon)这一原则表明,一个行为所产生的消极结果并不是恶意。相反,消极结果更有可能归咎于这些没有得到充分理解的行动或影响。观点实际的系统故障分析通常比预期的恶意更加有趣。演员不好,操作员也很疏忽,但是你不能仅仅以此结束故事。剃刀仍然适用。汉隆的剃须刀是一个危险的信息危害。除了著名的“如无必要,勿增实体”奥卡姆剃刀外,其实还有好多把剃刀。比如汉隆的剃刀(Hanl原创 2020-11-15 09:38:50 · 1365 阅读 · 1 评论 -
程序员悟性培养之 01 王国维大神的三个境界
王国维大神的三个境界王国维在《人间词话》三境界相似:“古今之成大事业、大学问者,必经过三种之境界:‘昨夜西风凋碧树。独上高楼,望尽天涯路’。此第一境也。‘衣带渐宽终不悔,为伊消得人憔悴。’此第二境也。‘众里寻他千百度,蓦然回首,那人却在,灯火阑珊处’。此第三境也。”加入我们共同进步群名称:程序员思维模型群 号:144079203...原创 2020-11-13 08:55:23 · 266 阅读 · 0 评论 -
程序员应知必会的思维模型之 10 古德哈特定律 (Goodhart‘s Law)
古德哈特定律 (Goodhart’s Law)当压力施于其上以进行控制时,任何观测到的统计恒性都倾向消散。 --查尔斯·古德哈特 (Charles Goodhart)当一个措施本身成为目标时,它就不再是一个好的措施。 --玛丽莲·斯特拉腾 (Marilyn Strathern)软件开发应用根据这一定律,由测量驱动的优化反而可能导致测量结果本身的说服力下降。盲目使用一些过度严格筛选的方法 (KPIs) 可能会产生一些不良的影响。人们会倾向于用“钻空子”的行为去做局部优化,从而满足一些特定的度量原创 2020-11-13 08:43:44 · 1404 阅读 · 0 评论 -
程序员应知必会的思维模型之 9 盖尔定律 (Gall‘s Law)
盖尔定律 (Gall’s Law)一个切实可行的复杂系统势必是从一个切实可行的简单系统发展而来的。从头开始设计的复杂系统根本不切实可行,无法修修补补让它切实可行。你必须由一个切实可行的简单系统重新开始。别名高尔定律软件领域应用盖尔定律说明了设计高度复杂的系统很可能会失败。它们很难一蹴而就,更多是从简单的系统逐渐演变而来。最典型的例子便是互联网。如今的互联网是一个高度复杂的系统,而它最早只是被定义为一种在学术机构之间共享内容的方式。互联网成功实现了最初的目标,并且随着时间不断演化,最终成就了如今原创 2020-11-10 15:47:03 · 2143 阅读 · 2 评论 -
程序员应知必会的思维模型之 8 费茨法则 (Fitts‘s Law)
费茨法则 (Fitts’s Law)该法则指出,移动到目标区域所需的时间是到目标的距离除以目标宽度的函数。费茨法则决定了在设计 UX 或 UI 时,交互元素应该尽可能大,而用户注意力区域和交互元素之间的距离应该尽可能小。这会对设计产生影响,例如将相近的任务进行归类分组等。软件领域应用同时它还将“魔角 (Magic Corners)”这一概念正式化,即在角落放置关键的 UI 元素,从而使得用户可以通过移动鼠标轻松点击到。Windows 的开始按钮便位于魔角处便于选择,而有趣的是 MacOS 恰恰相原创 2020-11-08 21:46:48 · 464 阅读 · 0 评论 -
程序员应知必会的思维模型之 7 邓巴数字 (Dunbar‘s Number)
邓巴数字 (Dunbar’s Number)邓巴数字是对一个人能够保持稳定社会关系的人数的认知极限——在这种关系中,一个人知道每个人是谁,也知道每个人与其他人的关系如何。而对这一数字的确切值则有着一些不同意见。邓巴指出,人仅能轻松地维持 150 个稳定的关系。这样的关系在一个更社会化的背景中,便是当你碰巧在酒吧里碰到这些人时候,你不会因为加入他们而感到尴尬。邓巴数字的估计值一般在 100 至 250 之间。和人与人之间稳定的关系一样,开发人员与代码库的关系也需要努力维护。当面对大型、复杂的项目,或许多项原创 2020-11-08 21:26:23 · 1665 阅读 · 0 评论 -
程序员应知必会的思维模型之 6 坎宁汉姆定律 (Cunningham‘s Law)
坎宁汉姆定律 (Cunningham’s Law)在网络上想得到正确答案的最好方法不是提问题,而是发布一个错误的答案。据史蒂芬·麦克基迪说,沃德·坎宁汉姆早在 20 世纪 80 年代早期的时候建议他,在互联网上获得正确答案的最好方法不是提问题,而是发布一个错误的答案。麦克基迪称这为坎宁汉姆定律,而坎宁汉姆不以为然,并觉得这是“错误的引用”。最初这条定律只是用于描述 Usenet 上的社交行为,但后来也渐渐用于其他的在线社区。软件领域应用程序员要多参与技术讨论,在被打脸中不断成长观点坎宁汉姆原创 2020-11-08 21:21:07 · 4887 阅读 · 1 评论 -
程序员应知必会的思维模型之 5 康威定律 (Conway‘s Law)
康威定律 (Conway’s Law)这个定律说明了系统的技术边界可以反应一个组织的结构,它通常会在改进组织时被提及。康威定律表明,如果一个组织被分散成许多小而无联系的单元,那么它开发的软件也是小而分散的。如果组织是更多地围绕以功能或服务为导向的垂直结构,那么软件系统也会反映这一点。软件领域应用观点任何技术架构和流程的调整,都不要违背康威定律生产力决定生产关系,生产关系影响企业的组织模式,组织模式倒逼着系统架构适应组织架构,所以有了微服务、中台,这就是康威定律。中台建设的核心:“服务化”胜原创 2020-11-08 21:13:31 · 1056 阅读 · 3 评论 -
程序员应知必会的思维模型之 5 CAP 定理 (CAP Theorem or Brewer‘s Theorem)
CAP 定理 (CAP Theorem or Brewer’s Theorem)分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。CAP 定理由 Eric Brewer 所定义,它指出对于分布式数据存储来说,不可能同时满足以下三点:一致性 (Consistency):在读取数据时,每个请求都会接收到 最新的 数据,或者返回错误。可用性 (Availability): 在读取数据时,每个请求都会接收到一个 非错误的响应,但不能保证该数据是原创 2020-11-08 21:00:37 · 351 阅读 · 1 评论 -
程序员应知必会的思维模型之 4 布鲁克斯法则 (Brooks‘s Law)
布鲁克斯法则 (Brooks’s Law)软件开发后期,添加人力只会使项目开发得更慢。软件领域应用这个定律表明,在许多情况下,试图通过增加人力来加速已延期项目的交付,将会使项目交付得更晚。布鲁克斯也明白,这是一种过度简化。但一般的论据是,新资源的时间增加和通信开销,会在短期内使开发速度减慢。而且,许多任务是密不可分的,换句话说,这样可以使更多的资源之间能轻易分配,这也意味着潜在的速度增长也更低。观点《神话人月》的布鲁克斯定律说:“为一个较晚的软件项目增加人力会使其变得更晚”加入我们共同进原创 2020-11-08 20:51:50 · 1458 阅读 · 0 评论 -
程序员应知必会的思维模型之 3 破窗效应 (The Broken Windows Theory)
破窗效应 (The Broken Windows Theory)在破窗理论中认为,一些明显的犯罪迹象(或缺乏环保意识)会导致进一步的、更严重的犯罪(或环境的进一步恶化)。软件领域应用破窗理论已应用于软件开发中,它表明劣质代码(或 Technical Debt)可能会影响后续优化的效率,从而进一步造成代码劣化;随着时间的推移,这种效应将会导致代码质量大幅下降。加入我们共同进步群名称:程序员思维模型群 号:144079203...原创 2020-11-08 20:43:38 · 609 阅读 · 1 评论 -
程序员应知必会的思维模型之 2 阿姆达尔定律 (Amdahl‘s Law)
码农必备思维模型之 02 阿姆达尔定律 (Amdahl’s Law)简介阿姆达尔定律是一个显示计算任务潜在加速能力的公式。这种能力可以通过增加系统资源来实现,通常用于并行计算中。它可以预测增加处理器数量的实际好处,然而增加处理器数量会受到程序并行性的限制。简单应用阿姆达尔定律(Amdahl’s Law)说,通过并行化计算可以获得的加速受限于无法加速多少计算。例如,如果程序的运行时间的10%本质上是顺序运行的,那么即使您有无限数量的处理器,也不能将其加速超过10倍。历史阿姆达尔定律是计算机系统设计原创 2020-11-01 13:13:53 · 1196 阅读 · 0 评论 -
程序员应知必会的思维模型之 01 90-9-1 法则
90-9-1 法则 (90–9–1 Principle or 1% Rule)90% 的用户只看内容并不参与互动,9% 的用户会参与讨论,而只有 1% 的用户会创造内容。雅虎发展战略部副总裁布拉德利·霍罗维茨(Bradley Horowitz)认为,1:9:90的法则是对的。(维基百科的创始人吉米·威尔士研究表明,网络百科全书将近一半的编辑工作是由全部用户中2.5%的人完成的。)应用按照1/9/90的原则,网站的用户可分为三类,1%的深度用户,9%的轻度用户,90%的游客。无论是哪一类用户,我们原创 2020-11-01 12:00:39 · 885 阅读 · 0 评论