最近工作中遇到一件挺失望的事,我们项目的开发工作主要是由成都的开发团队负责的,最近开发团队有一名成员离职了,之前他一直是负责为每个版本代码生成新的svn链接,以及一部分系统逻辑代码的维护工作。之前这两项工作一直都做得挺好的,但就在上周他离职之前的版本更新后,便出现了问题。首先是我在做下一个版本的时候,无论怎么更新新训练好的模型,在本地已经修复好的错误,在测试环境部署后依然存在。经过一段时间的查看,原来是因为离职的那位同学在给出下一个版本的代码库链接时,忘了修改其中一个部署文件的内容,造成有一个模型文件在之后的测试环境部署时无法更新。这个错误从发现问题到定位问题大概花了我两个小时的时间,因为每次因为修复bug更新模型后我都会在比较多的数据上跑一个批测看看效果,为了排除是我自己在更新模型文件时出现失误而导致的测试环境没有更新,我跑了多次批测来确认,每次批测都会花20到30分钟不等的时间,因此多跑几次就会非常浪费时间。就因为他的一个小小的疏忽,我付出了更多的、本可以避免的工作时间,这种感觉让我已经有一些失望了。
但事情到这里还没有结束,在我修复完刚才那个问题后再跑批,发现跑批的结果比起之前的结果下降了很多。而我做的本来就是一个对比试验,如果效果下降很多的话,可能就意味着我做的模型更新不能上线了。但我自己觉得,从技术上判断,不应该发生这样的问题。还好我的实验文档里还保存着用上一个版本的模型跑出来的结果,并且(非常幸运地是!)结果里还保存着中一些关于模型调用的中间结果,这让我得以详细地比较两次不同模型跑批的异同。比较之后发现,两个版本的结果在一个小地方不一样,比如说上一个版本的模型在某种情况下,调用的是语料库A,而这次版本的模型在同样的情况下,调用的就是语料库B,并且我发现新版本出错的例子,都涉及到了这样的现象,因此基本可以断定,就是这一点区别造成了模型效果的下降,而并不是我对模型的更新造成的。可是为什么会出现这样的差别呢?我之前并没有被通知模型做了这些更改。于是我想成都另一名开发同时进行了求证。原来,这个模型更改又是那位离职的同事负责的,而他应该是离职前刚做了把语料库从A改动到B的实验,但忘了改回去了!(现在生产上是用的语料库A,我之前作为baseline的实验应该也都是在语料库A上做的)就是因为他这一点的疏忽,又让我多花了一个多小时的时间来定位错误,并且如果不是我保留了上个版本的实验数据,定位的时间可能还会更长!想到这里,结合前一个部署文件的错误,我对这名同事可以说是非常失望了。
这件小事就讲完了。我之所以把这个事情记录下来,并不是想吐槽这位同事,而是想强调责任感对一名在工作的人的重要性。工作,特别是工程技术类的工作,往往都是一个团队在合作,因此你不仅会被同事和领导的所作所为所影响,你的所作所为也会影响他们。你细心一点,他们的工作可能就会更顺利一点;而你马虎一点,或者缺乏责任感把工作随手一扔,那你的同事和领导可能就要来为你收拾剩下的烂摊子。如果是后者,那你在同事心中的印象、在领导心中的印象、甚至久而久之在本领域内的声望,都可能会收到影响。因此,如果你珍惜自己的专业声望,希望能团结和带领更多的人去完成一件事,那么责任感这一课,是你无论如何也不能缺席的。