资料来源:“康韦定律”

图片

发表后42年的作者注释:

也许在本文中最值得注意的是,由于第三段末尾的叙述而发表该文章。 为了缓解克服前面45段的困难,我现在以自由形式表达它:

任何设计系统的组织(此处不仅仅解释为信息系统)都将不可避免地创建一个模型,该模型将重复组织本身的通信结构。

事实证明,不仅在软件开发中遵守了该原理,而且经常提到该原理。

我建议您先熟悉一下材料,然后环顾四周并在其他领域中寻找它。

目前,我最喜欢的例子是与美国贫困相关的复杂社会问题:进入劳动力市场,住房,教育和医疗保健。 阅读本文后,请考虑我们各国政府的结构如何影响他们对此类问题的态度。


委员会如何创建新的?

梅尔文·康威(Melvin E.Conway)
原始PDF

智力活动的结果是由不同的部分组成一个整体,因此可以称为系统设计。 无论是准备大型军事综合体,解决社会问题的建议还是计算机程序列表。 设计组织的典型目标是准备一个包含结构一致的信息量的文档。 我们将此信息称为系统模型。 通常,发起者是希望使用模型提供任何进一步操作的客户。 例如,一个政治家打算提出一项法案,以防止最近发生的灾难再次发生,为此,他聘请了一个小组来找出灾难的起因。 或者制造商需要新产品,然后他任命负责人确定新产品并计划发布。

设计组织可能参与或可能不参与设计系统的实施。 通常在政府的努力中,有一些准则阻止该集团按照自己的建议行事,而在私营部门则存在相反的情况。 合理地假设这种情况会影响系统设计过程,以及开发人员关于其未来的其他想法。 正如我们将在后面看到的那样,在传统管理环境中存在的激励机制可能与客户的目标背道而驰。 [1]

设计阶段


初始设计阶段更多地与过程本身的结构有关,而不是与系统的开发有关[2]。 在全面发展之前,需要采取某些初步行动,即:

  1. 定义项目活动的边界以及客户和现有现实确定的最终结果。
  2. 初步评估系统的结构,以平衡开发团队的目标

将来,我们将详细说明团队的组织结构已经直接或间接影响了项目的实施。 因此,即使不能为寻找雇员提供理想的条件,也不能绝对客观地组建团队。 在组建团队之后,将责任下放给各个子组,从而缩小研究范围,同时减少系统开发的选项数量。

在分配了职责之后,管理人员面临着工作组一级的协调问题,这不利于巩固每个组的工作以建立统一的系统。 尽管个人的这种作用可能会降低。

系统设计过程分为以下几个阶段:

  1. 根据基本规则定义边界。
  2. 开发初步的系统概念。
  3. 按照概念组织设计工作和任务分配。
  4. 在委派任务级别进行协调。
  5. 将子系统组合到系统中。

在单个设计工作中,可能不会跟踪所有阶段。 在此过程中可能会发现一个新的,更完善的项目概念。 当然,这不是一个非常有利的时刻,因为随后停止工作将是痛苦且昂贵的。 当然,从历史学家的角度来看,一切都是重复的。

在这种情况下,为什么总是没有足够的时间来做正确的事,却总是有足够的时间来重做一些事情?

系统设计


任何串行系统都由互连的子系统组成。 对系统内部结构的描述应反映其与外部环境的关系及其子系统的关系。 下降到较低的层次,我们可以将子系统视为一个系统,对子系统说同样的话。 依此类推,直到这样一个子系统,这将是极其简单且不可分割的。

例子


州际跨洲运输系统包括公共汽车,火车,飞机,出租车,停车场,码头等。 这是一个非常异构的系统,这意味着其子系统非常多样化。 例如,下降到较低级别,我们将看到其子系统:框架,引擎,功率分配,通信,有效负载。 发动机系统包括燃料,点火系统等子系统。

不太明显,但是理论也是一个系统。 它指的是外部环境,即所观察到的事件,它应解释或至少不与它们相矛盾。 它由以相似方式彼此相关的部分理论组成。 例如,在坠机调查过程中,创建了一个理论来描述飞机的轨迹,其通信,损坏以及事故期间与其他物体的相互作用。 这些项目本身都是一个单独的故事,也可以分为多个子项目,直至单个信息单元。

方案


在图 在图1中,以图表的形式描绘了该系统,类似于拨浪鼓,以线的形式表示了连接(分支),以圆的形式表示了主要节点(节点)。 每个节点都表示一个子系统,该子系统与其他子系统进行通信,可以用类似的方式表示该子系统。 接口一词在开发人员中越来越受欢迎,它是指子系统的交互,用线条表示。

