`

个人工作总结(转)

阅读更多

 
个人工作总结
 
 
2010-04-12 作者:ttion 来源:ttion的blog
 
一个人的软件工程

一个简单的网页、自助建站、个人Blog、CMS,这是本人自认的站长生涯,我人生的第一桶金也是来自个人建站,对“个人站长”这个词汇总会有点感慨,而一个人的软件工程即始于此,做的第一套系统的名称叫做“免费者内容管理系统”(最初的想法是想通过这套程序开源,建立一个中国的开源社区“免费者www.mianfeizhe.com”,后来整个域名和网站出售掉了)。

免费者内容管理系统,采用jsp+servlet框架(当时,只学了这些技术)进行开发,版本通过U盘进行控制,当时整体需求还算是比较明确的,因为是防系统,所以开发起来遇到不是业务上的问题,而恰恰遇到的是一些技术问题,前台静态化、模板标签,都是当时开发中的拦路虎,而此时回顾那些通过字符串解析、IO流输入输出静态页面,还是有些欣慰的,因为通过这些实现建立在这套系统之上的一套语言(模板标签),后来了解到的FreeMarker(模板搜索引擎)正是我所需要的。现在如果让我再去维护那套系统的话,我想我做的第一件事情就是推翻重写,以前的代码看起来真的太幼稚了,不知道再过一年来看自己的代码,我会是什么样的心态和感想呢?一个人的软件工程有痛苦并快乐着。

所谓的迭代开发

这是我做的第一个真实的项目,一个关于手机上网,无线网关的数据配置的开发,整个项目开发周期是3个月,采用迭代开发,开发人数6人,三天时间通过会议室形式了解需求,以及领取工作任务,然后便埋头投入到了项目当中,每天加班熬夜到10点钟左右,同时经常是加完班以后再回家吃饭,每天在心情极度低下,那一阵子经常容易忘事,有时候进入房间就忘记自己要做什么了。在开发过程当中,由于缺乏沟通,开发出来的东西总是会有些出入(包括开发与开发之间的,开发与需求上的),在后期测试过程当中,发现存取数据没有经过转码,页面过于复杂,导致用户体验是那么的不尽如意,后来差不多推翻了重新开发,再次进入无发估摸的开发过程当中,现在回想起来都有些后怕。我想是由于前期分析不足、没有有效的沟通、难以掌控的工作计划、个人编码能力等等,导致了整个项目的失败吧。当然,任何事物都是相对的,有坏的一面肯定也存在好的一面,通过这个项目,首先在技术得到了很大程度的提升,同时通过这个项目自己对软件工程的重要性也理解的更为深刻,也让自己对编码规范、编程思想引起了注意,态度的转变应该是最大的收获吧。

敏捷开发

近几年在软件开发行业,敏捷开发无疑是最热门的话题,而09年3月份进入的BMS敏捷项目组,也算是接触了敏捷,从项目开工会,Story评估会议,Story撰写,站立会议,持续集成,统一IDE构建,结对编程等等,对我来说都是新鲜的事物,这些新鲜事物总会让我着迷,一个又一个有趣的实践,让我感受到了开发当中的快乐,以前提交版本时的忐忑与不安,在这个项目过程当中,我完全感受不到。做完整个项目最大的感受——整体计划可控制,小粒度的Story可以让每个组员明确每天做什么。不再纠缠在无法估摸的项目进度当中,饱满的8个小时工作,整体工作效率有明显的提升。

敏捷的精髓是“充分沟通、坦诚合作”,敏捷当中的很多实践都是围绕着这展开的。

敏捷宣言:

– 个体和交互 胜过 过程和工具

– 可以工作的软件 胜过 面面俱到的文档

– 客户合作 胜过 合同谈判

– 响应变化 胜过 遵循计划

虽然右边的也有价值,但是我们认为左边的具有更大的价值

敏捷流派XP的价值观:简单、交流、反馈、勇气、尊重。

敏捷实践

Story评估会议

参会人员:开发、测试、资料(如果客户不能在现场,可由资料作为客户代表)、PM,会议采用举牌的形式决定Story的粒度,取最小的Story的力度作为单位,以举牌的形式决定一个Story的开发-测试结束周期,一般天数可写为:1、2、5、10、14、20(一般单位为半天),然后通过全体举牌的形式得出总分,再除以全体举牌人数得出一个Story的周期,当然,你有弃权的权利,所以准备牌的时候总会留一张笑脸来表示弃权。每一次参与这个会议时,总会让我感到比较的高兴,像极了拍卖会。

结对编程

结对编程此前是一项比较受质疑的一个实践,而经历过结对编程这一实践的人员,是最乐意接受这一实践的,至少我是。第一个和我结对的是个女同志,后来由于工作原因,她离开了项目组,而后我和项目经理结对开发,两个人一台电脑一个鼠标一个键盘,两个头脑,一个是驾驶员(敲键盘的人),一个是领航员(前后观察),两个人每过十分钟就可以进行角色互换。当然在项目开始前,挑选Pair时,一定是自愿的,且能够互相尊重的。有效的结对编程可以很大程度的保证代码质量,可以省去Code Review这一过程,同时这个实践也是非常容易培养新手。

本地构建&持续集成

在现在我已经很乐意去接收这个实践了,使用的CC作为服务器,此前由于机器内存不够,导致运行CC时,就不能做其他事情了,同时由于项目工程较多,在持续集成构建与执行上面花费的时间太多,所以此前总是有那么一点的反感,而当机器更换后、个人编码能力的提升、持续集成形成制度,接受持续集成也变得那么的水到渠成。持续集成就像一个炼丹炉,一直在运行的过程当中,而我们所做的就是一直往炉子里面扔代码,CC自动对那些代码进行检查,然后生成报告。持续集成是很好的试金石,通过持续集成也能提高个人的编码能力。

TDD(Test-Driven Development)

测试驱动开发,这也是自己一直在努力做好的一个实践,以前第一次写单元测试代码时总是有那么一些的不理解,当时觉得写这些代码是没用的,第一,由于项目组没有把测试代码作为交互物,第二,当时个人对单元测试代码了解不深刻,觉得是无用的工作。而在后来的重构过程当中,越来越认识到单元测试代码的重要性,有时候修改代码中的一个小点,都需要围绕该小点进行一次很充分的测试,浪费了大量的工作时间,同时现在项目组当中,将测试代码作为编码过程当中的一部分(新增代码单元测试代码行覆盖率需要达到100%,修改代码单元测试代码行覆盖率达到80%),自己对单元测试代码编写也越来越感兴趣,不过由于以前老代码过于复杂,可测性不高,在修改代码时,单元测试代码的编写总是那么的困难,在编写过程当中我们项目组使用了,反射、EasyMock等技术来编写测试代码,在维护代码时,TDD执行起来总是那么的困难,当然老代码是一个原因,个人的态度也是一个重要的原因,革命尚未成功,同志仍需努力!

TDD的意思是,在编码过程当中,先编写UT代码,他是简单的UT代码,此时可能会出现红灯,甚至编译不通过,根据UT编写代码,让UT代码一步一步通过,直到出现绿灯。在JavaEye中了解到有些项目组将单元测试代码作为交互物,替换掉一些文档,其实代码就是一个很好的文档,当然,你的代码要写的足够优美、简单。

站立会议(Stand up meeting)

第一次接触站立会议时,就感觉的比较的好奇,一块白板,所有人围成一圈,项目经理在中间,以结对组为单位,点到哪个Story时,相应负责人根据如下模板进行陈述。

“我昨天完成了...”

“今天要完成…”

“我遇到了…困难”

项目组是第一次执行敏捷,在大家反馈的时候跑题时,可爱的项目经理总会打断,会后讨论。

站立会议一般控制在15分钟之内,毕竟站着说话腰痛(这是个人理解的)。

我想站立会议,是很好体现敏捷流派XP的勇气、反馈、交流价值观的一个实践,你对问题进行反馈就需要勇气,反馈的过程当中就产生了交流,确实是一个非常有趣的实践。在执行过程当中,最好能按照上面的模板进行陈述,让每个人参与进来,今天是pair中的一个人员反馈,明天就换一个,同时项目经理对人员反馈时,不能带有个人情绪进行指责,我想这样一天的好心情都破坏了,同时在执行过程当中不要跑题、延长会议时间、开小会,毕竟其他人还站着呢。

重构

现在在项目过程当中,偶尔会停下来进行一次重构,第一次重构是整改一处查询,一是由于查询速度过慢,二是由于查询数据不太准确,而在我接手重构时,也确实头大了一下,十一个功能使用同一处代码(高耦合),其中的查询使用在代码当中拼接查询条件,有时改动其中一小段代码,都可能导致某个功能出现数据库错误,第一个想法是通过配置文件控制SQL语句,整理出一个SQL解析器出来,在这个方案执行了一天以后,由于时间原因,以及其复杂度、难维护性的原因,彻底的放弃了,第二个方案便是采用工厂方法和组合的设计模式进行解耦处理,在重构过程当中,总共分配了两名人员给我,在第一个方案失败后,施行第二个方案,由于时间问题,他们两个担任了测试的工作,从开发到测试,整体重构花费了4天的时间,查询速度由此前的2分钟降低到了2秒钟,代码彻底的解耦,设计的变得简单,当然由于使用工厂方法,日后维护工作量是增加了的。

第二次相对较大规模的重构是,项目组实施代码责任田制度,每个人领取一块代码土地,然后通过单元测试代码覆盖率,圈复杂度,问题单数量,代码结构作为度量项,进行评断责任田的执行结果,并予以相应的奖励。在重构的过程当中,我愈来愈感觉到单元测试代码的重要性,曾经歪了一首《勇气》重构版,聊以抒发对单元测试代码之情,“重构真的需要勇气,来面对流言蜚语,只要你一个单元测试,我的重构就有意义,我的真心!”。

重构应该是一个时刻进行的过程,曾经在JavaEye上面看到了一位仁兄说他们项目组的一件趣事,开发人员A在维护某个类时,五分钟后提交到配置库时,发现代码不见了,然后询问,这时候开发人员B说,我觉得这样实现不太好,我已经将那个类删除了。从这件事情当中可以看出他们重构的力度,每五分钟可以进行一次重构。我想我需要对此更加努力了。

Show Case(技术展示)

这个实践是在敏捷指导书当中看到的,然后,觉得这个实践非常适合我们项目组,老代码过于复杂,整体系统相对比较复杂,每个人都只是某个模块的专家。我想正好可以通过Show Case的形式来改善现状。由某个人提出某个模块,出发缘由可以是,由于遇到了难题,希望通过大家的力量来解决,可以是觉得自己这块代码的实现很好,希望展示一下自己的技术。同时,通过Show Case可以找出需要重构的代码,为问题找到更好的解决方案,这样大家也可以了解其他模块,不再是某个模块的专家。

我们项目组从我提出到现在,执行了三次Show Case,主要以解决问题作为出发点,但是由于讲解人员在展示时,讲的比较发散,没有注重点,结果收效不是很大,倒是成了Code Review。我想我们在进行Show Case时,第一,应该事前通知参与人员,能让参与人员有一个初步的了解。第二,展示人员应该掌握好注重点,不要浪费时间在无足轻重的事情上面,同时要把握好时间度,不要让这有趣的实践变得无味。

Show Case

会议目的:将工作成果展示给用户,获得用户的反馈,让团队所有成员了解项目的进展

会议形式:不限,可能只花15分钟,但是随时都可以进行.通过展示,也可能得到其他团队成员对被展示代码的意见.

展示内容:代码、测试代码、界面原型、重构代码、好的实践、新工具的使用、知识共享、教训、经验等都可以做为技术展示的素材.

参加人员: 开发团队、研发代表、客户

以上是我个人在工作上面的一些总结以及理解,在09年当中学习到了很多东西,在第一个项目组当中学习了技术,以及一些编程思想,同时在痛苦的加班当中,来到了第二个项目组,这也让我深刻的感受到了软件工程的重要性,如何工作,如何进行时间管理,我想这还是一个需要继续努力的方向。


 
 

分享到:
评论

相关推荐

    风电运维专业个人专业技术工作总结.pdf

    风电运维专业个人专业技术工作总结 一、安全方面: 在风电运维工作中,安全是首要考虑的因素。为了保证人身安全,我们需要严格执行电力安全工作规程,分析安全工作中的危险点,并制定相应的安全措施。同时,我们还...

    2019年软件开发程序员个人工作总结.doc

    "2019年软件开发程序员个人工作总结" 本文档是关于一名软件开发程序员的个人工作总结,涵盖了技术、管理和人生三方面的收获。作者从自己的经历出发,分享了自己的技术成长过程,从学习C基础课程到转向ASP.NET的开发...

    2019年关于通信公司商务助理转正后个人工作总结.doc

    2019年关于通信公司商务助理转正后个人工作总结.doc

    蓝绿小清新微立体个人工作总结报告与计划ppt模板.zip

    个人总结ppt模板,目录:工作回顾、自我评价、工作体会、目标展望,45度角旋转矩形与圆点创意封面,蓝绿小清新配色,简约大气微立体设计,适合个人总结报告的ppt模板。

    【工作总结】本科毕业生实习工作总结范文.doc

    "【工作总结】本科毕业生实习工作总结范文.doc" 本文主要讲述了作者在实习工作中的经验和收获,涵盖了学习、实践和角色转化三个方面。 一、继续学习,不断提升理论素养 在信息时代,学习是不断地汲取新信息,获得...

    通信综合代维及铁塔代维管理个人工作总结(完整版).doc

    通信综合代维及铁塔代维管理个人工作总结(完整版) 本文档总结了通信综合代维及铁塔代维管理的个人工作总结,涵盖了无线网络客户满意度提升、劳动竞赛指标提升、汛期通信保障、综合代维及铁塔代维管理提升、嵌入式...

    呼叫中心工作总结.doc

    呼叫中心工作总结 呼叫中心工作总结主要讲述了呼叫中心的六大优势:提供一站式服务形象、提高工作效率、开源节流、提高客户服务质量、留住客户、带来新的商机。本文还提到呼叫中心管理者对于新人的看重,认为他们是...

    脚踏实地,昂首前行——2020个人年终总结PPT模板.ppt

    年终总结是个人职业生涯中的重要组成部分,可以帮助个人总结经验、反思不足、设定目标,并提高个人核心竞争力。 2.时间管理的艺术 PPT模板中提到“时光飞逝,岁月如梭翻转着手中的沙漏,看着穿过眼帘的流沙却抓...

    计算机实习生个人总结.doc

    "计算机实习生个人总结" 计算机实习生个人总结是指在实践中学习和总结自己的经验。实习生需要了解自己的所学需要或应当如何应用在实践中。通过实践,实习生可以了解自己的缺乏之处,虚心学习一些实用知识,在实践...

    大学个人毕业实习总结范文.doc

    大学个人毕业实习总结范文 本文讨论了大学个人毕业实习的总结报告,总结了实习期间的体会和收获。实习报告分为八个方面:角色转换和人际关系的变化、努力适应全新环境、走出校门踏进社会、多听、多看、多想、多做、...

    FPGA个人学习总结1 fpga开发.pdf

    FPGA个人学习总结 FPGA(Field-Programmable Gate Array)是现场可编程门阵列,即可以根据需要在现场编程的门阵列。它是一种半导体器件,可以根据需要在现场编程和重配置,以满足不同的应用需求。 1. FPGA综合后...

    Maven学习资料个人总结

    这个模型定义了项目的方方面面,然后各式各样的脚本在这个模型上工作,而ant完全是自己定义,显然maven更胜一筹。 第二:Maven对所依赖的包有明确的定义,如使用那个包,版本是多少,一目了然。而ant则通常是简单的...

    2023年JavaSE知识点总结个人整理.docx

    finalize是Object类中的方法,其中定义了对象要被垃圾收集器回收之前要做的相关的清理工作。 8. 多态的理解 多态可以理解为事物存在的多种体现形态。父类的引用指向了自己的子类对象;父类的引用也可以接受自己子类...

    10年java软件经验总结

    讲述了10年工作经验的总结和个人对目前软件环境的分析和对转型的看法

    营销转型及业务流程再造三章.docx

    5. 标准化的营销流程是对网点营销工作时间和空间的管理。 6. 营销技能提升活动是我行提升整体营销能力、应对同业竞争的必然选择。 7. 客户识别三要素是识别客户是否具有购买力、决定权和需求,即客户是否有钱、有权...

    计算机专业毕业个人实习报告.doc

    计算机专业毕业生实习报告是对毕业生实习期的总结和反思,对 họ的职业发展和个人成长具有重要的影响。通过实习报告,毕业生可以反思自己的实习经历,总结自己的收获和经验,并将其转化为未来的发展蓝图。 实习报告...

    互联网产品经理转型心得体会

    当下互联网经济发展迅速,很多同学都想转型到互联网行业,享受新兴经济带来的红利。互联网产品经理可以接触到互联网行业不同岗位的人,如老板...本人结合自身及周边人的经历,总结了一些转型互联网产品经理的心得体会。

    计算机组装与维护学习总结与心得体会.pdf

    显卡是个人电脑最基本组成部分之一,负责将计算机系统所需要的显示信息进行转换驱动,并向显示器提供行扫描信号,控制显示器的正确显示。网卡是计算机与外界局域网的连接,是通过主机箱内插入一块网络接口板实现的。...

    个人便携式数控机床PPCNC实验报告.pdf

    五、实验总结 通过此次PPCNC个人便捷式数控机床的实验操作训练,初步了解了实验机床和对应的Mach等软件的基本操作。并在老师悉心的指导下,认识并实际操作了创建工件加工原点步骤,课本内容与实验操作对比结合后,...

    Axure旋转动效实例.zip

    Axure旋转动效实例系列源文件,个人总结非常实用,下载后可以直接打开进行编辑。实现功能丰富,最适合学习和工作中使用。

Global site tag (gtag.js) - Google Analytics