一方面,我们在寻求新东西来学习。
同时。
另一方面,我们又对经手的代码一知半解。
当然。
也有人给出另一方案:与其理解别人的旧码,不如重构自己的新码。
不过。
在没有理解好旧码的情况下就去重构自己的新码,是不是做砸的概率更大?
我很少会在看不懂代码的时候去改bug,这个问题我在我的帖子里面说过了。说实在的,我认为因为看不懂所以推倒重来就是智商不够的表现。什么,不承认智商不够?那好吧,那就是懒到了乐意牺牲自己的前程的表现。
话说,在没有搞明白所有代码之前动手,是可以很快地写出解决当前问题的代码来,省下很多阅读那些看起来稀奇古怪甚至乱七八糟的代码的时间。但是,后面花在擦屁股上面的时间会远远超出你省下来的时间。很多时候人们有一个误区,那就是以为用新的简单的方式去实现,会比重构少犯错误——毕竟全新的嘛。然而现实是,很多你没看明白的代码,其实背后都是有一个个血淋林的场景在那里的。你的实现简单,很可能只是忽略了这种场景而已。“完整”的测试用例,在某些方面确实可以减少这种问题发生的几率,但是测试毕竟不是对一个问题的完整描述,有些问题用测试来描述是很困难的。读懂代码(并猜测背后的用意),其实是从另一个角度来达到“测试用例”相同的目的。
纯粹依靠测试用例来改Bug,在看不懂原有代码的情况下动手,其实跟我吐槽过的散弹枪思维本质上是一致的:先轰一枪,看看打中了些什么,然后再说。当然了,有测试案例在保障,能看到打中或者不该打中的东西,比用人肉眼来看是强太多了。或者打个比方,那就是用一只猩猩来改分头式导弹的导航系统,通过看是否打中地面的那几个目标(测试用例嘛),来看这只猩猩是否改对了导航系统。至于这只猩猩是否真的会改,啊,对不起,这不是重点。当然了,后面别人再来改的时候,一定会记恨你的。