论文部分内容阅读
摘 要:结合当前信息化发展及国家全民智能教育项目的开展,以北京化工大学及其附属中学程序设计类课程为参考,依托相关程序设计竞赛,分析高校程序设计类课程教学存在的问题。在此基础上,结合教学实践经验,从“注重理论与实践相结合,提高学生自学能力与合作能力”“将学科竞赛精神融入课堂,以赛促教”“优化课程体系,提高教学质量”“建设训练题库,加强习题练习”等方面深入探讨提高学生程序设计能力的方法,希望为程序设计类课程教学提供有意义的参考。
关键词:C语言;程序设计能力;课程体系;学科竞赛;计算机教学;教学质量
中图分类号:G642 文献标志码:A 文章编号:1008-3561(2021)28-0032-03
一、前言
随着信息化、智能化的快速发展,人工智能成为国际竞争的新焦点。2017年,国务院印发的《新一代人工智能發展规划》指出,要以提升新一代人工智能科技创新能力为主攻方向,构建开放协同的人工智能科技创新体系。因此,要逐步开展全民人工智能教育项目,逐步推广全民编程教育。当前,从中小学到大学,均加大了程序设计类课程的开设速度,且拓展了课程内容深度。对于各专业学生而言,拥有一定的程序设计能力,不仅有利于后续工作、学习、生活中对高科技智能产品的使用与维护,而且有助于提升自身的逻辑思维能力。
北京化工大学信息学院计算机系长期以来紧紧围绕提高计算机专业人才培养质量,坚持“以学生为本,以能力培养为核心,以科学素养和创新教育为目标”的教学理念,不断推进和加强学生程序设计能力的培养。同时,以学科竞赛为支持,组织周赛、女生赛、校赛、寒暑假集训等丰富的活动,以提升学生程序设计能力。仅2020年,学科竞赛累计获得省部级及以上奖励133人次,其中国家级二等奖15人次,国家级三等奖22人次。
北京化工大学在提高自身计算机专业水平的同时,还不断推动北京化工大学附属中学C语言程序设计课程建设。附属中学2018年9月开始准备开设C语言程序设计课程的相关事宜,包括指导教师的选拔、教材的选定、课件的制作、练习题的设计及训练题库的建设等。经过半年的努力,2019年3月C语言程序设计课程正式开课。自开课以来,学生在零基础的情况下取得了较大的进步。2020年学校首次组织学生参赛,学生荣获“蓝桥杯”青少组北京赛区一等奖,成功晋级全国总决赛。
为了进一步提高学生程序设计能力,提升学校程序设计整体水平,作为C语言程序设计课程及相关竞赛的指导教师,笔者结合程序设计类课程教学存在的问题,从教学与竞赛等方面提出自己的几点建议。
二、高校程序设计类课程教学存在的问题
经过多方调查,结合自身教学经验,笔者以C语言程序设计课程为例,简述课程教学存在的一些问题。
1.学生方面
首先,部分学生对课程中有一定难度的定义概念理解不充分,如数组、指针的概念。若不能透彻理解定义的概念,则使用时定会漏洞百出。其次,部分学生对知识点的掌握比较零碎,没有形成完整的知识结构体系和科学的程序设计思维模式。最后,部分学生的编程拓展能力较差。一些学生对课本或者教案中的例题能够熟练掌握,但是涉及其他综合题,尤其是解决实际问题的综合题,则捉襟见肘,无从下手。
2.教师方面
首先,部分教师偏重理论知识的讲解,忽视实践教学。C语言程序设计是一门综合性、实践性很强的课程,要求教师注重理论联系实际,引导学生结合实践加深对所学理论知识的理解。但调查发现,部分教师往往习惯于机械地讲解理论知识,不重视培养学生的实际动手操作能力,所培养的人才不符合社会要求。其次,教学方法单一,不注重创设良好的教学情境,难以激发学生的学习兴趣。调查发现,部分教师的教学方法比较单一,忽视学生的个性特点,导致课堂气氛比较沉闷,学生学习积极性不高。
三、高校教师提高学生程序设计能力的建议
1.注重理论与实践相结合,提高学生自学能力与合作能力
刚开始接触程序设计类课程的时候,大部分学生习惯于按照数学、语文等课程的学习模式去学习编程,认为要先把理论搞扎实,再去编代码。结果拿着书仔仔细细看一遍,包括书上的每一行代码都去认真推敲,但是合上书写程序的时候却什么都记不清楚。如果按照这种模式去学习,效果就会非常差。因为程序设计课程属于实践类课程,一定的理论知识作为基础是必要的,但是想要提高编程能力,就必须注重动手操作能力的培养。换言之,就是要培养运用计算机语言解决实际问题的能力。因此,笔者建议学生边看书边写代码去实践,从示例程序入手去敲代码,从最简单的程序开始,循序渐进,积少成多。这样在编写代码的时候就可以有更清晰的认识,也可以举一反三地看到程序实际执行结果,对编程有更直观的认识。
从更高的视野来看,实践最重要的作用就是让学生学会如何自学与如何加强团队合作。对于自学而言,学习编程旨在解决实际问题,这也就意味着题目千变万化。课堂上能涉及的内容是有限的,这时候教师必须摒弃“老师讲多少、学生学多少”的观念,努力锻炼学生的自学能力。在课堂教学过程中,教师可以讲解一些基本的数据类型、算法思想、解题思路等,至于细节部分则鼓励学生自己钻研。在自学钻研的过程中,学生能够巩固知识,加深理解,为更高层次的学习打下基础。对于团队合作而言,学习是一个循序渐进的过程,自学更是不可能一帆风顺,通常会遇到一些无论如何也看不懂的问题,单纯自己钻研已无法解决,这就需要同学之间的分享与互动。目前,北京化工大学及附属中学都会根据学生对知识的掌握程度与习题的完成情况,选拔一位到两位课堂小助理,协助指导教师一起做好课堂教学辅导工作。小助理可以通过相互之间的交流解决同学学习过程中遇到的问题,同时丰富自己的经验,实现知识互补。课下可建立专门的编程讨论微信群,便于课余时间学生遇到问题在群里寻求帮助,或者分享自己的解题心得。如果问题太难无人能解答,指导教师可以适当地给出思路或提示,引导学生深入探索。这种分享交流的学习方式,能够增强学生的团队合作精神,使学生对知识的理解更深、更全面,使学生的学习更有效。指导教师应积极创设这样的交流环境,让学生自主学习,自主分享。 2.将学科竞赛精神融入课堂,以赛促教
随着国家对程序设计人才培养的重视,与程序设计相关的学科竞赛受到广泛关注,包括CCPC(中国大学生程序设计竞赛)、ICPC(国际大学生程序设计竞赛)、“蓝桥杯”全国软件和信息技术专业人才大赛、团体程序设计天梯赛等竞赛。竞赛以考查学生对算法和编程能力的掌握为主,内容涉及C语言、数据结构、算法等知识点,旨在提高学生程序设计创新能力与解决实际问题的能力,全面科学地评测学生的科技素养、逻辑思维和程序设计能力,发现优秀的计算机专业人才,实现以赛促教、以赛促学、以赛促改、以赛促创,引领并促进全国程序设计教学改革与人才培养。近年来,北京化工大学在各大程序设计竞赛中获奖数量明显增多,获奖质量显著提升。针对如何提高学生竞赛能力,北京化工大学专门针对计算机专业学生开设了ACM程序设计课程,将学科竞赛内容融入课堂。2020年,为了进一步提高學生程序设计能力和竞赛水平,北京化工大学ACM团队指导教师经过深度探讨和多方调研,决定从2020级新生中选拔30名优秀学生组建ACM竞赛班,彻底实现课堂与赛事的融合。在北京化工大学的辅助下,北京化工大学附属中学也逐渐将竞赛精神融入课堂。编程社团的成立及C语言程序设计课程的开设,均以提高学生编程能力和竞赛水平为目的,课堂内容不断穿插竞赛知识,做到相互融合,相互促进。
3.优化课程体系,提高教学质量
课程体系的建立必须以人才培养目标为导向,以学生发展需求为基础,要依据学校定位与教学环境科学建立,优化发展。针对程序设计类课程特点,建议考虑如下安排。(1)理论授课与实践授课不脱节。鼓励理论与实践均由同一名教师授课,实现“一条龙”服务。(2)课程讲解模式要遵循“算法—流程图—代码”的过程,尽量给学生展现一个完整的思维流程。其中,算法是用自然语言给出实际问题的解决步骤,流程图是对算法的进一步描述,而代码则是流程图的计算机语言实现。整个教学过程将算法、流程图、代码这三个知识点联系在一起,能让教学效果显著提升。(3)课程讲解方法提倡多样性,对不同教学内容采用不同的教学方法。比如变量、表达式的讲解适合采用讲授法,具体例题的程序编写、调试可采用演示法,而涉及相同类型问题则可选用类比法教学。(4)课程组织形式可采用线上线下相结合的方式,充分利用线上教学资源。为配合线下课堂教学,北京化工大学组织了丰富的线上学习活动。每周末在OJ系统上举办周赛,根据学生知识掌握情况分为普通组和提高组两头进行,周赛题目难易程度根据学生做题情况随时调整。课程体系的优化对提高教学质量至关重要,所涉及课程内容、授课形式、组织形式等方面都需要任课教师用心钻研,以探索出一套符合自身情况的课程体系。
4.建设训练题库,加强习题练习
程序设计类课程题库的建设,可根据学生知识储备和接受能力的不同分类处理。对于初学者,指导教师在设计练习题时可将每一章的综合题分解为多道子练习题,把包含基础知识的题目放到前面作为铺垫,由易到难逐步提升。例如,在设计循环结构练习题题库时,可以从最基本的累加、累减、累乘逐步升级为偶数、倍数、平方和等类型,最后进入提升题部分。有一定基础的学生,则可以直接进入提升题训练阶段。要解答提升题,学生不仅要掌握编程方法,还要会分析数学问题,如常见的牛吃草问题、单词反转问题、字符串验证问题等。教师可以根据题库系统中每道习题提交答案的学生数量及正确解答该题的人数,有针对性地进行题库优化。对于以选拔和训练参赛学生为目的的练习题,可分为专题训练和日常训练两部分。专题训练是对某个知识点从广度和深度两方面拓展,加深学生对该知识点的理解。日常训练则可以周赛和月赛的形式组织,在练习题的设计方面要注重全面综合性,尽量符合学科竞赛的出题形式和组织形式。
四、结语
随着社会信息化的快速发展,计算机科学已经成为人类生产力和国家竞争力的重要基础,而程序设计能力则成为各学科高层次人才应当具备的基本能力。掌握系统的学科基础知识和熟练的算法程序设计能力,是计算机专业人才继续深造强劲的保障。针对程序设计类课程教学存在的问题,高校教师要从“注重理论与实践相结合,提高学生自学能力与合作能力”“将学科竞赛精神融入课堂,以赛促教”“优化课程体系,提高教学质量”“建设训练题库,加强习题练习”等方面入手,优化课程教学流程,进一步激发学生的学习兴趣,提高学生程序设计能力,为社会培养高素质的应用型人才。
参考文献:
[1]夏佳志,奎晓燕.“新工科”背景下面向程序设计能力培养的“计算机图形学”课程建设[J].工业和信息化教育,2020(11).
[2]周卫红,蒋作,江涛.以人工智能及编程能力为核心的计算机专业新工科教学改革研究[J].云南民族大学学报:自然科学版,2020(02).
[3]张泳,柯海丰,陈蒙.计算机类专业学生程序设计应用创新能力培养体系构建[J].计算机教育,2019(05).
[4]张立敏,吴涛,吴东.地方高校程序设计能力现状分析与对策研究——以岭南师范学院为例[J].中国教育信息化,2018(08).
[5]张鸣华.以模块化建设为手段提升学生程序设计能力的实践与思考[J].江西理工大学学报,2017(06).
[6]韩建民,王丽侠,叶荣华.“教学—训练—竞赛一体化”程序设计能力培养体系的构建[J].计算机教育,2017(03).
[7]何昭青,彭立,傅红普.基于程序设计能力培养的计算机专业实践教学体系的思考[J].湖南第一师范学院学报,2012(01).
[8]孙连坤,叶华,曲爽.以能力培养为导向的C语言程序设计教学改革[J].吉林广播电视大学学报,2011(02).
[9]邓沌华,石黎.计算机本科人才程序设计能力培养研究[J].湖北经济学院学报:人文社会科学版,2014(09).
[10]刘井莲,赵卫绩,杨辉,吴亚明.以能力培养为导向的程序设计课程教学改革与实践[J].通化师范学院学报,2013(10).
关键词:C语言;程序设计能力;课程体系;学科竞赛;计算机教学;教学质量
中图分类号:G642 文献标志码:A 文章编号:1008-3561(2021)28-0032-03
一、前言
随着信息化、智能化的快速发展,人工智能成为国际竞争的新焦点。2017年,国务院印发的《新一代人工智能發展规划》指出,要以提升新一代人工智能科技创新能力为主攻方向,构建开放协同的人工智能科技创新体系。因此,要逐步开展全民人工智能教育项目,逐步推广全民编程教育。当前,从中小学到大学,均加大了程序设计类课程的开设速度,且拓展了课程内容深度。对于各专业学生而言,拥有一定的程序设计能力,不仅有利于后续工作、学习、生活中对高科技智能产品的使用与维护,而且有助于提升自身的逻辑思维能力。
北京化工大学信息学院计算机系长期以来紧紧围绕提高计算机专业人才培养质量,坚持“以学生为本,以能力培养为核心,以科学素养和创新教育为目标”的教学理念,不断推进和加强学生程序设计能力的培养。同时,以学科竞赛为支持,组织周赛、女生赛、校赛、寒暑假集训等丰富的活动,以提升学生程序设计能力。仅2020年,学科竞赛累计获得省部级及以上奖励133人次,其中国家级二等奖15人次,国家级三等奖22人次。
北京化工大学在提高自身计算机专业水平的同时,还不断推动北京化工大学附属中学C语言程序设计课程建设。附属中学2018年9月开始准备开设C语言程序设计课程的相关事宜,包括指导教师的选拔、教材的选定、课件的制作、练习题的设计及训练题库的建设等。经过半年的努力,2019年3月C语言程序设计课程正式开课。自开课以来,学生在零基础的情况下取得了较大的进步。2020年学校首次组织学生参赛,学生荣获“蓝桥杯”青少组北京赛区一等奖,成功晋级全国总决赛。
为了进一步提高学生程序设计能力,提升学校程序设计整体水平,作为C语言程序设计课程及相关竞赛的指导教师,笔者结合程序设计类课程教学存在的问题,从教学与竞赛等方面提出自己的几点建议。
二、高校程序设计类课程教学存在的问题
经过多方调查,结合自身教学经验,笔者以C语言程序设计课程为例,简述课程教学存在的一些问题。
1.学生方面
首先,部分学生对课程中有一定难度的定义概念理解不充分,如数组、指针的概念。若不能透彻理解定义的概念,则使用时定会漏洞百出。其次,部分学生对知识点的掌握比较零碎,没有形成完整的知识结构体系和科学的程序设计思维模式。最后,部分学生的编程拓展能力较差。一些学生对课本或者教案中的例题能够熟练掌握,但是涉及其他综合题,尤其是解决实际问题的综合题,则捉襟见肘,无从下手。
2.教师方面
首先,部分教师偏重理论知识的讲解,忽视实践教学。C语言程序设计是一门综合性、实践性很强的课程,要求教师注重理论联系实际,引导学生结合实践加深对所学理论知识的理解。但调查发现,部分教师往往习惯于机械地讲解理论知识,不重视培养学生的实际动手操作能力,所培养的人才不符合社会要求。其次,教学方法单一,不注重创设良好的教学情境,难以激发学生的学习兴趣。调查发现,部分教师的教学方法比较单一,忽视学生的个性特点,导致课堂气氛比较沉闷,学生学习积极性不高。
三、高校教师提高学生程序设计能力的建议
1.注重理论与实践相结合,提高学生自学能力与合作能力
刚开始接触程序设计类课程的时候,大部分学生习惯于按照数学、语文等课程的学习模式去学习编程,认为要先把理论搞扎实,再去编代码。结果拿着书仔仔细细看一遍,包括书上的每一行代码都去认真推敲,但是合上书写程序的时候却什么都记不清楚。如果按照这种模式去学习,效果就会非常差。因为程序设计课程属于实践类课程,一定的理论知识作为基础是必要的,但是想要提高编程能力,就必须注重动手操作能力的培养。换言之,就是要培养运用计算机语言解决实际问题的能力。因此,笔者建议学生边看书边写代码去实践,从示例程序入手去敲代码,从最简单的程序开始,循序渐进,积少成多。这样在编写代码的时候就可以有更清晰的认识,也可以举一反三地看到程序实际执行结果,对编程有更直观的认识。
从更高的视野来看,实践最重要的作用就是让学生学会如何自学与如何加强团队合作。对于自学而言,学习编程旨在解决实际问题,这也就意味着题目千变万化。课堂上能涉及的内容是有限的,这时候教师必须摒弃“老师讲多少、学生学多少”的观念,努力锻炼学生的自学能力。在课堂教学过程中,教师可以讲解一些基本的数据类型、算法思想、解题思路等,至于细节部分则鼓励学生自己钻研。在自学钻研的过程中,学生能够巩固知识,加深理解,为更高层次的学习打下基础。对于团队合作而言,学习是一个循序渐进的过程,自学更是不可能一帆风顺,通常会遇到一些无论如何也看不懂的问题,单纯自己钻研已无法解决,这就需要同学之间的分享与互动。目前,北京化工大学及附属中学都会根据学生对知识的掌握程度与习题的完成情况,选拔一位到两位课堂小助理,协助指导教师一起做好课堂教学辅导工作。小助理可以通过相互之间的交流解决同学学习过程中遇到的问题,同时丰富自己的经验,实现知识互补。课下可建立专门的编程讨论微信群,便于课余时间学生遇到问题在群里寻求帮助,或者分享自己的解题心得。如果问题太难无人能解答,指导教师可以适当地给出思路或提示,引导学生深入探索。这种分享交流的学习方式,能够增强学生的团队合作精神,使学生对知识的理解更深、更全面,使学生的学习更有效。指导教师应积极创设这样的交流环境,让学生自主学习,自主分享。 2.将学科竞赛精神融入课堂,以赛促教
随着国家对程序设计人才培养的重视,与程序设计相关的学科竞赛受到广泛关注,包括CCPC(中国大学生程序设计竞赛)、ICPC(国际大学生程序设计竞赛)、“蓝桥杯”全国软件和信息技术专业人才大赛、团体程序设计天梯赛等竞赛。竞赛以考查学生对算法和编程能力的掌握为主,内容涉及C语言、数据结构、算法等知识点,旨在提高学生程序设计创新能力与解决实际问题的能力,全面科学地评测学生的科技素养、逻辑思维和程序设计能力,发现优秀的计算机专业人才,实现以赛促教、以赛促学、以赛促改、以赛促创,引领并促进全国程序设计教学改革与人才培养。近年来,北京化工大学在各大程序设计竞赛中获奖数量明显增多,获奖质量显著提升。针对如何提高学生竞赛能力,北京化工大学专门针对计算机专业学生开设了ACM程序设计课程,将学科竞赛内容融入课堂。2020年,为了进一步提高學生程序设计能力和竞赛水平,北京化工大学ACM团队指导教师经过深度探讨和多方调研,决定从2020级新生中选拔30名优秀学生组建ACM竞赛班,彻底实现课堂与赛事的融合。在北京化工大学的辅助下,北京化工大学附属中学也逐渐将竞赛精神融入课堂。编程社团的成立及C语言程序设计课程的开设,均以提高学生编程能力和竞赛水平为目的,课堂内容不断穿插竞赛知识,做到相互融合,相互促进。
3.优化课程体系,提高教学质量
课程体系的建立必须以人才培养目标为导向,以学生发展需求为基础,要依据学校定位与教学环境科学建立,优化发展。针对程序设计类课程特点,建议考虑如下安排。(1)理论授课与实践授课不脱节。鼓励理论与实践均由同一名教师授课,实现“一条龙”服务。(2)课程讲解模式要遵循“算法—流程图—代码”的过程,尽量给学生展现一个完整的思维流程。其中,算法是用自然语言给出实际问题的解决步骤,流程图是对算法的进一步描述,而代码则是流程图的计算机语言实现。整个教学过程将算法、流程图、代码这三个知识点联系在一起,能让教学效果显著提升。(3)课程讲解方法提倡多样性,对不同教学内容采用不同的教学方法。比如变量、表达式的讲解适合采用讲授法,具体例题的程序编写、调试可采用演示法,而涉及相同类型问题则可选用类比法教学。(4)课程组织形式可采用线上线下相结合的方式,充分利用线上教学资源。为配合线下课堂教学,北京化工大学组织了丰富的线上学习活动。每周末在OJ系统上举办周赛,根据学生知识掌握情况分为普通组和提高组两头进行,周赛题目难易程度根据学生做题情况随时调整。课程体系的优化对提高教学质量至关重要,所涉及课程内容、授课形式、组织形式等方面都需要任课教师用心钻研,以探索出一套符合自身情况的课程体系。
4.建设训练题库,加强习题练习
程序设计类课程题库的建设,可根据学生知识储备和接受能力的不同分类处理。对于初学者,指导教师在设计练习题时可将每一章的综合题分解为多道子练习题,把包含基础知识的题目放到前面作为铺垫,由易到难逐步提升。例如,在设计循环结构练习题题库时,可以从最基本的累加、累减、累乘逐步升级为偶数、倍数、平方和等类型,最后进入提升题部分。有一定基础的学生,则可以直接进入提升题训练阶段。要解答提升题,学生不仅要掌握编程方法,还要会分析数学问题,如常见的牛吃草问题、单词反转问题、字符串验证问题等。教师可以根据题库系统中每道习题提交答案的学生数量及正确解答该题的人数,有针对性地进行题库优化。对于以选拔和训练参赛学生为目的的练习题,可分为专题训练和日常训练两部分。专题训练是对某个知识点从广度和深度两方面拓展,加深学生对该知识点的理解。日常训练则可以周赛和月赛的形式组织,在练习题的设计方面要注重全面综合性,尽量符合学科竞赛的出题形式和组织形式。
四、结语
随着社会信息化的快速发展,计算机科学已经成为人类生产力和国家竞争力的重要基础,而程序设计能力则成为各学科高层次人才应当具备的基本能力。掌握系统的学科基础知识和熟练的算法程序设计能力,是计算机专业人才继续深造强劲的保障。针对程序设计类课程教学存在的问题,高校教师要从“注重理论与实践相结合,提高学生自学能力与合作能力”“将学科竞赛精神融入课堂,以赛促教”“优化课程体系,提高教学质量”“建设训练题库,加强习题练习”等方面入手,优化课程教学流程,进一步激发学生的学习兴趣,提高学生程序设计能力,为社会培养高素质的应用型人才。
参考文献:
[1]夏佳志,奎晓燕.“新工科”背景下面向程序设计能力培养的“计算机图形学”课程建设[J].工业和信息化教育,2020(11).
[2]周卫红,蒋作,江涛.以人工智能及编程能力为核心的计算机专业新工科教学改革研究[J].云南民族大学学报:自然科学版,2020(02).
[3]张泳,柯海丰,陈蒙.计算机类专业学生程序设计应用创新能力培养体系构建[J].计算机教育,2019(05).
[4]张立敏,吴涛,吴东.地方高校程序设计能力现状分析与对策研究——以岭南师范学院为例[J].中国教育信息化,2018(08).
[5]张鸣华.以模块化建设为手段提升学生程序设计能力的实践与思考[J].江西理工大学学报,2017(06).
[6]韩建民,王丽侠,叶荣华.“教学—训练—竞赛一体化”程序设计能力培养体系的构建[J].计算机教育,2017(03).
[7]何昭青,彭立,傅红普.基于程序设计能力培养的计算机专业实践教学体系的思考[J].湖南第一师范学院学报,2012(01).
[8]孙连坤,叶华,曲爽.以能力培养为导向的C语言程序设计教学改革[J].吉林广播电视大学学报,2011(02).
[9]邓沌华,石黎.计算机本科人才程序设计能力培养研究[J].湖北经济学院学报:人文社会科学版,2014(09).
[10]刘井莲,赵卫绩,杨辉,吴亚明.以能力培养为导向的程序设计课程教学改革与实践[J].通化师范学院学报,2013(10).