APP下载

借编程之力提升学生聚合思维

2022-03-18鲍通

中国信息技术教育 2022年5期
关键词:小学信息技术算法

鲍通

摘要: 创造力的产生需要发散思维和聚合思维不停地相互转换及融合,把握好两种思维的临界点对于学生创造力的培养至关重要。作者在小学信息技术编程教学中发现,学生更易于倾向广而散的想象,缺乏实践与反思,眼高手低、泛而不精的状态时常影响学习效果,降低学习兴趣。好做法离不开好想法,但如果想法过于遥远,做法就会迷失方向。所以,作者提出教师应引导学生在一定程度上学会放慢脚步、收敛思维,利用主观条件选择最佳方法实现学习目标。

关键词:聚合思维;小学信息技术;可视化编程;算法

中图分类号:G434  文献标识码:A  论文编号:1674-2117(2022)05-0045-04

可視化编程如同用积木搭建“城堡”,又如同用音符谱写乐曲。它与面向过程编程、面向对象编程、组件函数编程等都不一样,但在编程过程中,这些思想都可能涉及,所以,可视化编程重在编“思维”,尤其是一些算法策略,更能锻炼学生思考问题和解决问题的能力。算法是计算机科学的基础和其他众多子领域的前导内容,其重要性不言而喻。

递归,是计算机的经典算法之一,其基本思想是把规模较大的问题转化为规模较小的相似的子问题来解决,它可以清晰地描述复杂程序的逻辑,特别适用于循环层数不确定的情形。递归在生活中很常见,如汉诺塔游戏、俄罗斯套娃、斐波那契数列、二叉树等,在它们身上总能发现聚合思维的身影。因此,笔者尝试将可视化编程与生活现象相结合,在虚实之间捕捉思维的契合点,借递归算法训练进一步强化学生的聚合思维能力。

● 聚焦相同特征:寻找事物之间的共性

1.生活中的求同法:建立求同法思维模型

求同法,指被研究对象在出现的若干场合中,存在一些相关因素,从多种不同的情况中排除不相干的,最终找出最为关键的共同因素。该过程可以确定被研究对象与共同因素存在因果关系。例如,狄神探接到一起报案,说村子里接连出现了四户人家中毒,他们晚饭的食材不同,就餐的时间和地点也各不相同,村民们觉得蹊跷,随后神探通过多方面的调查发现,当天晚上这四户人家都饮用了村头的井水,后经检测得出结论:井水是导致中毒的原因。在这个例子中,狄神探得出最终结论就是运用了求同法,在中毒者诸多不同的条件中,找到“饮用井水”这个共同行为作为突破口,证实了井水与中毒之间存在着因果关系。该方法一般仅适用于聚焦具有单一因果关系的问题。

2.程序中的求同法:掌握递归的一般用法

下面,笔者将求同法的思想迁移至递归算法中,通过可视化编程进一步加强求同法的运用。观察下页图1-1所示的几个图形,不难发现它们的规律,即组合图形中小图形的大小及数量虽然各不相同,但形状都一样。如何通过编程来绘制这些图形呢?用普通的循环语句显然会产生一些代码冗余,而递归算法则可以精简代码,减少冗余,从而清晰呈现复杂问题的拆解步骤,有助于学生体验化繁为简的整个过程。以第一个图形为例,多个正方形有规则地嵌套在一起,由外向内边长呈等差数列依次递减(也可反向递增),为了减少代码冗余,此处选用递归算法(如图1-2),将重复部分画单个正方形的脚本提取出来视为一个“重复体”,再用函数调用自身的方式构建循环,最后通过对“参数”的条件判断终止程序运行,这就是递归的一般用法。原理类似于数学的乘法分配律,如3×15+7×15=(3+7)×15,提取公因式让计算变得更加简便,这也正体现了一种函数思想。其他图形同理,包括起点终点不在同一位置的、不绕中心点旋转的类型,都可以基于求同法的思想借递归策略轻松实现。这部分训练以提高学生优化解决方法的能力为目标,引导学生在遇到问题时不急于求解,要学会提炼有效信息,挖掘事物规律,进而筛选出更为理想、更加高效的解决方法。

