# 为什么要鼓励孩子学习编程?

# 1. 可以收获创造的乐趣

计算机技术已经成为生活中不可或缺的一部分.

孩子出门上学前用"彩云天气"查看天气预报, 等公交时使用"车来了"查看公交车位置, 外出时使用"微信"和父母保持联系, 周末时打开"Minecraft"和朋友一起搭建城市. 所有这些产品的背后都是计算机程序在支撑.

在这一切的场景中, 孩子并不知道程序的工作原理, 也不知道程序如何为他服务. 他只是一个消费者, 一个用户. 如果, 我们可以让孩子成为程序的创造者呢?

他不再是产品的消费者, 而是产品的创造者呢?

他可以设计游戏玩得不亦乐乎、可以开发网站在上面展示自己、可以编写算法解决数学奥数题、可以编写脚本完成"Minecraft"中的重复操作... 学会编程, 他可以将自己脑袋中迸发的无数创意, 落地到真实生活中, 收获创造的乐趣.

创造的过程并不轻松, 但是足够有趣足够产生成就感.

正如我在《体制教育的长处和短处》说的, 中式教育有很多长处, 但是它的一大缺陷是“扼杀学生的热情”, 而编程可以在这个方面做出有益的补充, 因为它可以让孩子体验各种创造的过程, 让孩子切身体验到知识的用处, 发现知识是可以直接用来创造的, 从创造中获得乐趣和满足感, 而不是苍白和遥远的许诺 -- “你长大后就会发现读书的用处”.

# 2. 可以锻炼思维逻辑

"编程"是锻炼逻辑思维能力的重要"载体":

编程过程中, 我们需要对现实问题进行抽象, 对复杂问题进行拆解, 然后在大脑里面推演, 在计算机里面测试, 出现问题, 还需要细致地假设排查和判断.

相对于其他锻炼思维的载体(比如说数学), 编程的好处在于, 编程是在实际应用中锻炼思维能力, 能够切切实实作出一个实际的产品, 而奥数只有抽象的演算.

奥数的确更能够提升孩子的思维逻辑, 但是, 用编程能够赋予孩子更多的成就感, 从而更能让孩子坚持. 很多家长都会给孩子报奥数班, 但是有多少孩子会爱上奥数? 如果没有外力逼迫, 有几个孩子会拿起奥数书?

如果说奥数能够让孩子跑得更快, 那么编程可以让孩子跑得更远.

正如我在《体制教育的长处和短处》说的, 中式教育有很多长处,它能够高效地让孩子掌握大量知识, 面对已知领域的问题, 学生能够快速解决也能够提出创造性的方案. 但是它的一大缺陷是“无法应对高速变化”, 当学生面对未知的领域, 已学的具体知识不再有效, 就会变得无所适从, 而独立于具体知识之外的思维能力恰恰是应对未知领域的有力武器.

# 3. 可以获得掌控感和自信心

实际上, 编程相比于数学, 还有个非常大的好处: "所见即所得, 能够获得即时反馈" -- 也就是说如果你编程完毕, 马上就得到到结果(反馈).

这几年, 科学家提出"刻意练习 / Deliberate Practice"的学习方法, 这个方法的效果也得到了广泛的验证.

"刻意练习"的一个重要组成部分就是"练习要有即时的反馈".

在"做事"和"成果"两者之间建立清晰的因果关系, 会帮助认识孩子认识到自己的行动是对的还是错的, 可以马上调整和改进, 这不光提高了学习效率, 还极大地调动了孩子的学习热情.

要知道, 很多工作和学习是无法马上得到反馈的, 这正是很多人在工作和学习中感觉枯燥、感受不到意义的原因.

我之前在一家工程设计院工作, 以工程设计作为例子:

我们在设计工厂时, 很多时候都是遵循以前项目的惯例. 有时候我们了解这些惯例背后的理论依据和计算支撑, 有时候它就只是惯例而已, 我们不知道它的依据是什么, 但是又不敢进行调整.

为什么?

第一, 因为设计变动涉及工程的方方面面, 包括安全、质量、进度、成本;

第二, 因为反馈周期太长. 尽管我们在前期进行了很多讨论和推演, 做了很多计算和模拟, 但是没有办法立刻见到成型的工厂, 没有办法知道工厂实际运行会发生什么. 我们必须等待漫长的时间, 等待施工建设完毕, 等待试运和投产, 而后才能知道工厂实际运行起来的情况, 也只有这时候我们才能检验之前的想法对不对.

