我近期的文章都是一些读后感,主要观点来自于温伯格大师,我只是用自己的语言来重新唠叨一下,争取做到短小精悍,争取能让同行们用最短的时间获得最佳的学习效果。
我念大学的那几年,IT行业涌现出求伯君、梁肇新、王江民、王志东等等一些非常NB的Programmers,那个年代似乎崇尚个人英雄主义,但随着时间的飞逝,软件系统的规模日益增大,再NB的程序员也不可能单独完成,程序英雄基本上不再出现,即使有过,也好象阿蒙这样充其量就是一个满腹牢骚怨天尤人的悲情角色,在阿蒙日以继夜地进行反思之时,KingSoft公司的WPS Office 2005研发团队莫明其妙地获得了“2005·ZHTV珠海经济年度人物”的大奖,阿蒙不才,冥思苦想之后还是找不到他们对珠海的经济作过哪些贡献?
废话少说,言归正传!
“一支程序开发团队之所以成立,是为了承担并完成某项由任何个人都无法独立完成的任务”。在我看来,这是对程序开发团队一个比较贴切的定义,通常在软件企业里,会有若干支开发团队,它们因某一项目或产品而存在,项目完成了,团队也随之解散,程序员在各个团队中得到不断地学习与提高,除了技术能力,还有沟通能力、交际能力、协作精神等等,所以鄙人认为,团队工作比孤军奋战更有助于个人的成长。
在现代的软件企业中,分工合作正成为企业中一种工作方式的潮流而逐渐被更多的公司所提倡。因为只有团队合作,才能将复杂的事情变得简单,将简单的事情变得容易,使做事的效率倍增,可以说,团队合作正推动企业向简单化、专业化、标准化的方向发展。在软件这个特殊的行业,更需要如此,国内的软件企业长不大,出不了好的产品,第一大原因就是管理,第二大原因可能就是没有一个出色的团队。
组建团队的目的是希望通过最小的代价获得最佳的开发效果。因此我们尽可能找到出色的程序员,并根据他们的特点与优点,进行适当的分工,团队成员间需要相互补充,才能更好地实现团队协作的功能。众所周知,人与人的合作,不是人力的简单相加,而是要复杂和微妙得多,温伯格在这一方面总结了一个大致的规律:“由3名程序员组成的团队,只能够完成1名能力相当的程序员所完成之工作量的2倍。另外,如果每个开发组分别由3名程序员组成,那么基于同样的原因,3个这样的开发组协作完成的工作量,将是单个开发组的2倍,或者说是单个程序员所能够完成的工作量的4倍。因此,假设某个工程由单个程序员需要8个月才能完成,如果我们希望在4个月内得到结果,那么我们就需要派上3名程序员;而如果我们希望在2个月内完成工作,就必须分配出9名程序员。”
想想看,是不是有一定的道理?但这不是绝对的,在项目的进程中,有太多太多不确定的因素随时出现,我们大多的项目总不能按时完成。刚开始做项目计划时我们总喜欢一厢情愿地将开发过程中的所有条件都设想为最好的,但在实际的开发过程中,总会冒出一些乱七八糟的事情,有人生病了,有个呕气了,有人离职了,有PC总有故障,有一些BUG花太多的时间……
能在一个出色的团队中工作是一件很幸运很开心的事情,你不仅学到很多的知识,而且系统的成功开发也让你很有成就感。那么如何来组建程序开发团队呢?
温伯格认为:首先规划出程序的理想结构,然后按照最优的方式,选取最合适的人选来承担对应的工作。阿蒙非常赞同这个观点,下面就让我用一个EXAMPLE来阐述一下。阿蒙曾在一家通信技术公司工作,负责过《GSM无线网络路测系统》的开发管理工作,整个系统的程序结构如下图所示:
这是一个结构简单的系统,但涉及到很多方面的技术与知识,数据从采集到解码至显示是一个看上去同时的过程,通常会采用三个线程进行分别处理,并做好多线程的同步问题。
首先对开发经理的要求很高,他必须富有开发经验,而且在多线程技术、GSM网络优化技术、串口编程、图形编程、GIS编程等方面必须有一定的经验,才能很好地控制整个团队的开发进程,做到“分得出去收得回来”,并对各个模块之间的接口进行正确的定义。
对其他程序的要求分别如下所示:
数据采集程序员:熟悉串口编程,对于GSM专业测试手机以及GPS进行很好的控制,保证数据采集的完整性与及时性;
数据解码程序员:熟悉GSM协议以及各参数的含义,此人要求要细心,思考要严密,保证数据分析与解码的正确性;
时域图程序员:熟悉图像编程,对于各种数据能以用户所喜欢的方式进行图像显示,保证显示的快速性与美观性;
地理化程序员:熟悉MAPX编程,了解电子地图,对于各种参数数据能在电子地图上形象显示轨迹;
报表程序员:呵呵,不说你也知了。
当然,除了以上所列的程序员,整个团队还包括项目经理、产品经理、测试工程师等等,各个小组或成员之间最关键的就是沟通,并且大家都喜欢自已所负责的工作,不要犯类似“将一个GIS编程高手拿去搞数据采集”的错误,呵呵,当然除了了解每个成员的技术特点,他们的性格、态度、习惯等等也是我们要考查的一些因素。
古人云:人心齐,泰山移。我们也常说:“团结就是力量”。这个时代,个人英雄越来越少,这个时代更需要优秀的团队。只有优秀的团队使一个组织或一个企业朝着更高更远的目标不断迈进。
关注阿蒙下一篇文章《程序开发团队---目标篇》