我呆了几个公司,发现一个有趣的问题。当B程序员接手A程序员编写的程序后,该程序在运行过程或测试过程中出现问题或瑕疵,那么B程序员第一想法不是去重构程序,而是推翻重来,特别是规模不太大的软件或程序。A程序员是程序的初步开发者,任何一个程序的第一个开发者总是不容易的,特别是小程序,小程序往往需要程序员自己去做需求收集、设计编码、测试验证的全部工作。所以在前期开发完成后,总会遇到一些问题。软件的成型并不是一步到位的,需要一个反复试错,发现问题和解决问题的过程,测试团队存在的意义就在于采用专业的手段帮助开发团队发现错误。当B程序员接手后,在一个既有的产品上发现瑕疵是十分容易的。牛B如微软开发的Office软件,消费者也很容易挑出一些问题或新的需求来,况且,有些人在没有深入了解过Word的强大之前,往往会吐槽Word太复杂或执行效率低等等,其实我只需要一个Notepad而已!如果这个人刚好是程序员,他往往会自己动手,按照他的想法去打造他的Notepad。Office也在一年一年的更新(是在原有的基础上更新,不是重来。)。
B程序员发现问题后,往往会埋怨他的前任写的代码不行,有推翻重来的冲动。能重用的代码块则重用之,能优化的代码则优化一下。再把自己的想法加上去,再推出一个版本。然后牛B叉叉的对领导说,上个版本是垃圾,我把它重新开发了。等到下一个程序员C来接手该软件时,又开始了重复上一过程……浪费的是公司的人力资源,得到好处的是程序员B。后面接手的程序员B既可以学习前人在该软件开发中的一些技术技巧,又能吸取经验教训,把产品重新开发一遍,然后当成自己的功绩。
这样做无疑很伤A程序员的心,A程序员尽心尽力的把软件做到那一步可能也是不容易的,B程序员往往因为一些很小的问题,全盘否定A程序员的劳动成果。严重挫伤A程序员的积极性。
说到浪费公司的资源,在软件公司,往往是资深程序员作为团队的Leader,如果A、B都是那个团队的Leader,那么该团队一遍又一遍的在重复着做一些事情。
许多时候,B程序员开发的新版本还不如A程序员开发的版本,导致这样的因素即可能是B没搞懂会忽略原程序中的一些技术细节或业务细节。但因为B程序员的面子问题,会强推自己的版本,伤害的用户的体验和公司的品牌。
程序员,真是个奇怪的动物!