首页 -> 2008年第11期
贯穿在系列课程中的程序设计能力的培养
作者:高敬阳 朱群雄 山 岚 李 芳
关键词:程序设计能力;教学理念;教学方法
程序设计能力对学生来说不仅是职业技能的需要,也体现着创造性思维的信息素质培养。程序设计正是有形地表达抽象思维的方法,在程序设计过程中贯穿阅读判断、分析思考、工具利用、抽象表达、综合创造等多项技能,对创新性人才素质的培养至关重要。
一、目前现状
学生普遍反映对于抽象的C程序设计语言学习起来很困难。根据多年的教学经验,刚开始学习该课程学生有很大的热情,但随着学习的深入,到了循环、数组部分,有些学生仍然迟迟不能入门,慢慢地失去了学习的兴趣,开始掉队,最终甚至放弃了该科目的学习。造成这种情况的原因是多方面的,但其中很重要的一个方面就是长期以来程序设计课程过多强调语言细节及其表达细节,忽视了程序设计的本质,忽略了算法设计。另外,由于上机实践教学学时偏少,仍然以教师讲授为主,学生学习该科目目的不明确,没有针对性,缺乏兴趣,教学方法过于传统和死板等因素,学生不仅没有掌握基本的程序设计方法,而且对后续以此为基础的课程的学习产生了严重的影响。
二、教学理念
编程能力的培养不能仅仅依赖于一门程序设计课程,它需要在一系列课程中实践、实践、再实践,通过持续不断的全方位训练才得以培养提高。
1.在第一门基础课程中培养程序设计初步知识
在学生入学第一门计算机课程“大学计算机基础”中,增加“算法和程序设计”,特别是程序设计密切相关的常用算法及设计内容,如:求最大(小)值、求和、求积、排序、查找、程序设计方法、数据结构等。以上这些算法都是程序设计中常用的基本算法,采用结构化程序设计中三种基本结构给出流程图,学生非常容易理解,这部分内容在中学信息技术相关课程中是没有的,学生学到新的知识也格外感兴趣。同时列举实例说明栈和队列的应用为数据结构作铺垫,激发学生进一步学习的兴趣。另外,在“大学计算机基础”课程的实验部分中增加了“MATLAB及其应用”环节。MATLAB是目前国际上认同的基本工具软件,它在科学计算中将发挥越来越大的作用,科学研究离不开科学计算,一年级学生同步学习高数/物理等课程,运用MATLAB对其进行解方程、行列式等的计算。在第一门计算机基础课程中增加了程序设计的初步知识,为后续的程序设计课程做好铺垫,使学生更快、更有兴趣地入门到程序设计课程中。
2.在后续课程中持续不断培养程序设计能力
多数高校是在一年级下学期或二年级上学期开设一门程序设计课程,理工科往往选择“C语言程序设计”,文管类多数选择“VB语言程序设计”。之后信息类专业后续课程如“数据结构”、“计算方法”、“软件工程”及“C++”和“JAVA程序设计”等系列课程都与编程语言相关,即无论是验证算法还是实现算法,都需要编程来完成。即使是其他非信息类专业的理工科学生,后续专业课程同样有科学验证和科学计算,也离不开编程实现。学生在学习后续其他课程时,在尽可能的情况下,要求教师设计好与编程相关的实验,让学生在一门一门课程中持续不断地进行程序设计训练。
三、教学方法
1.面向专业应用的分类教学
学习程序设计的目的,主要是为了更好地解决本学科内的问题。不同专业选择不同的程序设计课程,并采用面向专业应用案例教学,使得计算机成为专业课程的有利工具。按照理工和文管不同专业分类,分别设置C和VB程序设计课程。根据专业应用需要,按化工/材料类、信息类、文科类、管理类四大类,无论是平日的知识点还是大作业,均进行分类案例教学,强调结合专业的针对性教学。一方面为后面专业课程的应用提供了平滑过渡,另一方面也使得学生明确未来本专业上要解决的问题,从而进一步激发了学生的学习兴趣。
2.贯彻“案例驱动”,并引用国外教材经典案例
我们推行“提出问题一分析问题一引入新知识一解决问题一总结提高”这样一个循序渐进、交叉进行、螺旋式上升的教学模式。将课程内容分为若干个主题,通过每一个典型的、针对性强的、贴近现实或贴近专业的案例程序设计作为贯穿各主题的主线,而且加入了国外教材中的经典案例,开阔了学生的视野。
3.强化实训,培养技能
学生的程序设计能力主要依靠上机实践逐步培养出来的。编程不是看会的,不是听老师讲课听会的,而是学生自己通过上机实践练会的,可见其实验教学的重要性。首先,调整理论和实验课时的比例,应该至少1:1或实验课时占到更高的比例;其次,教师应该提前下发实验作业,要求学生上机前提前准备好调试内容,并对学生准备情况进行检查,提高上机效率;再次,每一次实验任务明确,要求学生在我们自主开发的开放式实训及考试系统平台上,在规定的时间内完成程序调试。目前已经收集和整理出与知识点相关联的一千多道典型实训题目,每次实训后学生可以参与讨论,因为实训系统每题后面附有学生对本题的讨论,学生可以自己查看编程是否正确,如果错误,找出出现错误的原因等。
4.立体化网站资源营造多样化的学习氛围
先进的课程网站教学平台资源丰富,提供了选择法排序等几十个经典算法的CAI动画课件,有利于学生理解重点和难点内容。所提供的课程信息栏、电子教案栏、课程资源栏、实验指导栏、答疑区、作业区、讨论区、测试区、学生作品区等理想的数字化学习环境,使得启发式、任务驱动式、讨论式、参与式等多种教学模式成为教学的有力支撑,有力地提高了学生自主学习的能力。
5.分层次培养优秀人才
对于优秀学生我们推荐使用北京大学的在线测评训练系统。同时,近年来新增开设了“ACM/ICPC程序设计方法与实践”课程,鼓励学生参加ACM大赛和ITAT大赛。鼓励学生创新编制大程序,代替参加期末考试而获得优良成绩等手段,培养优秀创新人才。
四、考试改革
1.分段考核学生,强调过程积累
编程技能是需要连续不断训练的一种能力,不可能速成,期末突击备考的方式是不可取和不奏效的。为了督促学生平时的积累,在两个关键点“循环”、“函数”学完之后,设置两次期中考核,并且只考编程题目。另外,每一次实训实验课程犹如一次上机考试,在规定的时间内完成程序,作为成绩评定的一部分。
2.增加大作业权重,考核学生的综合应用能力
较大程序设计通常由3~5名学生组成小组完成,教师提出问题,学生确定解决方案和实现方法,最后学生走上讲台讲解。这样锻炼了学生分析和解决问题、综合知识运用、活学活用及口头表达能力,并且通过团结合作,也培养学生的团队精神。
3.科学公平的成绩评定方式,相对评分制度激励学习竞争
最终的成绩不是由期末考试一张试卷来确定,而是包括多种评价因素。应结合学生平时的学习态度和表现,如:实验实训成绩、两次中期考核成绩、大作业、浏览课程网站、在线学习的效果、展示编程作品/提供编程巧妙方法的次数等。
在最终的期末考试中,采用自行研发的实训与考试系统,大大提高了工作效率。最后成绩评定是相对成绩,给出合理的分数比例段,突出学生在各个环节考核中的排序作用。这样做激励了学生之间的竞争,避免由于出题的深浅造成不合理的情况,学生的成绩具有横向可比性。
程序设计课程是计算机基础教育的基本内容,程序设计能力是理工科学生必备的基本技能。我们经过多年的努力,学生在参加的ACM国际大学生程序设计竞赛、全国ITAT教育工程就业技能大赛c程序设计组/JAVA程序设计组竞赛中,分别获得较好的成绩,自主开发的实训及考试系统软件已经被近二十所高校使用。通过以上贯穿在一系列课程中的有效的系统化培养方法,大大提高了学生的程序设计能力。
[责任编辑:余大品]