我们公司有个程序员正在跟客户打电话会议,会议的参会人员包括他和一个搞算法的程序员、一个项目经理以及客户。问题出现在这个程序员写的程序里,客户那边运行程序,显示结果和实际结果不一样,于是就找到了项目经理,要求把几个开发人员拉到一起开个会,“教教他怎么用!”。
程序和算法互相推脱
为什么要打引号呢?因为客户是可以直接联系到程序员本猿的,客户那边执行程序后,结果和预期的不一样,于是他就去找程序员问为什么。结果程序员也比较憨,说不知道,自己这边运行都好好的。无奈之下,客户才找到项目经理,要求搞个沟通会,沟通沟通哪里出现了问题。
开始,程序员一口咬定自己的程序没问题,因为他的程序只负责调用算法,虽然他没有直接说是算法写得有问题,但是明眼人都能看出来他想表达的意思。
然后算法那边的程序员也比较傲,坚称自己写的算法没有问题,于是乎,写程序的程序员和写算法的程序员两个人就僵在那里了!
客户被他俩搞得很无奈,于是就跟他俩说:“我不管是你们俩谁的问题,现在我只想让程序正确运行,你们俩看着办!”
程序缺少文件
后来这个事情捅到了我这里,我的做法是先不管客户那边怎么样,既然程序员说程序没问题,于是我就把他写的程序重新编译了一份,在我的电脑上运行。
程序在我电脑上运行以后,我问了写算法的同事,他说我电脑上运行的结果是正确的。
然后我又将我编译的程序放到客户电脑上,覆盖了之前的程序,果然,和写程序的程序员描述的一样,运行结果和在我电脑上运行的结果不一样。
这是咋回事呢?
于是,我就去检查了下客户电脑的程序目录,发现程序少了一个依赖项。
这个依赖项是一个算法库的运行时,我们公司算法和程序的代码不是一套,写算法的时候,需要先用算法专门的代码编写软件先写出算法代码,然后将算法代码导出给写程序的人。写程序的人使用的编程语言是C#,他需要调用算法在.Net环境下的算法库,根据算法代码,转换成C#语言对应的写法。
但是呢,C#算法库,需要一个算法的运行时的库,如果没有这个运行时的库,调用算法时就会报错。
我们算法一般只返回两种结果,就是正负结果。写程序的人在写结果的时候,如果能取到正结果,就返回正结果,其他情况均为负结果,其中就包括代码报错!
这种写法在我们公司是允许的,因为算法代码很容易出错导致无法顺利走完全部算法代码,因此我们会将所有算法错误捕捉到并且以负的结果去返回。但是呢,错误原因我们一般不管的,会把当前算法的样本保存,给写算法的去分析为什么会出错,再来优化。
所以,我觉得问题应该出在算法的运行时上!
我估计您也发现了,我也做过一次程序覆盖的操作,如果缺运行时文件,我的这次覆盖应该会把运行时文件也放到客户电脑上才对!
其实,如果客户电脑上也装了算法软件,那么算法软件在安装时会在电脑上注册算法的运行时,那么,在这种电脑上再运行程序,就不需要单独去把运行时文件放到程序的运行目录。
因为我们公司所有程序员电脑上都装了算法软件,所以就不存在需要单独把运行时文件放到程序目录这件事情。
因此,尽管我做了一次重新部署,覆盖之前程序员的文件,仍然有问题。
因为我们的程序在试运行阶段都是由程序员部署的,但是这个程序员在部署完程序以后运行了下程序,发现程序能运行,然后就不管了。
他认为,只要软件能运行,那其他部分就肯定没问题!
最后,我将运行时文件放到了客户电脑的程序目录,再次运行结果就正常了!
客户一看正常,当然就得问是什么原因啦,然后项目经理尴尬地说:“没事,小问题,解决了!”
客户也不计较,知道这里面肯定出了什么不可描述的事情,然后就没追问,默默回了一句:“解决了就好!”,但语气中充满了无奈!
结语
我觉得这种事情不应该最终由客户提出来并且非要开个会才能解决得掉。说白了这就是一次因为粗心导致的部署问题,现在回头再想想那句:“程序在我电脑上运行都正常!”是不是很讽刺?
我之所以觉得问题出在写程序的程序员身上,主要还是因为他既没有仔细验证,又只知道推脱,完全没有想要解决问题的意愿。
所谓“在我电脑上运行都正常!”,在别的电脑上就不正常了,本身这件事情就不正常!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.