scratch有必要学吗

您好,感谢您一直对少儿编程、对“与非学堂”的关注。为了更好地为大家服务,诚邀您填写一份《关于少儿编程教与学的课件资源素材需求调查》,https://www.wjx.cn/jq/82398684.aspx。 问卷二维码 遥想当年第一次知道Scratch,还是在CS50课程的视频中。 当时只是觉得,这也叫编程?

您好,感谢您一直对少儿编程、对“与非学堂”的关注。为了更好地为大家服务,诚邀您填写一份《关于少儿编程教与学的课件资源素材需求调查》,https://www.wjx.cn/jq/82398684.aspx。

图片

问卷二维码

 

 

 

 

遥想当年第一次知道Scratch,还是在CS50课程的视频中。

 

当时只是觉得,这也叫编程?

 

先是满脸惊讶,同时略有一丝不屑,继而是有一点好奇,慢慢地又多了一些着迷与佩服……

 

然而它的是非功过,不是我们这回要讨论的主题。

 

如果你承认,信息时代的孩子需要从小学习编程,并且你也承认,不能把让孩子接触编程等同于成人学习的程序设计,那么往下翻看无妨。反之,则可能不会受益。

 

笔者既不打算去“说服”,也不打算去“论证”,而只打算通过简单的例子稍作“总结”。

 

================

 

向从未有过编程经验的孩子介绍编程,是Scratch的主要目标。

 

这一目标要怎么实现呢?

 

这个问题Scratch的设计者们想了很多。

 

有一些设计理念是非常显而易见的,比如说使用可视化模块作为编程语言,采用单窗口的用户界面布局,随时可点击一个代码块查看运行效果,以及设计最小化的指令集等。

 

除此之外,还有一些不为人知的努力,比如数据类型的简化,以及异常处理的方式等。

 

================

 

下面我们就来细说一下,蕴藏于Scratch编程环境和语言中的设计理念

 

1. 单窗口的用户界面

 

用户界面当然是越简单方便越好。因此,Scratch的界面是单窗口、多窗格的。这样一来,重要的地方就会一直显示。

 

绝不存在其他程序里随处可见的那些浮动面板。就连只在某个命令下才显示的窗格,也尽量克制。

 

整个界面主要有四个窗格:积木工具箱、积木工作台、舞台、角色区。

 

图片

 

为了方便学生编写代码脚本,积木工具箱里的代码块按功能进行了分门别类放置,每个类别有唯一的色彩标识

 

可选用的代码块一直显示在左侧并不刻意隐藏,因为默认隐藏会增加学生的操作难度,像有的设计必须先点类别才能看到该类别下面的代码,对初学者而言无形中会造成一种与代码块的疏远感。

 

现在最左侧的类别分组,既可以直接点击充当导航,又可以在只使用滚动条找代码块时充当提示

 

2. 实时反馈、鼓励鼓捣尝试

 

Scratch的整个编程环境是实时的,看不到大叔辈的程序员们编写完代码后再编译/运行的按钮,编辑和运行状态没有根本区别。

 

不区分编辑模式、运行模式,少一个编译的步骤,孩子们就可以随意尝试,直接debug。

 

这个都是为了方便孩子们鼓捣啊!从“熊孩子”变成“能孩子”,就是要会鼓捣。

 

他们可以随便从积木工具箱拎起来一个代码块,或从工作台上找一个代码片段,轻轻一点,就能在舞台上(对操作角色的代码而言)或是代码旁边(对有返回值的代码而言)看到效果了!

 

图片

 

还可以在代码运行过程中,改变一下参数,增减一下代码块。

 

这在严格的程序员们看来,是不可想象的!

 

但是有了这种设计,就能更方便地掌握所选择的代码块或代码片段的功能,便于组装出更大的程序。

 

为了方便孩子看一眼代码块就知道怎么用,代码块都默默带上了需要的参数。有一些参数值还会随时变化,比如说“运动”中好多跟坐标有关的函数参数,角色在舞台上位置一变,它就变了。

 

图片

 

暂时不用的代码,或为了debug而拆分出来一段一段的代码,都可以保留在空白的工作台上,不会影响程序的运行。放在工作台上而不拼接在事件下面,相当于注释掉了。

 

3. 代码运行过程的可视化

 

代码在运行时,正在执行的代码旁边会有一圈淡黄色的光边,这是为了给孩子增加视觉提示

 

一段代码有没有在运行,运行了多长时间,都能有一个直观的感受了。

 

图片

 

4. 隐藏错误信息

 

Scratch的代码块以形状提示了拼接的可能性,这样语法不正确的自然不能拼接到一起,拼到一起了自然差不多就没语法毛病了。

 

有的地方参数输入超出合理范围,Scratch也会尽量给出一个有意义的反馈

 

比如“将大小设为……”,孩子们一兴奋容易过头,输入一个10000000是常有的事儿,但是Scratch只是将大小设为了几百而已,不可能是超级大。

 

这种处理,比起弹出一个烦人的错误提示,实在是高明得多!

 

图片

图片

 

当然,代码有错误,就是有错误。不显示错误信息,错误仍然存在。

 

