开发小结(转)

每次开发完一个功能后,总发现有很多可以改进的地方,但下次开发还是会犯同样的错误,这次决定记录一下可以改进的地方,以便下次不要在犯同样的错误。

1:排期估算错误,评估开发时间过于乐观。以为只是改改UI,加十几个动画,结果整个UI都被重写了,重写意味着要熟悉原来的需求,要读通原有代码的逻辑,虽然我对整体需求比较了解,但UI那块的代码之前尝试去读过,就是觉得晕(动画都是直接上原装定时器,没有任何包装,而且到处都是)。重写完后,除了保留了原有的框架外,其他的代码都被删除重写了。虽然按时完成了开发任务,但测试阶段BUG是一堆一堆的,当同事问我BUG为什么这么多的时候,我竟无言以对。现在看来重写的决定是对的,不然一堆不知道啥原因的BUG会让我疯掉。重写后,我知道了所有的需求及实现细节,代码也是我自己的了,出了问题,也好排查解决。

2理清思路才能解决问题。有两个偶现的BUG,就是怎么都解决不了,各种修改都不行,这个功能以前就是我自己实现的,现在只是改UI,加动画,最后实在没办法,只好重新理了一下思路,发现mouse_hover、mouse_leave、delete、add和动画搅在一起,代码也很混乱,在改下去,问题不一定能解决,而且感觉要失控的样子,在理清思路后,把这个功能又给重写了,结果两个BUG顺利的解决了。

3没想清楚的地方都变成了BUG。没错,哥的BUG就是多(请容许我先去哭一个小时)。在开发的时候,经常是想了一个大概,感觉可行,就开始写代码,写完后,编译运行,得到了想要的结果,感觉没什么问题,就开始开发下一个功能(开发任务重啊,必须得速度),然后这个功能就这样提测了,然后测试就给你提了几个BUG,然后你的BUG数量很提神。虽然我们很难把任何事情都考虑得很清楚,但是你明知道可能有疑问的地方就一定要想清楚,不要存侥幸心理,因为不翔的预感告诉我们,虽然这一会儿拉不出翔,但一定是会拉出来滴,到时候你就等着吃吧。

4四面楚歌的时候,谁离我最近我就干掉谁,谁最容易干掉就最先干掉谁。BUG还有20多个,我正焦头烂额的改BUG,测试发来消息说这个是不是BUG,要我解释一下;我正跟测试解释的时候,产品经理经理过来说要改一个“小需求”;设计过来说要改UI细节;客服发来消息,这个遗留BUG什么时候解,已经有很多用户反馈了这个问题。我的血压感觉一下子就上去了,你们别拦着我,我要去吃药,医生说:药、不、能、停。虽然有点夸张,但有时候真的是被搞得焦头烂额。兵来将挡水来土掩,问题还是得解决,谁叫咋是程序员呢。只好给这些任务分一个优先级,容易解决的就马上解决了,紧急的问题先解决,留着只会让问题看起来越来越多,加大自己的压力,问题多也容易遗漏,不能马上解决的,一定要做好记录,因为这些翔都是属于你的,你要把他吃干净。

5求助是解决问题最快的方法。求助总让人觉得有点那啥,一般都是不到万不得已,不会向别人求助的,但有时自己钻进牛角尖,在向别人求助时,描述问题的时候,其实也是一个理清思路的过程,说不定说着说着,就灵光乍现,找到问题的解决方案了。还有就是有些方面的确是别人更熟悉一些,需要掌握一些知识点,你不知道就解决不了,知道就分分钟解决问题,这个时候就应该虚心向别人请教,不要不好意思向别人求助,但不要养成习惯。

6储备好知识在出发。百度卫士5.0这个版本界面很炫,加了很多动画,我自己就要实现十几个动画,问题是我之前没有玩过动画啊,我根本就不知道实现一个动画要多长时间,对自己能不能实现也没底,排期都是有经验的同事给我排的。在开发之前,我先看了一个类似动画的例子,感觉还行,但是我这十几个动画,各式各样,很多都没例子可抄。于是花了大约1天的时间,来看皮肤引擎动画相关的源码,源码之内了无秘密,看了源码之后,发现写动画还是很简单的,其实就是通过定时器隔一段时间设置一下控件的属性。1秒钟24帧人眼看到的就是动画的效果了。当我明白动画的实现原理后,在写起动画来就得心应手了。

