程序设计基础教与学的新模式
2006-11-27鸿磊张雪松
鸿 磊 张雪松
目前,国内高等职业院校程序设计基础课程的教学内容一般偏重于计算机编程语言或完全是编程语言的教学。教学模式一般也是传统的模式,即十分注重某种编程语言基本语句、语法和一些细节的分析。这样,该类课程基本上是以高级语言自身的体系为脉络展开教学的。由于教学不是站在如何应用计算机工具编程解决实际问题或实际项目的角度,就没有把逻辑与编程解题思路放在主体地位,也就没有很好讲解如何分析问题和解决问题。结果导致学生程序设计能力、上机解题能力训练不够,更谈不上引导学生进行课题研究和科研探索。于是,很多学生在学习时感到内容枯燥难学,学过之后又不能用程序设计有效解决实际问题。
根据以上经验教训,经过清华大学吴文虎教授的特别指点,本人在本学院某些班级进行程序设计课程改革试点,积累适合高职学生特点的教学素材并通过具体的试验得出有效的教学方法。最终总结出12个字:“重兴趣,重实践,引竞争,引接口”。
重兴趣——兴趣是最好的老师
我国的高专学生,他们虽然高考成绩比较差,但在其他方面,只要他们感兴趣,学习就很有效果。这说明他们的智力和记忆力不比其他本科学生差,关键是学生有没有兴趣。老师要发掘他们潜在的能力,使用同学们感兴趣的方法讲授他们感兴趣的内容,即使是枯燥的程序设计。否则,此课程将如同他们学习第二外语。
本课程要锻炼学生掌握解决实际问题的程序设计思想和养成良好的程序设计习惯,使学生具备用计算机解决实际问题的思想和眼光。要开阔思想,打好一个思维设计的基础。
我首先引用校园中的“程序”:
NO1.学生到指定的教室上课
NO2.老师检查上课笔记
NO3.带笔记的学生,可以让老师检查,转到NO5;否则,回宿舍拿笔记(选择),转到NO4
NO4. 回到宿舍,拿到笔记,转到NO1
NO5.老师检查笔记
NO6.上课,学生认真听老师讲课,并记笔记
NO7. 下课铃响了,上午4节课(循环)是否上完(条件),上完转到NO8,否则转到NO1执行
NO8.下课去食堂
然后,通过具体实例而分散的介绍语法难点,避免了学生因枯燥和畏难而产生厌学情绪。
例如:已知side1,side2,side3为三角形的三边,根据公式area=sqrt(fabs(p*(p- side2)*(p-side3)))求其面积。其中p=(side1+side2+side3)/2。通过此例说明计算机程序分析和编写的过程,学习相关的语法点。要求呈现在学生面前的是一个程序的整体,而非一个个相对凌乱的语法点。分析的具体步骤如下:
(1)学习根据题意如何分析算法;
(2)学习并画出流程图;
(3)根据流程图写出代码,主要代码如下:
p=(side1+side2+side3)/2;
area=sqrt(fabs(p*(p-side2)*(p-side3));//求三角形面积
cout<<“三角形面积为:”<<“area”<<endl;//输出面积
(4)分析讲解代码中使用的新语法点;
(5) 根据原有知识遇到困难,再拓展其他相关的新语法点。将外在的需要转化为学生内在的求知欲。
首先,通过实际举例输入2,2,9,让学生自己找到程序的漏洞,引出选择语句if…else…。主要算法如下:
if((side1+side2)>side3&&(side1+side3)>side2&&(side2+side3)>side1)
{p=(side1+side2+side3)/2;
area=sqrt(fabs(p*(p-side1)*((p-side2)*(p-side3));//求三角形面积
cout<<“三角形面积为:”<<“area”<<endl;}//输出面积
else
cout<<“输入出错”;//输出“输入出错”
然后,通过实际运行操作。当输入数值不满足条件,运行立即结束。这让学生感觉不方便。于是引出循环语句while。
核心算法如下:
while(!(side1+side2>side3&&(side1+side3)>side2&&(side2+side3)>side1))
{cout<<“输入错误,请重新输入:”<<endl;//输出“输入错误,请重新输入:”
cin>>side1>>side2>>side3;//初始化
}
在此过程中遇到什么新知识讲什么,实例讲完一定要通过知识进行总结,通过多种解法把相关的其他语言点进行系统的分析。这样知识有了连贯,既使学生产生兴趣,新知识的引入也有理有据,水到渠成,学生更容易接受。
重实验——实践出真知
我第一节课就讲编译环境的使用。首先要求学生上机自己调试修改错误的程序,渐渐根据某一段核心算法补全程序。然后通过某一流程图和具体测试数据,自己上机分析程序的具体流向,切实保证学生理解并掌握每一条语句,例如选择和循环语句。最后,要求学生根据实际有趣的题目分析简单的算法,编写自己第一个程序。做到根据学生知识水平逐渐增加,实验的难度也逐渐增加,实验难度和学生知识水平一定要保持相对同步,使他们每次上机都有比较适合的任务,每次上机都有成就感。否则,很可能挫伤他们的自信,因而讨厌学习程序设计,特别是在开始阶段和第一次写程序阶段。
引竞争——重奖之下必有勇夫
我每一节课都以完整的程序讲授,每周给同学一两道比较超前的有意思的题目,一个月之后我会根据能力挑选出小老师,辅导其他同学上机,成为小老师的同学,期末成绩给90分,以此作为鼓励。不出一个月,果然有几个同学的程序设计水平明显高于其他同学。通过几位带动十几位,十几位带动全班,使得学习气氛越来越浓。以前,大多数同学有从众心理,上课不听讲,上机玩游戏;现在,通过兴趣和超前题目的引导,让班级几个比较有悟性的同学先掌握程序设计编程和上机,并带动其他想学但接受能力慢的同学,使不想学的同学自己开始想办法学。上机实验大家比着学,比着练。
引接口——承上启下
根据高职高专的教学要求,老师讲授的应该是直接解决实际工作问题的具体办法,应以解决工作问题的模式传授知识。所以,课程针对性越来越强,但针对性强的同时局限性也越大,课程之间缺少必要的联系。使得同学们虽然在解决实际问题时能把所学的知识用上,但缺少与其他知识的联系,无法解决其他比较复杂的问题。例如:学习程序设计基础这门基础课后,开设一些不同的程序设计专业课程,而此类课程没有与程序设计基础进行很好的过渡。使学生很难把以前的知识与新学的知识融会贯通,从而更好的掌握新的知识。所以,我们在讲授程序设计基础之后,根据专业需要做一些接口教学,计算机相关专业可以增加OOP程序设计思想,还可以根据要求补充MFC或 .NET编程的基础知识,从具体的系统实例出发,让学生对MFC或 .NET设计有个感性认识,为以后学习打好基础;电子信息相关专业可以增加C语言嵌入式系统编程,从“交通灯序列控制器”,“电动恐龙”实例出发,通过使用业界标准的编译器Keil C介绍嵌入式软件编程,并通过硬件仿真器仿真。最终,使程序设计基础以一种平台的方式可以与不同专业方向的相关程序设计课程进行无缝连接,做到程序设计的连贯性。
经过具体的教学实践,我们取得了较好的教学效果,学生也给予了很高的评价。
总之,学好这门课既要动手,又要动脑,必须经过理性思维和理性实践。