少儿编程之我见
“忽如一夜春风来,少儿编程万家开。”最近风头正盛的教育项目莫过于“少儿编程”了,有的推Scrtach,有的推Python,有的推C++,有的要搞乐高,有的搞机器人,不明真相的围观群众往往丈二脑袋摸不着头脑,不知道学哪个好。
屁股决定脑袋,“万般皆下品,唯有某某高“,很多机构基于自己利益出发非得说学哪门编程语言最好,或者出于自己的经历经验而贬低其他编程语言,说××是世界上最好的编程语言。
作为一名程序员和家长,我想从我的角度来谈谈自己对少儿学编程的看法:学编程并不意味着要以后当码农,在未来,编程跟电脑操作、开车等一样是个常见的技能,对青少年来说只是一种思维训练。
编程语言无所谓优劣,主要看应用场景和阶段,它们有共通的地方,掌握了一门编程语言后,另外一门编程语言的相通部分便能很容易掌握。下面是Scratch,python和C++三种编程语言的代码对比图,判断菜单中是否包含宫保鸡丁,如果包含则输出找到了。可以看到Scratch和Python都很直观,C++有些繁琐。不过这三种编程语言的判断流程是类似的。
下面分别对一些主流的少儿编程教学语言的阐述。
Scratch
图形化编程,用户拖拉图像界面就可以完成编程。所见即所得,能让孩子快速运行得到结果,让孩子快速找到自信,成就感满满。
Scratch,在电脑、平板上都有相应的安装程序,可离线编程,也可在线编程。有些机构还研发出可供Sctrach编程驱动的教学硬件,有些STEAM比赛也支持Scratch。
类似的编程语言有Blocky等,但在国内Scratch的学习资源比较多。Scratch无需基础,建议三年级前学,适合启蒙使用,像打游戏一样感受编程的乐趣。
开发界面如下图所示,左边是编辑图像元素和运行结果的地方,右边可以像积木一样拖着搭建。
App Inventor
图形化编程,有点类似Scratch,但场合是在Android手机上编一个可实际安装运行的APP。
通常 ,Android APP用Java/Kotlin来编写的,IOS APP是用Objective-C或Swift编写的,但对小朋友来说那些编程语言太过艰深晦涩,APP Inventor是比较适合少儿做手机编程的。
APP Invenrot启动后会进入组件设计界面,左边是按钮、对话框、图像等组件,右边是这些组件的属性,中间是设计的场所,也是所见即所得,易于上手。
Python
非图形化的纯源码编程,相对Scratch有点枯燥,但真是真正的工业类编程语言,可以用来实际应用在生活生产中解决问题的。Python应用广泛,从编写一个简单的计算器到编写一个战胜人类围棋大师的Alphago,从Youtube网站到自动驾驶,从拍牌软件编写到股票基金量化,Python都可以胜任。Python近年来还随着人工智能和机器学习的大热而大红大紫,2018年再次成为TIOBE的年度编程语言,2019年打破C、C++和Java的统治地位,闯入TIOBE编程排行榜三甲。
现在,Python已经确定进入浙江省信息技术高考。从2018 年起,浙江省信息技术教材编程语言从 VB 更换为Python。除浙江外,北京和山东也确定要把 Python 编程基础纳入信息技术课程和高考的内容体系。
人生苦短,我用Python。Python简单易学,开发便捷,我个人认为Python是最适合普及编程教育的编程语言,没有之一。三、四年级就可以开始尝试学了。
下图为python的一个判断一个数字是否为质数的函数,写起来也比较简单。
C++
非图形化的源码编程,比Python上手要难一些。C++和Python一样是Google内部的三大编程语言之一,C++主要用于需要运行速度快的地方,比如操作系统底层代码、人工智能(如AlphaGo的框架Tensorflow,底层是C++编写的,运行速度快,上层是Python编写,易于快速编写)。
C++是中国五大奥赛(数学、物理、化学、生物、信息学)之一信息学竞赛的唯一指定编程语言(Pascal已出局,不要学了),它是阉割版的C++,无需学那么多C++的高级特性。不过要参加信息学竞赛,编程语言只是其中之一,有个经典的公式,算法+数据结构=程序,后面还是要学习数据结构和算法,多加练习。
跟其他奥赛一样,信息学竞赛是一条艰深长远的路,最后笑傲江湖的全国只有寥寥几十人,大部分人都是炮灰。如果有志于参加信息学竞赛,在三四年级时可以开始学习C++了。
下图是C++的一个例子。
最后总结:想感受手机APP开发,可以尝试APP Inventor;三年级以下可以感受Scratch,掌握变量、判断、循环等和其他编程语言相通的部分;想参加信息学竞赛就去学C++(建议三四年级后);无意信息学竞赛,只是想学编程开拓思维,建议学易学实用的Python。
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com