聊聊少儿编程的那些是与非

对每个孩子而言少儿编程只是个可选项,不是一个必选项。

两种对立的观点

我经常接到少儿编程机构的推销电话,他们在我挂断电话前热情又急切地鼓吹少儿编程的各种好处,比如锻炼逻辑思维、将来找到高薪工作。我也曾在微信朋友圈中刷到过少儿编程的视频广告,广告中的演员滔滔不绝口若悬河地赞美编程,仿佛不赶紧让孩子学编程就来不及了。广告中绝佳的演技常常让人信以为真。这类人或机构持有一种极端观点:少儿编程好处多,不学就晚了、不学就亏了。

上周末,我偶然看到一个讨论少儿编程的视频。视频作者的教育背景和职业经历让我以为他的思维层次很高、对教育的理解也很深。然而,他在视频中表达的许多关于少儿编程的观点让我大跌眼镜。一个背景良好的教育行业从业者尚且不能正确和客观地看待少儿编程,那成千上万更为普通、对编程知之甚少的父母该怎么办呢?

这个视频的主要观点如下:

  • 少儿编程是一个伟大的世纪骗局
  • 千万别让孩子学少儿编程。孩子很小的时候学编程百弊而无一利
    • 少儿编程学的语言将来用不上,因为编程语言更新换代非常快
    • 孩子没有抽象运算能力
    • 孩子不能理解编程逻辑

很显然,这个视频的作者代表了另一类人,他们持有另一种刻意黑化少儿编程的极端观点:少儿编程是骗局,学了就是交智商税。

那些误导与误解

我在大厂编程多年,对编程的理解比多数非专业人士要深,所以我知道哪些观点是对的,哪些是错的,哪些观点可信,哪些不可信。以下是对上述视频中错误观点的反驳(我略过不谈“少儿编程是一个伟大世纪骗局”这一点。”伟大”、”世纪骗局”这些词只是用来吸引眼球的,所以我认为这句话没有意义,我不反驳没有意义的话)。

首先要声明一下,这个视频的作者很“聪明”地只说很小的孩子,并没有提到具体到年龄,这个模糊的信息其实为他留了一条替自己洗白的退路。但是如果抛开具体年龄来谈少儿编程,极不合适。在以下讨论中,我假定他说的“很小的孩子”指的是6岁及以上的孩子。

编程语言更新换代快

视频中说”少儿编程里面学的语言未来用不上,因为编程语言更新换代非常快,20年后不可能用同一套语言”。后半句暴露了作者的外行,实际上编程语言本身的发展其极为缓慢,比我们想象的慢得多。

3图

世界上至少有几百种编程语言,每年都有几个新发布的编程语言。TIOBE显示,近年最流行的编程语言仍然是20年前最流行的那些编程语言。以2024年为例,最流行的编程语言分别是 Python (1989年发布) 、C(1972年发布)、C++(1979年发布)、Java(1995年发布)。从发布年份看,每个最流行的编程语言都是老古董。这些编程语言的内核在他们诞生时就被确定了(正如小宝宝生下来时他们先天的气质和性格几乎就已定型),几十年中添加的那些新特性并不影响语言的全貌。另外,不仅编程语言本身发展慢,甚至他们地位变化也很慢。

Pasted image 20240624202909

换句话说,只要你使用智能手机、使用手机 App 、通过手机或电脑访问网站,那你就会在使用20年前的编程语言做出来的产品。一帮程序员在使用20年前的编程语言来开发网站或手机 App 供你使用。编程语言的更新换代不像换手机,一年换一次或者一年换几次。当然,程序员会升级他们使用的编程语言的版本,每个版本会有一些几乎没法察觉的变更,但过去几十年间编程语言的升级还没出现过类似我们把功能机换成智能机的情况。

