西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

慧聪教育网 2019-02-14 16:29 来源:互联网

【慧聪教育装备网】少儿编程课程,选择哪种语言好?西瓜创客肖恩老师详细为您解答

提及这个提问就像有人在问你“是穿婚纱好、正装好还是休闲装比较好?”

这是一个无法回答的问题,因为问题缺少了重要的前提:“选什么样的衣服,取决于我们的目的”。

婚礼时穿婚纱很好,但是如果每天都穿着婚纱上班就很奇怪了。

每件衣服都有适用于它应有的场景。

编程语言也是一样的,每种编程语言都有属于它的应用场景。

要回答“少儿编程课程,选择哪种语言比较好?”

西瓜创客肖恩老师的简单版答案少儿编程课程语言选择:Scratch!作为从7岁开始做电子设计,读过Linux源代码,写过RTOS(实时操作系统),做过芯片编程FPGA/DSP,有20年编程龄,能熟练使用汇编/C/C++/C#/Perl/Objective-C/JAVA/Ruby/Python/Javascript/HTML/CSS等大家熟悉的编程语言和大家不熟悉的设计芯片编程语言Verilog和VHDL的我,推荐使用Scratch。

那为什么是Scratch呢?我在和西瓜创客教的近10万孩子的家长沟通过程中总结了家长们的常见困惑,详细解释如下:

Q:Scratch是低级语言,太幼稚,少儿编程课程语言什么时候可以转学高级语言(例如C和Java)?

这是一个常见误区,主要是受“高级”二字翻译不准确的影响产生的误区。高级语言的英文原文叫做High-levelprogramminglanguage,更准确的翻译应该是高层级编程语言。层级的高低不是语言的高级与否的划分,而是指语言离硬件指令的远近。越接近人类的自然语言的编程语言越叫高级语言(越容易读懂),越接近计算机指令的叫做低级语言(越难读懂)。

举个例子,汇编语言是离CPU指令最近的人还能勉强能读懂的语言。用汇编来表达1+2,是这样的 :

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

在其他语言里是这样表达的:

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

显而易见,其他的语言更接近人更好理解的自然语言。

更令人发指的是,不同架构类型的CPU,控制它的指令是不一样的。也就是说,同样的是1+2,不同的CPU上需要用不同的写法。

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

而所有的编程语言设计者,都在致力于做一件事情:

让人们可以用人类能读懂的语言,优雅地编程,只需要把自己的想法告诉电脑,电脑就能自动把语言翻译成他能自己能执行的命令。

也就是说,无论我们用哪种高级语言写出来的代码,都有,也都需要一个翻译官,去编译(Compiler)或者解释(Interpreter)我们写的代码让电脑可以执行。

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

BTW,从定义上来说,Scratch是比C和Java更高级的语言。

那既然编程语言的设计者都有同样的目标,那哪个语言是最好的编程语言呢?少儿编程课程用那种语言最好呢?

这个问题就和“什么样的衣服是最好的衣服”类似了。答案是在不同的场景和目标下,选择对应的编程语言,没有哪一种语言是最好的语言。

例如,C语言更接近计算机硬件,编程语法中有很多莫名其妙的操作学习起来十分困难。但它的优点恰好也是它特别接近硬件,对内存的申请和释放都得开发者自己来写,程序的执行效率能特别的高。(这里之所以说“能特别高”,而不是“会特别高”,是因为是否能执行高效,还取决于开发者的算法能力以及对CPU的指令是否熟悉)

但是如果谁想要用C语言来做网站,也许用Javascript+CSS+HTML组合起来花5分钟做出来的网页,用C语言可能1个月也写不出来。

那为什么编程语言会有排行变化呢?

这个完全是和工作和市场机会有关的。例如,在互联网大爆发的时候,做网站的人是最稀缺的,于是推动了JAVA、C#和Javascript+CSS+HTML等语言的发展。那个时候,另一种叫做Objective-C的语言就特别的冷门。直到苹果的iPhone出来后,移动互联网的春天来临,当时谁能做App,谁的工作机会就比别人多呀。于是这种冷门的Objective-C语言就迎来了他的春天。由于互联网和移动互联网的快速发展,大量的数据产生,机器学习和人工智能在坐了多年的冷板凳后,终于有了用武之地。大量的数据科学家使用Python来编写机器学习的程序(因为Python和Python大量的数据分析和处理相关的功能库是开源免费的),于是Python又成为近年的新宠。

所以如果选编程语言是为了让孩子未来好找工作的话,亲,你确定现在选择的语言会在15年后还不衰落?

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

Q:那选择Scratch的优势是什么呢?它会过时吗?少儿编程课程会不会在学习过程中语言变化呢?

"如果我给你一支高级钢笔...

oh,不不不,你给我一支高级钢笔。

我能成为作家吗?"

“不能”

没错。决定我是否能成为作家的,不是因为使用的是什么样的钢笔;决定是否能成为摄影师的,也不是昂贵的镜头和相机;

