刘盛尧 盛 凯
(合肥职业技术学院,安徽 合肥 230000)
《C 语言程序设计》一般是电子信息,计算机类等专业的第一门编程基础课。 目前对于C 语言课堂教学的研究有很多,例如,文章[1]让C 语言教学融合当前网络脚本语言HTML 及JavaScript 的学习, 对C 语言课程广度和深度突破习惯性认知模式进行了探索;文章[2]釆用任务驱动教学,推动学生在短时间掌握C 语言的主要知识点。 但课堂时间毕竟是有限的,需要课后的大量练习,才能锻炼出实际动手编程能力,因此,对课后作业练习的改革和探索成了一个值得探究的问题。
本文首先进行C 语言课程课后作业的改革设计,然后以计算机网络应用专业三个平行班授课为例,探索C 语言课后作业改革实践的效果。
要督促学生《C 语言程序设计》等编程类课程的课后作业,提高学生自主学习的兴趣,并真实地反映学生的学习情况,笔者希望可以通过以下几点作业改革,达到良好的学习效果。
线上学习,首先通过工单制、超星等平台建立自己的教学资源,另一方面推荐优秀的慕课以及学习视频,提供在线资料让学生在课下进行预习和复习。 比如,通过工单制的小视频观看作业,提前进行课程预习,并留一些课前作业,了解学生的掌握程度,这样课上教学时不至于处于一种完全不了解的状态;课后对课上不理解的内容可以通过观看优秀学习视频补缺补差。从课前课后两方面控制学生的预习质量和课堂学习的质量,提高学生对C 语言知识点的整体掌握。
利用Dotcpp C 语言学习网站的在线做题, 对应章节有对应知识点的编程题目,在线测评可以自动进行检测,可拥有独立小组,自定义适合小组自身的训练计划,了解小组成员的学习状态,多人权限角色协同编程工作。 利用C 语言学习网,首先较传统的老师布置的几个作业题目或书后的几道练习题而言,有充足的题库可以让同学进行练习;其次对于传统的老师纸质批改或者人工批改学生的电子编程作业都是非常繁琐的,即便老师投入巨大的时间与精力,也无法全面进行精确无误的排查,而通过系统可以自动判定编码的准确性,并且可以立即向学生反馈正误,进行再次练习。
对于编程类的课后作业, 由于网络资源丰富,即使一再强调作业完成的自主性,但依然避免不了抄袭现象。 单纯的复制粘贴完全无法提高学生的编程能力,为此在前半个学期打基础时候,不仅让学生在编译器上进行代码的编写调试,还让学生将作业代码誊写在一个没有复制粘贴功能的文本中,来锻炼学生写代码的规范性和速度,避免了完全的抄袭。
优化考核方式,增加平时上机测评得分的成绩,采取平时测评不过关一票否决制, 提升学生平时用功的动力,杜绝期末考试前临时抱佛脚的现象。上机测试时间限定为一节课,分别在循环程序设计、函数、指针和文件操作这几个重要章节学完之后, 进行4 次上机测评,教师提供多个问题随机分发给学生测试,要求学生当场完成,并从运行结果、编程规范、程序逻辑等方面评定实验成绩。用这种现场综合性的考核机制,较为真实地反映学生平时作业的练习掌握情况。
由于每个人对知识的求渴状态以及学习能力等各方面存在很大差异,对课程学习的要求和目标也会产生很大差异,如果一味做等同要求,会适得其反。因此,将课后作业练习设置不同的难度系数,难度系数越大,起点得分越高,平时成绩在起点得分基础上进行加权,但是不超过上一个等级分数,若不能按时按量完成则直接降为最低等级。 在学期初,每个学生可自主根据自己的目标选择作业完成等级,并在每次小测验之后根据学生获得的分数以及个人意愿相对应的调整他们的作业难度等级。 通过这种方式,既能保证个体的差异性,也能激发学生的挑战欲。
利用大作业和小作业相结合的形式,不仅布置对应章节的课后小作业任务,在课程的一开始就公布综合大作业题,如学生系统,出题系统,仓库管理系统等综合应用编程大作业。引入产业界结对编程[3]思路,将学生进行4~5 人分组,结合具体项目功能需求,组员之间相互讨论,查阅资料,分配项目任务,相互检查所写代码,完善项目,鼓励大家采用不同的思路,不同的函数或不同的算法去解决问题。 课程结束后验收,验收过程要求运行小组编写代码,讲解组内成员任务分配以及完成情况,项目设计思路以及上交相关的文档材料。
大作业题目考察了C 语言课程输入输出、分支程序设计、循环程序设计、数组、字符串操作、函数、指针和文件操作等各项知识点。 但是,如果把大作业放在课程的最后阶段,仅作为学生的考试题目,往往收不到好的效果, 很少有学生能完整地完成大作业的要求。 这是由于学生平时只对单个知识点进行训练,大作业包含多个知识点的应用,一个学生很难一下子将前后的知识融会贯通,因此,通过结对方式,多名同学共同讨论,从学习完每个章节后慢慢建立综合项目系统的雏形, 随着知识点增加逐步添加项目的功能,最后在学期末完成大作业的设计任务,从而达到循序渐进的综合性项目练习目标,使学生掌握程序开发过程中的需求分析、算法确定、程序设计和调试等环节,实现对学生知识点综合运用能力的培养。
本文以笔者所教19 级计算机网络应用专业1班~3 班三个班级为实验对象, 实验周期为开设C 语言课程的一学期。 具体实施方法如下:19 计网1 班,采用除上文1.5 内容以外的所有改革课后作业的练习方式;19 计网2 班,采用上述所有改革课后作业的练习方式;19 计网3 班, 采用除上文1.6 内容以外的所有改革课后作业的练习方式。
经过一个学期的实践,在有C 语言课程的专业课期末考试中,笔者所教的三个班级比其他未采用课后作业改革的班级进行卷面成绩对比,具体见表1。
表1 实验班级与未采用课后作业改革的班级卷面成绩比较
从表格对比中可以看到,采用课后作业改革的班级比未改革的班级平均卷面成绩有显著提高, 且在80 分以上的同学百分比明显高于未改革的班级。 再对三个实验班级的一些指标进行横向比较,具体对比见表2 和表3。
表2 实验班卷面成绩比较
表3 作业完成上交情况比较
比较发现,19 计网1 班没有对学生进行因材施教的作业等级划分,大家做同等作业的情况下,自觉且理解能力强的同学会越来越好,而理解能力差的同学会越来越跟不上,布置的作业必做题也无法很好地全部完成,从而失去信心,造成卷面成绩不及格的人数明显提高。 19 计网3 班没有让学生进行结对编程的大作业训练,可以看到在最终的考试成绩上并没有太大的影响,但是作业迟交比例与19 计网1 班持平,可能是因为没有小组间的相互提醒,个别同学出现作业拖拉等想象,并且在课程结束之后,笔者做了一个关于学过C 语言你目前可以在什么地方运用它的问卷调查, 发现19 计网3 班的仅有个位数同学对C 语言项目编程有概念,其他同学学习目的仅限于平常考试以及计算机考级,真正觉得C 语言多有用有兴趣的同学较少,故结对小组以及项目大作业的训练更加有利于C 语言的学习。
通过以上实践效果的对比分析,采用上述所有改革课后作业的练习方式后,首先,学生的学习兴趣明显提高,并主动发QQ 向教师咨询编程问题,在课后能深入讨论程序中存在的问题。 其次,通过小组的团队合作,促进了学生之间的密切沟通和合作。最后,因材施教的作业等级划分制度让学习好的同学更加有动力,学习稍差的同学扎实打牢基础,而非彻底放弃,一落千丈。
通过教学班级学生调查来看,这种方法激发了学生的编程兴趣,团队合作能力,上机编程能力普遍得到了很大提高。 此外,本作业模式也可推广到计算机相关专业的其他程序设计类课程的教学中, 如C++、Java、Python 等。 当然,没有哪一种改革模式是一劳永逸的,教学改革仍然任重道远。例如,在结对编程上如何协调组队成员的能力差异,做到几人即可共同进步又能够能力高者先行;整合无法粘贴复制的功能到编译器中等,上述这些诉求都将在后续研究中继续探索和实践。