您好,感谢您一直对少儿编程、对“与非学堂”的关注。为了更好地为大家服务,诚邀您填写一份《关于少儿编程教与学的课件资源素材需求调查》,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测试、文化测试……

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

为了让孩子入门编程,Scratch的设计者操碎了心!谈谈Scratch编程环境和语言中的设计理念相关推荐

  1. 为了帮学弟学妹找免费编程资源,真是操碎了心!

    ✨✨✨ 资源链接见文末!! 前言 许多刚开始学习编程的小伙伴都想找到合适的学习资源,然后学习一段时间后又想着找个项目啥的练练手.但是许多小伙伴都存在着以下两个问题: 刚开始入门时,不知道去哪儿找编程资 ...

  2. linux环境c语言编程 蔡晋,Linux环境C语言编程

    Linux环境C语言编程第1讲linux系统环境介绍 Linux环境C语言编程第2讲命令行解析+环境变量+gcc基本参数 Linux环境C语言编程第3讲共享库.gdb的使用 Linux环境C语言编程第 ...

  3. c语言中结构体数组的引用,【C语言入门教程】7.2 结构体数组的定义和引用

    7.2 结构体数组的定义和引用 当需要使用大量的结构体变量时,可使用结构体定义数组,该数组包含与结构体相同的数据结构所组成的连续存储空间.如下例所示: struct student stu_a[50] ...

  4. 最适合孩子入门的十大编程语言

    [CSDN 编者按]本文作者对编程语言进行了多方分析,基于各个年龄段孩子特征,挑选出最适合儿童学习十大的编程语言. 本文为CSDN编译整理,原文:https://digitalmurgi.in/pro ...

  5. python编程从入门到精通 叶维忠 pdf-叶维忠《Python编程从入门到精通》PDF

    叶维忠<Python编程从入门到精通>PDF 首页 > 计算机类 字号:小 中 大 评论:0 条 评论:0 条 Python编程从入门到精通 作 者 :叶维忠编著 出版发行 : 北京 ...

  6. c语言编程代码对父母感恩,c语言中编程:每个做父母的都关心自己孩子成人后孩子的生高:...

    c语言中编程:每个做父母的都关心自己孩子成人后孩子的生高: 据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传.饮食习惯与体育锻炼等.小孩成人后的身高与其父母的身高和自身的性别密 ...

  7. 古月居 ROS 入门21讲--PA18 tf坐标系广播与监听的编程实现笔记

    古月居 ROS 入门21讲--PA18 tf坐标系广播与监听的编程实现 1.创建功能包 cd ~/catkin_ws/src catkin_create_pkg learning_tf roscpp ...

  8. 编程入门先学python好不好,学python用什么软件编程

    学python有什么用处呢? Python的应用场景比较广泛,目前广泛应用于人工智能.云计算开发.大数据开发等领域,所以你只需要对Python更加深一点点的了解,你就具备更宽泛的工作角色技能. Pyt ...

  9. 全国青少年软件编程(Scratch)一级2019考试测试卷最后一道编程题!

    点击上面微信号关注我关注我哟每天中午12:00-2:00定期推送文章,喜欢的可以设置星标,并分享点赞我们的文章,非常感谢大家的支持,您的点击的在看就是我们的动力! 今天有点忙,差点断更了,为了维持每天 ...

最新文章

  1. ARM平台硬件时钟中断周期HZ值计算
  2. 初学Ajax相关知识
  3. python实例[判断操作系统类型]
  4. 前端也要会的数据结构 (不定期更新篇)
  5. 将中文标点符号替换成英文标点符号
  6. pymssql.OperationalError: (20017 问题解决
  7. 减少C++代码编译时间的方法
  8. pycharm中的settings没有latest version_k8s集群中pod镜像版本检查
  9. win10系统做游戏服务器吗,win10架构游戏服务器
  10. 两条信号之间加电容_信号完整性SI读书笔记之一
  11. Spring 层次性依赖查找Bean
  12. JS自定义表单提交处理方案
  13. 新建mavan项目转为web项目
  14. Sun JVM 内存管理、参数与调优、内存分配与回收策略、GC 日志配置使用详解
  15. 锐捷长ping_锐捷交换机命令
  16. 程序员慵懒的周末:不想出门还想吃肯德基香辣鸡翅?
  17. 基于ssh的后台新闻管理系统
  18. 闲鱼商品理解数据分析平台——龙宫
  19. 执行 taro init myApp 报错 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\taro.ps1
  20. 安装Ubuntu后的配置

热门文章

  1. typeScript(二)
  2. webapp通过点击调用高德地图或百度地图导航
  3. SugarCRM源码分析之缓存
  4. 少儿学编程系列 --- 如何让ChatGPT使用turtle画画
  5. 万字拆解!追溯ChatGPT各项能力的起源
  6. GLUT之鼠标事件两点画线 4
  7. 不用找,你想要的卡车 SolidWorks模型素材都在这里
  8. 风火编程--干支纪年法的完整转换(可用于八字推算)
  9. 足球视频AI(五)——球员与球的对象跟踪
  10. YOLO v5 实现目标检测(参考数据集自制数据集)