从一道高考算法题谈起——例谈信息技术课的研题策略 作者:安维琪
摘要:针对信息技术习题课中存在的各种问题,笔者从命题、解题、析题等角度提出了六条课前“研题”策略,充分挖掘习题的价值,发挥习题教学的应有功能,力求以高效的习题讲解放飞思维,超越题海,打造培养学生思维能力的精品课堂。
关键词:信息技术 习题教学 思维培养
以下是教学生活中的两个镜头:
镜头1:
教师在详细地分析完一道习题后,问:
“很明显,这空该填什么呢?”
几个学生回答:“c=c+1。”
教师:“对了。这道题都听明白了吗?我们继续下一题。”
镜头2:
教师们围坐在一起,批改某次单元考卷:
教师甲:这个知识点已经反复强调过,怎么还会做错?
教师乙:和这题类似的不是讲过吗,怎么变一下就不会做了呢?
教师丙:也不知学生怎么想的,怎么会写出这样的答案呢?
镜头里的情景,在我们身边一直反复上演。问题的关键在哪里?在镜头1中,教师为了避免学生走“歪路”,“提高效率”,往往身先士卒,带领学生阅读、分析、综合。讲解完毕,此题的教学功能也就“寿终正寝”,学生的思维活动“草草收兵”,教师的思维活动也随之结束了。这样的习题讲解,学生又怎能建构起自己的知识体系?所以必然会出现镜头2里的情形。
因此,改变以往教师“就题论题”的析题习惯,培养研题意识,对题目资源进行深加工,使题目功能最大化,拓展学生的思维能力,减轻学生的学业负担,成为值得我们研究的课题。笔者在这几年的算法教学过程中,借鉴数学学科的教学经验——不再追求做题的数量,而是注重提高学生的思维能力,悟出“解前思”的重要性:即秉持“借题发挥、小题大做”的研题精神,坚守“三思而后行”的析题习惯,挖掘题目的深度和广度,扩大题目的辐射面,多角度激发学生的思维潜能。
图1是2009年浙江省信息技术高考算法部分的最后一题,题型为程序填空。它要求学生在了解题意和领会命题者意图的基础上进行解题,根据上下文判断缺失的程序语句。该题来源于生活,情境真实、完整,具有较好的拓展价值,能客观测试学生在算法设计、程序知识和综合运用方面的能力。笔者就以此为例,从三个角度阐述如何通过“解前思”这一环节,成功架设起习题教学和思维培养的桥梁。
图1
一、一题多变,活化思维
研题策略之一——“节外生枝”:在原命题的基础上,能否再增加考核点?
首先来分析原命题的考核意图:本题主要考核了学生从VB对象中获取数值的程序描述能力以及函数的调用表示,第1个空属于容易题,第2个空属于稍难题。在《学科指导意见》里,“VB对象的数据输入输出”是学生要掌握的基本能力,“函数的使用表示”则是为了加深学生对程序设计的理解,使学生养成程序设计模块化的良好习惯。从一定程度上讲,第1个空体现了新课程标准对“知识和技能”的目标考核要求,第2个空则更多体现了“过程与方法”的目标达成,学生要做到灵活、合理地使用函数。
在以上分析的基础上,笔者尝试在已知程序中添加新的考核点:(3)Mid(a(t), 8, 4),下面从内容、难度、位置三个方面说明理由:1、此考点为VB字符串内部函数的应用考核,与其他两个空的知识点考核不冲突;2、该空预设难度为中等,由于本句程序的输出分成三部分,学生在完成此空时可以借鉴第一部分的输入原理,这样大大降低了该空的难度,同样对于平衡整道题目的难度系统也起到了一定的作用。3、纵观程序整体,该处的空缺不会影响学生对程序的阅读和理解。
研题策略之二——“改头换面”:改变题型,本题若把题型改为纠错题,又该放置哪些错误类型?
预测学生在答题时可能出现的错误类型,是教师教学经验的体现。以杜威为代表的革新主义课程观认为,教师担任着学习经验重组、创新的任务。因此,如何利用这些在“教”与“学”的过程中衍生出的“经验资源”呢?按照传统的习题讲解程序,教师先苦口婆心地分析、讲解,再顺理成章地呈现答案。结果呢,学生这道题是听懂了,但下次遇到类似题目还是会出错。究其原因,教师的讲解终究是教师个人解题思路的重复,与学生的思维无关。学生的元认知有如树根,盘根错节,教师的讲解好比雨露,如果雨露没有顺着根须渗到根部,对学生认知发展的帮助就不大。如果我们换位思考,展现学生的原始思维,在留空处填入学生容易出错的例子,给学生创设一道纠错题。学生在纠错的过程中,必然会思考:错在哪里?为什么错?如何改?此时,我们就会听到学生展开思维翅膀的美妙声音。不断地分析、判定、筛选的过程,其实也是学生重塑思维、提升思维品质的过程。
按照以上想法,笔者根据平时的教学经验,在空白处填入以下错误类型,理由如下:
第1空:
1、学生答案为5,由于很多学生在学习过程中害怕与程序接触,或者尽量“远离”程序代码,所以在解题时更多地会将目光投向程序界面,最后在程序填空时,由于与题目的描述衔接出现问题,很容易将界面上的输入样例数据直接作为程序的初始值进行填空。
2、学生答案为:n=val(text.text),答题的规范性一直是困扰学生的一个难题。虽然学生在课堂上多次看过教师书写“对象.属性=属性值”的规则,但在自己书写时,往往因为笔误或者不良的学习习惯而导致失分。
第2空:
学生答案为:check,这是学生最容易犯的错误,自定义函数的语法表示模式认识不清,尤其是输入变量参数传递的内涵。
研题策略之三——“查漏补缺”:为还原命题的完整面貌,该如何完善程序的省略部分?
伪代码是算法常用描述语言之一,因此,在程序的编写过程中,考虑到阅读量、重难点、详略等因素,命题者往往会使用伪代码描述某段程序的功能。我们想像一下,当学生很有成就感地完成一道题后,教师又不失时机地提出完善程序的要求,相信学生的求知欲又会被再次点燃。学习契机在哪里?它就在我们教师的一双慧眼里。
实践证明,本题有两个方面的运用价值:
1、算法思想
本程序在大环境下运用的是查找算法,而该函数也是核对之类的应用,学生自然而然也运用了查找算法。小部分学生在数组a中进行查找,大部分学生在列表框list1中进行查找。显然,前者的运行结果是永远都能找到自己,后者则扑朔迷离,这是因为list1列表框中的元素都带有*号,可以说找到了,也可以说未找到。问题症结在于查找范围的准确定位。令笔者高兴的是,也有部分学生通过引入新的全局数组变量,来表示是否使用过的标志,非常巧妙地解决了问题(参考图2)。假如学生有机会一睹原命题的真面目,或不谋而合,或棋高一着,该多有成就感啊!
图2
2、自定义函数的编程
教师在平时的教学中会尽量“回避”与自定义函数有关的题目,经常抱着不考自定义函数的幻想来“减轻”学生的学习压力,其实学生的能力需要教师去激发和培养。通过此题,让学生掌握自定义函数的编程模式,即:自变量参数输入——过程处理——函数值返回,其中特别强调函数值返回格式与函数调用格式的区别。
二、一题多解,优化思维
研题策略之四——“锦上添花”:根据原题意要求,是否还有其它解题方法?
如前所述,对于程序填空题,需要我们在悉心体会设计者算法思想的前提下进行推敲,最终还原作者命题意图。但之后呢?是否就功德圆满了?我们不防大胆设问:还有其它解题方法吗?其实,我们教师或是部分学生可能早在审题之后,内心就已规划好了自己的蓝图,只是为了解题,小心收好,而把思维纳入命题者的设计轨道。正所谓条条大路通罗马,何不走出一条自己的路?
在实践中,笔者引导学生排除原命题先入为主的干扰,鼓励他们展现自己的想法。有想法的学生跃跃欲试,暂时没想到的慢慢琢磨,思维碰撞的火花在教室里闪闪发光。此次收获颇丰,大部分学生运用“设标记计数法”来实现程序设计(参考如图3),算法思想通俗易懂,程序编写简洁明了,拿学生的话说是“程序瘦身”,整个学习过程始终洋溢着轻松愉快的感觉。
图3
“一题多解”,能将各人的潜能和解题智慧完美地激发出来,此时教师应该及时抓住突发的灵感,对课堂生成的“资源”进行深入地发掘,通过发散思维,找到最优算法,从而全面优化学生的思维。如果说上述思考是在做“加法”运算,那么下面的思考就是在做“减法”运算。
三、一题多用,深化思维
研题策略之五——“融会贯通”:依据原题的题型特点,是否可归纳出值得推广的解题规律?或者能否列举出平时练习过并与之相似的习题呢?
细心揣摩命题者的设计意图,不难发现,此题采用的算法是大家耳熟能详的按照某种限定条件的顺序查找算法,只是设计者在处理特定条件的程序设计时采用了自定义函数,由此让整个程序呈现出多过程的表示形态,加大了学生的程序阅读量。从试题结构来看,此题作为综合题最后一题,其知识覆盖面和能力考核都符合考纲要求,阅读份量也是合情合理的;从程序的编写风格来看,子过程随时待命在主程序周围,任其调兵遣将,体现了专业风范。因此,设计者凸显如何把握多过程程序阅读的命题意图就不言而喻了,且据笔者对连续四年的高考命题研究,多过程程序设计呈不断上升趋势,显然加强此类题型的练习刻不容缓,但遗憾的是,在现有的资料中,此类题型寥寥无几。那么,如何引导学生归纳出此类题型的阅读方法,触类旁通,是提高学生解题效率的有效途径。
此题可引导学生归纳出如下技巧:首先,仔细审题,对题意了然于胸;其次,由于各个子过程代码复杂度不是很高,有时会在注释中作了相应的描述,甚至用伪代码来编写,因此学生只需要了解若干子过程的代码功能即可。最后,结合题目的总体实现要求,认真分析主程序的执行代码,确定与子过程的关联点并做相应的统一。在教师的引导下,学生实现了从具体到抽象的思维演绎,形成了有价值的思维成果。实践证明,在后续教学中,当学生在解答此类多过程程序时,教师有意识引导学生采用上述阅读技巧,经过相应训练,之前对此类程序望而生畏、无从下手的学生,都在一定程度上,明晰了解题思路、找到了答题的落脚点。
此外,若该题与学生以前练习过的习题的核心内容相似,可以引导学生回忆,对其进行归类,形成问题系列,便于记忆和搜索,在很大程度上,提高学生解题的速度及准确率。
研题策略之六——“有始有终”:若让学生上机实践该题,又能取得哪些实践的优势呢?
据笔者调查,学科教师更热衷于在教室进行算法教学。理由大致有三点:其一,考试导向,高考选择笔试形式,即使是会考采用上机考核,也只是载体不同;其二,个人倾向,教师觉得学生在教室比在机房上课更能集中注意力;其三,技术瓶颈,学生打字速度有快慢,影响上课效率。理由似乎很充份,但也无法否认上机实践比纸上书写更具优势。因为只要有过编程经历的人都知道:编程离不开测试环境,就像鱼儿离不水,尤其是面向对象的程序设计。其实,一二两点理由属主观原因,我们只要转变观念还能克服。第三点理由虽是客观原因,但我们可以采用“留白”策略来弥补,即教师想考核哪方面知识点,该知识点就留空,其余资料都用现成的,这就需要教师事先花点功夫创建好。
如在本题的上机实践中,笔者除了自行添加了Form_Load过程外,其余都照搬到VB环境中,让学生自主探究,教师适时点拨。在实践中,学生遵循“设计——调试——再设计”的路线,过关斩将,步步为营,最终通过了测试。这也正是建构主义中“支架式”学习理论的实践见证。建构主义学习理论强调以学生为中心,在建构主义学习环境下,教师把学习的主动权交给学生,让学生在亲身实践中品尝艰辛和乐趣,从而培养他们的独立操作能力。虽然这样的学习方法占用的时间比较多,但适时让学生上场练兵,不仅锻炼了学生动手操作的能力,而且提升了学生思维的变通性、深刻性。
在高考复习中,习题讲解是很重要的一项内容。教师可通过一题多变(命题角度)、一题多解(解题角度)、一题多用(析题角度)等方法加强课前的研题力度,力求挖掘习题的内涵和外延,以高效的习题讲解放飞思维,超越题海,打造培养学生思维能力的精品课堂。
参考文献:
[1] 郭红霞.为思维而教——兼谈思维教学的价值和方式[J].教育探索,2009(3):26-28.
[2] 崔勇.建构主义理论指导下的创意设计——思维教学的实践探索[J].教育探索,2009(6):46-47.
[3] 田林必.“解后思”:提高学生数学解题能力的最佳途径[J].中学数学教学参考,2004(8):31-32.