关于p2p:系统困境与软件复杂度为什么我们的系统会如此复杂
简介:很多人认为做业务开发没有挑战性,但其实正好相同,面向不确定性设计才是最简单的设计。 作者 | 聂晓龙(率鸽) | 读 A Philosophy of Software Design 有感,软件设计与架构复杂度,你是战术龙卷风吗? 前言有一天,一个医生和一个土木工程师在一起争执“谁是世界上最古老的职业”。医生说:“上帝用亚当的肋骨造出了夏娃,这是历史上第一次外科手术,所以最古老的职业应该是医生”,土木工程师说:“在创世纪之前,上帝从混沌中发明了地狱与世间,这是更早之前的一次土木作业,所以最古老的职业应该是土木工程”。这时软件工程师拖着键盘走出来说,“那你认为,是谁发明了那片混沌?” 建筑师不会轻易给 100 层的高楼减少一个地下室,但咱们却常常在干这样的事,并且总有人会对你说,“这个需要很简略”。到土里埋个地雷,这的确不简单,但咱们往往面临的实在场景其实是:“在这片雷区里加一个雷”,而雷区里哪里有雷,任何人都不晓得。 什么是复杂性咱们始终在说零碎很简单,那到底什么是复杂性?对于简单的定义有很多种,其中比拟有代表的是 Thomas J. McCabe 在 1976 提出的感性派的复杂性度量,与 John Ousterhout 传授提出的理性派的复杂性认知。 感性度量 复杂性并不是什么新概念,早在上世纪 70 年代,软件就曾经极其简单,开发与保护的老本都十分高。1976 年 McCabe&Associates 公司开始对软件进行构造测试,并提出了 McCabe Cyclomatic Complexity Metric,咱们也称之为 McCabe 圈复杂度。它通过多个维度来度量软件的复杂度,从而判断软件以后的开发/保护老本。 理性认知复杂度高的代码肯定不是好代码,但复杂度低的也不肯定就是好代码。John Ousterhout 传授认为软件的复杂性绝对感性的剖析,可能更偏理性的认知。 Complexity is anything that makes software hard to understand or to modify译:所谓复杂性,就是任何使得软件难于了解和批改的因素。John Ousterhout 《A Philosophy of Software Design》 50 年后的明天,John Ousterhout 传授在《A Philosophy of Software Design》书中提到了一个十分主观的见解:复杂性就是任何使得软件难于了解和批改的因素。 ...