同事给我发的邮件,关于一个程序员如何面对修改Bug和需求变更的感想

来源:互联网 发布:域名更新升级紧急通知 编辑:程序博客网 时间:2024/04/30 13:26
注意:本文转载过程中,为了避免大家对项目进行猜想,使用了XX项目代替了具体项目名称,用A模块、B模块代替了实际的模块名称,其余没有任何修订,特此向作者以及读者说明。

这个产品已经卖了4年了。可最初的开发者,连项目经理都跑了。他来了,任务就是维护这套软件,而且就他这一个人维护这套代码,有BUGBUG,有需求就改需求。

虽说这套软件卖了4年,但真不知道是怎么坚持了4年。他接手的时候仍然是BUG百出。代码没有文档,没有注释,连表结构说明都没有。代码莫名其妙,经常横插一句代码,显然是客户报告了某个错误,为了临时解决这个错误而做的针对性处理,但到底是为了修补什么错误,代码也没有说明。所以他也不敢乱动,但还要修改需求,只能硬着头皮来。他也不知道自己修改的代码是否还会引起其他的问题,只能凭空企求千万不要出问题。老板还在到处吹产品很成熟,而他每天都在心惊胆战,害怕这套代码不知道哪天突然崩溃,出了错误自己都收拾不了,那只能自己被K掉。他能想像的出老板发怒的情景:这么稳定的产品你都搞不定。 

这段内容是我这个周末在看《走出软件作坊》中看到的,由于身在XX项目,总感觉有很多问题,但由于自身也就这点写代码的本事,总不知是为个啥,所以就找了很多牛人写东东来看看(牛人怎么来的,就是经常和牛呆在一起,就成牛人,也希望自己也能和网上的这些牛人接近点),觉得这个写的不错,和我们这段时间工作很近,所以Copy出来让大家Look Look

我们XX项目最近大部分精力是放在Bug修改和演示需求变更上,但由于项目内任务和人员的变化,使得我们更像在做一个系统的维护,因为很多Bug或需求之前都不是自己亲手处理的。于是就有了N多问题。我自己也是在做这块,深有感触。像A,B模块。我现在就是有BUGBUG,有需求就改需求。

其实我们刚开始机会开发这个新XX项目是很幸运的,因为没有历史包袱,白纸画画(现在还不明白咋就画成这个样子啦,哎,我在此面壁思过3分钟)。而实际工作中更多是拿有型的代码到处修改客户化做新项目或者旧系统的维护。

历史已经存在啦,我们现在是要破罐子破摔,还是渐渐从恶性循环走向良性循环呢,其实优秀的代码不是一次性写出来的,而是不断重构出来的。

——现在我们写的代码有注释吗?

——没有。自己修改的自己都记得,即使忘了,看看自己写的代码也能回忆起来。所以也没有写。

——反正也是一个烂东西,其他人怎么办,就管不了了,就应该让这套烂代码尽快死亡,省得祸害别人。

只有大家不是这种心态,那么我们不断理解业务需求,不断整理设计思路,不断改进代码,那么XX项目也可以做的很优秀的。

以下是牛人总结出来的几个建议:

NO1、重点把控输入数据的校验,把所有校验的代码写成函数,不要大流水。

其实大家觉得JsJava数据的校验并不是重点,因为我们当前臭虫(Bug)需要消灭,但这个确实一个石块,希望这个石块不处理好,于输入的漏洞或导入的数据出错,那么以后以后引发的问题会让我们更头疼(如报表数据平不了,客户就要找大麻烦)。所以我们一定要截源头,在最后爆发的地方堵漏洞是堵不住的。

NO2、以后再加功能,尽量不要做成联动触发的。

也就是说:保存,最好是单表保存。即使是主从结构的单据,如果客户不强烈反对,也做成先保存主表后再让录入明细表。而且录入明细表要单独的窗口,这样功能和代码都简化了。如查询一张单据,也不要上边是主摘要,下面就是明细联动。这样影响性能。更因为速度可能慢,用户会连续点击多次,触发事件就会乱,莫名其妙的错误就都产生了。最好是双击主摘要,弹出独立的窗口显示明细。

NO3、写代码,把特殊处理业务和正常处理业务的功能代码分离。

就好像你走路,老有人给你下绊子,你就感觉不爽。我就看到过这样的方法

Public Object getObjectById(Long id){

      //select * from table for update

}

妈的,你不进入JavaIbatis语句,你压根就不知道为个啥。

NO4、还有很多代码觉得程很烂,是由于以前程序员的代码排版可能和你不一样。于是总是抱怨变量都是MNSButton1之类,所以我们以后希望自己不被抱怨,就命名的清晰点(其实我还记得我刚进入公司的时候,又一次我写的方法名特长,可能有一二十个字母吧,然后在代码Review时,还被笑过,但我现在都还是坚持,因为我知道,getEmployeeByEmployeeNameAndOrgId,比一个Get方法更容易理解点。我一次命名长点,多敲了几次键盘,但后面的维护人员会感谢我的)。

命名,排版重要,不,这不是我要说的重点,^_^,其实我们阅读理解这些代码时,这些并不会使你理解有歧义或读不懂,只不过是可读性差点,浪费点时间,自己不爽点而已。就因为这点不爽,所以我们总是觉得无从下手,总是能拖就拖,其实想想自己写的代码的样子呢(自己都做不好,评啥的要求别人呢),消除这些不爽,不和旧有代码生气,我们的工作还是能做的更好的。(现在我还没有不生气的心胸,每次都阿Q般,在心里K他九次,再踩他九次,完了就心平气和地改Bug

最后用前中国国家队教练米卢说过一句名言:“态度决定一切。”(想念他老人家啊,虽然在日韩,我们输的很惨,让我们小组出线的希望,让我们得一分的希望,让我们进一个球的希望都破灭啦,但至少有郝海东实现了射中一次门框的希望,至少还和牛人交过手啦,而现在却在家门口被伊拉克人骑着,也许这也是牛人啦把)

If(You believe you can do well){

AnyThing is possible

}Else{

      NoThing is impossible

}

原创粉丝点击