肖亮英
摘 要:信息时代的发展使得编程成为核心能力,计算机编程从娃娃抓起,不只是对孩子负责,更是对未来负责。从为什么学编程、编程学什么、怎样学编程三个维度论述“计算机编程从娃娃抓起”这一主题的必要性和可实施性,旨在呼吁中小学信息技术教育加强对学生编程能力和计算思维的培养。
关键词:编程;计算思维;素养
在2015年的“两会”上,浙江省科技厅厅长周国辉提出了议案:“编程从娃娃抓起,这是对未来负责。”他认为,当下是一个利用互联网高速发展的数字世界,发展数字世界的核心能力就是编程和数据。编程、数据科学应该从中小学青少年教育抓起,让代码和数据成为我国所有青少年儿童的另一种语言。“三十年前,小平同志提出‘计算机要从娃娃抓起,现在的孩子玩计算机都溜得很,但发展到现在这个阶段,只会基本的计算机操作已经不够了,需要更进一步:编程。”周厅长如是说。
无独有偶,2015年2月,美国总统奥巴马公开表示,如果美国希望继续在全球科技创新中保持领先,所有人都应更早地学习如何编程。“编程应当与ABC字母表和颜色同时得到教学”“编程教学如同识字一样,应成为基础教育的一部分。”奥巴马本人更是身体力行,成为首位会编程的总统。
由以上两例可见,随着时代的发展及信息技术给社会生活带来的影响和改变,人们对计算机编程的教育越来越重视。笔者长期执教小学阶段的信息技术课程,对培养学生计算思维及程序素养颇有感触,在此就小学阶段的编程教育浅谈几点认识,以起抛砖引玉之效。
一、为什么要学编程
其实,在如今的社会,我们的孩子为什么要学编程,答案是显而易见的,从国家层面讲,未来信息产业的比重将逐步增加,如何抢占下一个互联网的制高点,核心在IT人员的培养。当然,这是宏观方面的意义,笔者认为,学编程对于个人的认知和素养的培养还有重要的作用。
1.学编程才能更好地认识世界
世界是数字的,各种信息化产品越来越紧密地将我们的生活联系起来,物联网、云技术、大数据,不断地将我们的世界数字化,各行各业更不可缺少地跟计算机程序相关联。要推动时代的发展,需要有编程思维,要洞悉时代发展,也需要编程思维,在当前时代中竞争与发展,更不可缺少编程思维。
编程是一种自动化理念,它的思想及解决问题的方法被各个学科借鉴和拓展。生物学借鉴编程对信息的处理,发展出生物信息学,甚至将DNA的配对看作编码问题来破解。心理学从计算机的运行机制发展出认知心理学,某种程度上将人的认知过程类比为计算机对信息读取、存储、处理和输出的过程。在探讨宇宙终极问题上,编程思维同样起到了启示作用。在斯蒂芬·沃尔夫勒姆的一篇专访《宇宙的本质是计算》中,这位传奇科学家说:“我们的世界就是计算,就是一套简单的规则生成的复杂现象……很多时候人们说的‘随机性……只是证明你还没为这个系统建立完整的模型而已。”假如模型都有了,那么就可以在计算机中模拟宇宙的一切。如果计算机的速度足够快,快得超过宇宙的运算速度,那么甚至能计算出未来会发生什么,也就是能预测未来。
2.学编程,从科技的消费者转变为创造者
如今,我们的孩子生活在数字化时代,使用着各类智能产品和互联网应用,但他们大多数是科技的消费者,而不是创造者。他们被称为“数字原住民”,但是对科技并不熟悉,他们是经验丰富的使用者但并不是创造者,就像会阅读不会写作一样。所以需要教学生计算机,让他们学会充分使用数字时代的科技。
同时,编程为创造力和创造性表达开辟了新途径。现在的编程学习,可能更像一种高级的乐高积木,学生可以很简便地了解其规则而创作出丰富的产品。Scratch的创作者在浏览Scratch在线网站时,发现很多8~16岁孩子的作品,感慨道:“随着孩子们创造和分享自己的Scratch作品,他们正在把自己锻炼成创想者,并同时为这个呼唤创造力的时代做好准备。”是的,在今天瞬息万变的世界里,没有什么比创造力更重要。帮助孩子们成长为具有创造力的思考者,那就是给予他们创造的机会。我们不能仅仅让他们在电子产品上打游戏、和朋友聊天、上网、搜索信息等等,更多的是让他们创造出自己的游戏、自己的程序。
3.编程可以开发学生的逻辑思维能力和问题解决能力,更好地塑造自己的素养
学生想通过计算机解决某个问题或者实现自己的想法,这并不是瞬间就能完成的事,计算机也并不是智能得通过沟通就能执行命令。在这一过程中,学生需要将自己的问题转换成数学模型,比如想让某个对象在程序上运动的本质是让对象每间隔一定时间坐标位置发生变化,将模型通过计算机语言描述出来,进而上机实践。从建模到编码(coding),需要学生有严谨的逻辑思维能力,思虑缜密,稍有不慎,程序将有漏洞。而编码过程,也是提高学生逻辑思维能力和问题解决能力的过程。
二、学编程是学什么
1.学编程不是人人成为程序员
我们将编程看作一种新的素养,就像写字一样。我们在人生的任何阶段都会用到写字这项技能:无论是和朋友联系,列一张购物清单,还是跟日记说心里话。而写作本身也为人们开启了新的思维方式。在写作的时候,我们学会组织和提炼语言,并反思自己的想法。“写字”对所有人都很重要,而不仅仅是对那些有志成为专业作家的人。
编程也是一样的道理。编程并不仅仅对未来的程序员或计算机科学家才有用。在学习编程的过程中,我们学会了许多其他的东西,比如学习解决问题的策略,学会设计项目,并交流想法。这些技能对所有人都有用,不管他多大年龄、有什么兴趣、做什么工作,但这样并不意味着人人都成为程序员。
2.学编程不一定是学编码
学编程(programming)并不是打代码(coding),不一定要用C、C++,Java等语言,不一定只是用命令形式跟计算机交互。过去数十年计算机科学的发展已经使编程的壁垒大幅度降低,以前可能只是科学家做出的高大上程序,今天一个十几岁的孩子可以在几分钟完成。随着技术进步,编程技能已经可以被很多人自然掌握,不用进行系统学习或者到专业学校深造。我们关注的是需要具备何种能力去更好更有效地编程,也就是编程背后基本素养的培养,这就是“计算思维”。
“计算思维(Computational thinking)”,这个由时任美国CMU计算机科学系主任的周以真(Jeannette M. Wing)教授在2006提出的概念和一系列计划,试图使所有人能够像计算机科学家一样进行思考,让计算思维成为新人类的基本能力。世界各国包括美国、中国等的教育部门正在有计划地推动这一理念的实施。
计算思维实际上是人类站在机器角度的“感同身受”,从机器角度思考去制造更有效率的机器,同时更有效地指导我们的日常决策。抽象和自动化是目前业界普遍共识的计算思维本质,对于计算机科学专业的学生来说,这两者的威力不用赘述,实践证明其对各领域创新作用巨大。计算思维里的层次抽象、分而治之、递归、并行和并发,以及经典数据结构(数组、栈、集合、树等)和机制(流水线、缓冲、API等),到计算可行性和复杂性等,都无一不对我们的日常生活和工作产生巨大影响。我们需要的是在未来人人都具备计算思维,并用这个武器来指导我们,不仅是编程,而更多的是提升工作和生活效率,甚至制订人生职业规划。
3.学编程具体学什么
通过计算机编程,学生应该学习信息和计算的原则,数字系统是如何工作的,以及如何通过程序将这些知识用于实践。基于这些知识和理解,学生能够进一步使用信息技术来创建程序、系统和一系列的内容。同时,计算机信息处理技术能够确保学生获得数字素养,能够通过信息和传播技术使用、表达他们自己以及形成自己的观点。具体来说,学生应该能够理解和使用计算机科学的基本原则和概念,包括抽象、逻辑、算法和数据表示法,能够从计算的方面去分析问题,并且获得为了解决这些问题而重复编写计算机程序的经验,包含以下六点:
(1)理解什么是算法,算法是如何作为程序在电子设备上执行的;程序是如何在精确、清楚的指令下执行的;创建和调试简单的程序,运用逻辑推理来预测简单程序的行为。
(2)设计、编写和调试能完成某一特定目的的程序,包括控制和模拟物理系统,通过将问题分解成更小的部分来解决问题;在程序中使用顺序、选择和循环结构,使用变量和各种形式的输入和输出;利用过程或函数的模块化进行程序的设计和开发。
(3)理解一些关键算法,这些算法反映了计算思维(例如,排序和搜索);使用逻辑推理去比较针对同一问题的不同算法的实用性。
(4)了解简单的布尔逻辑(例如,AND,OR 和 NOT)和它在电路和编程方面的某些使用;理解如何用二进制表示数据,并能够对二进制数进行简单操作(例如,二进制的加法运算,以及二进制和十进制的转换)。
(5)了解在一个计算机系统内部指令是如何被存储和执行的;了解各种类型的数据(包括文本、声音和图像),如果用二进制来表示,是如何呈现的,又如何对他们进行数字化操作。
(6)了解构成计算机系统的硬件和软件的组件,了解它们之间如何互相沟通,以及他们又是如何与其他系统进行沟通的。
三、怎么学编程
很多人都认为编程很难学,学生不易接收,不易消化。如上所述,学编程的核心是培养学生的计算思维,编码(code)只是学编程的一种方式,却不是唯一的方式。笔者认为可以从以下方面开展编程课程的学习。
1.在信息技术课程中渗透计算思维
当前的信息技术课程注重软件应用的培训,教师往往将过多关注点放在计算机常识性、操作性的目标上,甚至强调某个软件选项在哪一个菜单里面,画图中某个工具的作用,等等。笔者认为,软件的学习只是“技”,随着信息技术的发展,软件的使用将会越来越友好,基本可以不学而会,而信息技术课程更应该强调“道”的学习,即原理性的知识,思维层面的培养。笔者曾设计过小学Excel中关于排序知识点的课程,笔者先与学生玩一个游戏,出示五张扑克牌,请一个学生对五张扑克牌排序,他不能看到扑克牌的点数,但他能有两个操作:(1)询问同学,对于给出的两张扑克牌谁大谁小;(2)交换两张扑克牌的位置。游戏挑战学生谁能用最少的交换次数给扑克牌排好序。通过这个游戏,学生自然而然地学习了计算机中冒泡排序、选择排序、插入排序等,不但启发了学生的思维,也让学生认识到计算机背后的工作原理。在对排序原理理解的基础上,接着讲Excel中的排序操作,水到渠成。
关于以游戏或者活动的方式讲解计算机原理,国外做了很多探究,其中“Computer Science Unplugged(不插电的计算机科学)”是面向世界范围的信息科学普及项目,它透过一些既有趣又容易的活动来达到学习计算机科学的目的。这些活动是专门为青少年学习者所设计的。在这些活动中,我们可以学习到计算机运作的一些基本原理,有趣的是,你根本不必用到任何实体的计算机。随着该项目在世界范围内的普及,具有各国特色的新颖案例不断补充进来。这种“玩中学,做中学(learning by playing,learning by doing)”的信息技术学习方法目前在美国、新西兰、意大利、日本、韩国已产生广泛影响。
2.开展丰富有趣的编程活动
如今,编程软件的开发可以不再抽象、繁琐,对于小学生的学习,我们已经有很多很好的工具来启发学生的学习,甚至这些软件就像玩乐高积木一样,只需要拖拉一些板块就可以实现了,Scratch无疑是其中的佼佼者。Scratch是一款由麻省理工学院(MIT)设计开发的一款面向少年儿童的简易编程工具,使用者可以不认识英文单词,也可以不会使用键盘。构成程序的命令和参数通过积木形状的模块来实现,用鼠标拖动模块到程序编辑栏就可以了。在学习的过程中,每一种语言都提供了图形化的编程环境,不仅是用于教会孩子们一些编程的概念,而且是包含物理和数学知识的模拟及讲述故事的一些练习。此外,App Inventor也是一个时尚的选择。App Inventor是一款谷歌公司开发的手机编程软件,后面由麻省理工学院托管,与Scratch类似,App Inventor也是通过积木形状的模块来实现编程,可以在线生成apk文件在手机中运行,简单易学,利于培养学生的计算思维。当然,像code.org网站,同样提供了丰富有趣的在线编程学习资源,学生在简单的互动中就可以创造出极具创意的作品。
在如此丰富的编程资源面前,编程难、学生接受不了的排斥理由将无地立足,我们应该积极跟随时代发展,让孩子们不仅仅是从小玩电脑,更是从小学电脑,将电脑当作创作的工具。所幸,笔者所在的广州地区颇为积极地在推进小学编程活动,已经将Scratch软件列入小学信息技术教材,也开展小学虚拟机器人编程比赛活动,极大地激发了学生探索学习的精神。
参考文献:
[1]周以真.计算思维[J].新观点新学说学术沙龙文集7:教育创新与创新人才培养,2007:111-116.
[2]何年.电脑编程走进中小学[J].教育,2015(09).
[3]胡忠平.基于计算思维的Scratch课堂教学策略研究[J].浙江教育技术,2015(01).
编辑 赵飞飞