中国开发网: 论坛: 程序员情感CBD: 贴子 598400
sealw: 《过程模式(下)》
10.3培训和教育
第三项项目/跨项目任务是培训和教育(T&E),这项任务的范围包括了信息技术(IT)员工和您的顾客:支持人员、运营人员和用户。对顾客的培训和教育在发布子阶段(第5章)中已进行了详细讨论,所以本节我将集中讨论IT员工的培训和教育。
Humphrey(1997)指出,软件工程师的任务是提交高品质的软件产品,同时满足预算和时间的要求。其它领域中的专业人士会被要求展示他们的基本能力,然后才会被允许去做哪怕是最简单的任务,但在软件行业中,工程师必须在工作中学习。这对您的组织有重要的意义,具体来说,这说明对组织的IT专业人士的培训和教育需要进行大力投资。

您的组织需要在培训和教育IT员工方面大力投资。

在本节中,我将讨论以下与培训和教育有关的问题:
 预期的技能生命期。
 如何让人们开始使用对象技术。
 课堂培训的成功方式。
 指导的成功方式。
 支持学习体验
 成功的秘密。

定义
education(教育) 人们获取知识和理解的过程。

training(培训) 人们获得实实在在的技能的过程。

10.3.1预期的技能生命期
在1990年代早期,我花了许多时间来指导和培训人们使用对象技术,实际上我目前还花一部分时间来做这项工作。我得到的一种认识是,任何一项技能都有一段预期的时间,在这段时间内这种技能是需要的。图10.4说明了这一点。我的经验是,像C++或Java编程这类的编程技能会在3年或5年的时间中有很高的需求,然后渐渐变得不流行。这两种语言就是很好的例子。在1990年代早期,C++程序员是最受追捧的开发者;五年之后我写作本书时,最受追捧的人是有Java经验的程序员。再过五年之后,我预计另一种语言将取代Java(也许是Java++)。类似地,建模技术,诸如用况(use case)开发或面向对象设计,预期的生命期是10至15年。信息技术(IT)行业寿命最长的技能看起来是项目管理和待人/沟通的技能,它的预期生命期长达30至40年。

图10.4 比较技能的预期生命期

图10.4有几点重要的意义。首先,技能的技术性越强,它对您有用的时期就越短。对这一点不应吃惊,技术领域的快速变化必然要求技术人员的技能快速地变化。第二,如果您选择编程作为专业,许多开发者是这样做的,那么您就要准备每五年左右的时间对自己的技能进行一次大检查。是的,您可能专注于一种语言15或20年(例如那些COBOL和C程序员),但是请看看那些APL、BASIC和FORTRAN程序员的极少的工作机会。第三,如果您选择钻研那些有较长生命期的技能(例如项目管理),您还是需要准备好跟上最新的技术。在很大程度上,项目经理们比程序员更需要培训——程序员的专业限制在一门语言,需要获得的详细技能相对面比较窄,而项目经理需要获得更大范围的较浅的知识。

理解何时要保留,为何要保留对您的职业生涯相当重要。

10.3.2 让人们开始使用对象技术
组织如果希望面向对象的培训和教育取得成功,就必须仔细考虑两个问题。首先,人们需要6至9个月的时间来获得面向对象的实用知识,可能还需要一年或两年来真正掌握它。面向对象是一种全新的开发模式,您不可能在一夜之间掌握它。伴随这个问题的事实是,人们在面向过程开发中的经验越多,就越难学习面向对象——与没有经验的人相比,他们需要推翻更多以前学的东西。

您的经验最丰富的人员在学习面向对象开发技能时最痛苦。

第二个问题是人们的学习方式是不同的。有时候人们对手把手的培训反应最好,有时候又喜欢讲座式的指导。有些人喜欢基于计算机的培训(CBT),而另一些人最喜欢学习小组的形式。成功的培训和教育(T&E)计划是足够灵活的,支持多种不同的学习方式。我们将在本节的后面讨论这些学习方法。
您如何向人们培训面向对象技术?图10.5说明了一种面向对象培训和教育的方法,由六项任务组成:
1. 提供一般介绍性培训。
2. 提供针对岗位的介绍性培训。
3. 提供个人指导和手把手的体验。
4. 提供高级培训。
5. 评估并反复。
6. 为培训和教育工作提供支持。