Scratch的哲学是,有错误的代码只是不能完成预定目标的代码,但它仍然要能工作;让这样的“错误”代码正常运行,显示它运行的效果,也比只出一个生硬的错误信息,什么效果都不出来,来得体贴周到。

 

5. 让数据也可视化

 

Scratch中的变量是可以看得见,甚至是可以摸得着的——只要我们在代码工具箱里的复选框里,打上了勾。

 

图片

 

变量可以在舞台上显示,这样就相当于有了一个变量监视器。这对帮助初学者理解变量,建立变量如何工作的心理图示,简直不要太方便。

 

图片

 

变量可以有正常、大字、滑杆三种显示方式

 

大字模式一般用于将它拖动程序中适当的位置,与程序融为一体。

 

而滑杆模式,还可以在程序运行时,直接改变它的大小,实时与程序互动。

 

Scratch对列表也能可视化,这样很多基于列表的操作,像增加删除元素、排序什么的,也就马上可以看到效果了。

 

图片

 

6. 最小化指令集

 

由于Scratch中每一个代码块都要占据一定的屏幕空间,如果指令集太大,就会显得非常臃肿,增加通过滚动条寻找一个代码块的使用难度。

 

因此,使用最小化的指令集比起其他需求显得更为迫切。

 

对一些初学者不会常用的代码块,采用下拉菜单的方式进行了合并

 

比如“运算”里的“绝对值”下面,就包含了许多数学运算,“外观”里的“特效”下拉菜单里,也有7种特效。

 

图片 图片

 

 

相反,对一些初学者会经常使用的类似操作,却又采用了“”的办法,列为单独的代码块。

 

比如“左转……度”和“右转……度”、“换成……造型”和“下一个造型”等。

 

图片

 

对一些只在某些特定场合才会用到的代码指令,则隐藏到了最下面的“添加扩展”里,比如“音乐”、“画笔”、“翻译”这些。

 

图片

 

7. 代码语法图形化

 

在Scratch语言设计上,语法通过代码块形状的方式解决了。

 

图片


总共只有四种类型的代码块:

 

指令代码块、函数代码块、事件触发代码块、控制结构代码块

 

图片

 

指令代码块,可以从上到下拼接,而函数代码块提供返回值,只能作为参数放到其他代码块里。

 

事件触发代码块将鼠标键盘事件与相应的代码片段连接起来。

 

控制结构代码块一般有一个大开口,可以嵌套使用。

 

8. 数据类型图形化

 

Scratch里只有两类三种数据类型:一类是数字和字符串,二类是布尔值。数字和字符串不单独区分。

 

在代码块中需要参数的地方,也会用不同的形状表示不同的数字类型。需要数字和字符串的地方,是圆角矩形框,而需要“是/否”布尔值的地方,是尖角框。

 

图片

 

圆角矩形带向下的小三角表示可以下拉选择用作输入值,矩形带向下的小三角表示可以下拉选择操作对象。前者也可以用函数代码块的返回值作为输入。这样就灵活多了。

 

图片 图片

图片

 

 

9. 作为对象模型的角色

 

Scratch中的角色怎么看怎么像我们OOP中的对象。确实,它是封装了变量和行为的对象模型,但是Scratch并没有类和继承的概念。

 

一段代码在哪个角色里,就只对这个角色起作用,这就是Scratch“基于对象”而不是“面向对象”的编程模式,没有相互之间的指令调用

 

有点类似继承的方法,便是克隆。Scratch对一次运行里角色克隆的总数作了限制,大概是300来个,这样可以保证基本需要又不会卡死电脑。

 

在角色之间传递消息,需要用到专门的一对多不定向的“广播”机制。一个广播一个名字,不同名字就是不同的广播,响应不同的操作。这种机制以一种简化的方式解决了数据共享的问题。

 

广播可以实现角色之间的松散耦合,信息的发出者不必关心信息的接收者。同时分异步的广播,不必等收到消息的角色执行完操作,和同步的“广播并等待”

 

有了这种松散的机制,角色还可以单独导出,这样就可以在不同项目中共享代码了,从而就可以支持代码复用和团队协作了。

 

================

 

的确,所有的设计都是“戴着镣铐跳舞”。

 

在各种权衡之中,Scratch作为计算机教育领域软件的佼佼者,名副其实!

 

再看我们国内的自主研发,也应该更多考虑一下教学过程中的学习者的心理了。图片

 

 

 

资料来源:

Maloney, J., Resnick, M., Rusk, N., Silverman, B., and Eastmond, E. 2010. The scratch programming language and environment. ACM Trans. Comput. Educ. 10, 4, Article 16 (November 2010),

15 pages. DOI = 10.1145/1868358.1868363. http://doi.acm.org/10.1145/1868358.1868363.

 

 

 

 

 

 

图片

与非学堂(codingclassonline)

一个专注青少年信息技术教育,探讨少儿编程的教与学,交流技巧、分享资源的公众号。

--------------------------------------

图片

 

与非学堂小程序

蓝桥杯测试、Bebras测试、文化测试……

 

 

进入公众号菜单,更多精彩……

 

 

知秋君
上一篇 2024-08-11 09:12
下一篇 2024-08-11 08:48

相关推荐