返回列表 回复 发帖

把五分之一的时间“浪费”在思考有没有好方法上

把五分之一的时间“浪费”在思考有没有好方法上


文作者:秦国海


        工作中,在一项任务下来后,如果任务比较简单或者之前已有成型的模式,则我们可毫不犹豫地用已经成型的模式快速完成开发;但如果该任务有一定的复杂性但又没有成型的方法,则我们不妨“浪费”一定的时间思考一下有没有好方法,而不是根据当前的感觉直接进入开发,因为这样往往会带来一些自己意想不到的后续问题;况且,直接开发一项复杂的功能往往进行的比较痛苦,作为开发人员完全找不到“爽”的感觉,哈哈!
        根据我以往的经历,我把大约五分之一的时间用在思考如下几个方面(个人意见,仅供参考):
1)     客户真正的需求;
2)     客户最想要的效果;
3)     已有的资源;
4)     自己舒服的开发方式;(即使是考代码也要让自己拷的舒服)
5)     最快的开发速度;
6)     自己及同事的可维护性;
7)     整个生命周期的维护成本;
8)     与同事交流;
9)     市场同行是怎么做的;(或者网上别人是怎么做的)
10)   自己适当的创新等。
        比如,对于延长项目中项目库管理系统的GPTLog数据上传来说,领导要求快速完成这部分功能,如果参照已有模块一个一个去写代码,不仅代码量比较大,而且以后维护起来也比较麻烦,因为查找和核对大量数据表的对应关系特别繁琐,想起来头就大。而对应关系其实已经有别人做过了,并且不止做过一遍,虽然不能直接用已有代码去实现,但可以利用已有的代码逻辑和配置文件。于是就尝试利用已有的这些代码逻辑和配置文件进行开发,结果果然有惊喜,该功能很快就完成了,而且维护起来也比较方便。
        再比如,Seis当年的数据库缓慢问题,一开始我们代码走查查找了大量可能影响性能的代码,还找南京负责news接口的人员给我们进行实现优化,最终虽然取得了一定程度的提升,但还是明显感觉慢的不行,后来我们归结为数据库传数据就是这么慢。后来去大庆现场测试大数据,结果只是分层数据就要求上传好几天,领导实在受不了就安排我来专门调查这个问题。我对这块代码不太熟悉,而且明显还是数据库方面的问题,这我之前的经验就更少了。怎么办呢?代码走查估计我的头要炸的。有没有什么好方法呢?于是想到我以前曾使用过的性能分析工具Intel® VTune™ Performance Analyzer,虽然主要是针对VC的,但也可以重新翻出来尝试一下。结果一看这玩意儿早就过时了,使用不了。那有没有替代工具或同类工具呢?结果果不其然,网上一查,Intel又新推出了功能更加强大的性能检测工具Intel® VTune™ Amplifier XE 2011,该工具不仅支持几乎所有语言,而且Windows和Linux等一网打尽。赶紧下一个试试,结果虽然没有像支持VS那样完美,但gcc下的Qt也是可以用的。赶紧用来跑一下我们的Seis,看到底慢在哪里,结果一查不要紧,出大事了,原来我们查了这么多天都没有解决的问题只是因为一行毫不起眼的代码引起的,这句代码在一个循环的最内部,该代码调用的函数会频繁的打开关闭数据库,结果导致数据上传无比缓慢。问题找到,赶紧解决,结果性能提升百倍以上,爽!这个工具也就是我之后推荐到GPT创新平台上的Intel VTune性能检测工具。
        之后,我们又遇到了平面图绘制超级缓慢的问题,一旦一个大的平面图打开,整个软件就无法再操作。我和项目经理唐勇调整了影响Qt绘图性能的所有参数,但还是没有多大的效果。怎么办呢?难道就这样卡死吗?用户受不了,我们自己也接受不了。还有没有什么好的解决方法呢?Qt本身的机制解决不了,那我们就自己想办法解决!和唐勇充分讨论后,依据唐勇之前已经研究出的Qt窗口叠加机制,我想到了分层绘图这一方法,自己创造条件让整个视图分层、分区域局部绘制,这样图形局部的操作就不会引起整个视图的重绘,大大提高了绘图效率,最终结果也比较满意,充分满足了客户的操作要求。
        还有最近延长项目的沉积相综合分析系统的开发,该系统要求整合Log和Map的大部分功能,无论把Log重新加入到Map中还是把Map重新加入到Log中都有不小的工作量,而且实现难度也比较大,后续问题也可能比较多,如果硬着头皮按其中的一种方法去做了,也应该能够实现。可我感觉就是特别的不爽,因为我没有信心能够保证按时完成任务,也对完成之后的系统可用性和稳定性没有把握,它对我来说可能变成一个无比大的黑洞,当然对公司来说也可能是个潜在的黑洞。比如,如果系统不能正常运行怎么办?大量代码冲突怎么办?后续新功能加入怎么办?如此大的成本投入值不值?更甚至导致项目失败怎么办?面对这么多隐患,我不甘心如此做下去,尽最大努力看有没有其它什么好方法。既然Log和Map有几乎相同的数据底层,上层实现有很相似,那可不可以实现两者的无缝结合呢?让两者还在原处各干各的,但表现出来的却和一个整体一样。经过和唐勇一起几天的调研认证,终于找到了一种能够实现以上效果的方法,虽然还是有可能存在一定的局部风险,但在和矫总和唐勇充分论证后,最终认可了这种方法。于是,利用新方法充分整合两个系统,新的系统顺利完成。
        以上部分案例只是为了具体化说明适当“浪费”一些时间寻找更有效处理方法的重要性,部分内容可能不太贴切,只是我自己的部分感受,和大家交流一下,只要能引起大家的共鸣就可以了。大家在实际开发过程中肯定也会遇到很多自己在遇到此类问题时的困惑、教训和收获,作为开发人员,我们应该是能够感同身受的吧。
        “让自己编码舒服,为公司节约整体维护成本,并尽可能为公司创造更多收益,同时让客户感到满意”,这算是我这篇文章想要表达内容的一个总结吧。写的不好,还望大伙见谅,公司各位同仁肯定有自己更好、更贴切、更深入的见解和经验,期待大家的分享。
返回列表