基于项目任务驱动的C语言程序设计课程教学改革与实践
2017-02-27郭银章王丽芳
郭银章,王丽芳
(太原科技大学 计算机科学与技术学院,山西 太原 030024)
基于项目任务驱动的C语言程序设计课程教学改革与实践
郭银章,王丽芳
(太原科技大学 计算机科学与技术学院,山西 太原 030024)
针对高等工科院校计算机类专业C语言程序设计课程在教学过程中存在的问题,在分析该课程教学目标、教学内容和学生能力培养要求的基础上,提出以培养计算思维能力和程序设计能力为目标的课程教学改革思路与方法。作者采用建构主义的教育思想,将任务项目驱动的教学模式引入课堂教学和实践教学过程中,设计一种包含“学习任务设计与执行、分析与求解、编程与测试、评价与总结”四阶段教学模式。最后说明关于C语言程序设计课程教学的几点思考。
C语言程序设计;任务驱动;项目驱动;计算思维;算法设计
0 引 言
C语言程序设计作为一门面向过程的程序设计语言,其教学目的是培养学生初步具有求解复杂科学问题的计算思维能力、算法设计能力、程序编程能力和测试分析能力[1]。通过该课程完善提出问题、设计算法、数据表达、编程测试以及结果分析的整个程序设计过程,进而培养学生求解复杂问题的计算思维能力、设计与选择解决方案的能力以及用程序设计语言实现方案并进行测试和评价的能力[2]。目前,在C语言程序设计教学过程中,由于很多任课教师对课程教学目标认识不清,而且教学内容抽象繁杂、教学方法和手段单一,使得学生在学习过程中,虽然掌握了大量的程序设计概念和语法,却缺乏求解工程实际问题的科学思维能力、算法设计能力和编程实现能力。具体表现在以下几个方面[3]。
(1)课程教学目标模糊,对学生能力的要求不具体。作为计算机类专业的第一门专业核心基础课,很多任课教师没有很好地理解和掌握C语言程序设计课程的教学目标,在教学过程中,没有突出学生计算思维能力的建立、算法设计思想的掌握以及程序设计方法的讲授。另一方面,在学生能力培养的达成度方面,没有清晰明确地指出该课程学习的能力要求。
(2)课程教学内容繁杂,课程知识体系有待优化和调整。在实际教学中,授课教师只是片面地按照教材的章节进行讲授,只重视程序设计语言的概念和语法细节,形成了很多孤立的知识,学生无法建立程序设计的整体概念,导致学生学习困难、死记硬背、眼高手低等问题产生。
(3)课程教学方法陈旧,教学理念和手段急需改革。当前,C语言程序设计的教学模式普遍存在“满堂灌”的现象。任课教师重视课堂教学的形式、忽略编程实践能力的培养,没有达到编程训练的学时要求,学生程序实现能力得不到提升。
针对以上问题,笔者提出了一种基于项目任务驱动的C语言程序设计教学模式,该模式融合了当今翻转课堂、CDIO、慕课、微课线上线下等先进的教学方法和手段,特别适用于工程背景突出的程序设计类课程的教学。
1 C语言程序设计课程的教学目标与知识体系
1.1 教学目标与能力需求
C语言程序设计是一门面向过程型的程序设计课程,其培养目标是通过程序设计语言的基本结构、算法分析与设计、数据的表达与构造、编程测试与分析等知识与方法的学习,使学生理解程序设计语言的基本构造,掌握算法设计的基本思想和方法,掌握变量、函数、数组、指针等基本数据表达和构造方式,掌握数据处理流程控制方法以及程序模块化结构设计方法,具备计算机基本科学问题的分析和数据表达能力、算法描述与基本算法实现的能力、模块化程序设计及调试分析能力,初步达到利用计算机求解复杂科学问题的计算思维能力。
很多高校在开设C语言程序设计的课程中,存在采用面向对象的C++和C#语言进行讲授的问题,从本质上讲,面向对象的程序设计是一个设计方法层面的问题,其最终对象体的实现,仍然是一个结构化控制过程[4]。在具体的教学过程中,通过增加面向对象程序设计基础内容的讲授,对比面向对象程序设计与结构化程序设计方法在解决问题思维上的不同,使学生从本质上认识封装、继承、多态等基本概念和编程思想。
1.2 课程内容与知识体系
C语言程序设计的教学内容和知识体系,按照问题抽象与描述、算法分析与设计、数据表达与构造、程序编程与测试的教学要求,设计不同层面的知识单元和知识体。其教学内容主要包括程序设计基础、算法设计基础、数据类型基础、程序控制结构、函数、数组与构造类型、指针、文件与数据存储、面向对象程序设计基础等。每一部分的重点和难点列子表1中[5]。
表1 C语言程序设计知识单元的重点和难点
2 基于任务驱动模式的实践教学方法
2.1 学习任务设计与执行阶段
首先,授课教师要分析学生的基本状况、学习需求和学习能力,进行知识单元教学目标的确定。然后根据每一知识单元的核心知识点,由授课教师进行学习任务设计和微课制作,按照“难易适中、问题明确、求解可行、激发兴趣”的原则选取任务实例,创建学习任务清单并进行任务分配。同时,学生在学习任务的驱动下,通过合作交流、问题讨论、难点分析、任务分解等方式,借助微课、慕课、PPT、教材等学习方式,进行自主学习,学习效果由学生自己评价。若达到教学目标,则提交学习任务的总结报告。其执行流程如图1所示。
图1 课前知识单元的任务设计与执行阶段
2.2 学习任务的分析与求解阶段
在课堂教学过程中,教师不再讲授教学内容,而是根据学生课前学习的任务总结报告,进行分析和讲解。将共性问题和共性错误进行聚焦,集中讲授,并组织学生分组讨论设计任务方案的修改,帮助学生建立问题求解的方法和策略,引导学生进行问题的分析与方案的设计。同时,对于个性化问题,单独进行辅导,最终形成一个学习任务求解的方案。其执行流程如图2所示。
2.3 学习任务的编程与测试阶段
根据各知识单元讲授的内容,对形成的设计方案进行分类。按照验证性实验、设计性实验、综合性实验和探究性实验的不同类型,将学生自行设计的学习任务求解方案,在实验环境下分别进行实现。对于综合性实验,学生通过运用综合的实验方法和技术来进行问题求解和编程实现,培养学生综合分析问题和解决问题的能力。设计性实验是一种基于项目驱动的实践教学方法,其目的是使学生通过选定题目、查阅资料、设计方案、拟定实验内容和步骤,进行实验研究、实验总结和论证、实验报告撰写,进而培养学生独立完成实验的能力和解决实际问题的能力。对于探究性实验,它是一种对学生要求更高的实验类型,适合部分优秀学生采取开放性实验申请的方式,在相关教师的指导下完成。
2.4 学习任务的评价与总结阶段
教师要对本次知识单元的学习过程进行总结与评价。评价目标要注重学生学习过程的表现,弱化学习结果的评价。同时,在分析每个学生知识内化程度的前提下,要给出每个学生在求解问题的计算思维能力达成度和解决工程实际问题的程序设计能力达成度方面的评价。最终给出本次学习的成绩。
3 C语言程序设计课程教学的几点思考
(1)以程序设计为主线,强调学生实际编程能力和计算思维能力的培养。通过大量的编程训练,达到课程教学的目的。
(2)程序设计要具有全局性,包括科学问题的抽象、算法的设计与描述、数据的表示方法、程序的编码与测试等环节。教学过程中,要采用问题设计算法、算法带出程序的策略,强调算法设计、淡化语法细节。
图2 课中学习任务的分析与方案求解阶段
(3)强化实验环节,基础实验和课堂讲授内容同步进行。要通过课内实验、课外作业、综合训练等环节,保证课堂讲授与编程训练学时数达到1:1。加大实验分析课的时间,压缩语法教学时间。学生的编程训练,要按照“模仿、改写、编写”的方式,通过程序跟踪、程序改错、自由设计等类型的训练,激发学生编程的兴趣和成就感。要求学生在本课程的学习期间,完成2 000行以上的代码编程量(基础实验40行以上、综合实验100行以上)。实验报告,要求描述程序结构和关键算法、程序代码及注释、测试数据及结果分析、记录问题、总结心得。
(4)课程考核。建议实验及上机成绩占60%,由平时的考勤(10%)、作业(10%)、课内实验(30%)、课外实验(10%)组成;笔试成绩40%,主要考核基本概念、阅读程序、程序填空、程序改错、算法设计等内容。
4 结 语
从2012年起,在太原科技大学计算机科学与技术、软件工程、网络工程、物联网工程等4个专业进行基于项目任务驱动的C语言程序设计教学改革实践。按照“以问题设计算法、以算法带出程序”的教学思想,通过设计教学任务、采用慕课微课等教学手段、按照“模仿、修改、编写”的教学模式进行实践,取得了良好的教学效果。如何设计好项目任务,给定任务描述和要求,是实现该教学模式的关键。今后在教学任务模板的规范化设计、教学过程的自动监控和质量评价方面有待进一步研究。
[1] 教育部高等学校计算机科学与技术教学指导委员会. 高等学校计算机科学与技术专业核心课程教学实施方案[M]. 北京: 高等教育出版社, 2009: 229-232.
[2] 教育部高等学校计算机科学与技术教学指导委员会.高等学校计算机科学与技术专业人才专业能力构成与培养[M]. 北京:机械工业出版社, 2010: 84.
[3] 王瑛杰. 导学讲评教学模式在计算机程序设计教学中的实践[J]. 高教学刊, 2016(7): 148-149.
[4] 高枚, 龚沛曾, 孙丽君. 构建多层次思维培养的C/C++程序设计教学[J]. 计算机教育, 2016(1): 81-83.
[5] 蒋宗礼. 计算机类专业人才专业能力构成与培养[J]. 中国大学教学, 2011(11): 11-14.
(编辑: 史志伟 )
1672-5913(2017)02-0041-04
G642
山西省教学研究项目(J2014073);太原科技大学教研项目(201116,201418)资助。
郭银章,男,教授,研究方向为协同计算与系统安全,guoyinzhang@263.net。