如果你在开发一个新项目的时候,看到一段有问题的代码,可能心里会想,“这是别人写的,跟我没关系”,“我没有义务去改它——我自己的事情还忙不过来呢”,“如果我把它改好了,有可能会改出问题”。
如果每个人有这样的想法的话,那么有问题的代码会越积越多。即使是很小的一段程序,经过长时间的累计,问题也会渐渐的凸显出来。有人曾说,超过6个月的项目全是“历史遗留”项目,因为里面都会积累大量的有问题的代码,或用另外一个词——技术债务。
所以当你看到一些代码有问题,或一些不是好的写法的东西——请马上改掉它。做事应该宁早勿晚,当你再次注意到它时也许就已经太晚了,很有可能其它的代码就有一部分开始依赖它,新的代码会模仿这种编写风格(也许是拷贝/粘贴而来),如果真的是这样的话,那一旦项目出了问题,想要修改的话,就需要花费更多的时间了。让我们把上面错误的做法纠正:
“不要修改别人的代码”——通常情况下不要修改别人的代码,如果你发现别人写的代码有问题,可以去跟原作者沟通,如果原作者已经离职了的话,那么,建议是你亲自去修改他。
“我没有时间去修改它——我有自己的事要做”——这就是你的事。你可以在你的缺陷跟踪里添加上一条任务,写上“重构”,写上花费的时间。你也可以把它推迟到下一个sprint(如果是敏捷开发)。管理层坚持认为开发新东西比修改旧程序重要吗?告诉他们去读读《重构》这本书或Spolsky的文章..或本文。(也许不管用,但不妨试一试)
“如果我修改它,肯定会改出问题”——也许。但是,等一下,你们有单元测试用例,不是吗?还有集成测试,确认测试。如果没有——先把这些补齐了。这样你就不用担心把程序改坏了。
代码审查是避免这样的代码很重要的方法。如果提交的代码都经过了代码审查,未被察觉的有问题的代码会大幅度的减少。仍然会有,但会少的多。
对于这样的做法存在的问题是——如何确定一段代码是有问题、需要改进的?这就需要经验了,需要你熟悉好的开发方法和模式。对这个问题我不能给出一个秘诀。但你需要在团队里有一群能明辨是非的程序员。如果没有——读一读《Effective Java》
所以——请马上修改。这会省下你的时间,免去你的头疼,让你对这个项目更有自豪感,而不是“这烂项目是一些菜鸟写的,我只是做了一些辅助的工作。”你不能这样说——如果项目很烂,你难辞其咎。