[推荐]从程序员到项目组
<p>在互联网的时代,软件项目的成功更大程度上取决于项目小组中那个体的成熟度和能力,而非个别程序员的个人魅力。所以,如何从程序员准确定位到项目组就是一个非常重要的转折点。 </p><p>从微软的Windows桌面操作系统改变了用户对计算机的使用方式以后,软件业便进入了快速发展的黄金时期,毫无疑问,软件成为了推动计算机网络应用的最重要的源动力,在.com公司纷纷凋零的时候,作为计算机网络的基础-软件行业却逆流而上,得到越来越多的重视,各个发达国家都把软件做为重点产业提到战略的高度,而程序员作为软件行业的最基本的细胞更成为了当今最热门的职业之一。 你耐的住寂寞吗?长夜孤灯相伴,绞尽脑汁苦思冥想。<br/>你受的了压力吗?查不完杀不净的BUG,永无止境的成熟和完美追求。<br/>你承担的起挫折吗?也许费尽心血的开发一朝便成垃圾,走了多年之后才发现必须回到起点重新开始。 <br/>程序员,象一个个斗士,在数字和字符中挣扎,在激流中交换着不同的姿势去顺应变化,在曲折迂回的道路中寻找出路。 </p><p>我国虽然在网络门户、电子商务的模仿借鉴和推动丝毫不亚于西方先进国家,但是在软件项目管理及专业人才培养方面却大大滞后,仅仅依靠简单的密集劳动或一两个数字英雄是不可能从真正意义上解决企业经营上的问题,除了市场成熟度不够、赢利模式不明确以外,昂贵的经营成本、盲目的无效投资也加速了泡沫的破灭。如何组织好有效的开发小组,并且合理地开展工作已经引起了越来越多的经营者的思考,本文将就软件项目小组的管理问题及程序员的出路进行简要的分析,希望能与有志之士共同探讨。</p><p>很多人把软件开发人员想当然地认为就是程序员。的确,程序员,这个原本默默无闻地在后台辛勤耕耘的角色随着网络的发展空前重要起来,微软的比尔.盖茨成了无数程序员的梦想,但程序员并不完全代表了软件开发的全部,甚至可以说写代码仅仅是软件开发中相对比较简单的一小部分,要开发出成熟有效的产品,就必须要有一个有力的团队共同协作,在一个成熟严密的项目体制中,需要很多角色担任不同的分工和责任,这将很大程度决定了项目开发和管理的成熟度和成功的可能性。</p><p>软件项目小组的角色分工</p><p>软件项目小组大多是为实现一个特定的目标而成立的团队,规模大小根据目标而定,从2个人到十几人甚至几十人、几百人不等,但通常都在20人以下,这样的小组集合了不同方面的专业人员,几乎每个做过开发的人员都会遇到以下的问题:</p><p><br/>项目无法按期完成,完成以后还要不断修补完善,象一场噩梦遥遥无期; <br/>项目进行当中人员流失,产品夭折; <br/>客户需求不断改变,永远对开发完成的产品不满意; <br/>开发成员之间矛盾不断,互相抱怨,工程进展缓慢; <br/>小组成员分工不均,工作分配失去平衡等等; <br/>为了避免噩梦的再次发生,也许下面的一些建议对您会有所启发和帮助:</p><p>在项目小组成立的时候,那么一定会有个项目负责人,我们称之为组长或项目经理好了,一个项目的成功与否,项目经理是最关键的因素,古人云:一将无能,累死千军,说的是一针见血。</p><p>项目经理根据需求制定出开发的目标,并选择最合适的人员组成项目小组,一个比较完整的项目小组可能由以下表1列举的角色组成,当然,有些角色是在项目小组成员比较少的情况下完全可能由一个人兼任,但不意味着这些角色可以轻易地忽略:<br/><table cellspacing="0" bordercolordark="#ffffff" cellpadding="1" align="center" bordercolorlight="#999999" border="1"><tbody><tr><td width="147" bgcolor="#cccccc" height="30"><p align="center"><strong>角色性质</strong><br/><br/></p></td><td width="231" bgcolor="#cccccc" height="30"><p align="center"><strong>角色分工</strong><br/><br/></p></td></tr><tr><td width="147" height="2"><p align="center"><font color="#000066">项目管理</font>人员<br/><br/></p></td><td width="231" height="2"><ul><li><font color="#000066">项目经理</font><br/> </li><li>产品经理 </li><li>技术经理 </li></ul></td></tr><tr><td width="147" bgcolor="#f6f6f6" height="2"><p align="center">系统分析人员<br/><br/></p></td><td width="231" bgcolor="#f6f6f6" height="2"><ul><li>框架设计 </li><li>系统分析员 </li><li><font color="#000066">软件</font>设计师 </li></ul></td></tr><tr><td width="147"><p align="center">商务分析人员<br/><br/></p></td><td width="231"><ul><li>业务流程分析员 </li><li>业务功能设计员 </li></ul></td></tr><tr><td width="147" bgcolor="#f6f6f6"><p align="center">交互设计人员<br/><br/></p></td><td width="231" bgcolor="#f6f6f6"><ul><li>界面工程师 </li><li>交互流程分析员 </li></ul></td></tr><tr><td width="147"><p align="center">数据库工程师<br/><br/></p></td><td width="231"><ul><li>数据库设计员 </li></ul></td></tr><tr><td width="147" bgcolor="#f6f6f6"><p align="center">程序开发人员<br/><br/></p></td><td width="231" bgcolor="#f6f6f6"><ul><li><font color="#000066">软件</font>实施员 </li></ul></td></tr><tr><td width="147"><p align="center">质量控制人员<br/><br/></p></td><td width="231"><ul><li>集成测试员 </li><li>测试设计师 </li><li><font color="#000066">课程</font>设计师 </li><li>技术文档编写员 </li></ul></td></tr><tr><td width="147" bgcolor="#f6f6f6"><p align="center">技术支持人员<br/><br/></p></td><td width="231" bgcolor="#f6f6f6"><ul><li>售前工程师 </li><li>售后工程师 </li></ul></td></tr><tr><td width="147"><p align="center">系统管理人员<br/><br/></p></td><td width="231"><ul><li>系统管理员 </li></ul></td></tr><tr bgcolor="#f6f6f6"><td width="147"><div align="center">辅助设计人员</div></td><td width="231"><ul><li>专业美工 </li><li>VI设计师 </li></ul></td></tr></tbody></table></p><p align="center">(表1)</p><p align="left"><br/>软件开发无疑是人的智力工作,所以选择最适合的人员参与小组是项目经理最重要的工作,这里要注意的是选择最合适的,而不一定是最优秀的或代价最昂贵的。</p><p align="left">当小组人员落实的时候,开发前整个小组成员应该对以下的问题进行充分的讨论,并形成一致的意见:</p><p align="left">是否已经很清晰的理解了开发需求和目标,并使每个人员充满斗志准备开始完成共同的目标? <br/>是否制定了一套规范的、经过评测的、可复用的技术框架; <br/>每个人的角色分工是不是都非常清楚地落实了? <br/>是不是已经制定了开发过程中的周期划分及评估办法?而不是冒险等项目期限快到的时候才发现补牢已晚? <br/>项目管理人员是否有随时把握住开发进度的有效手段? <br/>小组人员是否都互相认识而且熟悉了? <br/>每个人是否都明白和他关联的角色是谁,相互之间的工作流程? <br/>是否忘了布置文档的如何撰写,如何管理了? <br/></p>[此贴子已经被作者于2008-1-11 16:27:14编辑过] <p>定义项目小组各种角色的工作流程</p><p>如果每个小组成员都对即将开始的开发心中有数并跃跃欲试的时候,那么这就是一个很好的开头。</p><p>现在我们通过以下一份基本的角色及分工示例表2,把开发任务进行拆分,并定义每个角色的获得、处理、输出来表示各个角色之间的关联:</p><p><br/><table cellspacing="0" bordercolordark="#ffffff" cellpadding="5" width="524" align="center" bordercolorlight="#999999" border="1" style="WIDTH: 524px; HEIGHT: 777px;"><tbody><tr><td width="80" bgcolor="#cccccc" rowspan="2"><p align="center"><strong>角色</strong><strong></strong><br/><br/></p></td><td width="89" bgcolor="#cccccc" rowspan="2"><p align="center"><strong>主要职责</strong><strong></strong><br/><br/></p></td><td bgcolor="#cccccc" colspan="3"><p align="center"><strong>工作流程</strong><strong></strong><br/><br/></p></td></tr><tr><td width="140" bgcolor="#eeeeee"><p align="center"><strong>获得</strong><strong></strong><br/><br/></p></td><td width="154" bgcolor="#eeeeee"><p align="center"><strong>处理</strong><strong></strong><br/><br/></p></td><td width="125" bgcolor="#eeeeee"><p align="center"><strong>输出</strong><strong></strong><br/><br/></p></td></tr><tr><td width="80" height="22"><p align="center">系统分析员<br/><br/></p></td><td valign="top" width="89" height="22"><font color="#000066">软件</font>设计<br/>系统建模<br/>流程分析<br/><br/></td><td valign="top" width="140" height="22">获得需求(来源:商务工程师、<font color="#000066">项目经理</font>)<br/>获得(提取)系统相关的角色<br/>获得(提取)系统相关的用例</td><td width="154" height="22">数据映射分析<br/>系统分析<br/>流程分析<br/>类分析<br/>部署情况分析<br/><br/></td><td width="125" height="22">输出系统模型工件文档(UML)<br/><br/></td></tr><tr bgcolor="#f6f6f6"><td width="80" height="2"><p align="center">界面设计师<br/><br/></p></td><td valign="top" width="89" height="2">用户界面设计<br/><br/></td><td valign="top" width="140" height="2">得到项目流程描述工件文档(来源:商务工程师、<font color="#000066">项目经理</font>、系统分析员)<br/><br/></td><td width="154" height="2">理解项目界面控件类型及限制<br/>理解项目受益人使用习惯<br/>理解项目流程<br/>设计通用界面规范<br/>设计特定流程界面规范<br/><br/></td><td width="125" height="2">输出界面描述工件文档<br/><br/></td></tr><tr><td width="80"><p align="center">数据库设计师<br/><br/></p></td><td valign="top" width="89">数据库设计<br/><br/></td><td valign="top" width="140">得到项目数据对象工件文档(来源:商务工程师、<font color="#000066">项目经理</font>、系统分析员)<br/><br/></td><td width="154">理解数据库设计要求<br/>理解选定数据库功能及限制<br/>设计通用数据库采用标准<br/>设计特定数据对象的结构<br/><br/></td><td width="125">输出数据库定义工件文档<br/><br/></td></tr><tr bgcolor="#f6f6f6"><td width="80" height="134"><p align="center">程序员<br/><br/></p></td><td valign="top" width="89" height="134">代码实现<br/><br/></td><td valign="top" width="140" height="134">获取界面描述工件文档HTML等)(来源:界面设计师)<br/>获取数据库定义工件文档(UML)(来源:数据库设计师)<br/>获取对象定义工件文档(UML)(来源:系统分析员)<br/>获取项目开发进程计划(来源:<font color="#000066">项目经理</font>)<br/><br/></td><td width="154" height="134">理解工件意图<br/>解读原型prototype(UML)<br/>理解开发规范<br/>编码<br/>版本控制<br/>建立版本控制环境(CVS)<br/>获得项目初始工程文件(Java RAD工程,如Jbuilder)<br/>获得最新工程源码(CVS update)<br/>编码<br/>保存工作结果(CVS commit)<br/>模块调试<br/>理解测试要点<br/>?? 测试 <br/>?? 工作检查 <br/><br/></td><td width="125" height="134">输出程序源代码<br/><br/></td></tr><tr><td width="80"><p align="center">美工<br/><br/></p></td><td valign="top" width="89">辅助VI企划设计<br/>产品界面美工设计<br/>美工设计<br/><br/></td><td valign="top" width="140">获取整体风格需求。(来源:<font color="#000066">项目经理</font>)<br/>获取特定流程风格需求。(来源:界面工程师)<br/><br/></td><td valign="top" width="154">美工设计<br/>按要求做后期处理<br/><br/></td><td width="125">输出界面模板<br/><br/></td></tr><tr bgcolor="#f6f6f6"><td width="80"><p align="center">文档员<br/><br/></p></td><td valign="top" width="89">技术白皮书<br/>使用手册<br/><font color="#000066">培训</font>教材<br/>演示文档<br/><br/></td><td valign="top" width="140">获得产品计划及功能描述。(来源:<font color="#000066">项目经理</font>、界面工程师)<br/>获得系统分析文档(来源:技术经理、系统分析员)<br/><br/></td><td valign="top" width="154">检测系统可操作性<br/>编写技术白皮书<br/>编写使用手册<br/>编写<font color="#000066">培训</font>教材<br/>编写演示文档<br/><br/></td><td width="125">输出各种文档<br/><br/></td></tr></tbody></table></p><p align="center">(表2)</p><p align="left"><br/>在小组中,每个人的工作都是与其他相关联的,因此,小组成员除了保证自己担负的任务的质量的同时,还需要关注其他关联角色的任务,假使界面工程师迟迟无法定义产品流程,美工人员也许只能望纸生叹,而美工人员不能将产品界面文件及早完成而任由程序员随意定义界面的话,后期重新美化的工作量可能大到重写一遍代码的地步。</p><p align="left">因此,项目经理需要时时掌握小组每个成员的工作进度,并进行监督和协调。有经验的管理人员都知道,项目的计划和进度在实施中必不可少地会进行调整,这种调整可能来自于:</p><p align="left">客户的需求进行了补充或修改; <br/>工作量估算不准,造成进度不平衡; <br/>某个技术环节出现障碍,需要另外需求人员或帮助; <br/>有人不遵从开发规范,导致产品缺陷; <br/>在面对意料中的意外时,项目管理人员需要有应急解决的办法,从而保障开发持续稳定地向目标前进。</p><p align="left">避免走向开发陷阱</p><p align="left">一个成功的软件项目小组,需要时刻提防无时不在的陷阱,走出泥潭。</p><p align="left">技术陷阱:技术是无止境的,开发人员往往热衷于追求新的技术而放弃了最擅长或最适用的技术,把项目当做练习新技术的试验田,造成产品的不成熟。<br/>解决办法:想清楚是为技术而技术,还是为产品而技术?这不是个难以回答的问题。</p><p align="left">需求陷阱:软件的功能的确越来越强大,虽然在开发前期制定了开发计划,但是开发过程中经常激发更多想象,从而试图不断增加新的功能,这种追求完美的心理可能导致的后果就是产品始终出不来,永远处于开发期。<br/>解决办法:锁定需求,限制功能,需要的话,利用版本升级的原理,把功能分阶段实现,既保障产品的及时完成,又使小组产生成就感。</p><p align="left">从程序员到项目小组</p><p align="left">程序员除了坚持努力成为高级程序员以外,可以根据自身的性格、爱好和特长,并学习相关的技能,实现个人的提升,根据笔者个人的经验,对以上可能转换的角色做一些简要阐述:</p><p align="left">===如何成为项目经理?</p><p align="left">资深的开发经验并不一定能成为好的项目经理,项目经理对人员的管理、进度的掌握、质量的控制、成本的核算等等所做的工作已经远远超过代码本身,作为项目领导人,应随时能掌握先进的技术和方法并在适当的时机采用,管理整个项目小组往既定的目标前进。项目经理的角色不等于技术经理,也许项目经理实战开发能力并不是最优秀的,但却是小组的灵魂,所谓千军易得,一将难求。选择正确的人员、组织人员有效的工作是项目经理无法取代的价值。</p><p align="left">===如何成为系统分析员?</p><p align="left">从获得需求分析开始建立合理健壮的系统模型将决定项目开发的成败与否,也可以说系统分析员做的是项目最基础的工作。系统分析员需要掌握科学的分析方法和工具,具有优秀的大局观和前瞻能力,对系统的稳定性、安全性、适应性和扩展升级的能力进行控制。</p><p align="left">===如何成为系统管理员?</p><p align="left">从五月的红黑大战和种种报道来看,已经越来越多的人意识到了系统管理及网络安全的重要性,一个成熟的产品或项目只要是于网络相连就无法逃避安全的问题。系统管理员需要考虑服务器端的各种技术问题解决,管理不同的操作系统、数据库及服务,进行网络环境的架设和安全保障,系统管理员象卫士一样保障整个项目的顺利进行。</p><p align="left">===如何成为质量控制工程师?</p><p align="left">质量控制工程师负责指定项目的测试计划与管理、编写测试方案、测试用例、执行测试计划;还需要负责与开发部门进行沟通与协调,确保软件测试的顺利进行;并对所测试的软件进行质量评估,并完成测试报告。随着项目的进行,质量控制工程师同时输出程序文档、课程文档和使用手册,因此需要更强的文字表达能力,同时为用户提供友好清晰的文档记录,使开发的质量得到有效的提高和保障。</p><p align="left">===如何成为数据库工程师?</p><p align="left">数据库技术的不断提高和越来越多大型数据库的应用,使数据库工程师的角色日显重要,掌握数据库结构和建立数据库的方法,进行合理的安全性设置,数据备份和恢复,数据传输和数据复制,对很多程序员来说是个新的挑战,如果说今后是网络的社会,也可以大胆地说网络就是数据库,数据库工程师的重要性毋庸置疑。动态数据仓库、智能数据库等先进技术的深入研究和应用,在数据库领域的工作将越发重要。</p><p align="left">===如何成为商务工程师和技术支持工程师?</p><p align="left">也许你已经厌倦了开发部门相对封闭的环境和紧张的工作,又不愿意放弃辛苦积累的经验,那么走出开发部,和市场部门一起从事售前售后的技术工作也许能让程序员重新焕发激情,利用自身的经验和技术实现客户的需求是件很美妙的感受。学会倾听和分析,准确把握重点和需求能使开发的工作事半功倍,有效提高用户的满意度,又何尝不是件快事?!</p><p align="left">在互联网的时候,程序员是令人尊敬的,但是只有软件小组才能最大地发挥出潜力,只要认清方向,踏踏实实地坚持不懈,一定会大放光彩。</p><p align="center"></p>
[此贴子已经被作者于2008-1-11 16:23:56编辑过] <p>今后得竞争不只是人与人得竞争,而是生态圈与生态圈得竞争,团队得竞争了</p>
页:
[1]