程序设计能力培养体系建设与实践

2019-09-26 04:55张先伟曲志坚张立红马新娟王海鹏刘晓红
计算机教育 2019年9期
关键词:梯队程序设计编程

张先伟,曲志坚,张立红,马新娟,王海鹏,刘晓红

(山东理工大学 计算机科学与技术学院,山东 淄博 255049)

0 引言

随着社会的不断发展,信息技术几乎涵盖了社会的方方面面,社会对计算机类专业的人才需求日益增加。据统计,截至2016 年,我国的计算机类专业布点数已经达到2 956个,在校生数占整个工科在校生数的百分之十六七[1]。然而,对于计算机类专业人才培养理念和教育教学方法上还存在诸多问题,尤其是面向应用型人才培养的地方高校中更为明显[2]。这些问题主要体现在专业培养理念上重理论、轻实践,重知识、轻能力,重书本、轻创新;在授课方式上以教师为中心,通过课堂讲授知识的方式对学生进行单向知识传授;在对学生的评价方法上,通过使用纸质试卷进行期末考试的方式衡量学生的学习状况;在教学方法上采用板书加电子教案的形式。这些问题直接导致的结果是,培养出的学生无法摆脱眼高手低、好高骛远的毛病,缺乏良好实践能力、创新能力等专业基本素质,缺乏专业竞争力难以满足社会需求。

为了提升计算机类专业人才培养质量,迫切需要改变传统教学理念,从传统的以教为中心转变为以学生能力发展为中心。应用型人才的核心能力是工程实践能力,工程实践能力是一种综合能力[3-4]。计算机类学生工程实践能力的基础和核心在于学生的编程能力、计算思维、算法能力、创新能力等基本程序设计能力的培养[5]。程序设计能力培养主要是在大一和大二阶段,因此应以计算机类专业人才的程序设计综合能力培养为目标,建设包括程序设计基础、离散数学、数据结构与算法一体的程序设计能力课程体系和教学方法,突出对编程能力、计算思维和基本算法实现能力的培养,并在此基础上通过组织学生参与各类大学生程序设计竞赛激发优秀学生算法能力和创新能力的进一步提升,实现竞教相长的良性循环。

1 程序设计能力培养课程体系综合改革

为提高学生的程序设计能力,在授课理念上应改变以往局限于课程本身的狭隘的认识,把程序设计类课程放在专业体系中来认知,打通程序设计基础、离散数学、数据结构与算法、编译原理等课程之间的联系,在教学设计中形成一个整体,充分发挥专业入门课程的引导作用。利用程序设计基础培养学生基本的编程实践能力,在离散数学课程中通过数学问题的编程实践加深基本理论和算法的理解,在数据结构与算法课程中强化算法的实现能力,促进对算法和基本理论的掌握,通过编译原理实践对算法和理论进行综合运用并加深对程序执行过程的理解。利用程序设计类课程体系的设计充分培养学生的实践动手能力,让学生掌握知识在实际问题中的应用和方法,实现对学生程序设计基本能力的有效培养,又可以促进学生良好的专业学习习惯、专业思维习惯以及专业实践动手习惯的初步养成。程序设计能力培训课程体系结构和课程间的关系如图1所示。

图1 程序设计能力培养课程体系结构

从图1可知,学生入校以后从程序设计基础课程开始,始终强化程序设计能力。通过在不同课程中持续的强化编程能力,使学生在大学前两年形成良好的编程习惯。此外,这种实践能够使学生在编程中理解理论,逐渐促进计算思维的形成并形成良好的算法设计和实现能力。通过在离散数学中引入实践,一方面能够使学生提高编程能力,更重要的是能理解数学理论与计算机求解问题之间的关系,降低学习数据结构课程的困难,更容易理解数据、算法和程序之间的联系。

1.1 以学生为中心的授课方式改革

课堂授课过程中应摒弃专业课以知识讲解为主的教学方法,程序设计基础课程实现理论实践一体化的教学模式,所有内容全部在机房授课,学生边学边练,让教师成为教学过程的组织者与协调者,让学生成为教学过程的参与者。通过离散数学、数据结构与算法、编译原理课程加重实践教学的比重,注重理论与实践的结合;通过讲练结合的教学模式,加强教学过程中教师与学生的实时互动、学生与学生的实时互动,通过程序竞赛形式的上机练习,增强学生学习过程中的竞技性、趣味性,提高学生参与学习的积极性与主动性。

