2023-04-13
上周在《AI 太要命!马斯克悄悄给娃 " 排课 ":专攻这几样,别的就不学了》这篇里和大家聊到马斯克给自家娃创建的学校。在这所学校里,一些传统学科被摒弃,编程却是重点主科。
(资料图片)
很多妈妈在那篇文章后留言求编程课,于是昨天我又赶紧追加了一篇,推荐我自己一直很认可的教学团队,给大家又搞来了一波几乎免费的试听课。
本想着 " 编程 " 这个话题咱就先告一段落了。
但紧接着又收到一位读者留言。
她是刚关注我们不久的新读者,说读了我的文章后,有点儿迷糊。
我写的" 四年级以上,如果孩子数理逻辑 OK,即便没有编程基础,也可以开始学 C++"。
可是,她家 5 年级的娃上学期去报编程班时,机构老师明明说的是,因为孩子之前完全没有接触过,建议先上图形化编程,把基础打牢啊~
我问了一下具体情况,发现还是个数学挺不错,学过浅奥的孩子,心里就开始堵得慌:5 年级的孩子,还忽悠人家上图形化编程,真是有点儿坑啊!
不行,我还得再补一篇,就专门列几个大家最容易混淆的编程学习问题来一一作答。
别的我管不了,咱们平台的家人们,可不能踩这些坑了!
Q1:
图形化编程是代码编程的基础吗?
不是!
本质上它们是平等的,无论图形化编程还是代码编程,只是不同的实现形式。
编程中要学习的核心方法概念,比如顺序、循环、条件、变量、递归、函数、调用、调试等等,在图形化编程中有,在代码编程中同样也有。
举个例子,我们要编一个程序," 求 1 加到 100 的和 "。
孩子可以用图形化编程来实现:
其中的关键编程概念是「循环」(repeat),每次循环中,加数 a 增加 1,加到被加数 sum 里;循环 100 次后,被加数 sum 就是我们要求的总数。实现同样的功能,用 Python 来编写,是这样:
这里的核心部分,for … . 也是个「循环」,它所做的事情和刚才一模一样:循环遍历从 1 到 100 的整数,加到被加数 sum 里。我们说图形化编程更简单,只是因为它使用了更直观的图形方块元素来表示程序。年龄小的孩子,不需要会打字,只要拖拽一下方块,像搭积木一样就能把程序写好。
但在编程思维层面,图形化编程和代码编程是一样的。
比如上面这个例子里,孩子都得去理解「循环」这个概念。是用图形方块还是用代码,只是不同的呈现形式而已,换汤不换药。
换句话说," 图形化编程 " 阶段不是必须的,它只是降低了编程操作难度和年龄门槛,让孩子在年龄很小,时间充足的时候就可以开始培养编程兴趣,编程思维。
所以,我的推荐逻辑是这样:
年龄还小,尤其是 1-2 年级的孩子,如果从没接触过编程,建议学 " 图形化编程 "。
假如已经错过了这个阶段,孩子现在比较大了,尤其是 4 年级及其以上,即便从没接触过编程,我都建议直接学代码编程,Python、C++ 都可以。这个年龄段,真没必要再学一轮图形化编程了,又费马达又费电。
看到这你可能会问,诶,那小时候费那劲儿干嘛,不如索性等到中高年级才开始?
当然可以啊,我这计算机专业的,还是从大学本科才开始认认真真学编程的呢。
人生漫长,有啥好慌?
但现在不是环境不同了嘛,不早点儿开始,可能会错过一些中途的机会和资源。
我国内一闺蜜,前几年娃主要整奥数,结果开始搞小升初后发现,隔壁家一智力相仿的小孩,因为早早准备了 CSP-J,已经拿到心仪学校的 offer,她家还迟迟未能确定。
当然,孩子数学很好,我相信最终也会有不错的结果,只是道路曲折了点。
无奈,竞争让学习这件事都不能 " 把鸡蛋放在同一个篮子里 " 了~
另外,早点儿开始,也是为后面节省时间。
到了中高年级,语数外各科的学习压力都上来了,哪有那么多时间分配给编程?
如果小时候就已经通过图形化编程培养了编程思维,掌握了编程概念和方法,使得代码编程阶段一点就通,突飞猛进,也很香啊。
当然,具体啥时候开始,各家有各家的判断,我只能点到为止。
Q2:
Python 是 C++ 的基础吗?
本质上它们是平等的,是两种不同的编程语言。
我们可以说,"Python 学好了,对学 C++ 有一定帮助 "。
但不可以说," 没学过 Python, 就不能学 C++" 或者 " 没学过 Python, 就学不好 C++"。
就好比一个人英文学得好,那他学法文也比较容易,因为阅读、写作这些东西是相通的。
但你不能说," 没学过英文 , 就不能学法文 " 或者 " 没学好英文 , 就学不好法文 "。对不对?
同样的编程功能,能用 Python 实现的,肯定也能用 C++ 来实现,反之亦然。
那为什么很多人说,C++ 比 Python 难呢?
那是因为,C++ 的语法比 Python 要复杂些。
实现同样的功能,C++ 的代码看起来更长更繁琐,Python 则更简洁明了。
比如前阵子给逃逃订生日蛋糕,当时正好是美国信奥赛 USACO 的赛季,我就索性配合一下,给他整了个 " 程序员蛋糕 ",上面写了段 Python 代码,体现浓浓的 "nerd" 气质。
其实逃逃现在更熟悉更常用的是 C++。我之所以用 Python,就是因为换成 C++ 太长了,蛋糕师不接单,说写不下~那 C++ 的优越之处在哪儿?
它的性能更好,执行效率更高。也因此成为了信奥赛的官方指定语言,从入门级别的 CSP-J,到最后的国际信奥 IOI,都指定使用 C++。因为编程竞赛比拼的是算法效率,对时间、空间复杂度都有要求。
等等,细想是不是有哪里不妥?
不对啊,都统一成 Python 也一样啊。既然是竞赛,看的是选手之间的相对值,只要是 apple to apple, 都是一样的啊。
是这么个道理,但中国计算机学会 CCF 和国际信奥赛组委会都指定锁死了 C++,你能怎么着?
不过,我也跟大家说过好多次了,不要一听到 C++ 就如临大敌,觉得是揠苗助长啥的
竞赛用到的 C++ 语法只是 C++ 很小的一个子集,范围远没有软件工程上用的 C++ 那么广, C++ 中让人头大的内存管理、指针的指针,还有面向对象等内容,信奥赛里都不涉及。
所以,我的建议是,四年级及其以上孩子,
如果目标明确,想试水 CSP-J/S 信奥赛,直接学 C++ 就好,反正无论你学别的什么,最终还得从头学 C++;
如果无意在竞赛这条路上走远,但希望孩子也能掌握编程,能用编程来做些科研项目,Python 则是不错的选择。
其实 Python 也能参加很多竞赛和考级,比如计算机学会 CCF 今年新增的 GESP 编程能力等级考试,1-4 级可以用图形化编程,5-8 级既可以用 Python,也可以用 C++。成绩好的话,还能直接免试 CSP-J/S 的第一轮,和信奥赛对接呢。具体我在昨天的文章里有讲过,这里就不再赘述。
Q3:
搞信奥赛就是学 C++ 吗?
我打个比方,孩子要解决一道奥数题,他苦思冥想后终于找到「解法」。
现在,他要把这个解法告诉老师,实际上要把解法讲清楚,孩子可以用中文讲,也可以用英文讲,但这老师规矩多,他指定了要用「中文」讲。
如果把这里的 " 奥数题 " 换成 " 信奥题 ",那么,
「解法」= 我们常说的编程里的 " 算法 ",是要烧脑的
「中文」= C++,是个表达工具
所以,信奥赛和 C++ 之间的关系是:
孩子要搞信奥赛,必须得学 C++;
但只学 C++,还搞不了信奥赛。
信奥赛的难,在算法,不在编程语言。
同样的题目,用 C++ 难,用 Python、甚至用图形化编程,也一样难。
Q4:
学编程就是搞信奥赛吗?
编程和信奥赛的关系,就像数学和奥数的关系。
100% 的孩子需要学数学,80% 的孩子适合学奥数,50% 适合打比赛,5% 能出成绩。
放到编程和信奥赛上,也很类似。
100% 的孩子需要学编程,这事已经毫无悬念。教育部早有引导,现在沿海一线城市的很多中小学,也都开设了编程课。
昨天我给大家推荐的编程课,最早就是被引入人大附中实验小学、人大附中西山学校、北京 101、上海中学、北京科技大学附小、西安建筑科技大学附小等名校的。
总之,编程就是一项类似于语数外那样的基本技能,人人都需要。
至于要不要搞信奥赛,就看个人选择了。
逃逃在美国也搞 USACO 信奥赛,说说我的体会。
对升学有好处。
这事在国内更明显,小升初、初升高、大学本科,研究生,这里头的每个阶段,如果有信奥赛的成绩,都有一定优势。
对孩子的逻辑思维,尤其数学成绩,有好处。
信奥赛里的算法,数据结构,和数学关系非常紧密。
我可以这么跟你说,搞信奥赛的孩子,数学不可能差,只是看能好到什么地步。
对将来就业有好处。
美国这边,你能叫得出名字的所有科技大厂,面试几乎都考算法,就是类似信奥赛那样的题目。
国内我听到过一个说法,如果能在信奥赛强省(比如浙江、广东)CSP 提高组拿一等奖的孩子,将来的工作年薪不会低于 30 万。
当然这只是听说,在就业形势那么困难的今天,谁也不敢做这个保证。
不过,编程、信奥赛基本是科技、高薪的代名词了。放眼望去,有多少科技大咖都是早早开始搞编程,搞信奥赛的。
包括最近火上天的,ChatGPT 的创造者 Sam Altman,8 岁就开始学编程。当然了,这些天牛们,离咱寻常百姓家的普通孩子有点儿远。但朝这个方向努力总没有错。方向对了,走一步是一步。你说对吧?
EASTWEST
一聊到编程我就容易扯东扯西,才答了四个问题,发现篇幅已经不小了
内容比较干,需要消化消化,今天就先在这里打住。
如果你觉得有帮助,解答了你心中的疑惑,记得在文末点个" 赞 "和" 在看 "啊。
我猜大家可能还有些疑问,可以翻翻我以前写过的文章
咱们公号创建快 10 年了,我自己又是学计算机专业的,所以早些年就已经看到这个趋势,开始和大家掰编程,方方面面差不多都聊过一轮啦。
用我的专业知识,讲讲编程的本质,以及带给孩子的思维好处。
和大家聊聊编程该什么时候开始学,学什么,怎么选课。
编程和乐高机器人啥关系、编程启蒙到底怎么做……
说说信奥赛的来龙去脉
推荐一部很棒的编程动画资源
欢迎加入我们的大本营