APP下载

基于能力培养的软件工程教学实践

2017-09-01伍春香刘斌李小红

计算机教育 2017年8期
关键词:矩阵能力培养教学实践

伍春香+刘斌+李小红

摘 要:针对目前本科生普遍存在的系统分析能力欠缺、沟通表达能力不足、团队合作意识不强、文档素养低等问题,分析本科阶段培养目标和软件行业人才实际需求,阐述以能力培养为目标的软件工程教学模式,提出用“能力—培养环节”矩阵指导教师落实能力培养的方法,并给出在软件工程课程中的具体教学实践。

关键词:能力培养;软件工程教学;“能力—培养环节”矩阵;教学实践

0 引 言

高等教育的3个主要出口是海外深造、进入工作岗位、国内科研院所继续学习。从各个渠道反馈的消息得知,各方对高等教育培养出来的学生的满意度都不是特别高。国外大学教授们反映,中国学生普遍上课发言少,习惯于被安排,不敢质疑权威,作业或者课程项目难以提出创新的点子,讨论参与度不高;虽然各个行业都有一部分留学生有了不错的成就,但相当一部分学生毕业后的现状与人们的预期不一致,即使取得成就的人,也多是局限于专业技术岗位,不能在更广的范围内有所建树。国内企业界的反馈也不尽如人意,比如华为反馈学生需要再培训,不能立即进入生产岗位。高校教师们也经常提到研究生甚至博士生的科研素质低,看不懂论文,不会写文章,甚至连论文文字叙述、图表格式、标点符号等都需要老师去修改。因此,大学阶段的教育,除了传授专业知识,也需要培养学生的能力与素质。

1 课程教学应以能力培养为目标

每一门课程在专业课程体系设置过程中,都有其对应的教学目的,比如,软件工程课程的教学目的是“使学生了解并掌握大型软件开发,软件测试、维护与管理的基本原理,从工程化角度培养学生从事软件开发、测试、维护与管理的能力”。

课程的教学目的不能简单理解成“知识传授”,而应是“专业培养目标”在该课程教學中的具体反映,因此,作为任课教师,在落实课程教学时,应该把“课程教学目的”与“专业培养目标”的关系考虑在内,不仅仅讲授知识内容,也要培养学生的能力和素质,这样才能真正体现“专业培养目标”。在计算机专业的课程教学中,这一点尤其重要。一方面,计算机科学技术发展迅速,使得很多专业课程涉及的内容更新频率很高,学生毕业后很快就会面临新知识,掌握如何学习、运用新知识的方法和能力,对计算机专业的学生尤其重要。

2 能力及其培养环节

2.1 能力及其体现

“能力”是能胜任某项任务的主观条件[1],也就是说,能力是完成一项目标或者任务所体现出来的素质。

大学生应该具备什么样的能力?计算机专业的毕业生,又该具备什么样的能力?这应与他们毕业后需要完成的任务结合起来考虑。

计算机专业的毕业生需要完成的目标或者任务,可能是继续研究生学习与深造,也可能是进入工作单位。他们首先面临的工作目标或任务,是与计算机专业相关的。如果一名计算机专业的学生具备了解决具体专业问题的素质,那么,他就具备了胜任专业问题求解的主观条件——能力。

作为专业课的课程教学仍然是以专业背景下的能力培养为主要目标,即培养学生在解决与专业相关的任务时所需要的素质。

2.2 能力培养环节矩阵

如何在大学课程的教学中培养学生的专业能力?

首先,要明确哪些素质和能力对学生来说至关重要。在ACM和IEEE发布的《计算机科学课程体系规范2013》(CS2013)[2]有专门的陈述:计算机科学本科生教育应该使学生为未来的工作做好全面准备,而不仅仅是向他们传授技术;而这些素质和能力的培养是通过大学阶段通识课程的学习经历和专业课程的教学活动综合作用达到的。关于这样的能力,CS2013也有具体描述:事实上,学生的软能力(soft skills)(如团队合作精神、口头及书面表达沟通能力、时间管理能力、问题解决能力、灵活应变能力等)及个人素质(如对风险的承受能力、合议共治能力、忍耐力、职业道德、机会的辨识力、社会责任感、对多元化的理解等)在未来工作中将起到至关重要的作用;一部分这样的软能力和个人素质(如忍耐力、时间管理能力、职业道德、对多元化的理解等)将通过大学的学习生活经历而获得,而其他部分则需要通过具体的课程教学活动来培养[2]。

其次,要确定大学阶段可以通过哪些手段或环节实施对上述能力的培养。大学期间,社团活动、业余科研、导师科研项目、企业实习等都可以给予学生一定的锻炼机会;而从教学角度梳理,可以得到这样一些教学环节:课堂讲授、课堂讨论、课后作业、课外自主学习、个人课程实习、小组课程实践、课堂报告与毕业设计等环节。这些教学环节侧重点不同,对学生能力培养的作用也不一样。

