“新工科”背景下C程序设计教学改革探索
2019-09-25陆淑娟
吕 俊,陆淑娟
(南京工业大学 计算机科学与技术学院,江苏 南京 210009)
0 引言
相对于传统工科人材培养,“新工科”旨在培养创新能力强、工程实践能力强且具备国际竞争力的高素质复合型人才。建设和发展“新工科”,如果还是沿用以往人才培养模式,那么培养出来的人才将无法满足新经济发展需求。目前,我国工科人才培养普遍存在着“目标定位不清晰,工科教学理科化”的问题,尤其在通识教育方面与实际应用脱节,导致工科学生在综合素质与应用能力上存在一定的缺陷。
计算机程序设计能力与创新能力是新工科人才能力培养的重要组成部分,由于C语言的经典、高效与简洁,使它成为大部分工科类大学生入校后的第一门程序设计课程。通过学习学生可以深入地了解计算机工作原理,理解程序抽象与模块化基本方法,掌握程序设计基本思想和过程[1],并初步建立计算思维。由于C语言程序设计面向的大部分是非计算机专业学生,在课程设置上有不少学校将它列入了通识课程范畴,并规定了统一的教学大纲,导致教学与实际应用脱节。如果在教学中能够有意识地建立C语言与专业应用之间的联系桥梁,培养学生独特的利用计算机来解决问题的思维方式,在后续的专业课程中再由专业课教师进一步引导学生应用实践,不仅能从整体上提升学生分析问题、解决问题的能力,培养良好学习习惯和思维方式,还能在更大程度上激发学生创新潜能。
1 翻转课堂与在线讨论
C语言中既包含运算符、数据类型和分支循环结构等基础知识,也包含数组、函数、结构体、文件等重点内容,还有指针以及链表这样的难点。目前高校课程学时普遍不足,按原有方式开展教学很可能连基本内容都无法讲完,更不可能再与实际应用相联系,而MOOC教学及翻转课堂的引入为这一问题的解决带来了可能。C语言程序设计课程要求学生掌握程序设计方法,提高动手操作能力,并能够综合运用所学知识解决实际问题,因此翻转课堂[2-3]下自主学习与课堂灵活互动的教学模式非常适合本课程教学。
基础知识和基本的语法规仅需较短的教学视频和较少的课上学时,进行归纳和巩固即可完成教学。数组、函数等重点内容应避免在一个预习视频中包含过多的知识点,尽量让学生先明白语法结构的来龙去脉建立全局观念,便于在课堂翻转时基于具体问题加以应用和扩展。对于指针和链表这样的难点,应尽量保证较多的课上学时与学生互动,根据学生的掌握情况调整进度,帮助学生消化理解加以应用。C语言教学内容要尽量以应用为导向,但是大一学生并没有学习到深入的专业知识,所以在设计教学内容时,要充分认识到专业课和C语言之间关联点在哪里,并由此根据不同的专业群制定相应的教学大纲和方案。此外,C语言教学还处于大学学习中承上启下的关键环节,学生可以将高等数学、大学物理、线性代数等课程所学的知识在程序设计过程中融会贯通,不仅能深刻理解程序本质以及解决问题的思路,更为专业课的学习奠定基础。
组织学生开展线上讨论是保障学习效果的关键环节之一。以往学生有了疑问往往需要等到课间或教师安排的答疑时间,问题不能得到及时的解决影响后继学习任务。通过建立课程QQ或者微信群,将讨论平台从线下转移到线上,使学生问题可以最快得到响应,激发学生主动学习的意识以及创新意识。
2 案例牵引式教学
在课堂教学中,目前很多高校还在沿用照本宣科的教学模式,加上C语言概念繁杂,规则严格,极易使学生产生厌学和畏难情绪。由于抓不住学习的重点和方法,即使学完了所有的内容,也无法自主编出能解决实际问题的程序,与课程教学目标相背离。对于信息时代下的新一代大学生,这种传统教学方式已不再适用,他们获取信息和知识的渠道不限于课堂,而且具有极强的个人主观意识和搜索信息的能力,这需要教师去引导他们对所学的内容进行总结和归纳,找出与实际的关联点,激发学生学习兴趣。
案例教学法打破了以语言知识点为主线的教学内容组织模式,不按教材上的知识点授课,而是以层层递进的程序设计案例为中心,以构建程序设计的思维方法为主线[4]。通过对问题的思考与分解去引导学生建立这种思维方法,并把要学习的语法和规则融合到具体案例中,整个教学过程强调在应用中学习,不仅能增进学生的学习兴趣,而且对提高学生分析问题和解决问题的能力也大有帮助。设置的案例可以是C语言传统的经典案例,如水仙花数、百钱百鸡、求素数等;也可以是结合基础课程的应用案例,比如矩阵运算、求定积分、牛顿迭代法求根;还可以是解决实际生活问题的案例,比如个人所得税计算、口算生成器、五子棋等。在学生具有了一定的编程基础后,可以引入与专业相关的一些基础案例,比如实验数据存储、分类与处理,图形图像的比较与处理,逻辑分析与推理,人工智能领域的BP算法、动态规划,数据挖掘领域的聚类分析等等。对于较复杂的案例可以逐步引入,在先导知识中适当地加以铺垫或者针对某一个环节进行分析,最后再完整地引出,便于学生理解与接受。
在教学过程中,随堂编程能够起到非常好的教学效果,所编写的也不一定是完整的程序,可以是案例中某个处理细节的程序片段。通过这种随学随编的形式,学生可以对教师所讲授内容和设定任务快速内化加以应用。随堂编程可以各自独立完成或者小组讨论,对同一问题找出多种求解方法,突破思维局限,产生思维碰撞,同时教师还可以在分析过程中带着学生一起评估解决方案,深化对程序设计的理解与应用。
3 任务驱动式实践
C语言程序设计是一门实践性极强的课程,洞悉程序设计的精髓并灵活运用,必须通过实践教学完成。通过实践才能使学生真正明白什么是程序,如何设计并编写程序,深入理解程序设计思想和方法,并将所学知识应用到实际中。
在案例教学牵引下,任务驱动就有了实践基础。任务驱动[5]将再现式教学转化为探究式学习,使学生能够处于积极思考的学习状态,根据各自对“任务”的理解,运用已知知识提出解决方案。它要求学生通过合理假设和抽象,将生活中实际问题转化为计算机解决问题的模型,形成计算思维,完成从手到脑到思维能力的逐级提升。
安排上机实验时,由于前半学期学生较难理解课程内容所涉及的思维方法,所以实验中过程中尽可能采用分级式任务驱动,设置递进式实验目标,学生可以通过“理解→模仿→改写→编写→拓展"的实践方式,逐步加深对程序设计的理解。在课程后半部分,除了完成常规上机实验外,还可以设置综合性程序设计任务。开发系统可以是管理系统或者在课堂上引入的案例拓展,由教师和学生共同敲定系统实现目标,最好具备一定开放性,学生以1~3人小组形式自由组合、分工合作。如在讲到数组这一章时,就设置了人机大战五子棋的任务,因为在课堂案例中已经引入了五子棋下棋规则,如何判决胜负,但是对机器采用的是随机下子方法,那么在后继任务里就可以要求学生编程使机器下棋变得“智能”,并在上机时展开PK,看谁编的程序能让机器更“聪明”,能坚持到最后。学生在理论学习过程中更具有针对性,综合运用课程所学知识进行系统设计和编程,既加强了动手操作能力,也培养了团队协作精神。
4 多维度评价方式
以往传统教学模式中,课程考核一般以期末考试为主,其比重约占到总成绩70%~80%。但是仅凭一张试卷是无法衡量学生真实学习情况,这对于全面评价学生学习质量和能力水平缺乏充分说服力,不利于人才培养。因此,为了客观衡量学生学习效果,在教学中应摒弃这种重期末、轻教学过程的鉴定型考核方法,取而代之的是引入过程型与鉴定型并重的考核方式,建立多维度评价体系,多角度、全方位进行评价。
为此,在学校2011级引入了全新的课程评价方案,如表1所示。
表1 C语言程序设计课程评价方案
从表1可以看出,最后该课程期末考试成绩仅占到总评成绩的40%,而平时成绩则从到课率、课堂提问、作业、测验、讨论和团队协作等多个角度进行衡量,更加客观地评价了学生学习效果。其中综合程序设计以小组形式共同完成,该项评分由自评成绩(组内评分,占30%),答辩成绩(随机抽取组内任一成员代表小组答辩,各小组互评,占40%),教师评分(综合评分,占30%)组成,学生不仅从程序设计者角度,还从用户角度评价软件,加深了对程序设计的理解与认识。
5 结语
在国家大力建设新工科背景下,程序设计课程对信息技术与工程教育的深度融合有着重要作用。教学实践表明,在C语言程序设计教学中采用以应用为导向的案例牵引和任务驱动式的实践教学,不仅可以将教学与实际应用相结合,大幅度提高学生对课程的满意度,而且能强化逻辑思维与计算思维,激发学生创新意识,为专业学习和应用实践奠定坚实基础。