`
marmot
  • 浏览: 11923 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

谈程序员的领地意识---代码的协同开发

阅读更多

1.    入乡随俗
进入一个新的领地,别人潜意识里会把你当作一个入侵者。这个时候你要做的是通过模仿尽量融入,使他们慢慢放下戒备从而接纳你。遵守前人的开发习惯如代码风格、设计模式等,不要轻易打破规矩。
有一次我在刚加入一个团队不久因为一次错误提交使得对方很光火。大致情况是这样,我看到一个类有genInstance方法并且其他逻辑也是符合单例的,但构造方法确是公开的,我就将构造方法的访问性用private关闭了。但有一处的引用却使用了new,我在我的本地代码将new改成了getInstance但忘了提交只提交了那个单例类。相关开发人员在更新了代码后却发现服务启动不了。按着svn的历史记录找到了我,我一看发现是我忘了提交,忙跟对方解释是自己大意了忘了提交,其实留心看一下就会发现把这获取实例的方法改一下就可以了,并把自己修改的初衷说了一下,对方却教训我说单例不单例不是我想改就能改的,这是个很关键的服务,万一出了问题我担不了责任。他这样跟我说话我当时也很恼火,只是初来乍到确实得萎缩点,谁让自己是新面孔呢,只好一个劲地陪好话说下次注意。
后来这个类还是被我改成了单例,运行也正常。效率有没有提升不敢说,但代码至少比以前健壮,个人觉得。

2.    修改原作者的代码请及时告知
我曾经为一项目组写过一个工具类,有一个100*100个单元格的xls文件,每个单元格都有不同的值,对方希望在程序调用的时候根据行和列获取相应单元格的值。我开始的想法是直接用一个二维数组将其保存起来,通过下表索引即可找到对应的值。但发现这个表格其右三角和左三角的值是一个对应关系,意思就是保存一半的值就够了。于是我就用Map存储,取值的时候根据行和列的值进行一下判断,然后将值取出来。当时写完后简单取值测了一下,结果正确,就将代码转交给了对方项目组,私底下以为省了一半空间感到沾沾自喜。
过了不久,对方项目组告诉我代码有问题,原因是取出来的值不对。我感到很诧异,当时明明测了好好的,对方告诉我这个代码被XXX优化了一下。我把代码拿过来看了一下,原来他将我使用的Map用二维数组代替了,而我在对Map取值的判断等并没有改,这当然会出现问题了。结果我又改了回去。
近来想起了这件事,自己当时经验不足以为用Map少存储了一半的值,殊不知在赋值取值时增加散列函数的开销,而对于这样的数据量较小的简单场景用二维数组存储直接根据下标就能拿到数据,省去了判断等一系列操作,代码又简洁明了,自己实在是自作聪明。为了证明写了一小段代码对数组和Map各赋值10000次并记录时间,结果显示使用数组的速度远远大于使用Map。
回想起来,当时这个事情让我有点不爽,也许就是觉得自己的领地意识被侵犯了。觉得自己的实现是正确的,你修改了告诉我一下也不会出这样的问题。而且你是调优,如果你能把这样的经验分享给我,我肯定会很感谢你。

3.    说出修改的客观原因
有次我和一个同事一块做一个项目并使用绿毛龟svn作版本控制,我负责创建数据模型。我创建了一些bean对象,考虑这些到bean对象由于需要存放到Map中,所以就重写了hashCode函数,我用了31做因子。然后为了考虑调试看起来方便也重写了toString方法,用StringBuilder拼了很多值作排版输出。
第二天我发现他把我的这两方法都给换了,hashCode他把31改成了17,toString方法改成调用一个什么Common-io的开源包反射打出来,输出的结果就是一堆内存地址样的东西。我向他请教为什么把31改成17,他也说不上来,只是觉得17看着顺眼,其实用17,23,31只要是质数都行,效果都是一样的。我又问为啥把toString都给改了,他说我的排版输出太多,他习惯用Common-io这个,他觉得这个更简洁。而且他还把代码的缩进按他的习惯重新格式化并提交了。
他告诉我的原因就是这样,他以他的习惯要求我也遵守他的习惯,可这并不是我们要解决的主要问题,这两个地方的修改根本无足轻重。他给的解释根本不能让我信服。我当时也没说什么,其实我的心在想,你这么喜欢插一脚,那以后都你做得了,我也懒得改了。
多么可怕的想法,从他的身上我深深看到了我的影子。我曾经的同事提交我的代码把传文件的参数都用String而我拿过来一律改成File,他问我为什么?我说String不够严格而且看起来不爽。这是理由吗,即使我认为String不好也应该证明用File的好处,并引导他去试着使用File,可是我并没有去证明只是说我不喜欢这样使用。“这样我不爽”,我用我的习惯压制了他的习惯,不知他当时听了我说的话是不是也和我有一样的想法呢?

4.    不要轻易否定
有一阵子我老觉得别人做得不够好,总想着你为啥不这样这样呢?或者是那个什么什么你考虑了吗,你是怎么做的?为啥不那样做呢?要是我来做我肯定可以做得更好,恨不得把所有事都包揽过来自己做。我就成了一个刺儿球,到处扎人,让人恐不及防…殊不知不经巫山岂知云雨之趣,事情不是你做还是尽早闭上自己的鸟嘴,做好自己份内的事比什么都重要,实在要说点什么,也别否定,多提有建设性的意见。

入行以来,经历了成长的痛苦,仍然渴望成长。收获过被认可的喜悦,仍然在追逐认可。走过许多弯路,内心渐渐淡定仍然时而浮躁。
谨以此文感谢那些陪伴我一路走来的人们,明天一定会更好!

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics