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

# 1. 收获创造的乐趣

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

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

如果孩子并不知道计算机程序的工作原理, 不知道程序如何为他服务, 那么, 他只是一个消费者, 一个用户. 如果, 我们可以让孩子成为程序的创造者呢?

如果孩子不再是产品的消费者, 而是产品的创造者呢, 那会是怎样的景象?

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

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

我在《体制教育的长处和短处》说过, 中式教育有很多长处, 但是它的一大缺陷是“扼杀学生的热情”, 而编程可以在这个方面做出有益的补充, 因为它可以让孩子获得思考和创造的体验, 让孩子切身体验知识的用处, 从创造中获得乐趣和满足感

# 2. 可以锻炼思维能力

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

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

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

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

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

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

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

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

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

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

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

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

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

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

为什么?

  • 第一, 因为设计的变动影响广泛, 牵扯到工程的方方面面, 直接影响安全、质量、进度、成本;
  • 第二, 因为反馈周期太长. 尽管我们在前期进行了很多讨论和推演, 做了很多计算和模拟, 但是没有办法立刻见到成形的工厂, 没有办法知道工厂实际运行会发生什么. 我们必须经过漫长的等待, 等待施工建设完毕, 等待试运和投产, 而后才能知道工厂实际运行起来的情况, 也只有这时候我们才能检验之前的想法对不对.

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

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

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

此外, 掌握编程是一件很酷的事情. 在大家心目中, "编程"是极客的标志, 是智商高的体现. 如果我们的孩子学会了编程, 那么其他孩子肯定会羡慕他甚至有点崇拜他, 这又从外部强化他的自信.

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

# 4. 提高升学竞争力

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

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

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

  • 竞赛:

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

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

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

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

# 5. 提高社会竞争力

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

普遍认为的历史和未来

可能的历史和未来

人工智能奇点

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

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

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

# 结论

让孩子学习编程的目的并不是为了让他成为程序员, 而是为了让孩子掌握编程这个强大的工具, 放大他的创造力和竞争力.

作为对比, 编程同奥数一样, 都可以提升孩子的逻辑思维能力, 都可以争取到更好的升学竞争优势.

和奥数不同的是:

  • 奥数更抽象, 而编程更具象, 更容易让孩子理解和掌握
  • 编程可以制作看得见摸得着的作品, 这为孩子带来乐趣和成就感
  • 编程可以获得即时反馈, 从而让孩子拥有掌控感和自信心