决定是否能成为好的开发者,也不是选择的语言,而是他是否能发现生活中的问题,找到解决问题的办法,然后用编程把解决方案做出来。

表达我们的情感和洞见、凝固时间记录故事、发现并解决问题是我们的目标,用一支好的钢笔,好的相机,和选择一种编程语言是实现目标的手段。我们不应该错把手段当目标。

在文章刚开始,西瓜创客肖恩老师提到了他能熟练使用汇编/C/C++/C#/Perl/Objective-C/JAVA/Ruby/Python/Javascript/HTML/CSS等编程语言,这并非吹嘘。事实上,一个成熟的开发者,基本都掌握多种编程语言,并且可以快速地学习和适应新的语言。这是因为编程语言是有规律可寻的。

举个例子,如果我们要用编程编写,如果天下雨,就带伞,否则就不带伞。用不同的语言写出来是这样的

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

这就是编程中不变的部分,他们只是表达方式(编程的语法)有一点区别罢了。这就像目前主流音乐,都是由12平均律切分的12个音(do升dore降mimifa....)构成的。

但是如果我们用葫芦丝吹婚礼进行曲,就总会觉得有一点过桥米线的感觉。这是因为每个乐器有它独特的特性。程序语言也是一样的。每种语言都有一些它十分独特的特性。例如,我们想判断菜单中是否包含宫保鸡丁,如果包含就输出“找到了”。C语言,Python和Scratch的写法分别如下。

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

你会发现,这时,Python和Scratch的写法就比C语言直观多了。这部分就是不同语言的特性部分。

也就是说,当精通了一种编程语言后,想学习另一种编程语言,只需要了解它的语法就能上手,会熟练使用它的特性就可以精通。编程的核心不在于语法,而是解决问题的思路和方法(算法)。

而Scratch中包含了几乎所有编程语言共通的部分。无论未来语言如何变化,最基本的逻辑是不会变化的。而这些训练在Scratch中都能完成。

Q:听西瓜创客肖恩老师这样说,也就是说少儿编程课程学习其他语言也是一样的,因为只要精通一门,再学另一门语言就容易了?

是的,没错。和学好了Scratch转C,Java和Python是容易的类似。学好了C转Python也是不难的。但是为什么依然还是推荐孩子学习Scratch而不是C的原因不是因为编程,而是因为认知科学。

在认知科学中,人们是否能快速学习一样东西或者坚持学习一样东西和自我效能感(Self-efficacy)息息相关。自我效能感是指人们是否相信自己能达到一个目标,当相信的时候就会觉得做起来很带劲,一点也不枯燥;当不相信的时候就觉得自己在饱受煎熬。简单地理解就是成就感是让人学习产生快乐并且坚持学习的重要原因。

如果在学习任何一样东西的时候,例如数学,一旦我们意识到自己学起来有困难,就开始不相信自己能学好,并且给自己各种理由证明自己不能学好,甚至是让自己学不好合理化。例如会说“学这个有什么用呀,买菜又不需要微积分”,或者说“我就是一个学文科的,这种理科的东西我不需要学”甚至会说“我就是一个学文科的料,理科在我的基因里就写着‘不擅长’三个字”。

类似的,如果我们希望孩子不会说自己“就不是一个编程的料”,最好的办法就是让孩子从第一步就产生成就感,从而产生自我效能感,也就是相信自己可以有能力达到目标,学好编程。

在这样的前提下,你还会让孩子从学习例如C或者Java这样的工业级编程开始吗?这样,他可能会面临的困难不仅仅是编程的困难,他还会遇到打字的困难,标点是否使用正确的困难,编程语言语法的困难,编译错误时莫名其妙的困难等等。这些困难会消磨掉孩子学习编程的兴趣,自己找理由说“我不喜欢编程”,就和很多人找到无数理由说自己“不喜欢数学”一样。这就是在没有形成自我效能感的情况下拔苗助长的结果。

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

这个就很像我在德国期间看到的德国音乐学习和中国的区别。德国在小时候学习音乐首先是学习鉴赏,再是学会玩,最后才是学音乐。例如,首先老师会给孩子们弹音乐,并且音乐是配合特定故事和场景,让孩子们能把声音和场景对应起来;然后让孩子们可以玩乐器,就是不计较指法是否正确,姿势是否正确的情况下,先和乐器做朋友,不恐惧音乐和乐器;最后才是学习如何驾驭一种乐器,才开始学习指法等等所谓的基本工。而国内学习乐器恰好相反,首先让孩子练习的是指法,而忽略了让孩子对音乐的热爱。

这就是为什么西瓜创客以及我肖恩老师还是会推荐学习Scratch的原因:先让孩子可以不恐惧编程,产生兴趣,并且用编程表达自己。等到孩子们已经产生了自信和成就感,再提高难度。如果都要选择一门语言进入编程的世界,一定是选择能让孩子快速找到自信,找到成就感的语言。那这种语言目前最好的就是Scratch。

Q:我想让孩子参加信奥赛NOIP,听说只有C语言可以参加,那在西瓜创客参加少儿编程课程,学Scratch还有用吗?