图片

图形图像清楚地表明了我们正在考虑的两个概念的相同形式:系统和设计它的组织。 尝试更换:

  1. “系统”到“委员会”
  2. “子系统”到“小组委员会”
  3. “接口”到“协调员”

与系统情况一样,我们认为可以考虑将设计组织考虑到多个级别的复杂性。 联邦政府是设计组织的一个很好的例子,其复杂程度可以满足任何工程师。 这是一个特别有趣的示例,显示了我们正在考虑的两个概念的相似性,因为联邦政府既是一个设计组织(制定法律,条约,政策)又是一个设计组织(以宪法为主要设计文件)。

主要互动


现在我们已经准备好处理本文的主要问题。 设计组织的结构与其设计的系统之间是否存在可预测的关系? 正确的答案是肯定的,而且这种连接是如此简单以至于经常保持不变。 考虑以下“证据”。

让我们任意选择系统和开发该系统的组织,并随机选择所设计系统的复杂度,然后勾勒出来(我们的选择是任意的,因为如果我们观察到有趣的关系,我们可以将它们扩展到任何设计组织和复杂度)。 在图 图2(为清楚起见)显示了以下陈述正确的结构。

图片

对于系统中的任何节点x,我们都可以标识开发它的设计组织的工作组(用X表示)。 这样

总结此过程,对于系统中的任何节点,我们都有一条规则来查找适当的工作组。 请注意,比例为1:1,即 同一设计组织可以设计两个子系统。

有趣的是,我们可以对分支机构做出类似的陈述。 取同一系统的任意两个节点x和y。 它们可以连接也可以不连接(即,它们是否以对系统功能重要的某种方式相互交互)。 如果它们之间存在连接,则开发两个数据节点的两个工作组X和U必须就接口的功能达成一致,以实现节点之间进行通信的可能性。 如果x和y之间没有连接,则子系统之间不会相互通信,这意味着工作组不会相互交互(因为X和Y之间没有连接)。 [3]

我们刚刚展示了什么? 简而言之,我们已经证明,系统的结构与设计中涉及的组织的结构之间存在紧密的联系。 当每个子系统都有自己独立的工作组时,我们可以观察到工作组与子系统的结构(方案)相同。 在几个工作组开发一个子系统的情况下,设计组织结构看起来像系统结构,但是子系统(图中的节点)更少。

两个对象之间类似的保留结构的关系称为同态。 用数学语言来说,系统图和组织投影图之间存在同构。

该系统是组织对其进行设计的反映


许多经验丰富的系统设计人员相信,任何人都可以更好地完成任何系统设计。 换句话说,谈论设计任务是错误和不正确的,除了在地点,时间,知识和技术水平方面。 阅读过设计对象的故事或记住并分析其工作的人应该记住这一点。

诸如FORTRAN和COBOL之类的编程语言的计算机翻译器的开发就是一个很好的例子。 在1950年代中期,当这些语言的原型出现时,它们的编译器比计算机本身还要笨重,在当时应该执行命令的时代是巨大的。 如今,这些翻译器只是历史奇迹,与现代编译器没有什么共同之处。 (值得注意的是,编译器的发展取得了巨大突破,这与以前被认为是计算机制造商血统的地区出现了一批新人有关-起初是一小群凝聚力强的大学研究人员,然后是独立软件开发人员)。

如果我们假设对于任何系统需求,都有许多系统项目可以满足此需求,那么我们还必须询问设计组织的选择是否会影响从该系列中选择系统项目的过程。 如果我们相信自己的同态性,那么我们将同意哪些影响。 鉴于组织没有灵活的通信结构,该组织将在任何项目产品中标记其自身的副本。 组织越大,灵活性越差,并且此属性体现得越多。

例子


在一个研究机构中,有八个人应该制作COBOL和ALGOL编译器。 在对复杂性和可能的​​期限进行了初步评估之后,确定其中五个与COBOL一起使用,另外三个则与ALGOL一起使用。 结果,COBOL编译器工作了五遍,而ALGOL编译器工作了三遍。

在其总司令的领导下,两个军事部门已经开发了满足其需要的武器系统。 此后,他们不遗余力地制作了组织结构的副本(请参见图3a)。

图片

