代码库知识奇点YROBERT FinkFollowFeb 11·7分钟读取
奇点是指系统在某个时间点或配置空间中变得不可预测或以某种方式出现错误。例如,在数学中,函数f(x)=1/x在x=0时是奇异的,因为它"爆炸";在广义相对论中,斯蒂芬·霍金(Stephen Hawking)证明了大爆炸具有无限密度(即空间是点状的),诺贝尔奖得主罗杰·彭罗斯(Roger Penrose)认为黑洞必然具有奇点;也许最著名的是,京东云ddos防御超过,技术奇点是"一个假设的时间点,在这个时间点上,技术增长变得不可控制和不可逆转,导致人类文明发生不可预见的变化"(维基百科)。
在这篇博文中,我认为软件代码库受制于我所称的代码库知识奇点。简而言之,这是一个关于代码的组织知识丢失的时间点,没有人记得最初的设计权衡或实现的细微差别。鉴于我在Palantir与数千个代码库中的数百个团队合作的经验,我将描述导致奇点的情况,并介绍我们用来避免奇点的技术和工具。
O.P.C.(摘自CC BY-NC 3.0 US下的Obstruse Goose)-其他人的代码一定不可怕,
如果读者在阅读这段代码时都会考虑到这点,那么我会觉得这是一种什么样的快乐。当你看到一个代码库,想知道这个函数到底在做什么?在这种情况下,我观察到两种常见的响应模式:-悲观者:我永远不会碰那段代码,这太可怕了,无法改变。-乐观者:那段代码看起来太复杂了,我相信我可以重构并简化它
如果我是你负责的工程组织或团队的一员,你更喜欢我表现出悲观还是乐观的行为?都不对。悲观的变体是不好的,因为它表明所讨论的代码永远不会更改,它是定义上遗留的,它是一个死代码库。乐观的方法在更微妙的方面是不好的:很可能代码复杂是有很好的原因的,更可能是我不理解这些原因,会把事情搞砸,引入错误,而不是简化。这种情况被称为切斯特顿围栏;引用Farnam Street的一篇文章:
"当我们试图干预某人创建的任何系统时,仅仅将他们的决定和选择视为一阶思维的后果是不够的,因为我们可能会在无意中造成严重问题。在改变任何事情之前,我们应该怀疑他们是否在使用二阶思维。他们做出某些选择的原因可能比最初看起来更复杂。最好假设他们知道我们不知道的事情,或者有我们无法理解的经验,这样我们就不会寻求快速解决方案,最终让事情变得更糟。"
代码库知识奇点
在更改此类代码之前,我应该请一位有知识的同事或贡献者解释其细微差别。不幸的是,这样的人往往不存在,要么是因为他们离开了项目或公司,要么是因为他们自己在几年后忘记了细节。这就是组织遇到代码库知识奇点的时候,它已经失去了机构记忆,即为什么某个特定的软件是以这种方式编写的。为了找到答案,唯一的希望是源代码考古学:我会通过Git提交日志、GitHub请求评论、电子邮件、妙语文档、松弛通道等进行挖掘。,急切地想知道这个神秘的函数究竟在做什么,为什么和如何做这段代码。
当然,ddos防御软件免费,其影响并不像技术奇点("技术增长变得不可控和不可逆转的假设时间点,导致人类文明发生不可预见的变化")。然而,当接近代码库知识奇点时,开发人员更可能引入性能或行为回归,浪费时间探索以前走过的无效路径,或违反隐含或隐藏的跨组件假设。
那么我们首先是如何达到这种情况的呢,为什么我们最终会有两个糟糕的选择,一个是悲观主义者将代码视为遗产,另一个是乐观主义者重构并可能引入bug?当然,许多不同的因素决定了代码库接近奇点的速度,但我想指出两个特别重要的因素。第一,沟通方式。在以同步沟通为主的组织中(比如:"让我们安排一个职业训练局来解决这个问题","下周我在伦敦时我们能亲自讨论这个问题吗?"),决策主要是通过口头和面对面的沟通做出的。除非这些组织已经形成了强大的记笔记和传播文化,否则决策以及(更重要的是)决策背后的理由都是短暂的,很快就会消失。
相反,具有异步通信风格的组织(例如,查看Basecamp或Gitlab)通常使用协作,基于文本的交流工具(如Quip或wiki),可自动生成讨论和决策的书面工件。但请注意,不要上当受骗,依赖Slack等同步通信工具来捕获异步消费的决策!即使使用Quip或Google Documents等协作文档工具,知识组织(如结构化、标记、搜索、存档、访问控制等)仍然是一个重大挑战。
第二,软件架构(作为组织结构的镜像,根据康威定律)直接影响建筑决策的半衰期。例如,微服务代码和组织架构通常表现出强大的服务内社会联系,但也表现出强大的每服务信息孤岛。即使对给定服务中的技术决策进行了记录,组织也可能缺少一个明显的论坛来讨论和捕获跨服务、系统范围的体系结构决策。致力于促进组织范围内知识共享的组织领导者将发现自己在与熵和懒惰的持续艰苦斗争中。
编程与软件工程
01-11 来源:长虹华伟
12-08 来源:长虹华伟
03-18 来源:长虹华伟
03-22 来源:长虹华伟
03-16 来源:长虹华伟
10-11 来源:长虹华伟
01-18 来源:长虹华伟
01-20 来源:长虹华伟
04-30 来源:长虹华伟
03-01 来源:长虹华伟