搞笑的是,作者前半句说“少儿编程里面学的语言未来用不上” ,这种说法又是对的。但 Scratch 或其他的图形化编程语言在未来用不上的原因是,真正的软件项目中会用真正的编程语言,比如 Python 或 Java。这跟我们不能用小朋友过家家用的塑料铲去工地上挖土挖沙子,不能踩着小朋友带辅助轮的童车去户外二十里骑行一个道理。但无论如何,我们不会因为小孩子未来用不上所以不允许他们玩塑料铲或骑带有辅助轮的童车,对不对?

(短视频的好处是每个人都能轻易地发出自己的声音并广泛传播,但坏处是你难以判断你从短视频里读到哪句话是对的、哪句话是错的,尤其是当对的与错的掺杂在一起时)

所以就这一点而言,家长完全不必担心小孩在少儿编程中学习了过时的编程知识或编程语言。

孩子没有抽象运算能力

视频中提到”孩子是没有抽象运算能力的”。

Pasted image 20240625111457

实际上,我们不应低估小孩子的学习能力。6岁或更大的孩子是有抽象运算力的。如果目前没有,我们完全可以培养他们的抽象运算能力。

小学低年级的孩子已经可以做基本的加减法运算,到三年级时他们能会除法运算。我三年级的儿子学过一段时间的编程,他能理解布尔运算这种比算术运算更抽象的规则。他甚至能独立编写 Python递归程序(递归是一种更抽象的运算)。

paste-19f2fee72b2075c0af0a7f9438421c10e9d66007

孩子不懂编程逻辑

视频中提到”孩子是理解不出编程的逻辑的”。

Pasted image 20240625112505

一种刻板印象是编程很复杂,有超强逻辑思维的聪明人才能编程。实际并非如此,相当比例的程序员从事的是应用开发,大部分场景中不会涉及非常复杂的编程逻辑。我甚至觉得,在产品需求文档定义良好的情况下,阅读理解能力或许比逻辑能力更重要。具体到少儿编程,对逻辑能力的要求就更低了。毕竟,我们不会真的要求过家家的小朋友炒出一盘美味的菜肴。

理解编程逻辑,最重要的是理解变量、顺序执行、条件分支和循环及简单的数据结构。通过正确的引导和足够的动手实践,小孩子能够掌握和理解基本的编程概念和逻辑。

我推荐的一种引导方式是将这些概念或逻辑具象化。比如,《计算机是怎样跑起来的》用一条小河来打比方:

程序的三种流程正像是河流本身。从高山的泉眼中涌出的清泉形 成了河流的源头(程序执行的起点)。水流从山中缓缓流下,有时向着一个方向流淌(顺序执行),有时中途分出了支流(条件分支),还有时 由于地势卷起了漩涡(循环)

Pasted image 20240625114203

你甚至可以将这张图想象成一幅山水画。将编程概念或逻辑具象化,可以让小孩子更容易理解这些抽象的事物。关于具象化的更多内容可以参考我的另一篇文章 聊聊少儿编程——在家教,行不行?

但是,编程是一门手艺,手艺人不能光说不练。孩子们通过类比和举例等具象化的方式理解,只是一种很粗浅的理解,很可能是半懂非懂状态。因此,他们需要通过在 Scratch 或其他图形化编程环境下实践和练习来加深理解。只有通过反复实践,才能真正理解。。

总之我的观点是孩子能够懂编程逻辑。能否懂编程逻辑的关键在于编程老师怎么教。好的教法事半功倍,坏的教法才会让我们得出“孩子不理解编程逻辑”这个结论。

正确看待少儿编程

实际上,少儿编程既不像某些机构、某些广告或者某些推销人员说的那么美,也不像上面那个奇葩视频说的那么黑。少儿编程不是一个非黑即白的东西。编程语言就如同厨师的勺子、画家的画笔一样是一种普通工具;而少儿编程是一种教育方式,本质上与认字、画画、算数没有太大不同。当然,如果你的孩子规则感非常强、对数字和字符非常有兴趣,或许可以试试少儿编程。

我们应当用一种平淡无其的观点正确地看待少儿编程:对每个孩子而言少儿编程只是个可选项,不是一个必选项;孩子的生活既不会因为学了编程而更美好,也不会没有学过编程而暗淡无光。