每个程序员都觉得自己水平高,看不上别人的工作。比如说,在维护别人代码的时候,动不动就鼓吹要重写。前一段时间,我司头目跟我说要重写,我没在意,结果搞起来才发现,完全从头开始。吾斥之为好大喜功,不顾事实搞空中楼阁。
吾一直反对从头完全重写,即使是参考已有的东西。理由?
- 你水平不比别人高。如果你觉得高,请拿出令人信服的证据。
- 你某一点上见解比别人好,这也正常,不要盲目扩大。
- 人的知识点可以通过学习增加(即使如此,学习的人也少之又少),而能力、思路是无法通过学习提高的。比如说,你跟高手下棋,一盘棋输了,从头再来还是输。为什么?你能力就这么高,下多少次也是这样。
- 你的能力也许提高了一点(非常难),其他人并不会提高。除非你从头到尾全部贯通。比如吾一个人把WP的整个布局绘制打通关,所以怎么搞都可以;或者说公司招了个牛人,也能一个人打通关。这是特例,不能推广。
- 项目开始的时候,是会老老实实认真一点,比如说会加点注释。附着工作的推进,过了开始一段时间后,还没到项目中期就已经乱套了,基本就是看都不看全部搬过来——这不是违背了重写的初衷吗?意义何在?比如现在就已经进入了盲目照搬阶段。
- 工期不可预测。老系统本来还能将就用,完全重写的时候,老问题没解决,新问题不断增加,而且出错了也不知道(特别是细节上)。出个可用版本遥遥无期,这不是开玩笑吗?
所以,吾一直主张:
- 逐步改进。你有新的想法,很好,那就逐步实施。
- 新旧并行。通过桥接方式,逐步完善新体系的同时,逐步替换老体系。
- 新旧替换过程中,要不断的积累测试案例。
- 修改一个变量,就切换到老体系,用来验证问题是不是新改出来的。
这样,新旧平稳过度交接,什么都不影响。等新系统建立之后,你已经对此完全掌握了。这个时候再重写……大哥你不是已经重写完了吗?
有朋友就会说了,吾不会新旧并行。大哥你新旧并行都不会,还奢谈什么重写?你根本没有这个能力,为什么要暴露?要自讨苦吃呢?