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