7给你的代码加上日志。有时候忘了给代码加日志,出了问题不知道怎么排查,就很后悔自己当时没有加日志,有些问题看日志就很好解决,没日志就没有头绪,感觉没有问题啊,但问题就是活生生的摆在你眼前,让你因为没有加日志而后悔莫及。

8不要总是去猜,要去论证。这条主要是针对我自己,因为我已经猜出了习惯,猜出了风格。总是靠猜去解决问题也不是办法。虽然很多时候都被我猜对了,但猜错了的问题怎么解?有些偶现的BUG,你以为是XX原因,然后做了修改,以为解决,其实并没有解决。遇到问题还是得去定位去分析解决。

9写结构清晰易懂的代码。这点虽然难做到,但必须追求。你是否曾经有这样的感受:昨天写的代码,今天来看就完全不认识了,还以为不是自己写的代码,不然自己写的东西自己怎么会看不懂?这种现象可能是写的时候灵光乍现,写出了神级代码,一般人看不懂,今天作为一般人还真就看不懂了,所以在写出神级代码的时候,一定要加注释说明神级代码是怎么来的。还有一种情况就是代码被写成狗屎了,真是看不懂,大多数情况可能就是这样,自己的翔从来都是自己吃的,为了让自己少吃点翔,将代码写好一点。清晰的思路和结构清晰的代码都让人舒服,会有被电到的感觉,混乱的思路和结构混乱的代码总让人觉得不适,有种恶心的感觉。

10速度还是效率。《唐伯虎点秋香》里有一段对白,大概是这样:给我追华府的官船|公子,你真有眼光,我可是出了名的快|大哥你的船在下沉啊|沉也沉得快吗。开发排期总是很紧,于是我们的开发速度都很快,然后就产生了很多BUG,然后又花和开发差不多一样的时间来修BUG,如果我们在开发的时候能够把代码写好点,多用点时间一次就把事情做好,效果会不会好一点。我不知道,但是对自己能力的提高肯定大于前者,一次将事情做好,本就是一种很强的能力,而且我觉得这种能力是可以训练的,当你以这种方式去开发的时候,就是一直在训练这种能力。在高考的时候,我旁边就坐着全年级第一的家伙,在考数学的时候,从第一题做到最后一题,都没有将试卷翻过来,除了最后一题没做完,其他的都全对。在要交卷的时候,终于将试卷翻过来了,哥一眼看到最后两个选择题的答案和哥的不一样,哥硬是没有改自己的答案,最后活生生的将自己考成了一个专科生,至今还为自己当时的决定感动不已。

http://www.cnblogs.com/hlxs/p/4531439.html

时间: 2024-11-01 23:45:26

开发小结(转)的相关文章

iOS线程开发小结

