公司的一个程序员是真让我我无语!大半夜我被客户打来的电话吵醒,客户跟我说我们项目组的一个程序员遇到了困难,所以客户就拉了一个电话会议想要解决问题。听客户的语气,我感觉问题好像是出自客户那边,然后我的同事不知道如何是好。问了一个详细以后,我才知道,我的那个同事还在公司加班呢!大家稍微聊了一会儿,我才听明白发生了什么事情。

打开网易新闻 查看精彩图片

事情是这样的,我们公司给这个客户开发了一个上位机程序,这个上位机程序需要对接很多硬件,其中有一个硬件是红外传感器。我们通过对接传感器的通讯协议,获取传感器的信号然后来分辨传感器前面有没有物体经过,当有物体经过的时候就执行某个特定的逻辑。

一个简单的传感器逻辑

这个传感器的通讯协议的逻辑比较简单,当传感器前面有物体经过的时候程序会收到一个信号,信号值是1,并且,这个信号会在极短的时间内重发,假设传感器发送信号的频率是1秒10下的话,那么我们在程序里面接收到的就是10次值是1的信号。反之,如果物体已经消失,这个信号将成为0。

这个逻辑我们已经被验证过了,非常稳定,所以,当客户说传感器出现了问题,我就比较奇怪,一开始我还以为是客户那边部署的传感器坏了或者配置有问题,但是,我同事发言完毕以后,我一阵无语,说话都结巴了!

原来,我同事负责的功能里面有个逻辑,当然,这个逻辑是已经确定下来的逻辑,就是程序接收到传感器信号,并且信号值为1的时候需要去处理一些事情,如果为0则停止处理。

我的同事在写这块代码的时候比较简单粗暴,只要收到了传感器信号就去执行逻辑,并没有区分0和1。

我们当初在研究这块的逻辑的时候,就已经跟这个同事说过了,当信号不变的时候不处理任何东西,当信号变的时候才去处理,这样就可以避免同一个信号执行多次逻辑。

什么意思呢?就是当头一次接收到信号值为1的信号的时候,执行代码里面的逻辑,按照上面的说法,如果1秒内有10次信号值为1的信号传过来时,逻辑只会被执行一次,而当收到信号值为0的信号时,停止执行逻辑。

所以,只需要在第一次信号值为1的时候,使用一个变量存一下这个值,下次再来信号的时候判断是否仍为1,如果是则直接跳过,否则停止逻辑。

错误得描述问题

但是,不知道哪里出了问题,可能他压根就对传感器的触发逻辑根本就没有概念,于是乎代码怎么也改不好。

但是,明明是自己理解或者能力问题,当客户问他出了什么事情的时候,他描述起来好像是传感器的触发逻辑有问题!

于是,客户就想当然地认为可能是他们部署传感器或者配置传感器的时候出现了问题,然后才有了这次半夜开电话会议的事情。

之所以半夜开电话会议,是因为从下班开始,客户那边一个负责安装传感器的员工一直在陪我的这个同事加班,已经快半夜12点了,眼看我的同事实在搞不定,客户那边的员工又找不出传感器哪里有问题,无奈才打电话各种“摇人”。

客户那边的人虽然不懂代码,但是对于传感器的触发逻辑是清楚的,他问我是不是我们写的传感器通讯协议有问题,然后我就跟他描述传感器的通讯协议逻辑:“首先传感器接收到信号1,开始执行逻辑,直到这个信号成为0,停止执行逻辑……”

然后客户说:“对啊,是这个逻辑没错啊?但是XX为什么说有问题呢?”

于是我就问我同事是咋回事,一问之下才知道,原来是他代码没有处理好这部分逻辑!

听到这个解释,我头都炸了,一来我觉得是这个传感器的触发逻辑非常简单,控制起来也很简单,二来,我觉得你自己代码逻辑处理不好你倒是说明白啊,大半夜那么多人一起开会,以为是传感器有问题!

我都替客户那边陪着我同事加班的那个人叫屈,当然,客户那边仍旧不知道发生了什么事情,还非常单纯得跟我说:“如果实在不行,我明天让我的同事再换一个传感器试试看!”

我不知道客户是真不知道出了什么事情还是假不知道,但是客户总算给了一个台阶,于是我就跟客户说:“不行这样吧,明天我到公司再调试调试代码,如果实在看不出哪里有问题我们就把传感器换了!”,然后,会议总算结束了!

会后,我单独打电话给我的同事,再三确认之后,确认就是他代码逻辑处理得有问题。大半夜的,我也无力吐槽他,就跟他说早点回去休息,第二天我们再来谈这个事情。

结语

其实,类似的问题不止发生过一次,在这个项目开始的时候,我的同事就经常这样,当客户那边知道他遇到困难问其原因的时候,他总是把自己在写代码的时候遇到的问题描述给客户听,客户不知所谓,经常认为是他们那边的问题,因为客户会专门圈或者私聊负责某个功能的人,所以很多时候当事情出现的时候我并不知道,否则我肯定会直接说我们代码有问题,需要调整下。

最后,可能有些人觉得我这个同事的能力有问题,但不管怎么样,客户要的是结果和处理办法,而作为程序员,这个时候就应该告诉客户应该怎么办,如果是代码问题搞不定,应该把这个问题抛给公司,由能解决问题的人帮忙处理,而不是把自己在编码中出现的问题抛给客户,难道要客户指导你写代码?