将大学阶段各种可能给予学生能力锻炼和素质培养的环节与其可能培养的能力对应起来,得到表1中的各项指标。本课程主要关注其中的教学环节,表1中阴影部分不是课程教学所涉及内容,不在课程教学考虑范围之内。在各教学环节中,毕业设计不属于某一门课程教学的范畴,也不在讨论范围之内。

经过表1的梳理,教师可以清楚看出哪些环节对学生哪些能力的培养有积极作用,只要针对当前学生存在的问题,有的放矢,加强对应培养环节的内容和方法设计,便可以达到对学生某方面能力和素质的培养。

3 基于能力培养的软件工程教学实践探索

3.1 以课程实践带动能力培养

能力是和实践结合在一起的。离开了具体实际问题求解,既不能展现与发挥人的能力,也不能发展和锻炼人的能力。只有将能力的培养和解决具体问题的过程联系起来,才可能真正达到锻炼和培养能力的目的。软件工程课程按照这一思路着重突出了实践教学环节。

借鉴企业生产实践和国外大学课程的教学方法,根据能力培养需求设计了一系列实践教学环节,如表2所示。在软件产品生产过程之前,会有组长竞选、组长与组员双向选择的团队组建、小组的自由选题3个环节。工程化开发出软件产品后进行成果展示和课程小结。在课程实践过程中,从不同角度培养学生各方面的能力和素质。

实践环节与能力培养的对应关系提供了专业培养目标在实践教学中的具体对应关系,为教学实践的实施起到了具体指导作用。

3.2 以能力培养为目标设计各个教学环节

在教学实践中,软件工程课程教学利用表2的实践教学“能力培养环节”矩阵,针对当前学生存在的特点,精心设计了某些环节,从不同角度采用不同手段解决学生系统分析能力欠缺、沟通表达能力不足、团队合作意识不强、文档素养低等问题。

(1) 组长竞选带动管理知识的学习与应用。课程采用毛遂自荐和民主选举的方式确定实践小组的组长。要求每位同学通过查阅文献自学“项目经理”这个角色的相关内容,包括项目经理需要掌握的知识,应该具备的能力,需要与哪些人打交道以及职责范围,在此基础上,思考“我(不)适合做组长/项目经理的理由”并以文字表达。所有认为自己适合做项目组长的同学有1分钟向全班同学陈述理由,然后全班同学选举他们认可的项目组长。

这一过程,使每位学生学习项目管理的相关知识,并实践了运用这些知识来分析自身的特点以及比较、判断组长候选人。

(2) 团队组建体验真实生存压力。团队组建采用双向选择。竞选成功的组长有权选择自己希望招纳的组员,其他同学也有权在所有组长中选择自己更信服的组长。这样一场真实的“市场竞争”,让学生们在推销自己的过程中体会到了压力,一定程度上也推动了他们在后续积极参与课程学习,以针对性地提升自己。

课程教学中,理论课堂采取以小组为单位就座听课、讨论。实践部分,小组成员以团队方式完成一个项目的实际开发。这种全方位的团队合作,使学生自始至终都意识到团队的存在,时刻想着以团队的方式完成所有的学习任务,培养了学生的团队合作意识。

(3)自主选题提升系统分析与设计能力。教学不是教师单方面的任务,只有学生参与进来才成其为“教学”。学生参与课程教学是一切教学方法改革的基础。为此,课程在实践项目选题上做了改革,采用学生自主选择感兴趣的题目。当可以自己做主选择做什么的时候,学生的主观能动性被大大激发,他们自主确定的实践选题充分展示了什么叫做“创新”。比如,校园快帮、寝室阿拉丁、Miko游戏平台、资讯集中阅览器“阅读者”、背单词软件、“买买买”、校园导游咨询等,当然,教师要在题目的可行性等问题上给予学生小组适当的指导。

在软件工程的实践选题改为自主选择题目后,学生的课程学习投入程度空前高涨,对待开发系统高度投入,对过程中遇到的问题不愿意回避,必解决之而后快。完整的项目做下来,学生们的系统分析与设计能力都得到了实质性锻炼和提高。

(4)“示范小组”传播真实项目经验。由于资源限制,无法让每个小组都有直接参与实际项目的机会。课程采取了示范小组模式,即让某小组参与某企业的实际项目,与企业的实际开发团队并行完成同样的项目开发,并把完整过程向其他同学汇报。每周,示范小组都有成员去企业参加业务沟通会,课程则定期安排示范小组在课堂上报告他们的进展和体会,示范小组反馈回来的一些在学校不会遇到的问题,让其他学生体会到课程实践与真实产品研发的不同,同时也感受到课程知识对实践的指导作用。

(5) “错组结对”扩大实践内容。在实践过程中,采用“错组结对”的方式,如图1所示,每个小组将以管理小组的角色管理某个生产小组的开发活动,让每位同学在开发软件实践的同时,也体验到作为管理者应该承担的角色内容。

3.3 以自主学习提升学习的有效性

