摘 要:针对众多高校 C 语言课程教学中的痛点问题,分析 C 语言教学的现状,提出三段式逆向教学设计思路,介绍具体教学设计实践。
李培, 计算机教育 发表时间:2021-09-10
关键词:逆向设计;C 语言;课堂创新;教改实践
0 引 言
首届全国高校教师教学创新大赛已经启动,正如大赛通知所说“引导高校教师潜心教书育人,形成卓越教学的价值追求和自觉行动,打造高校教学改革的风向标,全力推进高等教育的 ‘质量革命’”。说到质量革命,应当围绕课程的痛点问题,以如何开展教学帮助学生在最短的时间内获得最大的学习能力,最高效地达成学习目标为目标,借助各种平台工具,运用不同的教学手段,因地制宜地开展课程创新改革。
1 C语言课程教学的现状剖析
C 语言作为程序设计语言的常青树,在 2021 年 1 月最新发布的 TIOBE 编程社区全球开发语言排行中继续保持第一,它不但拥有众多其他语言无法比拟的优点,而且有着非常广泛的应用领域。目前很多高校都开设 C 语言课程,并且多数工科专业学生要学习 C 语言,但是开设多年来,依然面临部分学生兴趣不高、上课时好像还可以听懂,而课后自己要么编不出程序,要么编出的程序调试不出来,最终难以达到课程目标的情况,特别是目前多数院校选择采用在线评测平台进行期末考试,评判方式及规则导致成绩两极分化,出现无法执行的代码判零分导致的极低成绩,反映出学生动手编程调试能力不合格;部分题目仅仅是对日常练习题稍加变化,得分率就明显下降,反映出学生缺少举一反三的思维和应用能力 [1]。
以 C 语言课程大纲中的要求为例:通过本课程的学习,学生理解和掌握结构化的编程思想和编程方法,掌握 C 语言的程序结构和语法规则,具备程序设计的能力,培养学生使用计算机解决实际问题的能力。以逆向设计的思路思考最终课程大纲目标的达成,结合教学现状进行课程的教学创新改革实践,需要依托新的教学理念,借助新的平台工具,具体在每一节课的三段式逆向教学设计中,重点需要达到以下几个要求:培养学生对程序设计的兴趣;培养学生实际动手编程、调试能力;培养学生熟练掌握经典例题;培养学生在经典例题基础上的举一反三能力。
2 三段式逆向教学设计思路
教学创新改革的目标决定了以学生为中心,更要求教师围绕课程的痛点问题以及课程效果评价进行有效的教学设计。一方面,教师扮演的是设计师的角色,基本的工作就是精致地设计课程和学习体验活动,以满足特定的教学需求;另一方面,教师扮演的是评估师的角色,诊断学生需求以指导教学,使教师、学生以及他人更好地检查是否已经达到预期的目标。
坚持目标导向、问题导向、结果导向的教学设计,与传统的以固定的教材、擅长的教法以及常见的活动相比,本质上是需要进行逆向设计。按照逆向设计的思路,教师将一节课的教学设计分为 3 个阶段:第 1 个阶段为确定预期结果的阶段,要确定本节课结束后学生应该理解什么知识,掌握什么技能,达到什么水平;第 2 阶段为确定评价方法的阶段,要确定本节课后应该如何评价学生的学习达到了预期地结果,有哪些证据可以公平且明确地证明;第 3 阶段为设计学习体验和教学,要确定最适合的教学方式方法、资源和工具。最终,教师通过学生需要掌握的知识和技能来思考指导学生做什么,哪些活动可以使学生获得所需的知识和技能,提供的资源是否合适高效 [2-4]。
同时,可以通过 6 个方面对设计及效果进行核查和评估,包括:①能解释,即能归纳总结解释概念;②能阐明,即能具体阐述现象、事实; ③能应用,即能在合适的情境中有效使用知识; ④能洞察,即能批判性地看待分析;⑤能发现,即能在经验基础上发现价值;⑥能自知,即能准确认识自己,反思学习。
3 三段式逆向教学设计实践
将三段式逆向教学设计应用于 C 语言课程教改创新实践,以设计一节基于该理念的课堂教学为例,选择 C 语言 3 种基本结构中在教学中涉及的最后一种结构,也是难度升级的一个结构,即循环结构,具体主题为循环结构典型应用——穷举法。
在学习本节内容之前,学生已经掌握 C 语言中基本数据类型的内容以及顺序、选择结构的程序设计,并在此基础上能够针对一些简单应用编写程序。本节课所在的章节是 C 语言 3 种基本结构中最后一种循环结构,学生已经完成实现循环结构的 3 种语句学习,能够使用 while 语句、dowhile 语句、for 语句实现循环结构及循环嵌套,能够解决一些简单的循环嵌套问题,已经在程序设计和实现方面有了很大的进步,但是循环嵌套还需要加强。面对一些课内未涉及的问题时,还不能做到通过自行分析问题,获取编程求解的算法思路,期待通过学习掌握这类问题的思路和方法以及全面掌握循环结构典型问题,进一步体会计算机编程丰富的应用。
具体三段式逆向教学设计的整体思路:要理解并掌握穷举算法,才能够利用计算思维的思想将其转换为程序设计代码,在实现过程中不乏较为隐蔽的条件或技巧,因此,需要按照由浅入深的步骤,从算法理解着手,从简单实现着手,逐步提升难度,特别是借助一些经典有趣的问题,激发学生的兴趣,使其迎难而上,掌握升级版的循环结构典型题,从而能够解决更多循环结构应用问题,并通过分析改造程序,进一步培养学生优化程序设计的能力。
3.1 第 1 阶段详细设计
按照知识目标、能力目标和情感目标明确本节课的最终教学目标。
(1)知识目标:①巩固循环语句的使用;② 巩固循环嵌套的使用;③掌握穷举法解决问题的方法;④能够对程序进行优化。
(2)能力目标:①培养学生的计算思维能力,理解计算思维与数学思维的关联;②培养学生的科学精神和敬业精神,通过程序优化,培养工匠精神;③培养学生归纳总结、举一反三的能力。
(3)情感目标:①正确认识计算机的特性,进而充分发挥计算机的优势为人类服务;培养创新思维的能力,追求真善美;理解解决问题要思路开阔,只有想不到的,没有做不到的;通过不同解题方法的对比分析,深入理解自然辩证法中对立统一的关系。
由于学生的基础参差不齐,在课前自学后预计 90%~100% 的学生可以理解穷举法的解题思路,通过整理笔记的方式发现规律;在老师详细分析讲解后预计 80%~90% 的学生可以掌握穷举法的编程求解问题,经老师指导、小组合作完成当堂任务,70%~80% 的学生可以掌握优化或多种方法编程求解,其中,50% 以上的学生能够做到对同类型问题的举一反三,10%~20% 左右的学生甚至联想拓展算法应用,可以挑战高难度应用问题(课后的最强大脑问题),能从较为新颖的角度解决问题等。10%~20% 的学生掌握起来会有些吃力,必须加强练习,配有一定的课外辅导与答疑,才可以达到课程对本章节的掌握要求。
3.2 第 2 阶段详细设计
首先,针对课程目标提高学生运用 C 语言编程解决实际问题的能力,最终课程期中、期末考核为在线评测平台 PTA 实时评测,因此除了实验课,平时考核也应重点以此平台为实践考核平台。在理论课堂上,一方面重点借助该平台进行考核,另一方面重视动手实践操作。
针对本节课内容,教学设计重点利用该平台用于课堂教学效果的评测,包括课前测、随堂测和课后测,方便实时查看学生的提交情况(时间、得分、测评结果、查重等),全面了解正确提交前的整个过程,一次成功还是多次成功?直观展示出错及改正的过程,查看错误信息,第一时间检验授课效果,及时发现问题,随时查看个人代码,共同探讨并加以解决。对该平台不便考查的小组合作完成类任务,采用编译环境下运行调试通过,配合结果截图作为验证标准。
整节课借助 PTA 平台并通过学习通小组任务进行知识目标和能力目标的考查,同时,借助学习通调查问卷和最强大脑讨论题对能力目标及情感目标进行补充考核。工具方面,利用笔记本或手机端的编译器实现课堂现场代码的编写、调试及运行,完成 PTA 考核及学习通小组任务的提交 [5]。
3.3 第 3 阶段详细设计
本阶段最重要的创新在于以能力为导向,变传统的理论课只讲不做为边讲边做,围绕课程目标对学生实际编程水平的要求,全程将理论与实际操作相结合,任务驱动。
首先,围绕本节课要讲的穷举法,选取 3 个具有代表性的趣题,分别是鸡兔同笼问题、换硬币问题、百钱白鸡问题。由课前编程求解的鸡兔同笼问题引出穷举法的思想,并提供代数求解的思路。课上由老师提供三重循环求解换硬币问题的基本思路,并进行编码及环境演示,由学生小组讨论编写求解代码,引导尝试用二重循环、一重循环实现,并围绕不同的代码进行执行次数的讨论,从而理解代码优化的意义。在此基础上,让学生尝试完成百钱白鸡问题的代码补充,从而加深学生对穷举法求解的全面认识,使其掌握分析问题的严谨思维。最后,所有学生完成 PTA 平台上的换硬币问题作为本节课的考核,评测问题增加了约束条件和输出要求,结束前围绕 PTA 平台上未通过评测学生的报错信息,集体讨论当堂解决,课后进行慕课平台作业、PTA 实验任务完成情况、学习通拓展穷举问题讨论及上课效果的调查。
对课堂上的应用问题直接动手编程求解,课上老师演示加小组合作实际操作;对易于接受和独立掌握的内容,通过课前测试考查简单总结,作为课上的“小菜”,而将难度较大、适合讨论研究且需要启发的内容精讲精练,充分讨论,作为课上的“主菜”,充分发挥老师在课堂上的作用,不仅仅是知识的传授者,还要扮演引领者、启发者。有针对性地指导学生学习,使其掌握有效的学习方法,达到最好的学习效果;同时,布置进阶型任务,激发学生挑战的欲望,满足不同学生的学习需求,达到个性化定制学习的目的。
整堂课以能力为导向,围绕课程目标对学生实际编程水平的要求,全程将理论与实际操作相结合。通过精心设计核心问题,围绕核心问题代码开展代码编写、补充、改造、分析及查错改错等全环节的练习,利用代码之间的联系,实现 50min 除了讲解讨论分析,还完成了多个代码编写调试的实际操作。课堂设计思路如图 1 所示,每个学生参与完成 3 个完整代码,学习掌握 2~4 种代码实现思路,从而真正提升程序设计语言类课堂的教学质量。
整节课的全部问题都通过学生实际动手编程、调试,最终运行得到正确结果;同时,课前、课中、课后及学期末都在 PTA 平台进行及时的教学目标评估用于反馈,提供教学反思及改进参考。
3.4 效果评估
本节课后实验在 PTA 平台上布置基础实验(必做)和拓展实验(选做)两套题目,结合课堂教学,学生完成情况理想,达到了课程对循环基本结构、循环嵌套及穷举法的掌握要求。在学期末的统一机考中,作为难点的循环嵌套知识点平均得分率只有 60%,而采用三段式逆向教学设计授课班级的该知识点得分率达到了 80% 以上,表明本节课从教学目标逆向分析设计,借助典型 应用题,对循环嵌套在实际应用中强化巩固,对该难点的突破取得了一定成效。同时,在学期末的统一机考中,该教学设计实践应用提升了学生举一反三的能力,使得该班整体成绩优秀且高分人数大幅增加。
借助信息化平台和工具,课程教学全程都有记录留存,教学评价兼顾形成性评价和总结性评价,随时可导出加以计算,通过整合所有的数据,形成完整的可查、可分析、可回溯、可存档的全套考核资料,可以对学生整个课程的学习过程进行全面评价,针对个人和班级进行有针对性的全面分析,可适当应用一些算法,另外加入监控机制,及时进行教学预警。
4 结 语
教学改革创新实践对照前述的 6 个方面进行检查,有针对性的教学设计达到了能解释、能阐明、能应用、能洞察、能发现、能自知的目标。
纵观计算机历史长河,很多编程语言都曾辉煌过,但都是昙花一现,终究走向没落,唯独 C 语言在计算机行业中始终处于重要地位,作为科技强国的重要组成部分,计算机科学的发展至关重要,而让我们的学生真正掌握 C 语言,适应国家发展的需要,教学改革创新实践势在必行。相信在未来课程教学中仍会不断涌现新的问题,唯有大胆创新实践才能使 C 语言课程教学目标达成情况不断提升。