● 捕捉细节差异:寻找事物之间的不同

1.生活中的求异法:建立求异法思维模型

求异法,指被研究对象在出现和不出现的场合中,存在一些相关因素,除某个差异因素外其他因素都相同,且被研究对象的出现与否决定于差异因素是否出现,则该差异条件即为原因。该过程可以确定被研究对象与差异因素存在因果关系。仍以狄神探为例,他选出其中一位中毒村民的食材进行了清点,确定晚餐中包含了在村里集市上购买的猪肉、茄子、西红柿和鸡蛋,然后通过调查当晚的晚餐中也含有这些食材的其他村民得知,均没有中毒迹象,而唯一不同的是,中毒村民喝过井水,健康村民都没喝过井水,这就足以怀疑井水有问题了。此时,神探采取的判断方式就是求异法,在中毒者和健康者诸多相同的条件中,找到“是否饮用井水”这个不同的行为作为突破口,对井水问题提出了质疑。该方法与求同法结合使用会提高结论的可靠性。

2.程序中的求异法:观察递归的特殊情形

目光再次回到算法中,用过了递归,有些学生自然会对普通的循环语句产生怀念,因为对于简单的图形而言,循环语句本身和递归构建的循环没有太大的区别,无非多写几行代码而已,所以,只有当遇到复杂图形的时候,递归的优势才能得到凸显。如上页图2所示,在大正方形的四角位置分别画出小正方形,在小正方形的四角位置又继续画出更小的正方形,以此类推。假设小正方形边长是大正方形边长的四分之一,规律虽明显,但实现较难,如果不用递归,代码量必然会让人眼花缭乱,如果使用递归,之前普通的递归也要进行“变形”才能满足要求,由此得出,递归也有类型划分。通过对比图1可清晰观察到:一种是在函数的末尾位置调用函数自身,另一种则是在中间位置调用自身。对于前者而言,普通循环语句同样适用,但对于后者来说,递归便难以被取代。然而,世界上没有完美的事物,有些编译器无法使用递归提升性能,相比之下,循环语句更能节省系统资源,加之递归有时理解起来比较困难,所以二者如何选择,应因地制宜。就算法过程而言,学生只需理解递归简化脚本的思路,并用于多层次的调用即可。学生关键要领悟其中的思想:在运用某种公式求解问题的时候,除了学会求同,还要懂得求异,公式有时也需要“变形”,要在共性中发现特殊,在特殊中建立共性。

● 寻找级联关系:发现事物变化的原因

1.生活中的共变法:建立共变法思维模型

共变法,指被研究对象在出现的若干场合中,其他因素皆相同,其中有一个因素的变化会导致被研究对象发生变化,这种情况被称为共变。该过程可以确定被研究对象与变化因素存在因果关系。继续前面的例子,狄神探通过调查多位中毒的村民后发现,中毒症状存在轻重之分,那么,中毒严重的比中毒轻的多做了什么事情呢?经检测,水井里的水已变质,且散发着一股淡淡的农药味,说明井水中含有农药成分,且饮用的量越多,中毒反应就越强烈,这进一步证实了毒性与井水中的农药含量有关。原因与结果发生共变时一般会有三种情况产生——一种呈正比,如毒性与农药含量之间的关系,另一种呈反比,还有一种是介于两者之间,该情形下需要找到转折的关键点,才能认清存在于因果之间的规律。

2.程序中的共变法:完善递归的使用条件

