算法与程序设计教学中错误资源的利用 施鹏
【摘要】: 《算法与程序设计》是对学生逻辑思维能力和信息技术素养要求很高的学科。错误总是伴随着学生的分析问题、设计算法到程序实现的过程。我们应该对它有正确的认识,及时发掘,灵活重构,从而使这些错误转化成教学中宝贵的课程资源。本文依据作者自身的教学实践,将从再生资源、协作学习、教学成果评价三个方面结合具体的教学实例谈谈如何巧用“课堂错误”,提高课堂教学效率相关的操作策略。
【关键字】: 算法与程序设计 错误 课堂效率
一、案例与分析
1、案例:
在讲授教材第三章第二节 “创建第一个VB程序”时,采用计算园面积作为练习程序,如下表1所示:
程序代码段:
Private Sub Command1_Click ()
Dim r As Double
r = Val(Text1.Text)
Text2.Text = Str(r * r * 3.14)
End Sub
表1
当学生们编写程序时,学生a发现运行程序出错便马上举手示意帮助,教师走进一看,text1.text打成textl.text(前面为数字1,后面是字母l)。不一会学生b运行也出错,举手示意,教师转过去检查其发现其将程序里的text2.text拼成test2.test。接下来学生c的也出问题了,但是没提示错误,结果一直为0,教师又只好过去调试发现其事件触发为form_load(),而不是Command1_Click()。……渐渐有一些学生程序运行成功了,他们带点成就感上交作业,便无所事事了。尽管教师一直都在应答学生的问题,但下课铃响了,还是有几个学生还没完成程序,无奈下只好上交未成功的作业。
2、分析:
程序设计是把解题方法写成一个明确无误的有限步机器指令。在此过程中,是需要不断的进行调错修正。而对于初次接触这门课的学生,往往很难找到错误, 学生出现错误第一时间就会想到老师,于是便形成了上述的一幕。教师如果一直忙着应答某学生的错误,往往会兼顾不到其他学生,而且也很难完成预先设定的教学目标,同时无形中增长学生的依赖性,形成思维的惰性,不利于自主学习能力的发展。
班级这一学生群体中,总有能力较强的学生,为了满足那些能力较强的学生的个性发展需要,我们应该设计支线任务让这批学生操作。而错误已伴随着学生主线任务的玩程,更不要说稍难的支线任务,因此真正能完成支线任务的是极少数,不能完成任务的学生,自信心和兴趣会受到挫伤。
《算法与程序设计》的教学成果一般为程序。程序能否成功运行也就成检查预设的教学目标达到与否的重要手段。但由于程序设计的独特性,存在着运行成功的程序也有错误的可能,造成了学生知识体系的错误构建。
二、操作策略与实践
策略一:挖掘错误,提升“错误”价值。
1、整合错误,建立错误资源表。
发现错误的一个很重要的价值是少犯同类错误。在教学过程中我把以往学生常犯的错误都记录下来,建成错误资源表。学生在调试程序时,如果发现错误,先从错误资源表里“检索” 有无类似的错误。这样一来,学生的出错明显减少。表2是学生常犯的错误资源表。
常见错误 错误修改 错误成因
Textl.text Textl.text应改成text 1.text 拼写错误而造成的语法错误非常普遍,输入程序时一定要认真仔细、并养成良好的操作习惯。
Labe1 Labe1应改成Label
Test test应改成Text
Ture Ture应改为True
If d > o Then o应改成0
Text1.text= "浙江“ ”要改为英文标点符号" 使用中文标点符号,系统产生“无效字符”, 应使用英文标点符号。
dim i as Integer, r as double ,要改为英文标点符号,
Dim s as string
S=val(text1.text) Val(text1.text)改为text1.text 数据类型概念不清。
Dim r as integer
r=3.14 Integer 改为string
单击按钮运行程序:
Private sub form_load() Form_load()改为command 1_click() 混乱了事件驱动机制
表2
2、巧设错误,轻松驾驭课堂
凭借以往的教学经验,可以事先预测出学生编写程序时可能发生哪些错误,进而针对这些可能出现的错误,主动设置错误障碍,让学生在改错的过程中加深印象,并理解错误中所涉及的问题,以防以后再犯同类错误。
教学片段
在讲授“选择语句”(表3)时,我预计学生对if语句的多条件书写还不是很清楚,于是我在教学设计时设置了一段错误代码。果然,学生们不假思索便把这段代码复制到代码窗口,程序运行后发现邮费价格一直等于10,不由地埋怨了起来。
错误代码段:
Private Sub Command1_Click ()
Dim N,P as double
N = Val(Text1.Text)
If 0 P=10
Else
P=10+(n-5)*1.9
endif
Text2.Text = Str(p)
End Sub
表3
我平息一下学生的情绪说:那就请你们查找一下,到底哪里出了问题。不一会儿,有同学成功了,他把0 3、放大错误,激发认知冲突
学生的错误通常是他们学习难点的具体体现,在引导学生改正错误的过程中,将错就错,放大“错误”,引导他们从正反不同角度去修正错误,给他们一些研究争论的时间和空间,从而让学生在争论中分析、反驳,在争论中明理,在争论中内化知识。在 “冒泡排序”实例程序设计上,我利用辅助软件让学生回忆了冒泡排序,并与学生一起讨论算法(表4 (1))中的一个关键点:第2行语句其实隐含一个潜在条件:i (1)冒泡排序算法:
1.(初始准备)i=1
2.(完成?)如果i=n,则算法结束
3.(第i遍处理的初始准备)j=n
4.(第i遍处理完成?)如果j<=i,那么转到8。
5.(比较一对数据)如果d(j) 6.(准备处理下一对数据)j=j-1
7.(转去处理下一对数据)
转到4
8.(准备下一遍处理)i=i+1
9.(转去进行下一遍处理)转到2. (2)错误的示意性程序片段:
1.For i=1 to n
2. For j=n to i step -1
3.if D(j) Temp = D(j)
D(j) = D(j-1)
D(j-1)=temp
Endif
4.next j
5.next i (3)正确的示意性程序片段:
1.For i=1 to n-1
2. For j=n to i+1 step -1
3.if D(j) Temp = D(j)
D(j) = D(j-1)
D(j-1)=temp
Endif
4.next j
5.next i
表4
策略二:活用错误,积极开展协助学习。
1、错误互助,提高学习效率
学生的知识经验和思维方式的不同,所犯的错误也各不相同。对于自己难检查出来的错误,由小组的其他成员来检查往往能起到“旁观者清”的效果。这个阶段,我在教学上是这样安排的,根据我们学校机房的特点(共排成六列),分成六个整体实力相当的小组。让学生合作交流中去思考、去质疑,对帮助别人的同学在检查错误的过程中提高了分析问题的能力,并在帮助同学的过程中获得快乐;被帮助的同学在出现错误后辅导的及时性大大增强,找到问题原因后有利于建立积极情绪。在有效缓解教师压力时,两极分化的趋势也就不会越来越来大了。
大量学生错误在协作学习中解决了,教师所要应答的错误也就更加具有演示的意义了。在接下来的评价分析环节,教师就可以自然地利用这些课堂生成资源引导学生对这些错误进行讨论,深化对知识的理解和掌握,把错误转化为一次新的学习,完善认知结构,形成系统。
2、发掘错误,培养学生能力
此外,《算法与程序设计》还有一种学生一般很难察觉错误的情况:一是程序运行结果正确但程序有错,二是程序运行有结果,但结果是错误的,学生却没有发现结果有错。如《算法与程序设计----学生活动手册》实践中一题(表5):
题目:每次将一张白纸沿垂直和水平中线对半撕成四张纸片,然后取其中一张纸片照这样再撕成四张纸片,一直这样下去,计算撕了N次后纸片的张数。请完善一下程序:
Private sub command1_click()
Dim I as integer,n as integer,s as integer
N=val(text1.text)
( )
For I =1 to n
S=( )
Next i
Label1.caption=“纸片的张数是:”
Text2.text=str(s)
(表5)
不少学生在空格2中填入了3*i+1,程序结果正确,但是不能反映出循环结构的真正特点。因此,我在教学评价时让学生反思:程序少了for 循环语句,能不能运行到结果? 学生们经过探究,认为:3*i+1只能得出撕的次数与总纸数,不能反映撕的过程中纸的增加的过程,与循环for语句执行的意义不符,应填入s+3.造成这样的错误是学生对循环结构关键环节把握还不够准确。因此我们多发现此类错误后,但最好不要直接指出,而是要引导学生多观察、多思考、多比较,让“错误”逐步浮出水面,引导学生进行知识的再建构。
策略三:利用错误,实施信息技术有效教学的评价
1、淡化错误,提高学生的成就感
只有让受教育者有成就感,才能不断激发学生的求知欲。但在学生在分析问题、设计算法到程序实现的学习过程中,通常是在“不断地犯错、不断地改错”这一过程中行进,并在行进中最终解决问题。因此适时的调节学生的心理,降低学生的挫折感,维持学生的兴趣就显得格外的重要。在两三次算法课后,我就在巡视错误的过程,提高对那些没完成任务同学的关注,适时地指导他们该运用的什么知识点,尽可能让其在自己的基础上完成。同时,利用课闲时间,列举一些自己或其它程序员中设计程序时经典的错误。
2、反思错误,完善学生知识结构
学生的错误不可能单独依靠正面的示范和反复的练习得以纠正,必须有一个“自我否定”的过程,而“自我否定”又以自我反思作前提。在实际教学中,教师应帮助学生树立纠错追因意识,把学生的错误当作宝贵的教学资源,引导学生反思一下错题错在哪里?为什么错?然后让学生有针对性的纠错,让错误发挥最大的育人功效。我一般下课前5分钟从小组中选出有代表性的错题,在课堂上进行剖析,同时让学生的解题思维充分暴露出来,然后,尽量详尽地分析错误原因。在学生常犯错误的关键之处,经常适时地引导学生去反思、回顾,这样不仅可以培养学生分析问题的能力,又可以完善认知结构,形成系统。
三、实践后的反思
有专家指出:“课堂上的错误是教学的巨大财富”。但价值有时并不在于错误本身,而在教师去挖掘错误价值。《算法与程序设计》课堂有很多学生的错误,但并不是所有错误都可以作为课堂资源利用,也不是所有可以作为资源的事件都要当堂处理。是否当堂利用动态资源,要看是否服从和服务于本课的教学目标。因此我们不仅要树立“错误资源”意识,更要提升自己的整体教学的能力,使教学进一步向着有效、高质量的目标“互动深化”发展。
参考文献:
1、魏雄鹰 主编《中小学信息技术教学案例专题研究》浙江大学出版社
2、马克斯·范梅南 著 李树英 译《教学机智—教育智慧的意蕴》教育科学出版社
3、边楚女 《“错”中自有黄金屋——算法与程序设计课程“课堂错误”转化提升策略》 教学论