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. 不要轻易否定
有一阵子我老觉得别人做得不够好,总想着你为啥不这样这样呢?或者是那个什么什么你考虑了吗,你是怎么做的?为啥不那样做呢?要是我来做我肯定可以做得更好,恨不得把所有事都包揽过来自己做。我就成了一个刺儿球,到处扎人,让人恐不及防…殊不知不经巫山岂知云雨之趣,事情不是你做还是尽早闭上自己的鸟嘴,做好自己份内的事比什么都重要,实在要说点什么,也别否定,多提有建设性的意见。
入行以来,经历了成长的痛苦,仍然渴望成长。收获过被认可的喜悦,仍然在追逐认可。走过许多弯路,内心渐渐淡定仍然时而浮躁。
谨以此文感谢那些陪伴我一路走来的人们,明天一定会更好!
分享到:
相关推荐
简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选...
程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师...
程序员必备技能----断点调试(IDEA版)---- 代码
这个压缩包包含了《程序员成长课堂--PHP标准教程》一书中所有章节的实例源代码,这些源代码是实践和学习的关键组成部分。 首先,我们需要了解PHP的基础知识。PHP是“超文本预处理器”的缩写,它是一种开放源代码的...
这些题目设计目的是检验和提高程序员的实际问题解决能力,对代码编写、逻辑分析、系统设计等方面的能力进行全方位的考察。 数据结构是程序员必须掌握的基础之一,包括数组、链表、栈、队列、树、图等,以及它们在...
收录于CSDN专辑《程序员面试(各种PDF书籍)》。该专辑包含: Android高薪之路:Android程序员面试宝典-李宁(高清PDF完整版)、 C#与.NET程序员面试宝典-靳华(高清PDF扫描版)、 C与C++程序员面试宝典-梁镇宇...
收录于CSDN专辑《程序员面试(各种PDF书籍)》。该专辑包含: Android高薪之路:Android程序员面试宝典-李宁(高清PDF完整版)、 C#与.NET程序员面试宝典-靳华(高清PDF扫描版)、 C与C++程序员面试宝典-梁镇宇...
《程序员指南--.Net》是一份综合性的学习资源,针对使用.NET框架进行软件开发的程序员。这份压缩包中包含了丰富的编程源码,旨在帮助开发者深入理解.NET平台的工作原理,提高编程技能,以及优化代码实践。 .NET是...
程序员表白系列--婚礼篇;
程序员必读---计算机专用英语词汇1500词.doc
程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历...
JAVA程序员必读--基础篇.chm
高级程序员复习资料---文档格式
2. **Android Studio**:作为Android开发的集成开发环境(IDE),Android Studio提供了代码编辑、调试、构建、测试和发布应用的一站式服务。学习如何高效使用Android Studio对于表白应用的开发至关重要。 3. **用户...
这个压缩包文件包含了程序员向妹子表白的专用代码,旨在展示技术与浪漫的结合。 首先,我们需要理解的是,编程语言本身可以作为一种创意工具,用来创作出独特的、个性化的表白方式。例如,可以用Python编写一首诗,...
程序员面试金典-中文第五版 pdf 程序员面试金典-中文第五版 pdf
黑马程序员-Python-Django实现从0开发一个博客系统
程序员简历模板-简洁、清晰
这份资料名为"1800个程序员必备词汇-开发必备-适用前后端-编程词汇-1800词40页高清完整版-带音标-右侧下载前可预览.pdf",是一份专为程序员设计的英语词汇手册,包含了大约1800个在软件开发中常用的词汇,并附带音标...