`

个人工作总结(转)

阅读更多

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


 
 

分享到:
评论

相关推荐

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

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

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

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

    Maven学习资料个人总结

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

    10年java软件经验总结

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

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

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

    Axure旋转动效实例.zip

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

    基于ChatGPT的字幕总结去水软件+源代码+文档说明

    用于视频内容总结,文案优化,快速提取视频重点,提高学习和工作效率 优势 无需配置环境,工程中包含了所有依赖,不依赖torch whisper音频转文字自动调用GPU运算,2小时音频约15分钟转换完成 离线AI ASR服务,白嫖...

    计算机课程总结.docx

    高性能计算机(巨型机或大型机),微型计算机(台式机、笔记本和个人数字助理(PDA)),工作站和服务器。 2.信息是各种事物的变化和特征的反映。数据是信息的载体,数据包括数字、文字、图形、图象、声音、视频等。由...

    java实习报告(1).docx

    实习工作总结 一转眼,这段实习的生活过去了,回首这段时间的实习,最大的收获是学到了更多的知识,增加了自己的经验,锻炼了自己,提高了自己的能力。下面,我将实习的工作总结如下: 在注重素质教育的今天,社会...

    car与simulink联合仿真大总结-car与simulink联合仿真大总结.rar

    个人感觉最重要的的几点就是:将adams_server.py,adams_plant.dll,decode.m这三个文件找到(这三个文件在我的附件中),放入当前的工作目录,这样可以大大减少出错的机会,还有就是adams和matlab的工作目录选为同一...

    计算机毕业实习总结实习学习总结.doc

    计算机毕业实习总结 实习学习总结 在Inter飞速开展的今天,互联网成为人们快速获取、和传递信息的重要渠道,它在人们 政治、经济、生活等各个方面发挥着重要的作用。因此网站建立在Inter应用上的地位显 而易见,它已...

    MySql(SQLserver)教程傻瓜式总结

    本文档是个人从读书到工作的时候,把老师说的基础和工作上用到的例子,傻瓜式的记录下来,基本每个方法知识点都会有明细的说明,很适合新手或经常记不住单词的人学习,里面有比较完整记录MySql相关知识点。

    基于PHP和MySql的学生成绩管理系统.rar

    为了使系统在学院的管理中发挥更大的作用,实现工作过程的计算机化,提高工作效率 和工作质量,现提出如下的系统开发目标: 提供了成绩查询的平台,可以用来发布成绩 任何学生都能上去查看自己的成绩 学生可以...

    Learning MySQL Step By Step

    何登成 网易——杭州研究院; 工作领域 数据库引擎/分布式数据库/分布式KV ...因此,此分享的内容改为:总结我个人在过去几年内学习MySQL,开发自己的引擎的一些经验,走过的一些路,希望对大家有所帮助;

    “一图流”现代化黑蓝通用ppt模板.zip

    雪山星空大图背景,半透明遮罩蒙版,几何圆环、矩形环裁图创意封面、目录页、转场页,简约实用设计,图片填充图表,适合工作总结、个人述职、会议演讲等场景应用的通用ppt模板,“一图流”现代化黑蓝通用ppt模板。

    基于单片机的红外测距设计-kaic.docx

    本人原创毕业设计,未抄袭他人,请人工审核,如出现版权问题,个人承担责任,感谢! 目录 1绪论 1.1 项目研究背景及意义 1.2 国内外现状 1.3主要要研究内容 2.总体方案设计及论证 2.1方案设计 2.2系统选型 2.3系统...

    计算机应用技术专业学生毕业实习总结.docx

    所以本人结合所学专业的内容制作了个人网站,作为实习的成果。其内容是多样化的。制作网页用的软件是dreamweaver,fireworks,flash软件。dreamweaver大大加速了网络时代电子交易应用中的项目交付。它提供了网页和...

    Axure中插入视频的3种方法及示例.zip

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

    C#教程 C#笔记 C#高级 C#知识点.rar

    个人工作和学习中积累和总结的C#各种相关知识点 包含C#普通知识点 高级知识点 事件的本质 反射 委托 序列化 各种数据类型转换 缓存 注册表 希望可以对别人有用

    免费开源!!【高级Java后台开发面试指南】

    个人介绍,需要准备一个1分钟的介绍,包括学习经历、工作经历、经历项目、个人优势、话语总结。一定要自己背得滚瓜烂熟,张口就来 抽象概念,当面试官问你是如何理解多线程的时候,你要知道从定义、来源、实现、问题...

Global site tag (gtag.js) - Google Analytics