秦怡?李俊吉?田丽苗
摘要:本文分析了软件工程实践教学中存在的问题,提出了以学科竞赛为驱动的实践教学改革方案,即教学中融入竞赛,竞赛中嵌入教学,赛教融合,使实践教学与时俱进,从而为培养实践能力强的创新型人才做一些探索和研究。
关键词:学科竞赛;实践教学;以赛促教;以赛促学
在互联网时代,随着软件行业和其他行业融合度愈来愈高,整个社会对软件人才的需求也在急剧增长。这对软件人才本身,也提出了更高的要求,除了需要具备扎实的计算机基础理论知识和软件工程专业知识之外,还需要较强的实践能力、创新能力、灵活运用所需知识解决现实问题等诸多能力。然而,目前多數高校在教学过程中,还是偏重于理论教学,即使设置有相应的实验课程,这些课程的内容也往往机械、老套,对于培养学生的实践能力收效甚微。
学科竞赛作为一项面向广大学生的专业赛事,竞赛题目大多依托于项目或实际生产问题,要求学生在理解、掌握课堂所学知识的基础上,综合运用各种方法和技术来解决实际问题。通过竞赛,可以显著提高学生的实践能力、创新能力和综合能力。为此,以学科竞赛为驱动,对传统的软件工程类教学模式进行探索和改革,有着非常重要的意义。
一、软件工程实践教学中存在的问题
很多高校的软件工程专业在整体课程体系及具体课程内容设置方面不够合理,存在培养目标与培养过程不符合、不协调的现象。沿用十多年前、甚至几十年前的那一套培养方案、流程及课程体系,是很难满足当今社会对于软件人才的各方面能力需要的。尤其是在实践教学方面,存在很多问题。
首先,很多教师认为把知识完整地传授给学生即可,只满足于课堂理论教学,对于实践教学不重视,甚至忽视。其次,实践教学的课时量不够。一般理论课学时比较充足,而实验课学时占比很少,学生很难在少许几节实验课上完成对理论知识的消化和理解,对于知识的应用和创新就更难达到。实验课时量少,也是教师不重视实践教学的一个影响因素。再次,大部分实验环节以验证性质居多,仅仅是为了验证理论课上的知识点,且实验案例往往陈旧、落后,与时代脱节,缺乏新颖的设计性、综合性实验内容,这严重阻碍了学生分析解决实际问题的能力和创新能力的磨炼和培养。最后,没有形成一个完整的实践教学管理体系,缺少有效的质量监控和评价体系,无法以量化的指标衡量学生的实践能力和素质。
学科竞赛与日常教学存在很大不同,它以比赛的形式抛出实际问题,题目新颖,贴近生产和生活实际,且需要参赛学生自行查找和调研文献资料,对所学知识和相关资料进行再加工,应用软件工程的思想进行分析、设计、实现和测试。这就使得学生变“被动学习”为“主动学习”,增加了学习的主动性和积极性。同时,也使得学生不再满足于课堂所学,将会带领学生更深层次地理解和运用知识。另外,还有一些团体赛,要求学生组队完成比赛,团队内部必须合理分工、密切合作、高效沟通,才可能取得好成绩。这些能力的培养,在一般的课堂教学和实践教学中很难实现。
针对目前软件工程实践教学中存在的问题,以学科竞赛为驱动,对实践教学中存在的问题积极思考,采取相应的解决措施。同时,通过提升实践教学质量,也可以激发学生的学习兴趣,使其实践能力得到提升,进而在学科竞赛中取得好成绩,达到竞赛与实践教学协调发展的目的。
二、学科竞赛驱动下的实践教学改革方案
学科竞赛是面向大学生开展的课外竞赛活动,它以竞赛的方式将学生在课堂上所学的理论知识与实际问题紧密结合,通过让学生自行发现问题并解决问题,激发学生的学习兴趣,增强学习自信心和成就感。对于软件专业的学生来说,目前有很多不同级别、不同难度、不同含金量的竞赛。ACM国际大学生程序设计竞赛是一项由国际计算机协会(ACM)主办的国际性计算机赛事,是全球计算机行业中公认规模最大、水平最高的大学生程序设计竞赛[1]。
蓝桥杯全国软件和信息技术专业人才大赛是由工业和信息化部人才交流中心主办的面向计算机/软件工程等专业的全国性赛事。中国高校计算机大赛--团体程序设计天梯赛是由全国高等学校计算机教育研究会主办的全国性程序设计大赛。此外,还有很多软件企业和机构主办或组织的各项竞赛。
通过大量研究发现,这些竞赛的形式主要以个人或团队为单位,对于给定的与实际生产、生活关联很紧密的具体问题,运用所学知识,提供解决方案或具体实现方法。学科竞赛活动的开展,主要是对学生知识运用能力、问题的分析和解决能力、创新实践能力等进行综合考核,同时可以大力培养学生的信息捕获能力和团队合作意识。
(一)树立“以赛促教”“以赛促学”的教学理念
1.大力宣传竞赛,营造竞赛氛围
在校园内张贴竞赛宣传海报、举办竞赛宣讲会、竞赛社团活动等多种方式宣传竞赛。对“蓝桥杯”“天梯赛”这些含金量比较高且参赛范围广大的学科竞赛要着重宣传,对竞赛形式、流程和内容等进行针对性介绍,让学生对各项赛事有初步的了解,理解竞赛与日常学习的互相补充、互相促进作用。同时,校内竞赛社团成员要围绕竞赛的宣传活动,积极地发挥其引导作用,以帮、传、带的方式指引和帮助不同层级水平的学生,将学生参与竞赛的兴趣和积极性充分调动起来。
2.提升教师水平,注重培训活动
相比于日常教学,竞赛的指导工作对指导教师的业务能力和教学能力都提出了更高的要求。在指导竞赛的过程中,指导教师首先要明确“以赛促教”“以赛促学[2]”的教学理念,结合实际的竞赛项目,开展针对性的培训活动。其次,要将竞赛考核的内容、能力要求等详细给学生进行讲解,必要时,教师可将竞赛考核相关知识点重新梳理。最后,教师要多参加一些关于学科竞赛的培训会,汲取他人的成功经验,从而更有效地指导学生。
3.开展定期训练,组建团队梯度
要想在竞赛中取得好成绩,日常训练是必不可少的。根据不同的赛事,规划设计不同的训练计划。可以在学校范围内组织一些邀请赛、选拔赛,筛选出对竞赛有兴趣且有竞赛基础的学生;也可以由竞赛社团定期组织训练,包括周赛、月赛、季度赛等,根据成绩排名,筛选出处于不同层级、不同水平的学生,为参加不同类型和级别的竞赛打好基础。同时,通过训练可以将日常学习中的不足暴露出来,继而开展针对性训练,提升实践水平。
(二)教学中融入竞赛
1.以竞赛为标准,提高实践教学中程序设计的质量
传统的课程实验或课程设计中,教师往往只关注学生是否可以写出来功能正确的程序,而对于程序的书写风格、执行效率等,关注甚少。这就导致学生对于编写程序有片面的理解,认为程序只要能输出正确的结果就是一个好的程序。事实上,竞赛所涉及的很多题目,想要得到高分,不仅要保证其功能正确,程序的执行效率也是一个重要的评测点。同时,良好的程序书写风格也对程序的质量有重要的保障作用,对于成绩的评定者而言,主观上也会适当地给予好评。
2.以竞赛为基础,将竞赛题目或案例转化为日常教学的内容
很多院校的理论教学教材,选用的多为若干年前出版的教材,书中对于程序设计的具体案例也较为陈旧。实践教学中,根据理论知识的内容和进度来设计实验,实验内容往往也比较机械、落后,并且也经常存在与现实脱节的情况。通过竞赛,可以对理论和实践教学中的内容重新审视,剔除严重落后的内容,将竞赛题目引入到理论课堂和实践教学中。理论课堂和实践教学中引入竞赛题目,以此为驱动,带领学生体会提出问题、分析问题、解决问题的全流程,增加学生的课堂参与度,提高课堂活跃度,从实际情境中学会运用理论知识求解问题。同时,引入的竞赛题目或案例一般都与时俱进,涉及交叉课程或领域,有助于学生了解当今软件行业的现状和发展趋势,让学生可以紧跟上时代的发展,这对于软件专业类学生来说,无疑是十分重要的。
另外,日常教学中,伴随着竞赛题目或者案例的解决,学生会获得成就感,从而激发参赛的积极性,达到了“以赛促学”的效果。
3.以竞赛为目标,规划日常训练方法
竞赛中的题目类型不同,难度也各异,不同的学生,对于知识点的掌握和运用能力也不尽相同。因此,需要规划一套以日常教学内容为基础的竞赛训练方法,尽可能覆盖到所有不同阶层的学生。
大一学年的第一学期,学习完“分支结构、循环结构、数组和函数”等内容之后,即可开始首轮训练。首轮训练重点在于巩固基础知识,采用书面答题和上机编程相结合的方式,设置比较简易的题目,让学生尽快找到编程的状态。大一学年的第二学期,在学习完“自定义数据类型、递归、指针”等内容后,开展第二轮提升训练。第二轮训练在首轮训练的基础之上,主要采用上机编程的方式,选取一些难度适中的题目,运用所学知识可以解决一些较为简单的实际问题。
大二学年的第一学期,接触到“数据结构”这门课程,学生通过该门课程的学习,会掌握大量经典且实用的基础数据结构,诸如,线性表的顺序和链式结构、栈与队列、二叉树、图、动态查找表以及排序等,学习完这些内容之后,开启第三轮提升训练。第三轮提升训练相比前两轮,会在题目的设置广度和难度上加深,要求学生能灵活选取和运用各种数据结构,解决较为复杂的实际问题。
大三学年的第一学期,学习“算法分析与设计”这门课程,对于经典的递归算法、动态规划算法、贪心算法、分析算法等深度理解,随后开启第四轮提升训练。第四轮训练,是对于算法、数据结构、程序设计语言等课程的综合运用,此轮训练可设置一些难度较高、复杂度较大、综合性较强的题目,训练方式上,既可以单人训练,也可以团队一起训练。但从团队协作的角度来说,建议以团队方式训练,这样有利于培养学生团队合作的能力。
(三)競赛中嵌入教学
根据上述内容,第三轮训练结束后,进行一次全员测试,根据测试结果,将学生分为基础班和提高班。对于基础班,学生普遍存在基础知识不牢固,理解不透彻等现象,因此,需要让这部分学生重新学习“数据结构”这门课程中相关的内容。教师可根据竞赛考核的知识点,按照复杂度、重要性、出现的频率等因素,设计出针对基础班学生适用的教学方式。提高班的学生,也可结合自己的学习经验和感受,为基础班的学生做一些报告或总结,从同龄人的角度提供一些可借鉴的经验,同时也可鼓励基础班的学生,督促他们早日进入提高班。
对于提高班的学生,他们对于程序设计语言以及基础的数据结构已经掌握得比较扎实,竞赛中等难度的题目对于他们来说已经游刃有余了,他们所欠缺的是各类算法的深入理解和运用。作为指导教师,首先必须提升自己的算法水平,多看、多练、多用算法,通过阅读文献、参加培训、参与实际工程等方法,快速提高自己的业务水平。其次,要利用工作日的空闲时间或周末时间,为学生做各类算法的强化培训。培训过程不仅提高了学生对于算法的深层次理解,也同样检验了教师的教学能力。
三、学科竞赛驱动下的实践教学保障措施
竞赛的成功举办和好成绩的取得,不仅依赖于学生的刻苦训练和指导教师的正确指导,还需要学院、学生会、学校等管理部门的大力支持,各部门共同做好服务保障工作[3]。
首先,争取学院和学校的经费支持。竞赛过程中,涉及竞赛的组织费、报名费、耗材费、差旅费等费用,如果单纯靠学生和指导教师来负担这些费用,势必影响参赛的积极性。目前,学院和学校每年都设有关于学科竞赛的预算,对参加竞赛的学生和指导教师提供经费支持,这无疑为参赛人员增添了不少动力。而从很多参加竞赛的学校统计数据来看,凡是在竞赛中取得好成绩的学校,基本上都是在竞赛费用这一方面做了大量的投入,这些投入使参赛学生、指导教师以及学校都会从中受益。
其次,肯定指导教师的付出并适当给予奖励[4]。指导竞赛活动不同于一般课堂教学,需要教师在正常教学以外,再额外花费大量的精力和心血来组织、培训参赛队伍。教师的辛苦付出要得到学校的肯定,可考虑折算成教学工作量,或是给予竞赛专项补贴。在涉及评定职称、申报教学教育成果时,对于取得重大好成绩的指导教师,应适当给予政策倾斜。
最后,肯定参赛学生的成绩并适当给予奖励。对于在竞赛中获奖的学生,要在每学期的综合测评中,给予加分。如果在国家级或国际级重大赛事中获奖的学生,可考虑免试推荐攻读硕士研究生。鼓励在竞赛中获奖的学生总结经验,汇集成果,继而申请专利或软件著作权,转化成果,学校对此类学生要给予物质奖励。
四、结束语
以学科竞赛为驱动,将竞赛和日常教学深度融合,这种教学模式可以有效刺激学生学习的积极性和主动性,真正做到对理论知识的灵活运用,大大提高学生的实践动手和创新能力。以实现“以赛促学”“以赛促教”“赛教融合”的目的,学院、学生会、学校等管理部门应与时俱进,积极采取各种有效措施,提高软件类专业实践教学质量,培养出更多优秀的人才。
作者单位:秦怡 李俊吉 田丽苗 太原科技大学
参 考 文 献
[1]王龙,李杰,赵其昕.学科竞赛驱动下的软件工程专业实践教学改革探索[J].高等教育, 2019,1(2):162-163.
[2]朱晓青,刘铁铭.基于蓝桥杯的“以赛促学”教学方法实践[J].计算机工程与科学,2016,11(1):46-49.
[3]许龙飞,徐涛.竞赛背景下大数据人才培养路径思考[J].计算机教育,2021,4(5):159-163.
[4]王桂平.高校学科竞赛培训模式探索与实践[J].计算机教育,2019,7(4):142-145.