程序设计基础课程教学改革探索与实践*
2017-02-09金兰
金兰
(武昌首义学院 信息科学与工程学院,湖北 武汉430064)
程序设计基础课程教学改革探索与实践*
金兰
(武昌首义学院 信息科学与工程学院,湖北 武汉430064)
分析传统的程序设计基础课程教学存在的不足,提出以计算思维培养为导向,引入问题驱动式、图示分析式、动态模拟式、研讨式课堂教学模式;层次化、阶段化实践教学模式;课外编程训练,改革考核评价方式,培养学生的算法分析和设计能力,编程能力和团队协作能力,并介绍了课堂教学和实践教学的教学改革方案。经实践证明,取得了较好的教学效果。
程序设计基础课程;计算思维;问题驱动;研讨式;算法分析和设计
在高等学校中,一般会将程序设计基础知识点融入到《C语言程序设计》课程中。程序设计基础课程教学的主要目标是:掌握C语言的语法特征,掌握计算机问题求解的基本思路和方法,从问题提出、问题分析、算法分析、编写程序、调试运行到说明归纳的过程中,培养学生的算法分析和设计能力、求解问题的能力和一定的创新能力。程序设计基础课程是计算机及相关专业的一门重要的学科基础课,一般在大一阶段开设,是大学生入学以来学习的第一门编程语言,也是训练计算思维和编程思维的入门课程。该门课程对于学生后续专业课程的学习,甚至是求职就业都起着非常重要的作用[1]。
一、学习程序设计语言存在的问题
(1)程序设计基础课程知识点庞杂,规则繁多,教师为了能够完整全面的讲解知识点,授课过程中满堂灌,学生被动听讲,常常感觉枯燥乏味,从而失去了学习的动力和兴趣[2]。
(2)学生经常上课的时候能听懂教师讲授的知识,但轮到自己亲自动手解决问题的时候,常常不知道如何抽象问题,建立计算思维模型,编程没有头绪,无从动手。
(3)在编写、运行和调试程序时经常出现一大堆各种各样的问题,摸索半天仍然没能找到问题的症结,烦躁不堪,随着问题越来越多,排错能力又没有同步提升,学习的阻力越来越大,逐渐产生畏难情绪,进而放弃编程练习。
该如何组织教学内容,改进教学方法,改善教学模式,提升教学质量,提高教学效果,是教师需要不断摸索、探讨和改革的课题。
二、教学改革方案
1.课堂教学
(1)“授之以鱼不如授之以渔”的教育理念
提出了以语法知识为主线的教学模式向以语法知识为基础,以计算思维培养为主线的教学模式。计算思维模式培养思路:按照问题提出->问题分析->算法描述->程序实现->归纳说明的步骤来设计和实现。该教学模式弱化了语言语法的讲解,强化了算法的分析和设计思路,有助于训练学生的抽象思维、逻辑思维和建模能力,提高学生的分析问题和解决问题的能力。
(2)问题驱动式教学方法
问题驱动式教学方法提高学生的学习兴趣。传统课程对知识点的讲解通常是这样一个过程:概念提出、举例讲解、归纳总结。问题驱动式教学过程中通常是对既往的知识点进行回顾,针对新提出的问题找到既往所学知识点的局限性,从而引出新的知识点,再进一步剖析讲解解决问题。例如,在讲解数组这一章的时候,一开始并不是先讲授数组的定义、初始化等语法特征,而是从顺序结构导入。先提出问题:求一个班30个学生的英语课程的平均成绩。按照前面所学的知识,可以采用顺序结构来实现,定义30个变量存放30个学生的英语成绩,然后依次将这30个学生的英语成绩累加求平均分,虽然这样可以得到我们要的结果,但是发现这种做法非常繁琐,涉及的变量也非常多,容易出错,于是就思考是否有一种更加简洁方便的做法来解决问题,于是就引出了数组的定义等系列概念。问题驱动式教学方法不仅更能引人入胜,激发学生的学习兴趣,而且有助于知识点的回顾,有利于知识的融会贯通。
(3)多样化教学方法
除了宏观上“计算思维培养”、“问题式驱动”教学模式以外,在教学过程中我们还采用图示分析式、动态模拟式等灵活多样的教学方法。使学生不单纯是学到一点点知识,而是掌握获取知识的方法和手段,即激发了学生的学习热情,又培养了学生的自学和创新能力。
1)图示分析式:用图示分析的方式来演示知识模块中复杂的变化过程和规律,形象直观,学生学起来不费劲。例如:C语言中函数调用时,函数实参与形参之间是如何进行参数传递以及它们的值是如何发生变化的?各种类型的数据作为函数参数,函数参数传递的过程与规律也不尽相同。所以在讲授函数参数传递这个知识模块时,采用了内存图示分析法,剖析了简单变量作函数参数、数组名作函数参数以及指针作函数参数三种情况下函数参数传递的过程以及函数实参和形参值的变化情况。图示分析法可以动态地、直观地看到在函数参数传递过程中内存变量值的变化情况,有助于理解函数参数传递的过程和规律。复杂的函数参数传递过程生动形象,一目了然,有效化解了学生的畏难情绪,激发了学生的学习兴趣,调动了学生的学习主动性。
2)动态模拟式:用生活中浅显易懂、生动形象的例子来现场模拟程序设计中抽象复杂的算法。比如:在讲解数组中的冒泡排序算法的时候,先讲授了将6个数按照由小到大的顺序进行冒泡排序实现的算法,接下来,请6位同学到讲台上来,随机地站成一排,用学生的身高来模拟数的大小,然后通过不断地对相邻两名学生的身高进行大小比较、交换位置来模拟冒泡排序算法的实现过程。当算法完成后,这6位同学就是按照由小到大的顺序站成一排了。通过动态模拟式教学方法,抽象复杂的程序设计算法化繁为简、通俗易懂,营造了良好的课堂氛围,激发了学生的学习兴趣,调动了学生的学习主动性。
(4)引入研讨课
《程序设计基础》上课环节针对2个班安排四次教学研讨课,每次2个学时,共计8个学时。课程组织形式如下:
1)教学内容安排。一章或几章结束后,布置一道规模适中的课后习题。比如:求一元二次方程;赛车程序;随机生成考试座位程序。对于题目的选取,最好是开放式的,具有研讨意义的题目,不要有唯一答案,题目完成可以是简单的,也可以是复杂的。
2)学生准备。学生在课下组成一个3-4人的小组,进行分工,采用团队合作的形式完成该程序。要求提交:设计文档、答辩ppt、源程序、程序演示结果。学生答辩现场如图1、图2所示。
图1 学生答辩现场1
图2 学生答辩现场2
3)考核方式。每个团队指派1名学生讲解、演示、答辩,时间控制在5分钟,20组都上台。比如,一个团队3个学生,每个学生满分100分,共300分。然后,拿出240分让学生团队给自己团队成员分配各自的得分;另外的60分由教师给出;下面的学生也会根据台上学生的表现给出评价,对团队学生的自我评分具有参考和借鉴意义。最后按照各个团队平均分的高低来进行成绩排序。
通过教学研讨课,可以激发学生的学习兴趣,锻炼编程实践能力,综合运用能力,增强团队合作意识,沟通能力和表达能力。
2.实践教学
(1)层次化实践教学体系
程序设计是实践性极强的课程,实践教学分四步进行:课堂实践、上机实验课、课程设计、创新实践。
1)课堂实践,教师讲解完案例后,给出1-2题目让学生课堂实践,课堂讲授稍作停顿给学生一个消化吸收的间隙,巩固当堂所学的知识。另外,学生的思维也从“听”切换到“思”,达到一定的教学缓冲的作用。最后,通过学生课堂实践完成的情况,教师也能充分了解学生知识掌握的情况,适当调整授课的进度和节奏。
2)《程序设计基础》课内安排了六次上机,共计24学时。课内上机环节主要是针对一个或几个章节的授课内容来安排设置的。《程序设计基础》上机环节,锻炼了学生分析、解决问题的能力,训练了动手和实践编程能力。
3)课程设计是集中性的实践教学环节,课程设计为期两周,任务是开发一个中小型的信息管理系统,能够实现对信息的增加、修改、删除、查询、排序和统计等操作,实现信息的存盘和读取。系统完成后学生现场演示,教师验收、组织答辩,学生按照软件工程流程撰写课程设计报告。课程设计环节覆盖了整个《程序设计基础》知识内容,并将各个章节的内容有机结合起来,通过课程设计环节的系统训练,充分锻炼学生的动手实践能力,发挥学生的个性化思维、创新能力和团队合作精神,使学生更好的掌握结构化程序的分析、设计、开发、调试和测试的流程。
4)创新实践是指多数学生在学习本门课程后,顺利通过全国计算机等级考试(二级C),部分学生还取得了全国计算机技术与软件专业技术资格(水平)考试(程序员)的资格。学院鼓励、组织和培训计算机科学与技术、软件工程等专业的学生参加“蓝桥杯”程序设计大赛等竞赛。
(2)阶段化实践教学内容
上机环节依照教学体系知识点的划分,并结合学生的认知规律,分模块、分阶段、由浅入深地逐步递进,将上机环节分为四个阶段。
1)模仿验证阶段。在这个阶段,上机指导教师给出一些典型的题目,并带领学生分析题目,给出示范参考程序,让学生上机运行、调试,验证运行结果。然后提出一些问题,让学生在计算机上练习,养成学生通过上机练习来验证程序和算法正确性的习惯。
2)自主设计阶段。在这个阶段,教师给出一些上机小题目,让学生自主分析,编写程序,调试运行出结果。上机主要以学生为主完成,老师可以给予辅助指导。
3)综合设计阶段。将两章及以上的知识点融合在一起,教师给出较大的上机练习题,学生自主分析,编写程序,调试运行出结果。上机主要由学生自主完成,老师可以给予辅助指导。
4)思考创新阶段。教师在该阶段给出一些由基本内容引申出的题目,或者和实际问题联系较紧密的题目,让学生在课外上机时查阅资料、独立思考解法,锻炼学生活学活用、学以致用的能力,以及独立思考、解决问题和创新的能力。
3.课外编程训练
以前也布置过课外编程练习题,但通常是没有反馈信息,也不知道大家课后做了没做,做对了还是做错了,现在就采用了下面的方法。
(1)建立一个包含所有学生的编程讨论俱乐部群,分享教学资料,发布课外拓展练习题,答疑解惑,更重要的是营造一个互帮互助的学生交流氛围,任何同学有任何问题可以发布出来,其他同学可以提出解决方法,在你言我语之中,问题迎刃而解,学生的能力也得到了提高。学期末,对群中提问或是回答问题最活跃的前10名,给予平时成绩加分。
(2)为充分调动学生的学习积极性,提高学生的编程兴趣,设立课外拓展题加分榜。首先设计与生活相关的,具有趣味性,并适量引入程序设计大赛题的C语言编程题库,每周发布2-3道“课外拓展题”,限时24小时内完成。做完题的同学可以将源代码和运行结果截图发至我。做对1题加1分,如果能实现1题多解或是提出优化改进算法,加2分。每周在qq群上公布加分排行榜分数,学期末根据课外拓展题加分榜的分数给予平时分奖励。计科15级程序设计基础课程课外拓展题加分榜如图3所示。这样既可以激发学生的学习兴趣,调动学生的学习积极性,又可以形成后面的学生你追我赶的良性学习氛围。通过课外拓展题的训练,慢慢就形成了一批编程能力比较突出的学生,同时也为后期的编程大赛遴选出种子选手。
图3 计科15级程序设计基础课程课外拓展题加分榜
4.考核评价方式
打破单一闭卷的传统考核方式,针对不同教学环节,采用不同方式进行考核。
(1)课程考试采用闭卷考试与平时成绩、上机成绩相结合的方式进行考核。平时成绩占总成绩的10%,上机成绩占总成绩的20%,卷面成绩占总成绩70%。平时成绩包括平时到勤情况、平时作业和qq群活跃程度加分成绩;上机成绩包括上机表现、上机报告、课外拓展排行榜加分成绩。
(2)考试题目包括 “单选题”、“多选题”、“填空”、“读程序写结果”、“程序填空”和“编程题”等类型的题目。宗旨是考查学生的“程序设计”能力,充分体现“以程序设计为主线”的教学指导思想。
(3)课程设计考核由平时成绩(含设计表现、到课率等)和业务考核成绩(设计报告、编制的软件、撰写的论文等的完成质量情况)两部分组成,均按百分制记分,其中平时成绩占总成绩的30%,业务考核成绩占70%。即:课程设计总成绩=平时成绩*30%+编制的系统软件质量*30%+学生答辩情况*10%+课程设计报告质量*30%。
改革后的考试方法,和成绩计算方法激发了学生的学习积极性;转移了学生“死记硬背”的学习方向;锻炼了学生“以提高能力为目标”的学习风气;培养了团队合作精神,收到很好的教学效果。
三、教学改革成效
2014、2015级计算机科学与技术专业学生的程序设计基础课程成绩提高,成绩统计表如表1所示。从学生的整体成绩来看,2015级学生比2014级学生的平均分提高了1.6分,最高分提高了3分。从试卷分析来看,2015级学生比2014级学生的算法分析与设计能力、编码能力、差错和调试程序的能力有明显提高。
学院组织和培训计算机科学与技术、软件工程等专业的学生参加“蓝桥杯”程序设计大赛等竞赛,多届多名学生取得了较好的成绩,获得了省级一、二、三等奖,以及国家级一、二、三等奖。
表1 2014、2015级计算机科学与技术专业学生的程序设计基础课程成绩
四、结语
程序设计基础课程从课堂教学、实践教学、课外编程训练、考核评价方式等各个方面进行了教学改革,并经过实践证明已取得了一定的成绩。但教学模式、教学方式的改革不是一蹴而就的,是一个长期、持续、不断优化的过程,在未来的教学中,我们将在学生自主学习、学生交流平台、师资队伍建设、测评考核等环节进一步探讨和改进[1],努力提升学生的自学能力、实践能力、分析能力、设计能力、表达能力、沟通能力和一定的创新能力,从而培养满足市场需求的应用型素质人才。
[1]李军,曹记东,林勇.程序设计基础课教学内容及模式改革[J].计算机教育,2013,(8):34-37.
[2]赵卓君.在程序设计基础教学中结合教育理念融入丰富教学元素的应用和探讨[J].信息系统工程,2011,(9):135-137.
(编辑:郭桂真)
G642.0
A
1673-8454(2017)02-0035-04
校级精品课程“程序设计基础”(2014J01)。