而编程不一样, 它可以立即获得反馈. 编程完, 马上得到结果. 我们立马可以知道自己写的代码是对的还是错的, 立刻可以进行分析调整.

如果程序运行出错, 计算机会给出错误的可能位置和修改的建议. 如果程序运行正确, 又可以让我们不断体验到"成就感". 整个反馈周期非常短, 你能切实地感受到自己所作所为能够直接影响最终结果 -- 这种感受就是"掌控感", 而"掌控感"对自尊和自信的塑造又非常有帮助.

"掌控感"对于还未成年的孩子来说弥足珍贵. 因为对于孩子来说, 还处于被父母和老师掌控的阶段, 能够体验"掌控感"的机会是少之又少, 而编程恰恰提供了这样的机会.

此外, 掌握编程是一件很酷的事情. 在大家心目中, "编程"是极客的标志, 是智商高的体现.

如果我们的孩子学会了编程, 那么其他孩子肯定会羡慕他甚至有点崇拜他, 这会从外部强化他的自信.

所以说编程是一门能够让孩子获得即时反馈的活动, 孩子从中不断获得反馈, 从而获得掌控感、增强自信心.

# 4. 可以提高升学竞争力

  • 义务教育: 2022 年 4 月, 教育部修订了新的义务教育课程, 将“信息科技”从“综合实践活动”中独立出来, 成为独立的课程科目

  • 升学面试: 考取好的小学初中高中往往需要面试和评比, 很多学校都开始重视信息学竞赛, 所以如果孩子在优秀的课内成绩之外同时擅长编程, 是很多学校眼中重要的加分项

  • 高考: 作为高考改革实验田的浙江省, 在 2017 年已经将"信息技术"纳入了高考范围 ( 这个改革影响范围有限, 但却是一个风向标 )

  • 竞赛:

  • "全国青少年信息学奥林匹克竞赛 NOI": 优胜者可以报送到北大清华交大北航这些一线大学 (咳咳, 不过只要了解一下就好, 这主要是"别人家的孩子". 每年能进省队的寥寥无几, 对于大部分孩子来说, 不要揠苗助长)

  • "数学建模竞赛": 美国的高中数学建模竞赛和和大学数学建模竞赛受到全世界热捧. 在这些竞赛中获奖的学生会受到各个科技公司的追捧. 而一个数学建模参赛小队的最小组成就是三个人: 一人擅长编程, 一人擅长数学, 一人擅长英语

  • "科技公司的程序设计大赛": 著名科技公司会举办编程设计大赛, 一方面是无偿提供平台让大家锻炼编程能力, 另一方面也是在选拔人才. 比较出名的包括 TopCoder 公司举办的算法大赛, 还有 Google 公司举办的世界级规模的 Google Code Jam 大赛

  • 大学: 本科本科和研究生阶段, 如果你的论文中结合编程进行数据处理分析, 会极大提高项目的含金量

需要提醒的是, 如果你的孩子在读高中, 那么不宜在编程上投入太多时间. 对于高中阶段的孩子, 最重要的是高考. 人生的关键只有几步, 高考是其中之一, 而靠信息学竞赛保送大学的概率微乎其微, 不宜牵扯太多精力

# 5. 可以提高社会竞争力

面对互联网大潮对传统行业的冲击, 面对不断临近的人工智能, 我们的孩子在面对 10 年 20 年后的竞争时需要"编程"这个武器.

普遍认为的历史和未来

可能的历史和未来

人工智能奇点

2016 年中秋节前夕, 阿里程序员写脚本抢月饼的事件轰动一时, 舆论关注的是道德问题, 但是换个角度来看, 懂编程的人的确掌握了强大的武器, 他们和普通人的区别, 就如同《哈里波特》里"魔法师"和"麻瓜"的区别. 懂编程的人和不懂编程的人竞赛, 就像玩游戏开了作弊模式, 编程就是他们的"魔法棒".

我的第一份工作是一家央企设计院, 老一辈的工程师使用纸和笔来设计图纸, 他们一辈子只能完成几个项目. 而后, 新一代的工程师借助计算机软件 ( AutoCAD、Excel、CADWox、AutoPlan ), 一年就能完成几个项目, 效率的提升了成百倍. 掌握鼠标来指挥计算机做事, 让后辈远远超越了前辈.

那么在未来, 如果你的孩子能够掌握编程来指挥计算机做事, 计算机也会成为他强大的武器和工具, 帮助他提高社会竞争力.