工作四年总结

毕业也有4年了,做了也有几个不大不小的项目,不停的coding,不停的思考,每做完一个项目,总 感觉没有做好,想重头再来,其实这就是一种进步,想法有变化了,总结每个项目在设计上有哪些欠缺,下次应该注意哪些陷井。在这里想总结下一些自己的经验, 并提出一些疑问,希望大家能一起探讨。

    每个新项目开始阶段,显然是每个程序员最兴奋,最有抱负的阶段,总想做出个很NB,很有成就感的项目。这时候做为项目技术负责人,架构师也好,技术经理也 好,也要考验自己综合能力的时候。在技术选型上,在团队合作开发方式上,在团队结构组成上,都要在这个时候列出计划,有产出文档。特别是以java语言开 发的项目,在这个java开源框架、工具满天飞的时代,我们的项目应该以怎么的技术框架组合呢。关持久层这一点,估计大家就会有不同的意 见,hibernate,ibatis,jdo,jpa,dbutils,还是直接jdbc,在这里我们不说他们哪个好,这个无意义,但现在你必需做出选 择。我的标准是团队中对哪个框架最能有控制力,我们就用哪个,然后再考虑工作效率,学习成本。随便问一个人,他都说自己会hibernate,“太简单 了”。于是很多项目就用了hibernate,随着项目的推进,久而久之,会发现原来自己只是用了hibernate的一些最简单的功能,而高级功能又掌 握不了,自己的映射对象又没有设计好,结果整个项目中到处是hql,sql,甚至来点jdbc,再监控下后台日志,发现本来可以很简单的一句sql可以满 足的,hibernate竟生成了N条sql去执行。这个时候你就没辙了,你想查问题在哪,但是对hibernate这个强大的墨盒子,你没法去查,或者 你没有这个能力去查。性能太差了,数据库压力太大了。于是加上二级缓存,memcached吧,性能果然又上去了,可以应付一些访问量不是很大的应用。这 个时候,会有人跳出来说用ibatis吧,我们可以完全控制sql………..,然后又有人说用ejb吧,对分布式事务支持更好……….
好了,这里 不讨论哪个工具好,有时候做一件事不难,非要选择一种做法更难。所以,我的原则是,团队中对某个工具最有把控力,就用它。如果一哥们说,我把XX框架的每 句源码都分析过,知道怎么样改进它,知道怎么样整合改进,那就用它吧,利用好资源,别到时候出了问题一个个大眼瞪小眼,干着急。
想好了用什么语言 开发,什么框架,工具。我们还要选择分工的方式。这里不考虑整个项目周期的分工(如需求,产品规范,测试),单只讨论开发实施阶段。目前我用过典型两种 是:“按层水平开发”,“按模块垂直开发”。没有哪个更好,具体情况而论。如果项目团队人数不多,能力也差不多。我喜欢“按模块垂直开发”模式,大家每个 分配相应的模块开发。交叉业务地方可以再分析讨论。如果项目人数较多,能力参差不齐,周期较长,像产品型的开发,我更主张“按层水平开发”。按能力的不同 分为“系统分析师”,“高级开发”,“初级开发”,分工不同。有些人专注系统分析,接口设计,架构设计,有些人专注模块实现,有些人只是做些外围开发,如 整合展示层的实现。这种开发模式可以充分利用每个人的专长和经验。当然,这两种模式可以综合使用,先分模块,再分层,在超大型项目中经常使用。

     当前期我们大概完成了一些逻辑架构和部署架构的设计后,进入开发实施阶段,这个阶段是项目成功的关键因素。合理的开发计划要先出来,所谓“兵马未动,粮草 先行”。我们不能口头的随便安排下每个成员大概做些什么,而是有一分合理的任务计划书,里面要详细到哪个人,在哪些时间内,完成哪些具体的开发任务。任务 要细到哪个接口的开发,哪些页面展示的开发,时间要细到多少小时。只要有了这些计划,做为开发组长,心里才会有数,不至于上头一问到项目开发进度,说不出 个所以然来。而开发人员有了这分计划,才不会整天去无所事事,感觉事没做完,要做的时候又不知道做什么。我所见过或者呆过的项目,员工天天“被加班”,但 是效率很差,进展缓慢。典型的“一将无能,累死三军”。在开发中,一般时间都很紧,所以开发人员写代码只求完成功能,不考虑代码的扩展性,可读性,不写注 释,不消除大量重复性代码。这些不好的东西久而久之,我们做东西慢慢的就变成了一颗定时炸弹,不能碰它。这样的东西越到以后,维护成品越高。特别是公司的 核心产品,如果也成这样的一种看不懂,碰不得,但又要维护的代码,那代价太高了。所以周期性的进行代码review,找出明显的bad smell,统一规范,对复杂的逻辑补全注释,花这些时间是值得的。

     在整个项目开发过程中,技术负责人一定要用好各种协助开发和管理的工具。人和动物的区别也是因为人会利用工具。下面说下我在开发中用到了一些工具。

    我选择工具的原则是喜欢开源免费,简单易用的。前期做UML设计草图时,我喜欢用Jude(astsh),当然你可以选择rose,visio等。数据库 建模用powerdesigner,当然这是收费的,但我没找到好的免费的。开发计划图用的microsoft的project。版本管理用svn较多, 大家也可以尝试最近用得挺多的git,编译构建用的Ant(maven没在项目中用过),其实用ant + Ivy + nexus也可以很漂亮的完成各种工作,我之前写过一篇文章介绍配置(
查看)。 任务管理和bug追踪大家都非常熟悉JIRA,apache组织也是用的这个。最近好像听说Redmine是不错的项目管理与缺陷跟踪管理工具,用 ruby开发的,可以集成svn。Bug追踪我觉得TD也不错。上面我说的这些工具都没有给出链接,大家用关键字google下就可以了。
  
   一个好的程序员不停地提高自己的专业素质,写出高质量的代码,那么就可以成功。一个好的团队管理者如果让团队中的每个成员都成功了,那么他才算成功。合作,高效,简单,稳定。这是我奋斗的目标。

posted @ 2011-08-09 14:02  海鸟  阅读(558)  评论(0编辑  收藏  举报