[Engineering] 设计模式奏鸣曲(六):沟通结构
1. 沟通结构
计算机科学家 Melvin Conway 在1968年的一篇文章中提到,
Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.
即,产品结构反映了设计该产品的组织的沟通结构。
后来这句话被人们称为,康威定律。
康威定律并不是一种心得体会,而是对软件项目所进行观察的结果。
在软件工程中,假设模块A通过接口依赖模块B,
那么,模块A的开发者,就不得不与模块B的开发者,就如何使用模块B进行沟通,
反之亦然。
因此,软件系统各模块之间的接口结构,和人与人之间的沟通结构是一致的。
对模块B而言,一旦关注到它的外部特征,就意味着需要与人进行沟通,
有一些必要的信息,必须在接口层面达成共识。
A description of a system, if it is to describe what goes on inside that system, must describe the system's connections to the outside world, and it must delineate each of the subsystems and how they are interconnected.
在描述一个系统的时候,除了描述系统内部发生了什么,
还必须描述该系统是怎样与外界进行交互的。
而描述系统内部的时候,同时也要谈及子系统之间是怎样交互的。
作为实现者,关注系统的外部特征,是一件很容易被忽视的事情。
2. 利益相关者
利益是影响人们决策的一项重要因素。
要想促成一件事,那就应该头脑清醒,小心行事,
着眼于利益,而不是立场。
立场是已作的决定,而利益是导致作出这一决定的原因。
《谈判力》一书中提到,谈判的目的就是实现自己的利益。
在谈判发生冲突的时候,应当首先确定双方的利益,
问问自己,为什么没有那样做,那样做会影响到的什么利益?
仅仅根据个人喜恶来做出决定,是一个常见的误区。
程序员们在讨论代码品味的时候,很容易犯这个错误。
优雅的代码是需要付出代价的,很多现象都是做出让步的结果。
《软件系统架构》中提到了架构设计中必须考虑的利益相关者(stakeholder)这一概念,
Stakeholders are the people for whom we build systems.
A key part of your role as an architect is knowing how to work with stakeholders in order to create an architecture that meets their complex, overlapping, and often conflicting needs.
好的系统架构必须满足所有相关者的利益。
优雅的架构不见得能够落实下去,
必须所有参与者同意这样落实才行。
3. 开发者的外部影响
3.1 像企业一样思考
作为一名开发者,我们所售卖的是把想法变成软件的开发服务,
企业需要持续不断地改进和完善自己的产品,
我们也应该这样做。
作为一名开发人员,除了要提供有形的价值之外,
还要传达,我们提供的开发服务,与成千上万名其他开发人员提供的服务有什么不同。
企业应该运营自己的产品,我们也应该这样做。
所以,我们应该关注当前提供了怎样的服务,
以及如何营销这项服务,
想方设法提高服务的品质,并且让更多的人知道它。
3.2 强行推行自己的方案?
在采取行动说服别人接受我们的方案之前,应该先想一想,
我们是在解决问题,还是在推行方案?
售卖锤子的供应商,会更笃定客户遇到了锤子可以解决的问题。
其实未必。
能否放弃现有方案,往往暗示着是否真的存在问题。
要解决正确的问题,最困难的莫过于把目光从自己最倾心的方案转移到其他方案了。
—— 《布道之道》
此外,有些人是不关心问题能否被解决的,
那么这些人就不是问题的主体,
在解决问题的时候,应该努力避开这些干扰因素。
因为他们的个人爱好,兴趣态度,会误导我们对方案作出不正确的判断。
毕竟,谁会为问题买单,谁才会关心问题的进展。
结语
本文从系统的信息和价值流动的角度进行分析,
强调了系统的设计者应该关注的一些外部因素。
比设计一个系统更难的是发现真正的问题,并说服各参与者合力将它解决,
这会涉及不断的与人沟通,协商,谈判和推动。
系统本身即使再优雅,如果不能给使用者带来任何收益,
就没有价值流向开发端,入不敷出,
这样的系统是不长久的,企业必须以盈利为目的才能存活下去。
参考
CONWAY'S LAW
How Do Committees Invent?
谈判力
软件系统架构
布道之道
软技能:代码之外的生存指南
你的灯亮着吗