软件业的发展是关系到中国高科技能否站到世界前沿的一件大事,受到国家有关领导部门及信息产业界人士的高度重视。一个产业的发展需要有三个基本条件,即资金、人才和市场。今天的专栏针对如何培养软件人才进行分析和论证。
软件人才的缺乏是世界上众多国家,包括世界第一大软件国美国,所共同面临的问题。由于中国软件业发展相对较晚,规模较小,人才缺乏就显得更加突出。在政府大力号召和支持国内软件产业发展的情况下,如何以快速度培养出一大批高质量的软件人才就成了一个很迫切的话题。
从过去一年多看来,国内的解决方法大致有两方面。一是软件人员的培训。新办的全国35所软件学院去年秋季都已开始招生,有读硕士的、博士的,也有读本科或第二学士学位的。有的班面向所谓“蓝领”人才,即软件工程师;也有的班面向“白领”或“高级”人才,即软件结构设计师或经理级的管理人才。同时,许多脱产的或业余的软件培训班亦应运而生,以满足希望转行的技术人员之需要。
解决方法的第二方面则是软件企业的培训。更具体地说,就是通过CMM的考试认证,来提高一个企业在开发软件方面的素质。一年前,通过CMM3级的企业还屈指可数。目前一些企业已达到CMM4级,而最近东软则率先达到了CMM5级的认证。
学院式的培训以及CMM的认证是否能达到快速培养高质量人才的目的呢?软件人才到底从何而来?要回答这些问题,必须先了解软件是怎么开发的,软件人员需要什么技能和知识结构,以及软件人员的成长路线。根据在美国Sun公司领导软件开发团队的经验以及多年在硅谷的耳濡目染,我认为软件开发与其说是科学技术不如说更像艺术或体育,扎实的基本功与刻苦的训练虽然重要,但最终的成功是通过大量的实战,不断地积累经验,不断地在比赛中磨练而获得的。
软件人才的知识结构
一个软件产品不是存在于真空中的。 它是针对某一类应用的需要,通过一定的开发工具,面对某些特定的运行平台而开发出来的。 因此, 除了足够的计算机背景和编程技巧之外,一个好的软件工程师还要具备如下几方面的知识:
1. 通用的软件工程知识。譬如,一个好的工程师应懂得从产品需求书、项目规划、软件系统框架设计,到具体界面设计、编程、测试等一系列步骤,知道哪一步应做什么。
2. 软件应用领域的专业知识。举例说,如果一个软件是为银行业所用的,那么懂得相关银行业务就对软件的设计和修改有决定性的作用。而如果设计的是java.net这个程序包,就一定要了解其他程序员怎样使用网络界面最方便,因为java.net是针对这一群“用户”的通用界面。
3. 具体软件工具和环境的知识。在做一个软件产品前,要选定软件的应用平台、操作系统,以及编程所用的程序设计语言和开发系统。用Java 开发一个运行在Solaris服务器上的企业级的应用软件与用C++编写Windows XP上的个人应用软件,对一个工程师的专业知识结构有很不一样的要求。譬如,如何利用Java虚拟机的特点提高程序效率,如何利用CVS的特点更有效地管理开发,如果是开源软件,如何与开源社区协调等等,问题都因项目而不同。
显然,这些知识大部分是在软件班的课堂上学不到的。只有通过大量实践,才有可能成为软件开发的专家。而也只有能力强,吸收快,积累多的人才有可能成为专家。
管理人才与高级技术人才
所谓软件“高级”人才是指资深的软件工程师。他们的工作偏重于软件开发的带头作用,设计产品框架,解决疑难问题,以及辅导中、初级的工程师。所谓软件“管理”人才是指软件产品部门的经理级人物。他们的主要任务偏于管理,既管理团队又管理软件产品开发的整个项目。
管理人才和高级技术人才是两类截然不同的人才。高级技术人员需要深厚的技术基础,大量的软件开发经验,有品味的结构和界面的设计能力,以及对各种开发系统和平台拥有既广泛又深入的了解。在博得其它技术人员的尊敬以外,好的高级技术人员也应具有较强的领导能力、亲和力,能在技术上领导大家的同时,在非技术方面也成为大家的“领袖”。
而管理人才则需要很强的运作能力,能有效地计划(包括资金和时间),分配资源,指挥多个不同功能的部门。在预定的时间内,在不超过预算的情况下,做出高质量的软件产品。管理人员还需较多与客户及其他部门打交道,所以人与人之间的交流和沟通能力,书面及口头表达等方面要求都很高。管理人员同样要得到员工的信赖与支持,才能起到领导作用。
这两种不同的人才在素质上,甚至在性格上, 都有不同的特点,但却有共同之处,那就是好的人才大多是工程师出身,有足够的技术背景。高级技术人员是从普通工程师中脱颖而出,这一点可能比较容易理解。可为什么软件管理人才最好也从工程师中选拔呢?简单地讲,软件部门的经理必须要了解软件工程师的工作方式、爱好、习性等等,才能有效地管理。自身出于工程师的行列,比其他人在管理上有许多天然的优势。而更重要的是,一个部门的经理,天天面对着许多决策性的问题。譬如说,如何解决产品在性能、质量和开发时间三方面不可避免的矛盾。或在产品研发过程中,当出现了新的市场动向,需怎样应变。要决策这些管理上的问题,实际上必须掌握较深的技术知识,才能做出准确的判断。反过来, 一个不懂技术的管理者,则通常要配备一个高级技术人员做“军师”。而且在遇到两、三种不同的技术意见时,会很难定夺。 纵观Sun的几大硬软件产品部门,绝大多数管理人员都是从工程师这个位置起家的。
下面我以Sun公司的产品部门为例,看看在技术和管理方面,以及在低中高三个层次上,人才是如何配置的。 (本文所使用的级别名称引自Sun公司全球人事系统规范,与某些地区工作上的用法不一定完全吻合。)
软件部门的人才结构
在Sun公司,一般工程师 (Member of Technical Staff) 分为四级。做到第四级时,能力就应已经十分强,技术上多多少少可以独挡一面。从第四级再往上走,就要做一个比较大的职业选择。这是晋升的第一个比较大的“坎”。 一条路是升为高级工程师 (Staff Engineer)或“高工”。高工内又分为二级。做到高级高工 (Senior Staff Engineer),则应能同时主导数个项目的技术方向。 当然,级别越高,要求也越严,年终评定也把得越紧,很少能拿到优。
再往上走,就遇到第二个大“坎”,即升到杰出工程师 (Distinguished Engineer) 或院士 (Fellow) 。在Sun全球一、二万技术人员中,杰出工程师和院士共计六十人左右,每个人通常在某一技术领域有突出的造诣 ,是工业界在世界上的领先人物。 这些人是主持Sun硬软件系统开发的技术带头人,一般不直接管人或项目。大部分时间处理技术问题,做设计和写程序也是很经常的事。
另一条路是升为部门经理,分为普通经理和高级经理二级。 如果再升,
