苏小红 赵玲玲 王甜甜 张宏莉
摘 要:本文分析了CS2013及以往大纲发展变化的趋势和脉络,提取出程序设计课程相关知识领域和主题的体系设置、教学规划、能力培养等核心内容,突出编程实践能力、自主学习能力、问题求解和计算思维能力培养,结合国外一流大学的先进教学理念、课程设置和教学经验,以已取得的教学成果为基础,以CS2013为导向,对程序设计课程的教学体系和教学内容进行了设计。最后介绍了本校在程序设计课程群以及“C语言程序设计”国家级精品资源共享课建设中进行的教学改革和取得的实践经验。
关键词:程序设计课程;CS2013;问题求解;计算思维;教学体系;教学改革
自1968年以来,ACM和IEEE相继公布了国际性计算机学科教育领域的纲领性文件Curriculum 68、CS2001(Computer Science Curriculum 2001)和CS2008(Computer Science Curriculum 2008),迅速得到国内外高等院校计算机教育行业的普遍认可。CS2013(Computer Science Curriculum 2013)作为ACM/IEEE推出的第四部指导性大纲[1,2],自酝酿之初便受到了高度关注,集合了众多当前全球计算机教育领域的灵魂人物,调研了全球201所院校,相继发布了稻草人版本、钢铁人版本和最终版,成为2013年度计算机教育领域的标志性事件。我国计算机高等教育领域的专家学者也纷纷结合我国的计算机科学教育实践对CS2013进行了研究和探讨。在CS2013中,程序设计课程相关知识、技能、应用得到了持续的关注,同时,从与以往大纲的对比中可以发现CS2013对程序设计课程提出了更新、更高、更广的要求。
一、CS2013与程序设计课程
1.CS2013中的程序设计课程安排
CS2013中将计算机科学的知识体系组织为18个知识领域。从各知识领域所涵盖的知识单元来看,与程序设计课程相关的知识领域主要包括程序设计语言(Programming Languages,PL)和软件开发基础(Software Development Fundamentals,SDF),包括的知识单元和学时安排如表1所示。
表1中core(a,b)代表核心课程中有a 个Tier1级别学时,b个Tier2级别学时。Tier1级别的知识点要求100%的学生完成,Tier2级别要求80%~100%的学生完成。从表1可以看出,与程序设计相关的课程类型均为核心课,说明了程序设计课程在计算机科学体系中的重要程度。
2.程序设计课程在CS2013中的变化
CS2013将CS2001、CS2008中的编程基础重新整合形成了新的知识领域——软件开发基础(Software Development Fundamentals,SDF),但是,二者有着明显区别。编程基础(Programming Fundamentals,PF)侧重于在工业实践中需求的编程技能,而软件开发基础关注整个软件开发过程,更强调求解问题的方法、算法的基本思想等计算思维方面的知识和能力要求。从学时分配来看,程序设计语言(Programming Language,PL)在所有计算机核心课程(见表2)中所占学时比率稳定(图1-a)。虽然程序设计语言课程学时数所占绝对比率(图1-b rate1)在CS2013中较CS2008略有降低,但考虑到CS2013中新增加了安全与信息保障、并行与分布式计算等新兴领域的学时安排,因此其相对于既有课程的比率仍然有明显提升(图1-b rate2)。
二、国外一流大学程序设计课程现状分析
为了构建合理的程序设计课程体系,对国外多所著名院校的程序设计语言课程(以C/C++为主)进行了分析。主要包括Practical Programming in C(麻省理工学院)、Effective Programming in C and UNIX(卡耐基·梅隆大学)、Introduction to C和C++ Programming(康奈儿大学)、Fundamentals of Computer Programming(南加州大学)、Introduction to Computer Programming(in C)(西北大学)、Introduction to C/Unix/CGI Programming(哈佛大学)等。
在教学内容安排方面,上述课程涵盖了程序设计语言的基础知识,与CS2013中的知识单元基本保持一致。同时,普遍关注了内存管理、线程、编译预处理、查找和排序算法等,这些扩展知识与CS2013中的算法与设计、数据结构基础等知识单元相吻合。
在教学方式和方法方面,普遍采用课堂讲授、现场编程演示、课下作业或实验与项目相结合的方式,设定了较大比例的实验、作业和项目,以保证学生的编程能力得到充分训练。
在作业、实验、项目实践等方面,强调锻炼学生解决实际问题的能力。实验强调实际编程能力的训练,遵循循序渐进的原则,要求学生从解决简单问题入手,逐步扩展到解决实际问题。项目大多具有挑战性,学生需花费一定的课外时间来完成。
在学习效果考核方面,多采用复合型和阶段式的考核方式,即成绩中包含多个时间点和多个考查点。如编程作业、项目、论文、期中和期末的笔试等,重视对学生解决实际问题能力的考核,注重对学习过程的考核。
从调研结果中可以看出,调研的国外高等院校程序设计课程的教学内容设置多与CS2013相吻合。这些课程强调通过实验、作业、项目来锻炼学生的实际编程技能,引导学生从实际问题出发,逐步求解,并对问题的求解过程进行评估。
三、基于CS2013的程序设计课程设计
1.CS2013指导下的课程培养目标
通过本课程的学习,使学生学会用计算机处理问题的思维方法,增强解决问题的编程实践能力,为将来从事软件开发及后继课程的学习和解决工程实际问题、科学技术问题奠定基础。
2.CS2013指导下的程序设计课程体系
面向不同对象和培养目标,制订了分类、分层次、系统化的程序设计课程群的教学体系。计算机专业和非计算机专业的课程体系分别如图2和图3所示。
3.CS2013指导下的程序设计教学内容
根据CS2013中对程序设计相关知识领域和主题的规划,结合我校实际,整体规划适合我校计算机教学的程序设计课程教学内容,见表3。
4.CS2013指导下的学生能力培养方案
(1)强化编程实践能力。CS2013更为强调学生对知识的实际运用,即如何在实际问题中利用掌握的知识进行编程实践,同时能够对采用的方法、实现过程、实现效果等多方面进行准确的评估,进而合理选择,实现对编程实践能力的更深层次锻炼。
(2)突出问题求解能力。CS2013中明确提出学生应当具备求解问题的技能,要求学生能够将生活中的实际问题转化为可以运用已掌握的知识来予以求解的模型,进行合理的假设和抽象,还要求学生对同一问题掌握多种求解方法。
(3)重视自主学习能力。将终身学习能力作为毕业生应具备的专业素质之一明确列入CS2013中。这种终身学习能力的需求来源于计算机学科的快速发展特性,从向学生传授知识,转变为引导学生自主学习,最后使之形成终身学习的习惯,是程序设计课程的重要任务。
(4)隐含计算思维能力。虽然在CS2013中没有显式地将计算思维能力培养列入其中[3],但对问题求解技能的反复强调,对方法的选择和计算代价的评估以及对封装、抽象、系统级视角解决问题等思维方式的引入,都蕴含了对计算思维能力的着力培养和强化。
四、国家级精品资源共享课建设
1.与国家精品课程的不同之处
我校“C语言程序设计”课程于2005年被评为省级精品课程,2006年被评为微软精品课程,2007年被评为国家精品课程,2008年被评为国家双语教学示范课程。为响应教育部促进优质教育资源共享和教育公平的号召,该课程于2013年转型升级为国家级精品资源共享课立项项目,并于当年10月在爱课程网(http://www.icourses.cn)正式上线。
截至目前为止,课程在所有精品资源共享课人气榜中一直保持在前十以内的位置,说明该课程在学生中具有广泛的认可度。学生在课程答疑中的提问也比较踊跃,并对课程给予了较高评价。
与国家精品课程不同的是,国家级精品资源共享课更强调精品资源的共享以及师生之间的互动。例如,学生注册课程以后不仅可以浏览课程的所有资源,还可以与课程教师进行互动交流(包括课程答疑、学习笔记和课程评论等)。相对于评审专家的评价,它更注重的是社会和课程参与者的评价,也就是说不再是“一评定终身”。这种评价方法不但公平,而且能有效地避免课程评审完后就不再继续建设的问题,给课程的可持续发展注入了不竭的动力,并且学习者的积极参与也将给课程注入新的活力。
2.可持续的课程精品资源建设
国家级精品资源共享课的共享资源包括基本资源和拓展资源。基本资源中除全程课程录像外,还包括教学要求、教学大纲、教学日历、重点难点、教学设计、评价考核、学习指南、演示文稿、例题、习题作业、实验、教学案例、媒体素材、教学课件、学生作品、常见问题、名词术语等完整的教学资源,这些都免费提供给注册用户使用。拓展资源中包括试题库、作业系统、考试系统等,供用户选择付费使用。
在基本资源建设中,我们主要是持续建设了多套程序设计教材(详见课程教材网站:http://book.sunner.cn)。为了保持教学内容的与时俱进,我们平均每隔2~3年更新一次教材,并且对与教材配套的多媒体教学资源和网络教学资源进行了同步更新。2013年,我们以CS2013为指导思想重新修订了教学大纲和教材,在教学内容中强化了CS2013新增的软件开发基础涉及的知识点,尤其强化了代码风格、防御式编程以及算法效率分析等内容。
在拓展资源建设方面,为了支持课程的实践教学改革,培养学生的编程实践能力和自主学习能力,历经10余年的不断努力,我们建设了全方位、多元化的实践教学支撑环境,覆盖了课堂以外的各个教学环节,如在线作业、实验、答疑讨论、机上考试、自动阅卷等,支持学生线上学习。这些资源主要包括:
(1)基于Moodle的交互式网络教学平台[4]。该平台主要用于在线网络教学,为教师和学生之间搭建一个“教与学”的互动平台。
(2)C语言编程题自动评分系统[5,6]。在国家自然科学基金项目资助下相继开发研制了基于程序理解技术的编程题考试自动评分系统的C/S版和B/S版,主要用于C语言课程的上机考试和自动阅卷,并具有考试全程监控和防作弊功能。C/S版的系统自2004年开始使用,目前已被国内100余所院校免费试用。B/S版的系统自2012年开始使用,目前已有国内4所高校购买使用。
(3)C语言试卷和题库管理系统。该系统支持教师设计和管理作业、实验和考试题目。题库中有二千余道不同类型的题目,题型包括单选、多选、判断正误、程序填空、普通编程、复杂编程、一般改错、附加改错。另外,系统还具有试卷管理功能,如答案模版自动生成、测试用例自动生成、抽题组卷、考试数据统计分析、试卷查重等。目前,该系统已有国内4所高校购买使用。
(4)面向学生自主学习的作业在线测试系统。该系统旨在支持和鼓励学生自主学习,让学生真正做到“我的学习我做主”。教师只需设定学生每日完成作业的数量上限、题目的最长完成时间等基本条件,其余如作业的内容、作业的数量、完成时间、完成过程都由学生自主选择和决定,培养学生自主规划学习过程的良好习惯。此外,系统还引入了习题市场机制,鼓励学生自主设计题目并获得积分,获得积分后可以查看作业答案,同时还引入多种排名和相对分机制,鼓励多劳多得,激发学生自主学习的积极性。学生使用教材可通过书后的刮刮卡获取该系统的免费账号在线测试书后习题。
3.以精品资源建设为支撑的教学改革
以上述精品资源为支撑,面向不同对象和培养目标,以CS2013为指导,我们先后实施了一系列教学改革。
(1)教学方法改革。如图5所示,其核心是培养学生解决问题的能力,并在解决问题的实践中培养计算思维,强化编程实践能力。因此,在与时俱进不断更新教材的同时,教学中强调以生活中的实际问题和工程实际应用为背景来选择典型的教学案例,注重对教学内容的组织,利用版本逐步升级的综合设计型实例,训练学生的计算思维和问题求解能力,使课堂讲授从讲授程序设计方法为主转变为以启发学生的计算思维为主。同时将一些课内学时迁移到课外,给学生更多的自主学习的时间和空间,布置教材上的扩展内容让学生在课外阅读,并通过建设多种网络资源和教辅系统完善实践教学的保障体系,为学生提供一个有利于自主学习的平台,对学生课外自主学习的效果进行监督和指导。
(2)成绩评定方式改革。改革成绩评定方法,建立以机试和能力测试为主的客观评价体系。主要包括:改革作业和实验程序的成绩评定方法,引入了相对分考核机制,打破了以往平时成绩相当于白送分的格局;借助于交互式网络教学平台,改革作业和实验程序的评判方法;改革答疑的方法,从课堂答疑改为网络在线答疑;利用作业在线测试系统,实现让学生每天自主从题库中随机抽题限时完成作业,从以惩罚为主的程序查雷同“反抄袭”模式转变为以鼓励为主的随机作业“防抄袭”模式。
(3)考试方法改革。建立以机试自动评分和实践能力考核为主的多重累加式成绩考核体系,如图6所示。主要措施是:完全取消了卷面笔试,改为上机考试,利用C语言编程题考试自动评分系统,实现机器自动阅卷实时给出评分,更加客观公正地考核学生的编程实践能力,尤其是错误程序的调试能力。
由于我们开发的几个教辅系统经过了多次版本升级,功能一直在不断完善,因此上述教学改革也历经了10余年的时间,我们在实践中不断总结经验,不断改进方案。目前在应用于全校C语言公共基础课的教学改革中取得了较好的实践效果。2009年我们获得了国家级教学成果二等奖,并于近几年连续获得多项省级教学成果奖和多项软件著作权登记。
参考文献:
[1] Computer Science Curricula 2013[EB/OL]. http://ai.stanford.edu/users/sahami/CS2013.
[2] Mehran Sahami, Steve Roach, Ernesto Cuadros-Vargas, et al. ACM/IEEE-CS computer science curriculum 2013: reviewing the ironman report[A]. SIGCSE '13 Proceeding of the 44th ACM technical symposium on Computer science education, 2013: 13-14.
[3] Jeannette M. Wing. Computational Thinking[J]. Communications of the ACM, 2006, 49(3): 33-35.
[4] Sun Zhigang, Su Xiaohong, Zhu Ning, et al. Moodle Plugins for Highly Efficient Programming Courses[A]. the 1st Moodle Research Conference,Greece: Hera Christopher wong, 2012: 157-163.
[5] Tiantian Wang, Xiaohong Su, Peijun Ma, et al. Ability-training-oriented automated assessment in introductory programming course[J]. Computers & Education, 2011, 1(56): 220-226.
[6] 苏小红,王宇颖,王甜甜等. 面向综合实践能力考核的C语言编程考试自动评分系统[J]. 实验技术与管理,2010(10):174-177.
[基金项目:教育部大学计算机课程改革项目(2-2-ZXM-01),黑龙江省高等教育教学改革项目(JG2013010260)]
[责任编辑:余大品]