图10.5 面向对象培训和教育

10.3.2.1提供一般介绍性培训
您曾经注意到有人来参加培训之前是有所准备的吗?他们在参加培训之前对于培训的内容已有一些了解,希望能比冷漠对待培训的人学习到更多的东西?我的建议是要利用观察到的这种现象,帮助员工在参加课程之前进行准备。通过分发一本介绍性的书籍来开始面向对象学习的体验——我总是会推荐“The Object Primer”(Ambler,1995)——并且要求每个员工在一周后参加为期一日的介绍性课程之前先阅读这本书。这种入门课程应该介绍面向对象开发的基本概念,并提供OOSP的概述性描述。

事先分发书籍,以增强课堂教学的成效。

在第一次课程之后,马上分发另一本书——最好是像我的第二本书“Building Object Applications That Work”(Ambler,1998a)那样的书,其中描述了许多基本的面向对象开发技术。四至五周后,为每人提供一次一天的复习课程,这是介绍性课程的稍微高级一点的版本,为人们提供了一个问问题的机会,他们在初期的学习过程中可能会有一些问题要问。

10.3.2.2 提供针对岗位的介绍性培训
在复习课程之后,您应该马上向每位员工分发一本或几本书——这次的书籍应该针对他们各自的工作。例如,应该向测试工程师分发关于面向对象测试的书,应该向建模人员分发面向对象建模的书。我在我的Web站点上维护了一份面向对象开发书籍的阅读清单,网址是http://www.ambysoft.com,请自行参考。
再次地,在让每个人有充足的时间阅读他们的书籍之后,为他们提供另一次课程或一系列课程,这次的内容是针对他们的岗位工作的。让人们得到关于他们正在做的工作的详细培训,这很重要,同时也要让他们对同事的工作有粗略地了解。例如,一名程序员可能接受五天的关于面向对象编程语言的培训,他将用它工作,同时也接受各两天的面向对象建模和面向对象测试的培训。通过让程序员接受建模和测试方面的技能培训,您让他们更能理解和承认同事的工作,并了解同事的需求。

向人们提供关于他们的工作的详细培训,并让他们了解相关人员的工作。

10.3.2.3 提供个人指导和手把手的体验
当初期的培训完成之后——这可能需要花两至三个月的时间——您的员工已经准备好开始应用他们的新技能了。此时许多组织会遇到麻烦,因为他们错误地相信他们的员工已经拥有独立地构建面向对象软件所需的技能了。这样想实在是离事实太远了。您会让某人参加一些会计课程,然后让他控制您的公司的财务吗?您会让某人参加一些市场营销课程,然后让他们负责您的广告计划吗?您会让某人去参加一些法律课程,然后让他们在法庭上为您辩护吗?当然不会。那么,为什么您会让某人参加一些面向对象开发的课程,然后就希望他们用刚学的技能来开发关键任务软件呢?

几周的面向对象培训只不过是几周的面向对象培训。

在初期培训完成之后,开发者现在有资格接受有面向对象开发经验的人的个别指导了。个人指导的目的是让在对象技术方面有经验的人通过学习过程来指导新手,向新手展示如何使用面向对象开发技术。这些个人指导工作应该在一个开发项目中进行,在这个项目中,被培训者有机会应用他们通过培训学习到的技能。个人指导的成功因素将在10.3.5节中详细讨论。

您的员工需要接受个人指导,这样他们才能学习如何正确地应用面向对象开发方法。

10.3.2.4 提供高级培训
在经过了有经验的指导者几个月手把手的个人指导之后,开发者应该回到教室,接受针对他们的工作的高级培训。开发者所获得的经验让他们认识到,他们需要理解和吸收高级课程中所教授的内容。例如,高级的建模课程可能集中于分析模式和设计模式,高级的编程课程将介绍一系列的编程技巧。

向您的员工提供高级培训,以扩展他们的技能。

定义
analysis pattern(分析模式) 一种建模的模式,描述一个业务领域问题的解决方案。

design pattern(设计模式) 一种建模的模式,描述对一个设计问题的解决方案。

