基于CS2013的程序设计基础课程建设
2018-07-13赖晓燕程铃钫
赖晓燕,赵 浩,程铃钫
(福建农林大学金山学院,福建 福州 350002)
0 引言
2013年,ACM和IEEE联合推出了第四部计算机科学高等教育指导性大纲 CS2013(Computer Science Curriculum 2013)[1,2],该纲领性文件提供了100多门将知识单元具象化的案例课程,为国内外高等院校计算机专业教育提供了切实可操作的蓝本,因此受到了全球计算机教育行业的高度关注,也引发了国内外计算机高等教育领域的专家对其进行研究和实践的热潮[3]。CS2013中计算机科学的知识体系共由18个知识领域构成,每个知识领域可以再细分为多个知识单元,其中,与“程序设计基础”课程相关的有两大知识领域:程序设计语言(Programming Language, PL)和软件开发基础(Software Development Fundamentals, SDF),SDF是由2001年发布的CS2001和2008年发布的CS2008中的编程基础(Programming Fundamentals, PF)重新整合而成的,但是两者具有较大的差别,PF侧重的是一种编程技能,而 SDF更关注的是整个软件的开发过程,更强调计算思维方面的训练和求解实际问题能力的培养[4,5]。目前的“程序设计基础”教学能否达到新的纲领性文件要求?在 CS2013指导下的“程序设计基础”课程如何定位?在 CS2013指导下的课程将如何建设?这些都是亟需探索和研究的问题[6]。
1 程序设计基础教学现状
目前,程序设计基础的教学包括两方面的内容:一是C语言的语法;二是程序设计的思想和方法[7]。课堂教学按照给出语法、举例说明语法、学生练习、分析总结这一模式来组织教学,这种教学方式存在弊端:一方面在一开始就以C语言的语法为重点,学生将记忆十几种的输入输出格式说明符、三十几个运算符的结合性、优先级等,很容易让学生淹没在语法规则中,陷入细枝末节而忽略了程序设计的思想,“只见树木不见森林”,体会不到编程的乐趣,易使学生产生抵触情绪,随着课程的深入,问题将不断累积,学生终将失去编程的兴趣,畏惧编程,甚至对选择的计算机专业是否适合自己持有怀疑的态度;另一方面现行教学侧重编程技巧,未涉及软件开发方面的思想,远离实际应用,不利于学生能力的培养[8]。采用的教学模式以教师为中心,互动不够,学生在听中学,束缚了学生思维,培养的学生缺少自主探索解决实际问题的能力。学生评价方式较单一,以期末纸质试卷成绩为主,很难客观考核学生的实际动手能力。综上所述,目前的教学与CS2013的要求不一致,以CS2013为指导的程序设计基础课程建设与改革实践势在必行。
2 课程定位与培养目标
程序设计基础是计算机专业学生学习的第一门程序设计类课程,这门课程的掌握程度将直接影响学生对后续专业课程如:面向对象程序设计、数据结构、JAVA程序设计等的学习热情,因此,程序设计基础课程作为编程语言的启蒙课程,不仅要介绍第一门程序设计语言—C语言,还肩负着激发学生对计算机专业学习的热情,在计算机专业的课程体系中,程序设计基础课程的地位和作用是显而易见的。
CS2013指导下的课程培养目标为:通过C语言的编程实践,让学生了解软件设计与开发的过程,熟悉结构化程序设计的思想和方法,学会利用计算机进行问题描述和求解的思维方法,能够熟练使用C语言编程解决实际问题,引导学生自主学习,养成良好的编程素养和工程素养,为后续课程的学习和将来从事软件开发奠定基础。
3 课程建设与实践
3.1 教学团队建设
打造高水平的教学团队,是程序设计基础课程授课质量的有力保障,是课程建设的首要任务,也是课程建设的一个长期奋斗的目标。经过多年的努力,我们学院已经形成一支既掌握教学技能,又具有工程实践能力的“双师型”专业教学团队。我们在2009年组建程序设计基础教学团队,现在教学团队由10名教师组成,主要成员均长期从事本课程或程序设计类相关课程的教学和学术研究,其中,副教授3人,高级工程师1人,2名教师近三年到国内高校访学,6位教师长期从事 ACM、“蓝桥杯”全国软件和信息技术专业人才、全国电子设计、数学建模等学科竞赛指导,累积了丰富的项目实战经验,5名教师参加了为期一年的企业实践锻炼,增强了企业经验,2人考取了计算机软件水平资格证书。这几年,通过鼓励教师外出学习、参加企业实践、指导学生竞赛、参加会议等方式,团队教师的理论知识更加系统扎实、工程实践能力得到较大提升。
3.2 教学内容的组织和规划
根据 CS2013中的程序设计语言和软件开发基础两大知识领域的要求,突出计算思维能力、编程实践能力、分析解决问题能力、自主学习能力培养,结合我院实际,对程序设计基础课程的理论和实践内容均进行了重新规划。
(1)基于CS2013的理论教学设计
我们将“程序设计基础”这门课程的内容分成两个部分:一是程序设计与算法基础;二是C语言程序设计精髓,见表 1。第一部分从具体的编程语言中独立出来,以启发和训练学生的计算机思维为目标,这部分内容不需要计算机基础,适合刚入校的大一新生。通过这部分内容的学习,不仅让学生了解程序设计的几种基本方法,熟悉计算机求解问题的常用策略,更重要的是让学生理解计算机是如何解题的,掌握用计算机处理问题的思维方法。第二部分再以C语言为例,传授用计算机语言表达思想的技术,用C语言实现问题求解的自动化。通过这部分内容的学习,让学生熟悉C语言程序设计的集成开发环境,了解软件设计与开发的过程,熟练运用结构化程序设计方法解决实际问题,增强从问题分析、算法设计与实现、代码测试与调试等的一系列能力,为后续专业课程的学习及将来解决工程实际问题打下坚实地基础。
(2)CS2013的实践教学设计
根据程序设计基础课程的定位和目标,遵循循序渐进、举一反三、兼顾趣味性和实用性等实验教学内容设计原则,结合我院教学情况,针对CS2013中需要在实践环节中予以强化的知识点,设计了如下的实践教学内容,见表 2。在整体规划中,共包含8个实验和1个课程设计。
3.3 教学方法的转变
(1)探索“MOOC+课堂”的混合式理论教学模式
2016-2017学年的第2学期,2016级计算机专
业的程序设计课程,采取“MOOC+课堂”的线上线下相结合的混合教学模式。经过教学团队的精心选择比较,我们最终在“中国大学MOOC”平台找到一门符合教学目标的 MOOC课程—由哈尔滨工业大学苏小红教授团队主讲的“程序设计基础”,其第5次的开课时间为2017年2月13日-2017年4月10日,与2016级计算机专业的程序设计基础课程教学安排同步。混合教学模式的具体实施方式为:首先,教学团队在第5次开课前把该课程的所有MOOC视频看完并完成所有测评和作业,整理出 MOOC内容、进度、难点及重点;然后,制定了线上学习部分的学习目标和学习任务;最后,在传统课堂部分增加了针对 MOOC部分的课上测验和课堂讨论环节,一方面是检验学生线上自主学习情况,另一方面是对线上重点和难点部分进行及时讲解指导。混合式教学给学生更多自主性,学生可以自己决定学习的时间、视频播放的次数,真正成了学习的主人,极大的调动了学生学习的能动性,教师也从讲授者转变为学生学习的引导者,因此受到了师生的极大欢迎。
表1 基于CS2013的理论教学设计Tab. 1 Theoretical teaching design based on CS2013
表2 基于CS2013的实践教学设计Tab. 2 Practical teaching design based on CS2013
(2)探索“MOOC+翻转课堂”的实验教学模式
在实践教学中,尝试了翻转课堂的教学方式。因笔者授课的专业一般为80人左右,按照4人一组,分成20个小组,每组设置一位组长,教师以项目小组形式进行管理。具体实施方式为提前1周公布下次实验课所需的知识点、具体的实验目标,要求学生在MOOC平台完成相应的课程,进行相应的学习和练习。以函数实验为例,该实验目标为:掌握函数的定义和调用方法,理解递归函数的执行过程,掌握常用的穷举、递推和递归等问题求解策略和了解防御式编程方法等。学生在实验前要完成的MOOC学习任务为:观看问题求解策略的有关视频及完成相关的练习。实验课上,教师不再重复讲解函数的调用过程以及常用求解策略的算法基本思想,而就难点部分如递推、递归的不同点进行讲解,并进行现场编程演示,让学生和老师一同进行程序调试,接着剩下多数的时间留给学生,让学生进行自主实验,同组学生可以进行讨论,学生完成实验后,教师同学生一同进行点评分析。
3.4 考核方式的改革
传统的考核评价方式一般是平时成绩占30%、期末成绩占70%,平时成绩主要来源于学生的出勤和作业上交情况,期末采用纸质试卷考试,这种考核方式不适合目前的“MOOC+翻转课堂”的线上线下相结合的混合式教学模式。我们在试点过程中,改革了考核方式,具体措施包括:首先,重在过程考核,采用“MOOC成绩+实验成绩+上机考试成绩”方式,其中,MOOC成绩占10%,实验成绩占30%,上机考试成绩占60%。其次,采取上机考试,摒弃之前纸上谈兵的纸质试卷,选择更能考核考核学生实际编程能力的机考。最后,进行期中、期末两次机考,激发学生上机编程的积极性。
4 结语
以 CS2013为指导,实施了程序设计基础课程建设和改革,我们在教学团队、教学内容、教学方法、考核方式等方面进行有益的探索,调动了学生学习的热情和主动性,培养了学生利用计算机编程解决实际问题的能力,使学生养成了良好的学习习惯,教学效果好,受到学生的一致好评。当然,在开展课程建设实践的过程中也遇到一些问题,比如,由于学生自主学习能力的差异性,部分学生未能够在规定时间内完成 MOOC学习任务,2016级计算机专业MOOC课程获取率为90%。今后,我们将多与兄弟院校进行沟通交流,不断总结经验,以持续推进程序设计基础课程建设与改革。