这几年,人工智能的发展速度与日俱增:AlphaGo赢了柯洁;百度无人巴士量产;Google的AI客服,用一个简单的“嗯哼”,征服了全世界;索尼也用AI创造了一首Beatles风单曲......
 
  随之而来的,是教育风向的变化,除了语数外这“老三样”,一门新的学科正在迅猛崛起,且大有燎原之势——它就是“少儿编程”,加上政策的推动,家长们愈发认识到让孩子从小学编程的重要性,在北上广等一线城市,不让孩子学编程,都不敢说自己受的是精英教育。
 
  然而,编程语言种类繁多,哪一种语言最靠谱?最适合孩子的认知水平?最能激发孩子的创造力?
 
  少儿编程,选择哪种语言好?
 
  这个提问就像有人在问你“是穿婚纱好、正装好还是休闲装比较好?”
 
  这是一个无法回答的问题,因为问题缺少了重要的前提:“选什么样的衣服,取决于我们的目的”。
 
  婚礼时穿婚纱很好,但是如果每天都穿着婚纱上班就很奇怪了。
 
  每件衣服都有适用于它应有的场景。
 
  编程语言也是一样的,每种编程语言都有属于它的应用场景。
 
  要回答“少儿编程,选择哪种语言比较好?”
 
  我的简单版答案是:Scratch!作为从7岁开始做电子设计,读过Linux源代码,写过RTOS(实时操作系统),做过芯片编程FPGA/DSP,有20年编程龄,能熟练使用汇编/C/C++/C#/Perl/Objective-C/JAVA/Ruby/Python/Javascript/HTML/CSS等大家熟悉的编程语言和大家不熟悉的设计芯片编程语言Verilog和VHDL的我,推荐使用Scratch。
 
  那为什么是Scratch呢?我在和西瓜创客教的近10万孩子的家长沟通过程中总结了家长们的常见困惑,详细解释如下:
 
  QA&
 
  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又成为近年的新宠。