让悟性成为编程教学的主旋律
鲍通
近年来,随着Scratch图形化编程在中小学教育中的普及,越来越多的人会关注这样一个问题:编程究竟能给孩子带来什么?或者说编程教学的目的究竟是什么?
设想,如果人们只顾研究蝙蝠的习性而忽略了定位原理,那么蝙蝠将造福不了人类。好在人们通过悟性不断地从生物界受到新的启示,不但根据蝙蝠发明了雷达,还模仿飞禽鸟类发明了飞机,模仿鱼类和海豚发明了船和潜艇,模拟动物变色研制了迷彩服等。同理,如果脱离悟性只顾研究项目的程序,那么编程也永远只是编写程序罢了。把一个项目做到极致不是目的,从一个项目引申到多个项目或者从一个领域跨越到另一个领域才是关键。
笔者认为,编程教学的目的应当侧重于打开学生的悟性,激活跨学科想象力和创造力,将程序设计思维辐射到其他方面以生成更多的价值,而非仅仅培养学生成为计算机编程高手或者竞技达人。我们应该试着通过编程,让学生领悟其中的道理,并对日常的学习生活有所帮助。
● 从兴趣体验到知识积累
1.基础编程
“有本事就上50层”“是英雄坚持20秒”“花式街头篮球”“超级极品飞车”“黑夜狙击手”……这些Scratch游戏项目仅看名称就有种想体验的冲动吧。那就开门见山,请学生尽情体验,然后说出自己的感受,相信很多学生会概括总结为俩字:好玩。学生脸上的笑容足以证明,兴趣是打开学习之门的金钥匙。万丈高楼平地起,基础当先,学生摇身一变,由玩家角色瞬间转变为设计师角色,这里没有“学生”,也没有“课堂”,“自由”就是唯一的规则。学生可根据案例中的功能模块,对照着现成的脚本,自行摸索各种控件的基本用法,因为没有确切的任务目标,可能探究的深浅不一,理解的角度也不同,没关系,只要能读懂部分脚本,并试着修改其中的几处属性让游戏发生一些变化,大体上能明白重复语句、条件语句的作用,观察了解造型、广播、变量、随机数等常见控件的基本概念,这就够了。
2.获得启示
对于知识的积累,起初总要先经历一段从无到有的过程,学生需要做加法,做大量的加法,趁着对新鲜事物感兴趣,努力获取更多的知识,哪怕它们是零散的而又难以归类的。例如,要让一辆机器人小车前行,必须通过启动电机马达带动轮子旋转,可是又如何启动电机呢?可否先试着用程序点亮发光二极管,或者开启蜂鸣器播放声音,通过较为简易的方式先理解输入和输出的概念,再思考电机的启动问题?这有些类似于“逆向联想”,即按照事物出现的时间顺序或观念的逻辑顺序,由后面的事物追溯到前面另一事物的联想。生活中时常会遇到一些难以用单一知识来解决的问题,往往一开始觉得容易,但随着对问题的深入研究,可能会发现它们还涉及物理、化学甚至历史等方面的内容,这就要求学生一定要具备总结逻辑关系以及多学科融会贯通的能力,包括如何追溯前面更多的基础知识,以将问题解析得更加透彻全面。基础编程的训练环节,可以较好地培养学生的观察力和联想力,引导学生从自己的角度出发建立“基础知识库”。
● 从知识分类到模型构建
1.构建模型
在学生已初步了解移动、旋转、随机数等基本知识的基础上,趁热打铁,用一个“大鱼吃小鱼”的游戏项目将碎片化的知识点有机地串联起来。四个任务:用键盘方向键控制一条大鱼的游动方向;五条小鱼在水中自由游动(速度方向均随机);控制大鱼吃掉小鱼(吃一条加1分,被吃掉的小鱼立即隐藏,等待随机时间后在水中任意位置再次显现);点击绿旗游戏开始,倒计时60秒后所有小鱼消失且显示“游戏结束”字样。不难发现,这个项目的功能虽然简单,但它覆盖的知识面较广,包括按键、移动、面向、旋转、坐标、造型、侦测、广播、变量、随机数、条件语句、循环语句等,若要完整地实现游戏功能,它们缺一不可。学生在制作过程中能轻而易举地将这些知识点加以运用,并充分体会到它们在一个具体的项目中各自所起的作用,进而便于理解掌握。模型的构建,让碎片化的知识点从此变得不再零散。
2.获得启示
随着学生的“基础知识库”越来越充实,今后如何牢记且更好地存储这些知识就显得尤为重要,尤其是对于比较零散的或生僻的知识点,似曾相识却又无法运用,那就可惜了。像前面提到的机器人小车,前进的功能实现了,紧接着就是左转、右转、停止和后退,这些类似的功能如果再继续研究下去就有可能感到乏味了,因为思维空间受限,无非就是一個高/低电平的输出,对相似的功能模块投入再多的精力也不一定能达到锻炼能力的目的。这时,如果再引入一个“躲避障碍”或“黑线寻迹”的功能,学生便会调用更多的知识点,包括超声波传感器和红外线传感器的工作原理,且需加入更多的判断指令来应对更大的挑战。一个综合性或关联性较强的模块,会让平时看起来比较枯燥的东西在关键时刻派上用场。正如学科,物理、化学、生物可以分别解决其各自领域里的问题,而只有当联合起来共同解决一个综合性问题的时候,它们各自的价值才会更加凸显。这也正是“整合”的概念。通过编程,将知识分类整理并构建知识模型,可以引导学生更好地存储知识。
● 从参照模仿到创新应用
1.运用模型
“大鱼吃小鱼”的游戏项目暂告一段落,学生通过一段时间的学习,既收获了编程知识,又提高了动手能力,那么,现在我们可以为这段时间的学习画上句号了吗?答案当然是不可以,或者说,一切才刚刚开始!“大鱼吃小鱼”的项目仅当铺垫,它只是一个模型而已,接下来才是重头戏。也正是因为如此,不建议在铺垫的过程中揪住一两处“不完美”花费太多的时间。任何软件都是在升级中不断地完善,难以寻求“完美”,模型亦不例外。所以,有学生会对老师说:“我花了大量的时间解决了疑难问题,现在终于做完了。”这种想法其实是不妥当的,包括还有一些正在被问题困扰着坚持“啃硬骨头”的学生,一定不要被眼前的成功或失败遮住了远眺的视野。继续前行,假设把游戏中的水下场景换成天空,把大鱼换成一只燕子,五条小鱼换成五只飞虫,然后用键盘控制燕子的方向吃掉天空中飞来飞去的小虫,吃一只加1分,感觉瞬间就不一样了,所有脚本不改动,“大鱼吃小鱼”摇身一变竟变成了“小鸟吃飞虫”,学生会感到很新颖。模型的运用,让单个项目从此不再孤单。
2.获得启示
掌握一种学习方法比学会一类知识技能更重要。对于碎片化的知识点,“整合”并不是最终目的,关键在于运用。在知识的海洋里,到处都隐藏着“为什么”,所以遇到问题是难免的,我们所要做的除了坚持,更需要借悟性来巧做以达到事半功倍的效果。然而,悟性又来自哪里呢?自然界一直是人类进步的灵感源泉,生物界的动植物在漫长的进化过程中,为了生存而逐渐具备了适应大自然的本领,人类通过对它们的模仿,在劳动中创造出了一系列工具,增强了自己的本领和能力。正是“模仿”生成了悟性,再基于观察和总结得到对实践的认识和把握,最终达到创新。试想,如果保留机器人小车的程序和传感器等部件,而将外壳换成一辆玩具装甲车或者坦克的外壳,那会是一种什么样的效果?如果换上一只卡通小猪的外壳呢?脚底下有轮子转动,超声波传感器由“车灯”的位置挪到“鼻子”的位置,呈现的效果又不一样了。进一步思考,可否利用知识整合的方法进行学科整合,用调用程序的思路调用学科知识,包括目标、内容,甚至研究方法等?模仿并非抄袭和复制,而是一种学习和积累,它同样需要持之以恒、熟能生巧。
● 从去粗取精到重组优化
1.综合拓展
能通过程序让“小猫”动起来,就能用同样的方法让一只“老鼠”动起来,渐渐地学生会发现,无论“小猫”还是“老鼠”,真正动起来的不是这些“小动物”,而是一个“对象”或者一个“角色”,至于谁来充当这个角色,因剧情而定。如果说从“大鱼吃小鱼”到“小鸟吃飞虫”相当于热身训练,那么接下来的“打地鼠”,就需要真枪实弹了:锤头跟随鼠标移动,点击鼠标左键锤头落下,地上的三排九个洞口随机冒出地鼠和小兔子,打到地鼠加1分,打到兔子减1分,30秒计时算出得分。再如人机对战“剪刀石头布”:当玩家用鼠标在三个对象中任选一个时,计算机也同时随机选出一个,然后进行比较,7局4胜制。它们虽不同于前面的“大鱼吃小鱼”,甚至还增加了新的算法,但脚本的复用性依然很高,学生关键要摸清其中的规律,观察项目之间的共性和个性,当遇到问题时要能想到,“大鱼吃小鱼”里的哪个模块可以用来解决这个问题,或者对寻找解决办法有什么启发,甚至如何优化。通过项目之间的跳跃转换,不断地封装成功经验和失败教训,逐步锻炼独立思考、举一反三的能力。
2.获得启示
从做加法积累,到建立模型存储,再到参照模型转换,直至拓展运用,整个过程是动态的、连续发展的。若要创新,就必须超越模仿,学会提炼并重组优化。如果将机器人小车中用到的超声波传感器放在一辆真实的汽车尾部,那便是“倒车雷达”了;如果对超声波传感器返回值做出判断后触发的不是电机而是舵机,那么由舵机联动的一扇门就成了“智能门”,若干舵机组合还可构建出一台“智能机械臂”……正如一台机器从一个功能扩展到多个功能,起初,按钮的个数会陆续增加,但后来随着不断地改良升级,按钮或许就减少到只剩下一个“一键完成”,甚至不需要按钮,完全智能化了。生活中许多高深的道理往往蕴含在一些简单的思想中,真正的智慧其实就是洞察事物的本质和相互关系。再简单的东西要想做“精”,也是非常不容易的,因为本质的来源是错综复杂的。渐渐地你会发现,我们所谓的“整合”并不是做加法,而是做减法,最终要将各学科知识融合起来,学生值得骄傲的不再是收获了某种知识,而是具备了运用某种知识的能力。编程的综合拓展将引导学生学会如何做“减法”,剔除烦琐,保留精简,循序渐进终见月明。
● 结束语
编程,是一项技能,也是解决问题的理想工具,是一种表达,也是一种创作。它能教会学生懂得如何取舍,如何对事务化繁为简。其实,做减法是一件需要勇气的事,暂弃眼前追求长远势必存在着一定的风险,所以最简单的往往也是最难做到的,道理似乎总能用一两句话表明,而这一两句话的背后确是经历了太多的复杂。编程教学,它从无到有,于编程中汲取了巨大的能量,再从有到无,将这些能量释放至万物,助其生长。今天,我们一起做加法,为了明天可以轻松地做减法;今天,我們一起拿起编程,为了明天能够充满自信地放下编程。