以山东理工大学为例,程序设计能力培养课程体系中的课程实践环节完全依托于自主开发的山东省高校第一个程序在线评测系统(SDUTOJ)。通过灵活的使用该系统,将程序设计类课程的实验教学、实践练习和考核结合在一起,学生可以随时随地登录系统提交实验代码,有效调动了学生的实践积极性,解决了课程原有实践教学方法单一、受制于教学场地、实践教学方法落后等原因造成的对学生实践能力培养不足的问题(课程实验可访问SDUTOJ,在线注册并登录以后点击Experiments查看:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home)。

1.2 学生评价方式改革

在学生考核与评价的过程中,可以借助大学生程序设计竞赛机制与SDUTOJ平台,对程序设计基础、离散数学、数据结构与算法和编译原理的课程的考核方式进行彻底的改革,突出对能力的考核与评价。以山东理工大学为例,程序设计基础课程自2014年开始取消了理论考试,只保留平时实验与期末机考两个环节,建立了与课程目标一致的实践能力考核框架。所有课程采用“抽测+补测”的机考模式,通过阶段性的实验抽测,充分保障了平时实验考核结果的公平性、有效性,解决了原来对学生平时实践能力无法准确考核评价的问题;通过后期定时对抽测不过关学生的补测,调动了学习基础相对较弱的部分学生平时认真及时做题的积极性,真正发挥了平时“抽测+补测”这种新型考核模式对学生平时学习的驱动作用。离散数学、数据结构与算法和编译原理根据课程性质,依托于在线测评系统实现课程的日常实验和编程练习,借鉴程序设计竞赛模式完成课程期末机考,考试成绩由理论笔试成绩、平时上机测验成绩和期末上机考试成绩构成,实现了理论考试与机考相结合的评价机制。截止2018年6月20日,通过在线测评系统进行实践训练和考核统计情况见表1。

2 竞教相长的创新能力培养模式

程序设计类课程改革保证了计算机类专业学生有较高的实践能力,为了不断激发学生的学习兴趣和动力,为优秀学生提供良好的发挥空间,促进创新能力的进一步提升,可以通过组织学生参加各类大学生程序设计竞赛,实现程序设计类课程教学与ACM大学生程序设计竞赛的有机结合,形成以教学带动竞赛以竞赛促进教学的良性循环[6]。教师应将科技竞赛视为学生创新能力培养的一个重要环节,本着人才培养的理念参加科技竞赛,认为大学生创新活动源于教学、源于专业又能够促进教学、融入专业能力的培养过程,注重学生良好的自我约束能力和诚信比赛的品质培养,注重团队意识与协作能力的训练。

为了更好地组织管理学生参加竞赛,促进学生更快成长,我们构建了科学完整的ACM创新培养体系,制订了从第一学期到第五学期详细的训练计划。该训练计划包含了每个周末与寒暑假的训练安排,包含大一、大二、大三各个年级学生的不同训练内容,也包含了专业与非专业学生的不同训练计划。该训练培养体系涵盖了ACM国际大学生程序设计竞赛所需要的全部内容,知识点的分布按照不同培训阶段由易到难,训练题目借鉴了国际国内最高质量的题目标准,保障了只要学生能够按照体系要求认真努力的训练,就一定可以显著的提升个人能力。

表1 山东理工大学程序设计能力培养课程体系实践训练和考核情况统计

此外,建设了合理的ACM梯队对学生进行分类指导和训练,目前集训梯队主要包含以下几个:梯队一:程序设计基础一(主要面向所有有意愿加入的大一学生);梯队二:程序设计二(主要面向从梯队一选拔的、参与大一寒假集训的大一学生);梯队三:数据结构(主要面向经梯队二选拔的、参与大一第二学期集训的学生);梯队四:算法初级(主要面向经梯队三选拔的、参与大一暑期集训的队员);梯队五:算法中级(主要面向经梯队四选拔的、参与大二第一学期集训的主力队员);梯队六:算法高级(主要面向经梯队五选拔的、参与大二寒假及以后集训的主力队员)。最后,还成立了“智能数据工程与分析学实验室”和“运维技术中心”两个实验室,对退役后有志于学术研究与技术训练的学生开放,跟着指导老师做研究或者项目开发。

3 程序在线测评系统

