《代码整洁之道》读后感之一

很多人都会为了糟糕的代码所困扰过,为什么会写糟糕的代码呢?
1、想快点完成任务?
2、还是时间不够?
3、还是不耐烦再搞这套程序,想早点结束?
写完之后,虽然程序能正常的运行,久而久之,糟糕的代码就不知不觉的这么产生了,心里想着等有时间了,再回来清理,但是稍后等于永不。后期需要维护的时候,才发现这团麻越来越大,再无法理清,最后束手无策,导致整个团队生产力也跟着持续下降。
不要因为背负所谓的期限压力,而去制造混乱糟糕的代码,贪图一时的爽,赶进度,那样只会让自己更加的慢,想要做的快,最终还是要保持代码的整洁。使之简单易读,能通过测试,没有重复代码,提高表达力,让其只做一件事,并能通过其字面表达含义。

要想写轻松的代码,先让代码易读。易读的前提,先给代码起个有意义的命名,命名看似简单,但是好的命名可以减少读者的阅读和理解,毕竟代码写出来是给人看的。但是怎么让其名副其实,又能避免给别人带来误导,那就需要做有意义的区分,尽量使用读得出来的名称,每个概念对应一个词,或者添加有意义的语境,这样,读者一看便知作者想表达的含义。

记住,代码不仅是写给自己看的,更是写给别人看的,有意义的命名是提高表达力的一种方式。时刻保持代码整洁,是对自己负责也是对团队负责。

用脸贴着问题想问题

平时喜欢站在高处俯看问题,觉得很自在,有种掌控全局的感觉。比如画流程图解决某个功能性问题,一目了然,没有技术难点的话,基本一下子就能解决问题。

但有时候有必要试着放低身板,并肩站在问题身旁寻求解决办法。身在山中也无妨,由小而大,从局部推至整体,有时候可以更好的解决问题。

比如下面这个小问题:

某股票价格,一定时间t内价格变化为P1, P2, P3, …, Pn. 则不同时间点的价格差为P_{j}-P_{i} ( 时间点 j > 时间点 i ). 求这段时间t内的最大价格差。(n >= 500000, 1 <= P_{i} <= 10^{9} )

从整体看,会很容易想出把每个差求一遍,最后得出最大差值:(maxV: 当前最大价格差,max: 求两者间较大者,min: 求两者间较小者)

for j ( 1 ~ n-1 )
  for i ( 0 ~ j-1 )
    maxV = max ( maxV, P[j]-P[i] )

这样可以解决问题,但效率不行,n比较大,双循环会很慢。

此时把眼光聚焦到每个时间点,从时间点0开始思考,然后依次推向最后时间点n,会发现一次循环便可以解决问题:(maxV: 当前最大价格差,minP: 当前最小价格,max: 求两者间较大者, min: 求两者间较小者)

minV = P[0]
for j ( 1 ~ n-1 )
  maxV = max ( maxV, P[j]-minP )
  minP = min ( minP, P[j] )

即,从任何一个时间点往回看的话,该时间点的最大价格差就是:

该时间点价格 - 当前最小价格) 或 (之前保存的最大价格差