1、像堆积木那样学习程序设计像堆积木那样学习程序设计Scratch程序设计教学反思摘要:Scratch是美国麻省理工学院媒体实验室(MIT)的终身幼儿园小组2007开发的图形化编程工具,在美国哈佛、加州大学伯克利分校这样的世界名校都开设了Scratch课程。当我们引入了这个课程,成为我校的校本课程,它引起了我们信息资源部各位老师对程序设计的一次非常大的争论。本文结合Scratch教学中的一些作法与对程序设计的一些看法,阐述Scratch对于青少年学习程序设计的意义。关键词:信息技术;Scratch;程序设计;程序设计(Programming)是给出解决特定问题程序的过程,是软件构造活动中的重要组成
2、部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。专业的程序设计人员常被称为程序员。(百度百科)。在我们的理解之中,程序设计重要的是对问题的分析、设计和测试、排错。而编码只是程序设计中的一部分,而平时我们在程序设计教学之中,无论是老师还是学生,都把大量的时间放在了编码这一环节之上。对于很多老师来说,他们总是认为,教会学生程序设计,首先就要学生掌握一门语言,让学生记住一大堆的保留字的拼写、各种程序结构的语言语法,在这个基础上补充一些数据结构和算法知识。使学生能够编程来解决一些生活中的实现问题。我们发现,这是一种偏见,一种
3、对程序设计理解的误区,这也是我们作为学生时学习程序设计所带来的误区。孩子们在程序设计的过程中,也把大部分的时间浪费在正确的命令拼写和完整的语法结构之上,大部分的排错问题都是出在语言本身而不是程序设计之上。教程序设计成了教程序语言了!对于高中、大学的学生,可能对于语言的学习障碍不是太大,而对于义务教育阶段的孩子,语言障碍是非常严重的。然而也正是义务教育阶段的孩子的思维创造力是最强的,我们不可能把时间浪费在语言之上。在义务教育阶段开设程序设计这一分支内容,目的上让学生掌握程序设计的基本思想,而不是掌握一门程序设计语言的使用,更多的是让学生了解程序设计的核心内容。联合国教科文组织(UNESCO) 在
4、1994年委托国际信息处理学会(IFIP)编写的文件中学信息学课程中提到:“这里所指的程序设计是非技术性的程序设计,更确切地说应该是把你自己做的事情转变成别人能做的事情。这就要求能详尽地描述完成任务的过程,以便其他的人或其他的设备能准确地重复这一项工作。”其实当PC在20世纪70年代末80年代初首次出现的时候,当时有一种教会全部小孩如何编程的初始热情。成千上万的学校在教授百万计的学生在LOGO或者Basic上面写一些简单的程序。Seymour Papert(著名的学习科学家、人工智能专家)在1980年出版的Mind storms(头脑风暴)一书中提到LOGO将成为重新思考教育与学习方式的基石。
5、自从那时起,计算机使开始在儿童的生活中普及,但是很少会学习编程。在今天,很多人都将编程视为一种小众的、技术的活动,只适合小部分人学习。究竟是什么原因使编程偏离了它的初衷呢?1、早期的编程语言难以应用,许多小孩都不能掌握编程的语法。2、编程一般与一些跟小孩不感兴趣或没有相关经验的活动相联系,比如生成一个素数列表,或者就简单地画一条直线。3、编程一般缺乏对正确程序的深层次探索的鼓励以及对错误程序的指导。Papert认为编程语言应该是“地板要低”(Low Floor)、“天花板要高”(High Ceiling)、“墙体要宽”(Wide Walls),即低进入门槛和高创造空间,此外,编程语言需要支持众
6、多不同类型的项目来满足不同人群的兴趣和学习类型,使得他们可以参与进来。但要满足这三个要求并不简单。针对这些问题和要求,MIT媒体实验室的终身幼儿园小组在2007年时设计了Scratch这个软件,它通过鼠标拖动指令模块以搭积木方式设计程序。通过一个舞台来让设计者简单地、直观地看到设计的结果,将抽象的程序设计可视化。Scratch包含动作、控制、外观、侦测、声音、数字和逻辑运算、画笔、变这八大类指令模块,把建模、控制、动画、事件、逻辑运算等都包含在内。从动作指令到控制语句、从传感响应到面向对象,从数值运算到线程调度,涉及程序设计的方方面面。其实程序设计的目的是把我们想做的事情以算法描述的方式表达出
7、来,而算法描述最直观和最简单的办法就是画流程图。当流程图画出来了,程序设计基本上也就完成得差不多了,如何让流程图变成可执行的程序,那是语言的事情,也是软件的事情,对于程序设计本身来说,这只是其中的一个环节,如果这个环节可以让软件代劳,那么我们就可以集中精力去做流程设计了。Scratch就能很好地实现这个功能。在Scratch程序设计中,孩子们不需要再去为语言和语法头痛了,因为他们只是需要像堆积木一样来设计程序。这样的设计就使孩子们能把更多的精力放在程序设计之上,也使得程序设计的门槛大大降低了。我们经常看到,给孩子们一盒积木,他们马上就会开始组装在一起,随后出现的结构又会给他们新的灵感。当他们在
8、玩的时候,计划和目标会随着进程而不断有机地改变。Scratch是基于图形化的编程板块,让孩子们可以组合这些板块去创作他们的程序。与积木类似,孩子们可以先从简单的部件开始组装,通过不同的序列和组合方式来看会发生什么事情。这里并没有传统编程语言那样晦涩的语言,进入的门槛很低,而且这样的经历充满了娱乐性。由此,我们希望学生在使用Scratch编程的时候,也有类似的感觉。堆积木是不需要教的,我们只需要告诉孩子们,积木可以如何使用就行了。至于如何堆积,堆积出来什么,那就是孩子们自己的事情了。经过一个学年的校本课程实验,我校在第二个学年就开始了把Scratch引入到常规课之中,代替了原来的VB程序设计教学
9、。为了解决原来的程序设计语言问题,我们完全抛弃了原来语言教学的方式,而改为采用基于项目的学习方式来进行程序设计教学。同时,我们并没有把Scratch当成一门程序设计语言来教,从Scratch官方介绍上来看,MIT把Scratch定义为一种程序设计工具,而不是语言,因此,我们就需要改变一下原来的思维定势,我们教的是工具而不是语言,重点应该在流程设计而不是语法。Scratch教学,所面临的最大挑战并不是来自于技术上的,并不是教会孩子们如何去使用组件,如何去组装组件;而是来自于文化和教育理念,是教会孩子们思考问题的方式与良好的思维习惯。更广阔的是,我们需要改变孩子们以及成年人对编程的观念,对计算机的看法。使得现在的年轻人不再是只对发短信、玩在线游戏和浏览网页非常在行,我们不仅仅需要他们会交谈、浏览和交互,更需要他们拥有通过媒体设计、创造、发明的能力。程序设计能极大地扩大孩子们用计算机创作的范围、扩大孩子们学习到的内容的范围,尤其能够支持孩子们用“计算思维”来帮助他们学习重要的问题解决方式和设计策略(比如模块化和交互设计),还能够提供让孩子们反思自己的想法的机会。