APP下载

经历编程

2008-12-29吴良辉

中国信息技术教育 2008年9期

  经历编程是指以学生为中心,通过创设特定的情境,在经历中体验,在感受中体会,采取分而治之的思想,逐渐使学生感受到用编程的方法来解决实际问题的魅力所在,体验程序设计从规划、设计到制作、调试的基本过程,培养学生的创新精神和实践能力,提升信息素养。
  
  ■ 以实例教程和问题解决的思路入手,前导课程要激发学生的兴趣
  
  以往的教材,开篇时总是喜欢展示计算机语言的发展历程、常量、变量、关系运算符、函数等理论知识,让初中教师和学生无所适从。我认为,不如让学生看很多实例,然后通过欣赏实例、修改代码等简单操作经历编程的过程,体验编程的乐趣。具体来说,我在上程序设计的第一节课时,先发给每个学生一个软件包,里面有这个学期要学到的很多实例,如简易文本编辑器、小车飞驰、碰碰球、猜数字游戏、五子棋等,然后提出如下的问题。
  “简易文本编辑器”如何增加绿色字的设置代码呢?看一下图1所示的图片。
  “小车飞驰”如何让小车跑得比飞碟快呢?看一下图2所示的图片。
  
   “碰碰球”如何让小球在竖直方向移动?“五子棋”程序还有哪些不足之处?……虽然是第一节课,但初中学生凭着不多的英文单词和其他学科的知识迁移,基本上可以通过观察——猜想——实践的方法,解决所提的问题。这样的开场白是从整体入手,让学生对本学期所学的内容有一个宏观的感受。
  
  ■ 让学生通过模仿和猜测,利用电脑对已有的代码做实验
  
  在以教师、电脑和学生三者构建的学习环境里,学生对电脑的亲自动手实验往往比教师苦口婆心的讲授更有效。例如,“小车飞驰”一课,上课时教师先直接将源程序发给学生,请学生通过回答提出的问题来理解程序当中的关键语句,为便于讨论,可以通过BBS互动交流。相关的图形界面如图2所示,下面仅列出源代码和相应问题。
  
  ■ 一题多讲,层层深入,夯实基础,重点突破
  
  有的实例因为涉及较多的知识,未必能在一个课时内完成,而初中信息技术课通常是没有连堂的,这时就可以考虑将一个实例分解到几个连续的课程中去,逐步讲述。如“小车飞驰”一课第一次提到了For循环,这是整个课程中较为重要的一个内容,而要理解好循环语句,则必须先讲清赋值语句中的“累加”语句,所以上面所列的教学内容,事实上是“小车飞驰”For循环第二个课时的内容,第一个课时增加了一个“向左走、向右走”的实例(如图3所示)。
  
  这一课时的主要教学流程包括以下部分。
  要想让小车移动-->就必须知道它当前的位置-->学会按“分类序”看小车的属性值。
  简述赋值累加语句car.left = car.left + 50的含义。
  适当拓展:增加向上走和向下走的按钮;了解VB的其他事件,试着在网上查找keydown事件,利用键盘上的方向键控制小车上下左右移动。
  
  ■ 调试是程序设计最基本的步骤之一,可以将调试方法当做正课来讲
  
  任何程序的正常运行都需要经过调试。其实,调试不单是编程解决问题的基本步骤,在讲解程序的过程中也是必要的手段。例如,我在讲分支或循环语句时,利用VB的“逐语句”(快捷键F8)功能,学生可以很清楚地看到程序在实际运行过程中是选择了哪一个分支,循环重复执行了多少次等,如图4所示的“猜数字游戏”,题目如下:由电脑随机产生一个100以内的整数,看你需要几次才能将这个数猜出来。如果一次猜中,得分为100分,每猜多一次则减10分,直到猜中为止。程序输出最后的得分。
  
  采用“单步调试”时电脑会用黄色清楚地显示当前将要执行的语句,如图6。如果所猜测的数比随机产生的数大,程序只执行上面的分支,即输出“大了!”,然后跳出分支语句。我之所以认为这个环节非常重要是因为不少初学者以为分支语句两边都要执行。
  我们编写程序时往往很难一次通过,总会出现这样那样的错误,语法问题也许可以一眼看出来,但算法或逻辑错误就未必了。比如说,还是这个“猜数字游戏”,虽然能够满足基本的要求,但奇怪的是,当最后猜中的时候,程序会先显示“小了!”的提示,然后再出现得分,这显然是不合逻辑的,但问题出在哪里呢?
  我们可以通过调试菜单里面的“添加监视”和“逐语句”两个手段分析这个问题。基本策略是:让程序显示那个随机数X,然后第一遍就猜这个数,“单步执行”程序,观察是否还会出现“小了!”的提示。具体操作如下。
  1. 按F8快捷键单步执行程序,依次执行语句的第1、2、3、4、5行,在第6行语句处停住(语句行在图7中通过注释语句标出来了)。
  2. 选中变量X,单击鼠标右键,在弹出的对话框中选择“添加监视”按钮(如图5所示),然后在出现的“添加监视”窗口直接选择“确定”按钮,这时,在程序的下面会出现一个“监视窗口”(图6)。
  
  3. 按F8继续执行程序,会发现“监视窗口”中变量X的值变成了当前产生的随机数,不妨假设为47。
  4. 继续按F8执行第7行,第8行语句,在弹出的InputBox框中输入47(如图7所示)。
  5. 继续按F8,会发现程序依次执行的是第9、10、12、13、14、15行,然而才跳回第7行判断X与Y的关系,因为此时X等于Y,所以直接跳到16行。
  这样,问题就表现得很清楚了,其原因在于算法有误。设计者将表达式X<>Y作为DO循环的判断条件,因为y的初值为零,而x为随机数,所以表达式X<>Y的值为真,执行循环语句。第8行,y的值被更新了;第10行,条件表达式XY和X=Y两种情况分析,而不要以为X=Y的情况已被排除了,因为此时的y值已变化了,程序的错误之一就是在分支语句里没有分析X=Y时的情况。
  另外,正因为算法不正确,程序的可读性也差,如前面第3行,score赋初值为110,第4行,Y的初值为0,比较累赘,为了方便猜数,修改后的程序还特别增加了a和b两个变量,通过提示信息,使参加游戏的人每次能缩小猜测范围,这些是程序人性化设计的一个典型案例。其他的调试方法如设置断点等也可以给学生介绍,在此就不一一列举了。
  
  ■ 适当体现可视化程序设计的特色
  
  类似VB的可视化编程环境,能够让学生利用软件本身所提供的各种控件,像搭积木一样构造应用程序的各种界面,然后再编写少量的代码就可以了,和以前DOS环境下的程序设计软件如QBasic等相比,所设计的程序界面更漂亮,程序更实用,操作更简单,所以更容易让学生们有成就感。对于初中生而言,这些程序与他们日常所接触到的应用软件更为接近,能培养他们的自信心,增加他们对程序的认同感。前面所提到的“简易文本编辑器”“小车飞驰”等就是这样的例子,下面再列举一个VB设计的两个小程序界面:“调色板”(如图8),这些都是传统编程工具极难实现的,而用VB实现起来只需要几分钟,我们何乐而不为呢?
  
  ■ 培养良好的编程习惯
  
  良好的习惯是成功的基础。在学习计算机编程过程中,教师要亲自示范,从点滴入手。如给VB的对象命名时,一般约定对象名由3个小写字母组成的前缀(指明对象的类型)和表示该对象作用的字符组成,如cmdStart表示“开始命令按钮”,而optRed表示“红色选项按钮”等,虽然初中学生单词量有限,但在最初的时候培养的好习惯可以终身受益。