/* 方法名决定是否开启新线程(async,sync),队列类型(全局队列,串行队列)决定开启多少条线程 1.快速线程调用 *开启后台线程执行任务 [self performSelectorInBackground:@selector(test) withObject:nil]; *回到主线程执行任务 [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES]; 2.GCD

PHP服务器文件管理器开发小结(总结):总结、索引和源代码

PHP服务器文件管理器的开发经过前一阶段的介绍基本完成了功能搭建,包括目录的检索.增加.删除.重命名,文件的增加.浏览.修改.重命名.移动,以及文件的上传和下载等功能.本文对前一阶段工作的相关博文进行索引,并提供源代码供有兴趣的同学一同讨论. PHP服务器文件管理器开发小结(一):功能规划 本节讨论了文件管理器的目标功能和运行环境. PHP服务器文件管理器开发小结(二):版面设计和css 本节讨论了页面布局所需的css内容,并介绍了引入jQuery和jQueryUI的方法. PHP服务器文件管理

XXX系统开发小结(SSH+Jquery EasyUI)

一.项目总体介绍 前一段时间的工作中,笔者大概用了两三个月开发了一个Web管理信息系统,使用的框架集为Struts2.3.1+Spring3.0+Hibernate3+Jquery EasyUI1.3.5,系统业务逻辑并不复杂,完成数据的采集(以问卷的形式).计算处理和形成报告发布.EasyUI是一个很优秀的JS UI框架,使用简单方便,效果也还可以,是UI效果和带宽速度之间的一个折中之选.系统中还有新闻发布模块,用到了富文本编辑器,在比较了很多插件之后,选择了kindeditor,原因很简单,

arcserver开发小结(三)

一.关于网络数据集的制作 由于要做实现网络分析的功能,而手中却没有网络数据集,关于网络数据集的制作,网上也有不少的资料.我参考的是ESRI为我们提供的帮助文档(Network_Analyst_Tutorial.pdf,该文档位于C:\Program Files\ArcGIS\Documentation,当然这个路径会随着ArcGIS安装路径的不同而有所不同),参照里面的做了下,我觉得最重要的是当你一步步NEXT后生成了.ND文件(网络数据集network dataset)之后,这里还没完,务必要

arcserver开发小结(一)

一.关于属性查询 由于要做属性查询,又重新玩起了arcmap中的select by attribute,有很多自己当初玩弄arcmap多年还不是很清楚的东西 1,字段名 (1)file geodatabase, shapefile, dBase table, coverage, INFO table-- "AREA" (2)personal geodatabase--[AREA] (3)ArcSDE geodatabase--AREA (4)Excel file (.xls file)

arcserver开发小结(二)

一.关于服务器上下文 1,服务器上下文(ServerContext)本质上是一个GIS服务器上的进程,它是服务器端编程的起点. 2,只有本地资源才能得到服务器上下文,通常得到服务器上下文的主线是: MapResourceLocal——>ServerContextInfo——>ServerContext 3,在gis服务器上创建对象,只能通过ServerContext的CreateObject方法,而不能用new关键字,new关键字创建的是在本机上创建,而非gis服务器上. 4,CreateOb

OneDrive模块开发小结(二)--- 性能及其他问题解决方案

继上篇OneDrive模块开发小结(一)--- 获取登陆时email http://blog.csdn.net/vic_fang/article/details/23282311 之后,再做一个阶段性小结 1. 关于同步方法和异步方法 onedrive的demon项目中提供了两种方式的api,以获取文件详细信息为例:get(String id), getAsync(String id, LiveOperationListener listener).get(String id)方式是纯异步的, 

redis开发小结

随着缓存在web服务中用的越来越广泛,redis可以说成为了目前最流行的NoSQL数据库!redis与memcached最大的不同在于redis支持更多的数据类型,包括string.hash.list.set.sorted list等,所以redis的发展非常迅速,很多公司已将memcached替换为redis.我也做了一些redis的开发,现做一些小结. 1. redis常用配置 daemonize no     //Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用

开发小结-流程管理类-下篇

改Bug和优化要不要同时进行 个人觉的,改Bug和优化,当优点的点和改Bug的点紧密相关联时时,改Bug和优化可以一同进行.而对于那些不怎么紧密的代码,优化可有可无时,那坚决不要优化.比方说,最开始进行释放内存,使用delete p; p = NULL;后来发现项目中已经有封装好宏,只需要一句话就可搞定.不过在使用该宏时,需要引入头文件.那么,这种情况下,就可以不进行优化,原来怎么写,现在就这么写.保持在同一个模块(.cpp)中,相关操作的一致性即可. 从冗余的实现到既可以满足业务功能,又保证每

敏捷开发小结(原创)

本小结来自于我在公司的敏捷开发实践中总结而来,记录下来,如果有疏漏或者不正确的地方,欢迎批评指正. 所谓的敏捷开发是相当于瀑布式开发而言的,传统的瀑布式开发严格遵循预先计划的需求.分析.设计.编码.测试的步骤进行的,每个阶段都有每个阶段对应的文档:其主要问题是严格的分级导致的自由度降低,导致后期需求的变化难以调整或者代价高昂: 敏捷开发以用户的需求为核心,采用迭代增量.循序渐进的方式进行开发:项目在构建初期就被分为多个子项目,每个子项目可以独立运行和交互,在此过程中软件一直处于可运行状态:每个子