程序设计能力培养体系建设的重要支撑平台是我们设计的程序在线测评系统(http://acm.sdut.edu.cn/onlinejudge2/),其支撑了课程体系建设的实践教学改革和实施,支撑了大学生程序设计竞赛的训练和组织。该系统自2009年上线以来,不断对系统进行维护与升级,不断地补充练习题目。目前该系统包含适合各个水平学生的不同难度的4 000多道在线编程测试题目,题目包含程序设计基础、数据结构与算法、编译原理和离散数学等课程的编程练习题,也包括部分各类大学生程序设计竞赛的真题,在练习和作业时为各个层次的学生提供了选择的余地。目前该系统已经成为目前省内高校中注册用户最多、题目数量最大的程序在线测评系统,截止2019年5月13日该系统累计提交量已达6 013 649 次。通过该在线测评系统,学生可以在有网络的地方登陆平台练习并在线测评所提交代码是否正确。作为一种创新的实践教学平台,允许学生根据自身水平和兴趣,选择适合的编程训练方式、数量和难度,提高实践教学的学习效率,极大地激发了学生的编程兴趣,激励了学生的个性化自主实践训练;同时教师可以查看学生提交的代码,有效地监督学生并及时发现学生编程中的问题并予以指导,使课程的实践效果得到了明显的加强和提高。

4 程序设计能力培养效果

2006年到2019年5月9日,本专业学生参与各类大学生程序设计竞赛获铜奖(三等奖)以上情况统计见表2。

表2 山东理工大学计算机类专业学生参与各类大学生程序设计竞赛获奖情况统计表

截止2019年5月13日,山东理工大学计算机类专业学生在各类大学生程序设计竞赛中获得国家级铜奖以上奖励76项,其中2016年11月举行的第41届ACM/ICPC国家大学生程序设计竞赛亚洲区域赛(青岛)以学校排名11位的成绩获得金奖;此外,还在山东省大学生程序设计竞赛中获得三等奖以上奖励50项。值得注意的是在能够反映各个高校计算机专业教学水平的中国大学生计算机竞赛团体程序设计天梯赛中,我校在2016年、2017年和2019年分别以全国第六名、全国第七名(珠峰争鼎组)和全国第七名(珠峰争鼎组)的成绩获得高校一等奖,在2018年获全国(珠峰争鼎组)第14名,高校三等奖。2016年7月和2019年5月,我校受邀在中国大学生程序设计竞赛研讨会上做了“竞教相长”的经验交流报告。

山东理工大学从2006年开始首次参加ACM国际大学生程序设计竞赛,获得优胜奖,2007和2008年未参加比赛,直到2011年才获得区域赛的首个铜奖,2014年获得首个银奖,2016年获得首个金奖。对于2015年才开始的中国大学生程序设计竞赛,获奖数量和质量也在逐渐提高。从上述获奖数量和质量的统计中可以发现,从2014年课程综合改革并构建了较为完善的程序设计能力培养体系以后,学生的程序设计能力有了显著提高。

5 结语

程序设计能力培养课程体系建设与改革从2014年秋季程序设计基础 (C语言)课程开始,到目前为止历经4年,从开始的计算机科学与技术专业学生逐渐扩展到软件工程和通信工程专业的学生。以程序设计基础综合课程改革的方式和经验为借鉴,进而将计算机科学与技术和软件工程专业的课程改革逐渐扩展到数据结构与算法、离散数学和编译原理等课程,并且在逐渐地纳入面向对象程序设计、操作系统等课程形成更为完善的课题体系结构,保证计算机类专业学生从大一到大三有不间断的上机实践机会。此外,通过完善大学生程序设计竞赛训练和管理机制,进一步提高优秀学生的创新能力。

综上所述,山东理工大学计算机程序设计能力培养体系的建设与实践对提高学生的实践能力和创新能力具有良好的促进作用,相关的做法和经验可以为面向应用型人才培养的地方高校计算机类专业的人才培养提供些许可借鉴的方法和经验。鉴于篇幅限制,对各门课程综合改革的方法和经验以及竞教相长的创新能力培养模式并未展开论述,下一步我们将继续总结经验,提出更具体的程序设计能力培养方法。

猜你喜欢
梯队程序设计编程
医学专业“Python程序设计”课程教学改革总结与思考
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
纺织机上诞生的编程
装配式建筑区域发展政策评析
海上阅兵亮点众多,精彩纷呈
从细节入手,谈PLC程序设计技巧
探索青年员工从“雏鹰”到“雄鹰”的成才之路