摘要:

  1. 业务是生意,不是功能也不是交互,人是生意的主体。
  2. 人是不可靠的,需要用契约来约束生活的方方面面。
  3. 把软件组装起来的连接点就是接口,接口也是契约。
  4. 开发软件是关于生意的生意,管理团队也需要契约。

在讨论编程之前,请允许我聊聊生活。这是我在往期的写作中经常使用的方法,一个对软件充满深刻理解的架构师,往往对生活的理解也同样深刻。

罗翔老师在刑法课上挥洒自如的前提是对生活有着细致入微的观察,因此往往他的课程将原本枯燥的法律课程变成了脱口秀。

我们在茶余饭后是否思考过,我们当今社会生活的基础是什么呢?

根据文章的标题,大家可能猜到了我们的答案和要谈论的话题——契约。契约已经成为人们日常生活中的一个基本范畴,在社会生活中几乎和人打交道的任何事情都是契约的体现。

这些契约体现在出门办理业务后,获得看似无用的回执小票上。吃饭、充话费、停车和挂号看病等,这些活动都会让你收货一堆”没用的“的小票。我家已经有一大堆,以至于不确定那些可以丢弃。

可以说,契约代表了社会生活,那么自然也可以帮我们更好的理解业务,也可以更好的设计出软件。

今天我们就来说说契约这件事情。

用契约可以理解业务

业务是什么?

我们经常使用 Business 这个词来表达业务,不过大部分程序员和产品经理对业务的理解停留在软件有什么功能上。

如果查询 Business 在词典的含义,我们会发现它其实还有生意的含义。在商业环境中,业务其实就是生意。

我们每个人都可以说自己是 ”做生意“ 的。

出去吃饭,付钱的时候,收银员会递上小票,这就是成交了一次生意。至于是不是通过软件来完成,做生意的人不太关心。

正是这些大大小小的生意,才能让整个社会像一台紧密的机器一样运行,满足我们日常需要。

但是生意需要通过契约才能完成,契约又通过一些凭证来体现。

为什么需要契约?

其实很简单,人作为动物的一面是极其不可靠,没有感情的。

人类的智力来自于复杂的应激反应,在自然界中没有对错、道德、法律这些概念,个体的所有行为都有目的,安全、食物、住所、水源、繁衍等,这些才是真理。

这样的后果是,即使作为同类的人类,也无法联合起来应对恶劣的自然环境。好在人类在残酷的竞争和外部环境中学会了妥协,彼此让渡一些权利构成了部落、社会来对抗自然环境。

以我国为例,人类早期的契约就是暴力(原始社会)、宗教(商)、等级制度(周礼、道德)、原始法律(秦)、现代法律(近现代)。(原始法律和现代法律的区别是立法权、执法权、行政权是否分离)。

黑社会老大的拳头是凭证、宗教领袖的法器就是凭证、在周礼中等级就是凭证、在法律社会中白纸黑字就是凭证,这些都是契约的体现。

那么怎么用契约分析业务呢?

只需要坚持一个原则:人是不可靠的。

我们需要识别当前的操作者,因此需要登录、会话相关的功能;我们需要购买流程和订单来解决生意的纠纷;我们需要让企业授权行为留下痕迹,因此需要审批功能。

每一步都需要严丝合缝的产生业务凭证

这也为什么马克思说人是社会的动物,如果我们脱离社会,就不再需要契约了。

其实,我们身上的每一个细胞,原本也只是作为个体的单细胞生物,但是单细胞生物竞争力太差了,于是细胞让渡个体的权利,成为了多细胞生物的一部分。

用契约可以理解模型

契约需要某些东西承载,在不同的历史环境下有不同的形式。

道德是一种非强制的社会公约,这个契约通过从小的教育写入了每个人的大脑。

法律是一种强制的社会公约,这个契约由立法机构制定。

印章、法杖甚至玉玺,代表一种权利的契约。

合同、票据是一种写在纸上的契约,表达某次生意的完成。

在计算机时代,当我们把数据存入某个具有公信力的数据库中,它也具有了表达契约的作用。数据是一个混杂的概念,当我们用一组特定的数据表达类似票据这类概念的时候,它在计算机虚拟世界中就像现实中可以摸得着的实体了。

当然,计算机由于更具有便利性,我们可以设计出比现实中手写票据更好的组织方式,减少数据的冗余。

编程中的实体就和现实的票据不再一一对应了。

用契约可以理解接口

接口比较鲜明的特点是什么呢?

特点就是接口它什么都不是,用 Java 做例子稍微麻烦点,如果用过 TypeScript 的话,我们知道 TypeScript 编译后是 JavaScript,可以尝试编译 Interface 然后会发现什么都没有了。

接口其实不难理解。如果我们用一个类写完所有的代码,接口没有什么用处。B 站 UP 主小卢从一块木头中雕刻出精美的手办也不需要什么接口,因为本来就是一个人能完成的工作。

当复杂的结构需要一些连接点的时候,接口就有用了,这些连接点就是接口。

接口是用来造航母用的。前苏联解体之后,黑海造船厂厂长对想要继续建造”瓦良格“号的俄罗斯官员这样说:

"苏联、党中央、国家计划委员会、军事工业委员会和九个国防工业部、600个相关专业、8000家配套厂家,总之需要一个伟大的国家才能完成他。"

负责组装的工厂需要对零部件的工厂提出要求才能顺利完成组装,这些要求就是契约。

不同的供应商遵守相同的契约进行实现,如果契约约定的是尺寸、颜色,那么使用不同的材料也能满足不同条件下的需求。

这就是接口的实现。

当一个产业链成熟时,业界通过定制标准来达成对契约的共识,就能实现"车同轨,书同文"。

用契约可以理解团队

开发软件是关于生意的生意,管理开发团队也需要契约。

即使是做产品的公司,产品经理也可以看做甲方。

”需求“ 就是研究生意的生意,开发团队接受了这个生意开发软件,并获得报酬。

但是人一多就麻烦。

孟子认为人性本恶,孔子认为人性本善。然而他们都没有说实话,没有无缘无故的善,也没有无缘无故的恶,所有的行为本身来自于动机。

人类复杂的动机造成了团队管理的复杂性,软件开发者都受过非常优越的教育,以至于更加复杂。卢梭于1762年出版了《社会契约论》充分讨论了关于人的复杂性,揭示了契约构成了人类社会的基础。

软件开发团队也是一样,总是需要约束团队成员的权利、职责和收益,让团队知道如何做、何时做、该怎么做。运行良好的团队总会有一些明确的约定,在外企常常把它叫做 Way of working。

不过这是明面的契约,如果管理者无视契约的存在,或者无法制定出合适的契约,明面之下的契约就会出现。

例如,当团队成员指出工作流程中不合理的地方时,从团队中无法获得正面的反馈,不能得到鼓励和奖赏,反而被嘲讽或者承担更多的工作,一条隐形的契约就形成了:提出意见对自己不利。

这种隐形的契约无处不在,你该如何应对呢?

Last Updated:
Contributors: lin