请注意此任务涉及的计算机操作系统。 详细研究之后,我们看到它由三个部分组成:硬件,软件和应用程序(见图3b)。 他们的开发人员与以下子系统相对应:计算机制造商的工程师,他的系统程序员和定制应用程序的开发人员(这种罕见的情况是硬件和软件专家进行协作,而不仅仅是彼此苦难)。

系统管理


大型系统的结构会随着它们的发展而衰减。 当考虑最近十年的大型军事信息系统时,这种观察尤其明显。 它们是人类先前创造的最复杂的物体。 出现了一种称为“系统管理”的活动,其中包括由于系统倾向于分离成其组成元素的趋势。 让我们在本文的主要思想范围内看一下系统管理的实用性。

大型系统为什么会崩溃? 这个过程经历三个阶段,其中前两个阶段是可控制的,第三阶段是我们同态的直接结果。

  1. 首先,开发人员已经意识到了投影系统的规模,无法抵制吸引尽可能多的人来创建它的诱惑。
  2. 其次,在将通常的管理模型应用于此类大型项目的实施时,其沟通结构分解为不同的部分。
  3. 第三,根据同构现象,组织设计者的结构中发生的分解过程发生在系统的结构中。

首先,考虑“人口过剩”的情况。 当系统的复杂性水平接近其理解的边界时,开发人员自然地委派任务的愿望是可以理解的。 这是开发过程中的转折点。 他要么为简化系统而战,要么赢得胜利,或者他失去了对该系统的控制权。 考虑到时间和预算的压力,结果几乎可以预测。

如果错过了最后期限,那么如果经理没有使用所有资源来防止这种情况发生,那将是完全的责任。 因此,他将尝试影响开发人员,开发人员可能更愿意处理系统的复杂性,而不是将任务委托给其他人。 结果,所涉及的资源数量将增加。

或另一个示例,展示了管理器冲突和设计系统完整性的类似情况。 经理必须将工作的关键和复杂部分付诸实施。 他可以选择两种表现形式之一:以创新方法和低薪而著称的新的小型公司,或价格更高的“现实”的受人尊敬的办公室。 他知道,如果一个有才华的年轻公司不能完成这项任务,他将因破坏该项目而感到内。 如果一个著名的组织失败了,那么这仅表明该任务确实很困难。

这里有什么收获? 基本上,在传统上使用的评估和分配资源的方法中。 因此,资源的单位是美元,因此所有资源都以美元表示。 如果资源是人力,则计量单位将是一小时的工作成本乘以工人人数。

这种方法的谬误是,对两个人一年中的工作的评估与对数百人一周中的工作的评估相同。 但是由于两个人的工作的组织结构会有所不同,考虑到同构性,可以说他们会创建不同的系统,因此您不应该比较他们的工作成本。 根据经验,我们知道,如果两个人正确选择,他们将表现出最好的结果。 系统设计中错误的假设是去皮马铃薯或砌砖。

帕金森定律[4]在项目活动中劳动力资源的重新分配中非常重要。 只要经理的声誉取决于预算的规模,他就会对扩大组织感兴趣。 这不是解决系统开发问题的合适动机。 一旦组织存在,那么当然将使用它。 当今存在如此众多设计欠佳的系统的最令人信服的原因可能是存在寻找工作的设计组织。

其次,随着任务授权的开始,系统设计过程崩溃的原因-设计组织的通信结构不完整-逐渐显现出来。 根据基本概率理论,可能的交流数量等于组织雇员人数平方的一半。 , . .

. , . . , .

结论


— , ( ) , . , . : , , . , . , , , , , - , .

, . , , . . .


[1] . « » (John Kenneth Galbraith's The New Industrial State). VI, «».

[2] C. « » (.J. Middleton, «How to Set Up a Project Organization,» 1967, . 73).

[3] . , . , , .

[4] .. « » (C. Northcote Parkinson, Parkinson's Law and Other Studies in Administration, 1957)

:

更多



«»


«Augmenting Human Intellect:
A Conceptual Framework»
, .

«» — « », «» , , () .

— ( , ! , .) — , , , , , , , , WikiPedia, Web Archive, Knol, Quora, Cybersyn, Xanadu, DARPA, IARPA.

50 . 所有演示之母

如果您真的想了解NLS,则必须忘记当今的现实。忘记有关计算机的所有知识。想象一下,您仍然不知道计算机是什么。回到1962年。然后阅读他的想法
-Bret Victor,关于道格拉斯·恩格尔巴特的几句话

Source: https://habr.com/ru/post/zh-CN432972/


All Articles