共变法的思想在计算机系统中是很常见的,最常见的情形莫过于打开的程序越多,系统消耗的内存就越多,也因此有了释放内存、优化系统资源等做法。递归算法同样需要借助共变意识进行优化。递归因“变”产生,变量在计算机语言中用于储存计算结果或表示值的抽象概念,函数中的参数也属于变量,可用于表达长度、角度、弧度、速度,甚至个数等,正是由于这些因素的不确定性,才有了图形的多种变化。然而,变化也要有始有终,如图3所示,花朵的花瓣大小和花瓣数量均影响着一朵花的美观,只有協调好两个参数之间的关系,才能使图形看起来更加得体。学生通过算法训练,能够准确找到图形变化的原因,并熟练掌握变量的使用方法,在确定画法的起始条件之后,还要对终止条件进行界定,限制结果随原因的改变(事件的触发)而持续变化,进而控制递归过多导致内存溢出。此处,只有理解了对象与参数的共变关系,才能更好地把握因果变化。

● 过滤确定因素:排除所有的不可能性

1.生活中的排除法:建立排除法思维模型

排除法:指被研究对象在出现的若干场合中,存在一些相关因素,将确定不会导致被研究对象发生变化的因素排除掉,剩下的即为关键因素。福尔摩斯侦探小说中有一句话:当你排除掉了所有的不可能性,不管剩下的是什么,无论多么难以置信,那都是真相。该过程可以确定被研究对象与不确定因素存在因果关系。狄神探同样可以采用排除法得出结论,在对中毒的其中一户人家进行调查的时候,发现有一位中毒村民的家人晚餐吃了猪肉、茄子和西红柿,而这位中毒村民没有吃这些食物,可还是中毒了,这就足以排除食材为中毒因素了。至于其家人中毒的原因,如果是炒菜时放入了少量的井水,那便可以加速判定井水有毒这个结论了。该方法又叫淘汰法或试探法。

2.程序中的排除法:理解递归的深层机制

排除法的思想体现在带回溯的递归算法中。要说递归是一种算法结构,那么回溯就是一种算法思想。回溯算法的过程是通过不同的试探来确定问题的解,它从一条路往前走,能进则进,不能进则退,换条路继续试探。其思想如同排除法,即对已经确定为错误的答案不必再继续研究下去。例如,在一个集合R={0,1,2,3,4}的所有子集中找出元素之和小于3的集合,显然,从前往后判断到2即可终止,3、4直接排除。二叉树是一个比较典型的例子,它由一个个节点组成,每个节点最多再分两个子节点,从根节点开始呈左右方向延伸为左子树和右子树。如图4所示,过程中它会返回至上一级节点开始把所有情况一一列出,直到遇见与自身相同的情况暂停,然后再继续返回至上上一级节点开始,以此类推,直到遇见满足条件的情况终止。通俗地说,递归结束后如果不再做其他事情,就停止;如果继续做其他事情,就回溯。对于自定义函数不带返回值的情况而言,可暂且认为递归结束后不做任何事;如果递归之后再有递归或其他任务,则必然产生回溯,与图2同理。由于很多实际问题抽象出来的数据结构都与二叉树的形式相似,所以这种处理问题的机制同样值得借鉴。

● 结语

上述四种思维方法各有特点,综合运用效果显著。学生通过科学地训练,能够更好地理解递归算法的概念和执行机制,掌握递归的设计及优化策略,从而在编程学习的过程中有效提升聚合思维能力,为好想法的诞生创造更多的条件,也为好策略的实施积累有效的力量。当然,聚合思维并不孤独,发散思维常伴左右,德国心理学家海纳特曾说:发散思维只有同聚合思维综合起来才有现实意义。如果将编程比作放风筝,那么主题就是风筝线,聚合思维和发散思维分别负责收放两根线。二者都希望风筝飞得更高,但再高再远也不能断线,否则,风筝就会失去控制。只有牵好风筝线,收放自如,才能真正体验放风筝的乐趣。

3509501908286

猜你喜欢

小学信息技术算法
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
进位加法的两种算法
算法初步两点追踪
基于增强随机搜索的OECI-ELM算法
浅谈用新理念构建小学信息技术的“新课堂”
根据小学信息技术学科特点进行有效评课
浅谈创客教育下的小学信息技术教学实践研究
基于新课程理念的小学信息技术游戏化教学探析
小学信息技术教学高效课堂的构建