有效教学理论的大规模教育心理学研究发现:学生通过阅读的学习效率是10%,通过听讲的学习效率是20%,通过试听并用的学习效率是30%,采用与他人讨论的方式学习效率是70%,采用实践的方式学习效率是80%,采用教別人的方式学习效率是95%[3]。

课程选择“教别人”的方式设置了自主学习部分,即每个小组选择一个与课程内容相关的选题在课下自学,形成学习报告,并在课堂上展示学习成果,以让其他同学掌握其所展示的内容为评价标准。最近一轮完成的课程教学中,自主学习选题有:敏捷开发、函数式编程、软件开发社区、程序设计语言介绍、需求工程、开源软件的意义与使用、软件升级包的制作、基于平台的开发、软件著作权及其对软件开发的指导意义、游戏开发等内容。

这些选题既延伸了课程内容,又让学生在自学工作中,锻炼了文献查找与研读及论文的撰写。课堂展示环节则给了学生一次再创作的体验,“程序设计语言介绍”和“需求工程”两个学习小组甚至将所学内容设计成了小品在课堂上展示,幽默诙谐的表演不仅诠释了学习内容,也展现了小组每位成员的优秀风采。这样“教他人”的方式让“教”者意气风发,让“学”者印象深刻。相信这样学习到的知识,会让这些“教”者终生难忘。

3.4 以预期评测目标引导能力培养

管理学上有句名言:员工只做被考核的事,这句话同样适用于教学中。学生因为知识体系不完善,对问题的认识存在一定局限性,一定程度上看重分数是很正常的。合理地把握这样的学生心理并予以引导是有助于达到教学目标的。

(1)提前发布文档标准。课程实践的文档评价标准在课程开始初期就发布给学生,并将“武汉大学本科生毕业论文(设计)书写印制规范”作为文档形式规范和学术规范的基本标准。学生在“得高分”的原始目的驱动下,会按照评价标准中的重要得分点要求的标准去做,看似为了得高分,实际上引导学生遵循文档规范,同时也了解了基本学术论文的撰写要求,提升了文档素养。

(2)提前发布成绩评定标准。图2所示为课程最新一版的成绩评定标准。

第一节课就发布课程的最终成绩评定方法。在课程进行中会分阶段发布课程成绩,这可以促使学生及时调整自己在课程中的学习状态和学习目标。在这样的学习过程中,学生时刻都能知道自己目前已得到的成绩,在切身利益相关的情况去做判断与选择,时间管理、风险分析、灵活的计划调整等能力得到了直接锻炼和提升。

4 结 语

大学教育应该为学生一生的发展奠定扎实基础,大学阶段对学生的培养通过每一门具体课程的教学活动来落实,因此,课程教学应直接、具体地落实“专业培养目标”。

软件工程课程在教学实践中做了一系列探索,通过“能力培养环节”矩阵帮助教师梳理培养不同能力的各个教学环节,从而针对性地设计教学环节的实施方法,从系统分析能力、沟通表达能力、团队合作意识、文档素养等多方面锻炼和提升了学生的能力和素质,大大改善了课程的授课效果。当学生以匿名的方式在课程群里发出图3所示的个人时间分配比例,并且说出“然后发现软工又有用又好玩,花的时间就不在乎了……”,就可以看到作为选修课的软件工程在学生心目中的印象得到彻底改变。

教学研究成果是教师在教学实践中探索出的经验性积累,由于没有规范性的表达,一直存在推广的困难。一种有效的教学方法如果不能得到推广,就无法在更广的范围检验其成效。在软件工程领域,软件开发过程以框架模型的方式呈现,指导了诸多开发团队的工程实践。在下一步的研究中,课程研究将借鉴这种思路,探索教学方法的规范化表达,以促成更多的教学经验在更大范围的教学实践中得到推广,从而惠及更多师生。

参考文献:

[1] 中国社会科学院语言研究所词典编辑室编. 现代汉语词典(2002年增补本)[M]. 北京: 商务印书馆, 2002.

[2] The Joint Task Force on Computing Curricula Association for Computing Machinery (ACM)&IEEE Computer Society. Computer Science Curricula 2013[EB/OL]. (2013-12-20)[2016-12-20]. http://www.acm.org/education/CS2013-final-report.pdf.

[3] 希尔伯曼. 积极学习: 101种有效教学策略[M]. 陆怡如, 译. 上海: 华东师范大学出版社, 2005.

(编辑:郭田珍)

猜你喜欢

矩阵能力培养教学实践
多项式理论在矩阵求逆中的应用
中职计算机应用课程教学改革与反思
浅论高中化学生活化教学的实践与思考
浅谈初中物理实验教学与学生创新能力的培养
测量平差课程教学改革探讨与实践
数学归纳法在高中数学教学中的应用研究
信息技术教学中学生自主探究能力的培养探析
基于CDIO的大学生职业素养培养研究
低年级学生课前预习能力的培养
矩阵