吴小菁
(福建江夏学院,福建 福州 350108)
软件工程专业是以培养复合型软件工程人才为目标,是一门借鉴传统工程的原则和方法,将计算机科学、数学和管理科学巧妙地结合起来,开发和维护软件产品的学科.因此,在高校中,计算机科学技术与软件工程专业所设置的课程会有些交叉,即使开设的课程相同,也必须在教学上进行调整,以适应软件工程专业知识领域和人才培养目标的需求.本文以软件工程专业开设的程序设计类课程为例,为了取得良好的教学效果在教学内容、教学模式、实践环节、考核方式等方面进行改革.
程序设计类课程是软件工程专业一门重要的专业基础课,它以计算机语言为基础,运用程序设计逻辑及特定的算法进行程序设计能力的培养.该课程具有很强的实践性,但是高校的课程教学仅仅建立在对语言本身的认识上,课程教学理念严重滞后于实际需要,教师不爱上,学生不爱听,以至于教学效果不理想.现在的软件工程专业学生拥有的优势越来越少,就业压力也越来越大,应该在程序设计类课程传授中树立新的语言教学理念,语言知识传授只能够占到整个程序设计类课程教学工作的1/3,另外两个2/3应该分别是引导学生去思考、去探索,进行研究性学习.学生的学习激情被激发出来,就会超越课堂时空的限制,学生才能够超越自己的老师.
2.2.1 任务提出
课堂教学中,教师具有与以往教学不同的角色与职责,教师自己要事先开发出项目,精心设计任务,创设问题情境,任务驱动下的教学流程让学生在自身认知经验的基础上自主地体验一个程序需要运用的知识,尤其是如何更好的运用在实际问题中.教师这个阶段主要扮演学习者、研究者、引导者、指导者的角色.在课堂教学实践中,教师的作用主要体现在以下几点:
(1)设置学习情景;
(2)必要的教学示范;
(3)设计学习活动;
(3)引导学生利用学习资源;
(4)组织监督教学过程;
(5)学习阶段的总结.
2.2.2 自主探索
在编写程序过程中让学生自己进行探索性的学习,程序设计中的成果能极大地增加学生的成就感、培养学生程序设计的兴趣,并达到更加牢靠地巩固理论知识的目的.选出较优秀的程序设计案例,进行答辩,老师与其他学生做为答辩委员,制作者用适当的语言清晰地表达其思考过程及程序设计方法.
2.2.3 教师点评
回顾知识点,总结知识重点难点,给学生充分的自我评价的机会,调动学生的学习积极性,减少他们的挫败感,鼓励他们大胆尝试新方法、新技术,用多种方法解决问题,培养创新能力.
2.2.4 任务解决
通过学生的自主交流、探索与教师的点评,得出最佳的解决方案.
表2-1 研究性学习策略与传统学习的比对
本人设计一个完整的案例,从算法方面具体说明了研究性学习策略在程序设计课程中的应用,以下的案例是《C++程序设计语言》中递归编程技术的学习.
3.1.1 教学设计思路
学生对程序设计大都有一种惧怕的心理,总认为程序设计太难了.递归法是程序设计中的一个难点内容,在教学过程中,如何才能解决程序设计本身枯燥、难懂这个问题?本案例通过游戏法导入,激起学生学习的兴趣,然后让学生进行研究,对程序设计过程中如何培养学生的逻辑思维能力和抽象思维能力给予了适当的关注.学生在对自己的游戏过程的分析和总结,也得出了递归法的算法思想,然后编写、调试程序.这样一点一点地揭开递归法的“神秘面纱”,学生就不会感觉到算法深不可测,也增加了他们学习程序设计课程的信心.
3.1.2 教学过程
3.1.2.1 情景创设
游戏规则:设A、B、C是3个光盘杆.开始时,在杆A上有一叠共3个光盘,这些光盘自下而上,由大到小地叠在一起.各光盘从小到大编号为1,2,3,如图3-1所示.现要求将杆A上的这一叠光盘移到杆B上,并仍按同样顺序叠置.在移动光盘时应遵守以下移动规则:规则(1):每次只能移动1个光盘;规则(2):任何时刻都不允许将较大的光盘压在较小的光盘之上;规则(3):在满足移动规则(1)和(2)的前提下,可将光盘移至A,B,C中任一杆上.
游戏开始:同桌一组开始做游戏,学生很高兴地投入到游戏中.
图3-1 Hanoi塔问题
3.1.2.2 适当引导
引导学生:当光盘数为1、2、3、4等不同的数时,有没有什么规律?学生在游戏中得出:就是将最后一个盘子挪到B杆子上,将其余的盘子挪到C杆子上.
3.1.2.3 递归概念的引入
首先:必须将A最大的盘子移动到B最下面,首先需要借助B将A上面的n-1个盘子移动到C上面就是hanoi(n-1,A,C,B).此时A上面只有一个最大的盘子,C上面按序放着n-1个盘子,B上面有0个盘子.
其次:将A上面的盘子移动到B上面,只需要1步.此时A上面有0个盘子,C上面按序放着n-1个盘子,A上面只有一个最大的盘子.
最后:借助于A柱子将C上面n-1个盘子移到B上面即可就是hanoi(n-1,C,B,A).
总结:就是将最后一个(n-i个,i=0、1、2、3、……)盘子挪到第B上,将其余的盘子挪到第C上(借助第B个位子),一直这样递归下去,而中间的怎样借助第B将盘子挪到C上不用考虑.数学推导公式为:f(n)=2f(n-1)+1,其中 f(1)=1,f(n)表示将 n个盘子从A柱子移到B柱子的步数.
3.1.2.4 提出问题
试编写一个程序,用最少的移动次数将塔座A上的n个圆盘移到塔座B 上,并仍按同样顺序叠置.对于给定的正整数n,编程计算最优移动方案,将计算出的最优移动方案输出到文件output.txt.文件的每一行由一个正整数k和2个字符c1和c2组成,表示将第k个圆盘从塔座c1移到塔座c2上.
如k=3时,输出为1 A B;2 A C;1 B C;3 A B;1 C A;2 C B;1 A B
3.1.2.5 自主探索
学生设计算法,编写程序,教师巡视指导.允许学生合交流探讨,调试工作可以做为家庭作业,课后完成.通过email把作业成果提交给教师.
3.1.2.6 自动化程序编译系统批改学生作业
程序在线评测系统可以对作业进行自动编译,检查出程序是否存在语法错误;另一方面,它还能验证程序是否能得到正确结果,以及所花费的代价(时间和空间上的).根据处理结果与相应的参数设置,程序在线评测系统能自动给出学生此次编程作业的成绩,消除了老师在检查作业的过程中的主观因素,增加了学生之间的公平性.
3.1.2.7 答辩
编译系统评出优秀作业,编写者在下一次课前做优秀作业的答辩.学生根据编写的程序,制作PPT,向老师与全班同学展示,并回答老师与同学的提问,答辩通过可以在考核中加分.
3.1.2.8 老师点评
教师对学生在学习过程中的表现进行总结,并引导学生对本课主要知识点进行简单总结,并提出递归法在编程中的其它应用.
3.1.2.9 问题解决
课程设计是实践教学的重要组成部分,上机实验大多是消化上课内容,学生们模仿多于创新,不利于培养学生们的启发式思维和实际解决问题的能力.所以,课程设计是在基本教学内容完成之后的综合练习,一般两个星期内完成.课程设计强调设计出的系统具有实用性、完整性和创新性,有一定规模和功能相对完整.学生们通过集中时间的强化学习和训练,能更好的贯穿和总结软件开发思想和技术,锻炼了分析、修改和设计程序的动手能力,并能够在实训的过程中培养团队精神.
程序设计能力占50%.
课程设计说明书完成情况占20%.
口头答辩占20%.
其他(考勤、课堂纪律等)占10%.
大学本科教学作为大学教学工作的中心工作,承担着高素质人才的培养重任,理应改变以往传统的传递性教学模式,用全新的教学理念指导自己的教学实践.经过教学过程的实践与学生反馈,引入研究性的这种教学方法收到了良好的效果,增强了学生解决问题的热情,从而提高了学习效率.因此大学生都需要具备这样一种研究性学习的意识和精神,以此响应国家、社会对创新人才的培养需求和大学生自身全面发展的需要.
〔1〕蔡晓丽,陈舜青,丁志云.计算机语言类课程实践环节教学改革探讨[J].常州工学院学报,2010(6):63-96.
〔2〕马华,陈振.应用型本科院校程序设计课程实验教学改革研究[J].计算机教育,2011(4):19-22.
〔3〕骆斌,王浩然.软件工程专业程序设计类课程的设计[J].吉林大学学报,2005(23).
〔4〕付沙.高校程序设计课程教学改革与实践[J].计算机教育,2010(2):21-24.
〔5〕常本勤.基于问题的学习模式在程序设计类课程教学中的应用[J].计算机教育,2010(2):125-127.
〔6〕于钢.研究性学习课程的教学策略[J].教育探索,2003(06):33-34.