前面是沟,你要把我往哪里带?
吴旻
泰岩网络工作室
我比较害怕违反常识的事情出现。比如说,我们的上游数据源有两个端口,一个端口是负责连续的长连接的实时数据;另一个端口是负责短连接的暂时的历史数据,即数据请求可以很快完毕,然后SOCKET就关闭。在请求数据之前,需要发送登录消息,但明确只有一个端口接收登录消息,另一个是不需要发登录消息的。
我需要据此做出一个重要决定,于是问相关的开发人员:哪个端口需要发送登录消息?
他很自信的回答我:请求历史数据的端口。
我马上崩溃了,这太违反常识了,短连接是没法记住是哪个用户在另一个端口接收数据的。我跟着问了一句:你确认吗?
对方接着回答:我确认!
我没有退路了,只好说明了一下我怀疑的原因,希望他能解释我的困惑。
他的回答依然很干脆:我记得是这样的!
这个兄弟有点直。像“我记得”、“我觉得”这样的提法,应该更多的是属于个人观点,不一定是客观事实。在当时的语言环境中,我需要的是客观事实,因为我要据此做出一个重要决定。他可以说我再找文档确认一下,但不能告诉我一个他觉得对但事实上错的信息。
我问他“你确认吗”,是问他确认客观事实上是这样的吗;他回答“我确认”,是确认他就是这么记忆的。
我终于明白,在他的语义中,客观事实和个人观点是混为一谈的。表面上看他是在陈述客观事实,其实他讲的是个人观点。我的惊恐在于,如果我按他提供的信息做出决策,整个团队都会死得很惨。
另一个同事笑说,我们是在“鸡同鸭讲”。
另一个故事的结论恰好相反。很久以前,某些终端用户会登录失败,而且有特定网络的用户集中出现问题的倾向,比如某个地区的网通用户集中反应有此问题。这个事情难为死运维的同事了,网络不稳定不是我们能设法控制的。我的困惑在于,提供同类服务的竞争对手怎么没听说有这类问题。这件事情违反常识的关键点是,大家的技术水平是差不多的,怎么没听说其它公司有过这类问题?
结局其实也不复杂,运维不可能解决得了的事情,还得软件开发人员自己解决。但开发人员给出的解释很特别,大意是说,可能是用户登录的时候,发的0太多了。
我听不懂这句话。登录是有通信协议的,怎么会有0发太多的情况呢?太多,又是多了多少?我的感觉是,登录消息在某些情况下进行解析的时候,发生了异常,于是服务端主动发起了关闭,导致用户被踢下线了。
我对这个解释的理解是,第一,大家不要再追究此事了;第二,他在用个人观点描述客观事实。
前一个是把个人观点当客观事实来讲,后一个是把客观事实模糊成个人观点。但不管怎样,据此做出决策,都将死得很惨。
我曾经让一位同事实现动态切换数据源的功能,即当上游提供多个对等数据源的时候,我们可以择优动态选择一个。结果开发的同事说,内存池发生了越界错误。做个比喻,就像是我平时看CCTV1的节目,电视很正常,但我今天看的是CCTV2的节目,结果电视发生了漏电现象。说实话,我实在看不出这里面有任何必然联系,这太让我觉得违反常识了。照这个思路下去,就真的是“一切皆有可能”了。
还有一件事,是我们要把数据提交给上游,结果没提交成功。我和开发人员一起查原因,我问,校验和对吗?他说,这个算法是别人提供的。我听懂了,他告诉我这事他没责任。我再问,进行校验的数据范围对吗?他回答是按规定来的。依次我问了很多,总之是他没责任,但违反常识的是,已经有很多公司完成了这项工作,人家是怎么成功实现的呢?
怎样才能分清他们说的哪些是客观事实,而哪些是个人观点呢?
照上面的说法,那前面一定是沟。我到了沟的前面,然后暗自琢磨:要不要翻到沟里去呢?