10.3.2.5 评估并反复
下一步是评估每个人的进展情况,以确定他们是否准备好在没有指导者的情况下单独工作。很少有人在经过数月的个人指导后能做到这一点,所以不必很吃惊。为了学习面向对象开发技术,大多数的开发需要6至9个月的个人指导,甚至更长时间。

10.3.2.6 为培训和教育工作提供支持
面向对象培训远不止是一般的课堂培训。学习小组,自带午餐培训(bag-lunch training),自学,个人指导和基于计算机的培训(CBT)都可以用来丰富面向对象学习过程。
一种对人们进行面向对象培训的有效的方法是让他们加入学习小组,即一组人一起完成某项任务,来学习某个方面的面向对象知识。公司常常要求学习小组为公司开发一个小的应用,也许是为人力资源部或市场部开发。通常要求他们花20%至50%的工作时间来完成这个微型项目,将其它的时间用于完成他们当前的工作职责。
最小的学习小组其成员来自系统部门的不同地方,他们拥有不同的技能。也许一人是经理,另一人是系统程序员,另一个是分析师等等。这种不同技能背景让小组能从不同的方向展开学习的过程,增加了他们学习的机会。

学习小组应该有不同技能背景的成员。

要让学习小组取得成功,其成员需要接受面向对象培训,以获得基本的技能。他们需要使用面向对象开发工具,他们需要查看面向对象的文献,以更好地理解开发过程。不幸的是,学习小组有一个缺点,即没有有经验的指导者参加,他们极有可能在困境中挣扎。
另一种增强面向对象T&E过程的好办法是自带午餐培训会议。这是一个小时的微型课程,在每天午餐的时间进行。这些会议通常由面向对象开发专家主持,常常就是您的指导者,讨论的主题涉及面向对象开发的方方面面。某天的主题可能是Smalltalk Collection类,下一天可能是管理面向对象开发团队。成功的自带午餐培训计划通常每周进行2至3次会议,每次会议都进行几次,以便让每个人都有机会参加。自带午餐培训很容易实施,确实能促进学习过程。

短时间的培训会议可以在午餐时间进行,以促进学习过程。

基于计算机的培训(CBT)也是一种有效的T&E方式,特别是在与正式的培训和个人指导结合使用时。许多组织在让员工参加正式的培训课程之前,让他们能访问介绍性的CBT课程,使他们的学习能有一个起点。不幸的是,单独使用CBT对培训面向对象开发技能没有太大的价值,面向对象开发太复杂,发展太快,CBT课程难以应付。而且,当您有问题时,需要与专家交谈来找出答案。计算机不能做到这一点,而指导者可以(指导者和CBT组合在一起很有威力)。简而言之,CBT只能作为面向对象学习的一部分。

可以使用基于计算机的培训(CBT)来支持面向对象学习过程。

定义
computer-based training(CBT)(基于计算机的培训) 一个程序,它的设计目的是针对一个特定的主题对用户进行培训。CBT程序常常使用多媒体技术,例如动画和声音等。

learning team(学习小组) 一个小组,所接受的任务是共同学习一个特定的主题知识。

要取得面向对象培训和教育的成功,您的组织必须提供面向对象开发工具和文献。我怎样强调这一点都不过分。多数开发者学习的方式是玩一下开发工具,读一点文献资料,再多学一点。这意味着他们需要能接触到面向对象语言、面向对象建模工具和面向对象测试工具。您应该为每人买一些面向对象的书籍,范围从面向对象的介绍到面向对象编程和面向对象分析与设计,并为他们订一些杂志,诸如“Software Development”,“Object Magazine”,“Journal of Object-Oriented Programming”和“Java Developer’s Journal”。

10.3.3 课堂培训和教育的成功方式
您可以做许多事情来确保课堂培训和教育获得成功。Lilly(1995)强调,教师应该对所教授的主题领域具有专业知识。我的经验是,最好的教师在他们教授的领域中每月工作三周,余下的一周进行教学。Lilly也相信,即使是在介绍课程中,让学员注意到分析和设计也是重要的。我更进了一步,认为在介绍课程中让学员注意到完整的面向对象软件过程(OOSP)是有必要的。而且,您需要培训每一个人,而不只是您的程序员,也不只是您的最佳员工。最后,就象前面所说的,您应该在培训后将学员投入工作,否则他们有可能忘记他们所学的东西。