NOIP一半是编程,一半是数学。编程部分基本不涉及到语言的特性,也就是说用C写和用Python还是用Scratch来写,核心的算法思路是一样的。数学部分,是和编程无关的,例如鸡兔同笼问题,本身就是一个数学问题,如果数学上找不到解法,只会编程的话,不会有实质性的提升。

这类问题基本就是先得有数学解法(算法),再把算法转写成程序代码。

例如,这里我们演示三个关于鸡兔同笼的算法:

第一种是最常见的,一个一个试(穷举法)。在程序中写出来是这样的:

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

感觉略显复杂。第二种方法是稍微聪明一点的办法,解方程的做法。对应的算法是这样的:

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

相比上面的代码,这个算法要简单多了。但是想要理解这个算法,首先得先在草稿纸上解方程。

而最后一种算法是一个有趣可爱的算法,它是这样说的:

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

发现了吗?不同的思路,写出来的程序完全是不一样的。而核心是有没有数学算法,而在编程中,它们所需要使用的代码类型是差不多的。

而以上三个算法都是用Scratch写的,而不是C语言。因为核心不是编程问题,而是数学算法问题。而那些自称C语言才是“高级”的语言的“老师”们,您可以发这节代码给他们,问问这个方法的功能是什么?我敢说没有几个“编程老师”能答上来(除非他们去搜索引擎搜索答案)。原因是想要理解这节代码的功能,不止是编程得好,还得数学特别好才行。

西瓜创客肖恩老师详解少儿编程课程学习如何选语言?

Q:那要是我的孩子就是想学除了Scratch外的语言,我应该怎么为他选择?

首先,让我们把编程语言分为两大类,一类是兴趣类编程,以图形化编程为主,目的是用编程实现自己的想法,不用担心程序执行效率不高,也不用考虑用户的使用场景和平台。另一类是工业类编程,以源码编程为主,除了考虑用编程来解决生活生产中的问题外,还需要考虑到用户会在什么样的场景下使用此软件,以及产品的易用性。

如果是青少年学习编程,依然不推荐从工业类编程入手。目前Scratch语言也在进化,能支持的功能已经远远大于把一个图形从这里移动到那里。Scratch现在已经可以对特定硬件进行编程了。和Scratch类似的图形化语言Blocky,已经可以完成很多很多远超过Scratch的功能了。例如同是Scratch3基于的Blockly开发的AppInventor,已经可以让孩子用图形化编程制作一个手机App。事实上,并不是图形化编程就弱鸡,现在西瓜创客的员工工资公式已经是用Blocky写的了,西瓜创客的后台各种工作流程规则也都是用图形化语言来写的。

如果非要选择工业级编程语言,我们还是可以按目标来划分。

如果目标是应试,首选是Python,目前浙江等地区已经把Python列为了高考科目。如果想通过NOIP加分的话,其次选择是C/C++语言。(注,在应试层面上,选择C和选择C++是一样的,因为C++是基于C扩展增加了一些例如面向对象编程的特性,而在NOIP的赛题里,不会用到这些高级特性)

如果目标是编写控制硬件的程序,推荐语言是Python和C。C的原因是主流的硬件编程都是支持C的。而非工业级的硬件编程,例如,树莓派支持用Python编程。

如果目标是制作App,可以选择的语言是Scratch类似的AppInventor、Java(用于编写安卓的App)或者Objective-C/Swift(用于编写苹果系统iOS的App)。另外JavaScript也是一个不错的跨平台选择。现在大多数程序都是苹果安卓系统通用的。这类程序基本是基于某个框架,最常用的框架是ReactNative,而ReactNative使用的就是Javascript语言。(注,Java语言和Javascript是两个语言,类似但不相同)

如果目标是制作网页,可以选择的语言是Javascript+CSS+HTML。其中CSS和HTML是决定网页长成什么样的。这两种语言学习起来很简单。推荐Javascript的原因是,网页编程的前端(用户能看到的部分)基本都是用Javascript来控制的。而且现在的Node.JS也是基于Javascript的语法来做的后端程序(也就是用户看不到的服务器部分)。也就是说,只要会Javascript前端后端都能写。

如果目标是做数据分析,首推的是Python语言。Python语言里有大量关于数据处理的公共库可以使用。让我们可以站在巨人的肩膀上继续深入研究,而不是重造车轮。

综合各种因素,如果是针对7-12岁的孩子学习少儿编程课程,语言的推荐顺序为Scratch>Python>Javascript>C。

Q:如果说,编程不是目的,而是手段。如果目的是让孩子有创造力的话,应该采用什么方式呢?

这是一个十分好的问题,这十分值得我们再开一篇文章来详细讲解。请关注西瓜创客公众号,肖恩老师会在未来和大家分享这个话题。

创新 · 赋能,塑造教育发展新业态

2024年,我国教育强国建设进入关键期和加速阶段

安道教育(Amdox)· 2024年慧聪教育行业城市系列巡展

让信息化产品真正为教育教学服务,为教育数字化发展服务!


免责声明:凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。