儿童学编程一定要经过图形化编程这个阶段吗?

2017
2011
2017-9-6 17:03 原创 · 图片5

在我之前的日志《聊聊让孩子学编程的那些事儿》中,我曾经提到一个观点,就是以Scratch为代表的图形化编程软件不是学编程的必经之路,如果有条件的话,最好能尽快进入真正写代码(coding)的阶段,我家Vita哥哥也是跳过了Scratch,直接开始用苹果的Swift Playgrounds学coding了。后来有一些朋友问我类似的问题,包括一位做网络工程师的朋友(网络工程师不是程序员,但他也懂编程),所以我想还是详细整理一下我的观点。

先说说Scratch

Scratch(官方网站)是由MIT(麻省理工学院)开发的一套图形化编程工具,它被看作是用于青少年编程教学的一个标志性案例。Scratch基本上是长这样的:

所以Scratch是个啥呢?它大体上包括一个角色编辑器,一个背景编辑器,还有一个脚本编辑器。其中脚本编辑器就是我们“编程”的地方,里面把各种命令一块块积木一样排列起来,就形成了一个程序。

现在有很多儿童编程班都是用Scratch来上课,Scratch在美国以及其他国家也非常流行,我也用Scratch给别的孩子讲过编程课,感觉也挺好玩的。Scratch主要有这样一些优点:

  • 完全图形化界面,内置了很多角色和背景,孩子学完基本的命令之后就可以快速开发出一个好玩的小游戏,特别有成就感。
  • 几乎可以全部用鼠标或者触屏操作,基本不需要键盘,对于不会打字的孩子很友好。
  • 有中文版,中文版里面那些命令也是中文的,对于不太懂英文的孩子很友好。
  • 具有充分的扩展性,可以控制一些外部设备(比如单片机、乐高机器人),也被移植到很多嵌入式设备上。

再看看Swift Playgrounds

Swift Playgrounds是苹果公司官方开发的一款学习编程的App(仅限iPad,不支持iPhone),目的是培养青少年开发者,当然还有一个目的是推广他们新推出的Swift编程语言。和Scratch不同,Swift是一种正经的编程语言,和C++、Java、Python等主流编程语言属于同一级别的,苹果推出Swift的目的是为了替代一直以来用于iOS和Mac软件开发的Objective C语言,如果你要学习在iOS平台上开发App,那么Swift就是首选的编程语言。

Swift Playgrounds是长这样的:

看得出来,Swift Playgrounds是真正在写代码,和真正的程序员写代码的方式是一模一样的,不过跟Scratch相比,Swift Playgrounds显然更多地用到了键盘打字,而且不可能用中文来写程序。

很明显,写代码对孩子来说门槛更高,为啥我还要直接上hard难度呢?

首先,单纯从这两种形式上比较,我不认为Scratch的图形化编程相比直接coding来说有多intuitive,相反,花花绿绿的各种块块让我觉得好乱,抓不到重点。关键是,那些命令只是套了一个图形的框,里面的描述不还是文字么,感觉有点像脱裤子放屁。其实Scratch之所以门槛低,我觉得主要不是在所谓的图形化上,而是在于可以用中文可以少打字上。既然现在的小朋友都很早就学英文了,我觉得这不算什么问题吧;至于打字,其实Swift Playgrounds有很多快速辅助提示,真正需要用键盘打的东西也并不多。

其次,真正的coding就是学习一门语言(programming language),它也有词汇、语义和语法。语言是编程的一个重要部分,在描述一些复杂逻辑时,编程语言能够比图形具有更强的描述力,特别是对数据结构的描述,以及对于类和对象的描述。我的网络工程师朋友跟我说,他觉得编程就是一种思维方式,用什么形式去编程没有那么重要,我不太赞同。思维方式固然是编程的重要部分,但语言是表达思维的载体,这句话不仅限于编程,我们日常使用的语言,也是表达思维的载体,你说学会好好说话重要不重要?我觉得很重要。

直接用编程语言编程,孩子必须得注意词汇和语法的正确性。下面这张图上,最后一句是有语法错误的(这个函数没定义),编译器给出了一个红点提示。此外,孩子还得注意大括号的左右匹配(特别费神,哈哈),以及在适当的地方加空格和换行。这些东西在图形化编程工具里面是不会遇到的,但我觉得这也是literacy的一个重要能力(不仅限于编程)。

引用著名计算机科学家、技术作家Paul Graham的一个观点:“编程语言是用来思考程序的,而不是用来表达一个你已经想好的程序的。”这句话的意思是说,编程语言是思考的工具,而不是一种单纯的表达形式,你不能指望用中文(或者英文)在脑子里思考一个程序,然后用编程语言把它表达出来。

相关图片

也正是因为这一点,我认为从学习编程的早期就强调(或者说至少不回避)编程的语言属性是很重要的。各位家长都不排斥让孩子从小学外语,那么也不应该觉得让孩子学编程语言就有多难,因为它们本质上是一回事。

另一个我坚信孩子可以直接coding的原因是,我小时候也是差不多这么大开始接触编程的,那个时候哪里有图形化的编程,连Windows都木有呢,都是Apple II兼容机上用BASIC语言写程序玩。那时候也不会英语,什么if...then...else这种英文单词也不会念的,就硬生生把拼写背下来了,现在想想也是很拼的。其实我家Vita哥哥也没正经学过英文,phonics也不会,也是硬生生把单词背出来了而已,跟我当年是一个套路……

总结一下,我觉得Scratch这种图形化编程,就好像自行车上的辅助轮,辅助轮可以给你一种很快就能上手的感觉(而且多半是假象),但它跟真正骑自行车还是有太多的差别。我不反对用Scratch,我认为它是一种很好的教学工具,但我认为在可能的情况下,让孩子早点接触真正的编程语言,也是非常值得考虑的一种选择。


回应5 举报
赞13
收藏78
8年前
写的很好,说到童年回忆引起共鸣了,不过我高中就没再接触编程了,只剩下竞赛的同学们还在努力耕耘。
8年前
florrie 写的很好,说到童年回忆引起共鸣了,不过我高中就没再接触编程了,只剩下竞赛的同...
看来是同道中人😂
7年前
我十岁就直接写c++了
7年前
原子弹714 我十岁就直接写c++了
烫烫烫屯屯屯
6年前
谢谢分享👍👍
发布

推荐阅读

周花卷
周花卷
2017
2011