教师必须在他们教授的领域具有专业知识,学习需要接受OOSP各个方面的培训。

Lato(1997)建议,培训应该关注培训内容中哪些东西对“我”是有意义的,组织和个人都应该注意这一点。要让每人都认识到面向对象的好处。Lato强调,高级管理层必须接受培训,了解提交产物、过程、需要的资源、与以前的做事方式不同之处以及转换到对象技术相关的一些风险。

尽你的最大努力是不够的:你必须知道要做什么,然后再尽最大努力。
——W. Edwards Deming

10.3.4 个人指导的成功方式
要让个人指导取得成功,您的指导者必须有资格完成这项工作。你是否修过这样的大学课程,教师只比学习领先一两章阅读教材?这不是很好的学习体验,对吗?对于个人指导者来说也是这样。指导者在他们教授的领域必须是有经验的。一个好的指导者的最低要求是要具备沟通技能,并在所教授的领域有数年的经验。如果您没有具备这方面技能的人(许多组织还没有),您就需要从外面请人。

指导者必须具备对象技术的经验,并有良好的沟通能力。

指导者应该作为项目团队的成员,积极参与,而不只是作为教师。要让一个指导者成为有效率的团队成员,您应该保持一个指导者带两三个新手的比率;再多的话,指导者将忙于指导,而无法完成实际的项目工作。这样做也没什么不好,只要您还有其它有经验的人来开发应用的那些复杂部分。由一个专家和一大群新手组成的项目团队通常会失败。
Schedlbauer(1997)指出,个人指导对培训和教育起到了辅助作用,并不是要取代培训和教育。指导者的一个作用是让项目团队具有大局观,偶尔也需要解释如何应用新方法来解决开发问题,从而调整团队关注的焦点。Schedlbauer强调,指导者应该在项目中扮演一个关键建议者的角色,但不应该是项目领导者或主要设计者,因为这些解决应该由长期员工来承担,如果有可能的话。最后,Schedlbauer相信,指导者应该全程参与整个项目,特别是在项目的早期阶段,以便让学习的过程在正确的轨道上进行。

您的目标是让自己逐渐摆脱对指导者的依赖。

我的经验是,个人指导过程通常需要花六到十二个月的时间,项目的开始指导者需要全职参与,逐渐过渡到项目后期每周参与一两天时间,那时候您的开发人员已经可以依靠自己了。这里的技巧是让您自己逐渐脱离对指导者的依赖,让指导者将他们的技能传授给您的员工。好的指导者使您能不依赖他们,坏的指导者不这样做。

