软件人才不是从书本中来,也不是从证书中来。软件人才只能从实践中来,从软件中来!
软件业的发展是关系到中国高科技能否站到世界前沿的一件大事,受到国家有关领导部门及信息产业界人士的高度重视。一个产业的发展需要有三个基本条件,即资金、人才和市场。今天的专栏针对如何培养软件人才进行分析和论证。
软件人才的缺乏是世界上众多国家,包括世界第一大软件国美国,所共同面临的问题。由于中国软件业发展相对较晚,规模较小,人才缺乏就显得更加突出。在政府大力号召和支持国内软件产业发展的情况下,如何以快速度培养出一大批高质量的软件人才就成了一个很迫切的话题。
从过去一年多看来,国内的解决方法大致有两方面。一是软件人员的培训。新办的全国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硬软件系统开发的技术带头人,一般不直接管人或项目。大部分时间处理技术问题,做设计和写程序也是很经常的事。
另一条路是升为部门经理,分为普通经理和高级经理二级。 如果再升,就要跃过大“坎”,到总监,甚至副总裁。这些人则是以管理为主。部门经理与软件开发的细节接触还很多,而总监或副总裁就与编程无缘了。
选择两条路中的哪一条,一是要看机会,二是要看个人的能力与爱好。在Sun,不是谁想当经理就能当上的,也不是拿个“白领”班的毕业证书就行了。 通常的情况是,一个工程师在工作中显示出经理人才的素质,经过定向培养和一段实践后,再提拔起来。这里,定向培养包括选修一些管理的基础课,其中涵盖有关管理法律知识的课程,以及由该人的上级进行一定量的咨询辅导。
在工程师成长的过程中,要避免的一个大问题就是把最有成绩的技术人员不分三七二十一,不论他们是否有管理的天赋或愿望,都提拔成经理,让他们去管理人和项目。这个问题的原因是,在许多公司,升为经理是唯一提拔的途径。 这样一来,不仅没得到优秀的管理人员,还丢掉了好的高级工程师。 解决这个问题的有效办法之一,就是给技术人员开辟一条宽广明亮的职业发展道路。在Sun公司,为了鼓励技术人员,高级技术人员的四级(从普通高级工程师到院士)与管理层的四级(普通经理到副总裁)在级别上一一对应,在工资待遇等方面一律划等号。当然,由于工作性质的关系,从人数上讲,高级工程师远远多于经理,但总监或副总裁则远远多于杰出工程师和院士。
除了技术人员以外,一个完整的软件开发部门还应有配套的程序管理(Program Management)、文档管理(Documentation)、测试和质管(Quality Assurance),以及产品化(Release Engineering) 部门。本文在这些方面就不多谈了。 但值得一提的是Sun有一整套产品生命周期的流程(Product Life Cycle, 简称PLC)。而我们的Program Manager,则要确保产品的开发,严格遵守PLC的流程规范。
软件开发与CMM
说到PLC,自然想到CMM,因为PLC可以说是Sun内部的产品研发规范。由于国内对CMM的重视,许多人问我,CMM到底有没有用。CMM是美国卡内基梅隆大学软件工程院提出的一套软件企业研发和管理的规范。近年来有不少国内外单位采用,一方面通过实施CMM来提高软件开发过程的管理水平,同时以CMM证书来说明自己的实力。 学习CMM,自然比不学习要有用处。就像一个想成为作家的人去上写作课一样,听听别人是怎样写的,小说都有哪几种形式等等,不无启发作用。另外,也时常听到有些公司说CMM使软件开发效率提高,使错误和返工率下降,程序稳定性提高。
但拿到CMM的认证与一个企业的软件研发能力是否有必然的关系,恐怕就不一定了。世界上一流的软件公司,包括Sun、Oracle、微软、IBM、BEA、Adobe、苹果、MacroMedia等,没有一家用CMM作为产品开发的规范。而世界上一流的软件产品,如Unix(Solaris、HP/UX、AIX)、Linux(RedHat、SuSE)、微软Windows、办公套件(微软Office、StarOffice、OpenOffice)、排版软件(FrameMaker、InDesign)、浏览器(微软 IE、Netscape Navigator、Mozilla、Opera、Safari)、网站服务器(Appache、SunONE Web Server)、应用服务器(WebLogic、WebSphere,、SunOne Application Server)、Java(J2ME、J2SE、J2EE)、微软 .NET等许多其他产品,也都不是用CMM开发出来的。
这并不是说CMM没用处,而是说明没有CMM同样可以开发出世界一流的软件产品。大家之所以信赖这些著名公司所开发出来的产品,归因于这些公司多年努力开发一流产品所带来的声誉而已。
|
相关推荐
软件工程作为一门集理论与实践于一体的学科,在当今信息技术高速发展的背景下显得尤为重要。它不仅要求学生掌握扎实的理论知识,更需要他们具备将理论...因此,软件工程实践课程在软件人才培养中扮演着举足轻重的角色。
3. **团队协作**:软件开发往往是团队合作的结果,因此良好的沟通技巧、团队精神和协作能力对于软件人才来说至关重要。 4. **学习能力与创新思维**:在快速变化的IT行业中,持续学习和适应新技术的能力是保持竞争力...
针对软件人才需求,随着我国信息化进程加速,软件技术专业毕业生的就业领域不断扩大,涵盖了科研、教育、企业开发、事业单位等多个领域。然而,尽管就业选择广泛,但应届毕业生仍面临就业难题,主要是因为企业更倾向...
软件人才队伍规模持续扩大,从业人员总数达到512万人,同比增长约100万人,其中软件业从业人员72.1万人,同比增长30.4%。人才结构优化方面,高学历人才比例上升,大专以上文化程度员工占比26%,表明软件行业对高质量...
软件人才的发展路径是多元化的,从基础的模仿学习到独立创新,每个阶段都需要不断的学习和实践。对于个人定位和职业规划,了解这些级别可以帮助我们设定目标,明确提升方向,从而在竞争激烈的IT行业中找到合适的位置...
《软件工程——理论与实践》(第二版)作为高校及专业培训课程中的一门重要教材,其内容全面覆盖了软件开发的整个生命周期,包括需求分析、系统设计、编码实现、测试验证以及项目管理等关键环节。随着软件工程学科的...
【高校软件人才实践教学体系研究】 随着信息技术的快速发展,尤其是云计算、大数据和人工智能等领域,对软件人才的需求呈现出多样化和多元化趋势。然而,我国西部地区的软件产业发展相对较弱,主要原因是人才储备和...
总的来说,成为一名优秀的软件人才不仅需要深厚的技术底蕴,还需要不断地学习新知识,提升软技能,并积极参与实践,以适应快速变化的IT环境。通过上述各个方面的努力,你将逐步走向软件人才的卓越之路。
### 软件人才调研报告知识点详述 #### 一、背景与目的 - **调研背景**:为了更好地适应市场经济的发展需求,深入了解当前社会对于软件技术专业人才的需求状况及其培养要求,为制定2009级软件技术专业人才培养方案...
在保证理论知识的同时,通过项目驱动的方式,引导学生在实践中学习和成长,从而更好地满足社会对软件人才的需求。 综上所述,软件工程专业应用型人才培养模式的改革与优化是一项系统工程,需要教育机构、企业和政府...
通过实训,学生可以在实践中学习和应用理论知识,了解软件公司的实际运作,熟悉项目管理、系统分析、软件编码、软件测试、文档制作、客户服务等多个工作岗位。此外,实训还可以帮助学生提升专业规范意识,如遵循CMM...
4. 软件开发、形势及能力培养讲座:这部分深入讨论了软件开发的生命周期,包括需求分析、设计、编码、测试和维护,并强调了在校学习、技术应用、价值实现以及成为优秀软件人才的途径。 【实习学习重点】 报告中...
本资源摘要信息将从攻防兼备的实战型网络安全人才培养实践的角度,总结出以下几个重要的知识点: 1. 攻防兼备的实战型网络安全人才培养模式:该模式旨在培养高质量的创新创业人才,具备实战型网络安全人才的能力,...
作者从软件测试组长的视角出发,从管理新手应当注意的问题开始讲起,逐步引入软件测试管理在不同阶段的实施方法,并通过实例来分享行业内的宝贵经验和教训。 本书的结构编排人性化,便于读者阅读。作者首先详细介绍...
《软件人才求职招聘软件客国家软件人才资源公共》这一主题全面而深入地探讨了如何通过人力资源管理来吸引、培养和保留软件行业中的精英人才,确保企业的竞争力和创新能力。 人力资源管理是企业战略实施的基石,它...
2. **内容组织**:教学内容不仅涵盖了软件工程的基本理论知识,还融入了软件开发的实际流程和技术细节,让学生能够从实践中学习。 3. **模式创新**:采用了开放式和模块化的设计理念,可以根据不同的教学需求灵活...
总的来说,《软件工程与社会实践》课程是软件工程专业学生走向职场的重要桥梁,它在理论与实践之间架设了坚实的纽带,帮助学生从多角度全面理解软件工程领域,为他们的职业生涯打下了坚实的基础。