程序员有多爱面子?我同事就是一个例子,为了面子,甚至可以白白浪费时间!事情是这样的,我和我同事合作开发一个上位机项目,因为是非标项目,公司的采购为了节省成本,买了一些小公司的硬件,这些硬件因为比较小众,其中有好几个硬件的通讯模块的文档需要研究。

打开网易新闻 查看更多图片

其实,并不是因为通讯协议复杂,这些硬件基本上都是TCP/IP或者Bodbus协议,只不过通讯是双向的,我们写的上位机程序需要发送命令给硬件,然后硬件再返回给我们数据,就这么简单。

难点在于发送和接收数据的格式,因为这些硬件厂商写的硬件通讯的说明文档很糟糕,所以我们在调试通信协议的时候颇费周折。

我的同事就遇到了这样的情况,他在调试某个硬件的时候足足花了三天时间,但是还是没调通硬件通讯,向硬件发送命令没有反应。

因为硬件是走Socket通信协议的,本来应该很简单才对,文档里写得似乎也很清楚,就是将一串命令以字符串形式转成16进制的Byte数据,然后发出去就行了,但是,我的同事按照要求始终没有调通数据。

但是,诡异的使用Socket调试工具去发送命令,却能够收到硬件的反馈!问题就卡在了这里!

好,其实我说他好面子,事情也是从这里开始的!

他在调这个硬件的第一天,下班后我问他调通了没有,然后他跟我说他调通了,我还说他搞得挺快,因为我手上也有一个硬件通讯部分很难搞!

结果第二天我搞定了手上的硬件以后,看他还在折腾这个硬件,我就问他:“你不是已经调通了吗,怎么还在调?”

结果他跟我说,他只调通了网口,他想再试下串口通讯。

我也没多想,于是就来到了第三天的中午,我把手上所有硬件都调通了,于是问他进度怎么样,结果他跟我说,他之前调的那个硬件发送命令还是有问题,硬件始终没有返回信息。

我一看,他又换回了网口,于是我问他:“这你不是已经调通了吗?怎么还在调?”

然后他就跟我说了实话,说之前所谓的调通,只是在Socket调试工具里面调通了,实际在代码里面调还是有问题。

眼看他进度这么慢,我就跟他说让我来试试。

我仔细看了文档以后,也试着写了调试代码,发现果然调不通。

折腾了好一会儿,我发现一个问题,那就是命令是字符串,虽然转成了16进制的Byte数组,但是按照我以前对接的其他硬件的情况来看,有很多种情况是命令本身就是16进制的,在此基础上还需要进行16进制的转换,也就是说,需要转换两次才可以!

所以,我就试着在将命令转成16进制数组以后,再挨个对数组的每一个元素再进行16进制的转换,然后再将命令发出去,结果立马就收到了硬件的反馈,我成功了!

成功之后,我就立马把代码发给了我同事,让他按照我写的去做就可以了!

我原本以为问题会很快得到解决,结果直到快下班,我看他还在调那个硬件,我很不解,问他:“我不是已经把代码给你了吗,你咋还在调?”

结果他跟我说:“我忘了看!”

这回答我一时半会儿也不知道咋说,因为我知道他为什么“忘了看”!

其实他的心思我很清楚,自己调试了三天的硬件被我给调通了,其实是很没面子的,所以,不管是跟自己赌气,还是觉得我多管闲事,他都不会去“抄”我的代码,还是想通过自己的研究把问题解决。

结语

想到这里,我其实也就没多说了,因为这样的程序员我碰到的太多了,好心帮忙结果碰了一鼻子灰!

但是,换个角度想一想,如果我是他,我估计心里一样不好受,也想通过自己的研究给自己争口气。

虽然道理我理解,可是我还是觉得,工作还是工作,不是不能为了争一口气,就随意浪费工作时间!

您觉得呢?