10.3.5 成功的秘密
我很愿意与您分享一些小技巧和方法,有助于培训和教育获得成功:
1. 让您的员工养成学习的习惯。信息技术(IT)产业的变化实在太快,任何人都不能够接受一次培训之后就不思进取。
2. 及时(Just-in-time,JIT)培训是很重要的。在人们需要培训时对他们进行培训,不是在几个月之前,也不是几个月之后。人们会在一个月内忘掉他们所学的主要东西,除非在培训之后立即应用他们的新技能。
3. 可能要培训除面向对象以外的其它技能。不要忘记您也需要在相关的一些主题上培训员工的技能,诸如图形用户界面(GUI)设计,客户机/服务器开发,个人计算机使用技能,等等。转向面向对象开发常常促成向新的硬件/软件平台迁移。也许您的组织正在从基于大主机的环境向客户机/服务器环境迁移,使用具有GUI前端的个人计算机。这种向新环境的迁移意味着您需要让员工具备在这种新环境下工作和开发的技能。
4. 对每个人进行技能评估。项目开始时的定义基础设施子阶段(Ambler,1998b)中进行一次技能评估,项目结束时的评估子阶段(第6章)也进行一次技能评估,对这两次评估的结果进行比较。在您为某人制定一份有效的培训计划之前,您需要了解其当前的技能水平。
5. 认识到人们的学习方法不太一样。有些人在课堂里的学习效果最好,而另一些人坐下来使用一种编程语言的学习效果最好。因为没有哪种培训和教育计划对每个人都最合适,您需要创建一种方法,可以通过修改它来满足每个学员的需要。灵活性是面向对象培训和教育的关键成功因素。
6. 激励每个人。鼓励开发者学习面向对象开发通常不成问题:他们通常迫不急待地要学习这方面的内容。不幸的是,有些有经验的开发者不是十分起劲,也许他们害怕不会像其他人学得那么快。如果有充裕的时间和灵活的学习环境,每个人都可以学习面向对象,但他们必须愿意学习。一个事实提供了很好的激励,即面向对象开发者通常被指派到最有意思的项目中,他们的薪水也比非面向对象开发者的薪水高。如果您知道除了有意思的工作和高薪酬之外的激励方法,请告诉我,我也很有兴趣知道。
7. 可能要处理受伤的自尊心。让有经验的开发人员转向面向对象技术有一个严重的问题,即一夜之间,他们从一名公认的专家变成了一名公认的新手。这让人很受伤。开发者需要认识到,如果进行自我调整,他们可以再次成为专家,只是需要一点时间。
8. 可能遇到“我以前做过”综合症。这对于有经验的结构化开发人员非常常见,特别是对于那些真正优秀的开发人员,他们在开始时会非常确信自己一直都在进行面向对象开发。这是因为面向对象技术包含了许多重要的结构化软件工程的原则,最好的开发者都会应用这些原则。这些原则常在介绍性课程中提到,对这些底层原则的熟悉,会使人们容易确信他们一直都在进行面向对象开发。这个问题常常能够自动得到纠正,因为当人们开始与优秀的指导者一起做真正的项目时,他们很快就会认识到面向对象比他们原来想象的内容要丰富得多。
9. 认识到您不能同时实现对所有人的再教育。别忘记在开始的几个面向对象项目中,您的许多开发者将不会参与。您需要这些人员来保证原有的遗留系统正常运行,但是同时他们又期望参加到令人兴奋的新项目中。我的建议是,让他们及时了解到项目中所学到的东西,让他们知道何时他们会加入到新项目,以何种方式,让他们在下班时间能接触到开发工具,这样他们能够自学,邀请他们参加自带午餐培训会议,让他们能得到面向对象的书籍和杂志。不是每个人都会参加第一个面向对象的项目,但他们还是可以参加面向对象学习过程。如果您把他们排除在外,您就要冒失去他们的风险——这会迫使您从面向对象项目中抽调人手去支持那些原有的应用。
10. 认识到有些学院和大学对面向对象技术并不熟悉。尽管这个问题很快就被发现了,但目前在您当地的大学中要找到高质量的面向对象课程还是比较难。面向对象技术让许多计算机系没有准备,如果他们不是积极参与面向对象的研究,那么极有可能他们只到最近才刚刚开设面向对象的课程。避免去参加第一次开设的面向对象课程,因为这些课程还在进化之中,您要冒教师也不比你懂多少的风险。
11. 让员工尽快参加培训。一旦您决定转向面向对象技术,就要尽快展开培训。尽管自己进行一些阅读是个很好的主意,但这样做的缺点是容易对问题形成误解却浑然不知。专业的教师可以帮助您正确地学习面向对象,避免形成不良的习惯。
12. 理解面向对象技术中许多事情是不一样的。尽管面向对象开发方式是基于很多经过实践检验的原则,我们在结构化的开发中就已经知道了这些原则,但是还有许多的事情,使得面向对象开发不同于其它的开发方式。因为面向对象技术是新旧技术的融合,哪些旧技术还可以使用,哪些已不能使用就变得不太明显。有许多您多年来一直在做的事情根本就不再适用于面向对象的开发了。
13. 培训的同时进行教育。培训教给您完成工作的技能,教育教给您理解工作所需的知识。教育计划能做到的最重要的一件事是解释概念与技术之间的相互关系。
14. 根据经验来教学。Goldberg和Rubin(1995)指出,优秀的教师实践过他们讲授的内容,丰富的经验使他们有信心也有能力解决棘手的问题。
15. 认识到人们并不是因为接受了培训所以会辞职。开发人员辞职通常是因为薪酬不够高,工作不够有趣,或者不喜欢与他们一起工作的人。面向对象开发人员比非面向对象开发人员的薪酬要高,任何转入面向对象开发的组织都要做好准备,根据培训后的人员的价值来付给他们薪酬。面向对象开发人员的需求量很大,您的竞争对手会很高兴从您那里得到刚刚培训好的开发人员。请善待您的员工。

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录