“我是开发人员,但我现在不会教孩子学编码。”这是我现在唯一能确定的事。今天就聊聊为什么会这么想吧。
现在媒体广为宣传“编程是未来世界的语言”。催促着孩子尽早开始学编程,为未来做好准备。好像不教孩子编程在某种程度上等同于不教他们阅读一样。
这其实是挺搞笑的。虽然大多数父母可以做到给孩子读书,教孩子认字。但就连很多程序员,都不知道合格的程序员是需要拥有怎样的技能。而儿童编程现在就如同雨后春笋一样冒出来,有些甚至打着招牌6岁学python, JavaScript……这认真的吗?
其实编程很复杂,它是创造力和不断练习和尝试的结果。一名好的程序员要掌握的不仅仅是编程语言本身,更重要的是背后解决问题的方式。
大多数编程工作就像是在造车子,用现成的工具将一些零部件组合起来。都说程序员最熟悉、最熟练、最常用的两个快捷键是 “ctrl+c 和 ctrl+v ”。但,还有一些工作,就像是车子中的发动机,很重要,高难度,需要独特的创造力和超高的技术能力,也需要大量时间的投入。现实是,你在造着汽车,你的参考书也好,教程也好,并不教你如何设计一个海陆两用的发动机——这类从来都没有遇到过的问题。
这就是为什么,孩子不需要那么早学编程语言本身。那学什么?我希望他们能学会解决问题的能力,深入研究问题,不断找到解决问题的方法。
比如可以和孩子一起搭乐高,搭一个建筑,将脑中想象的结构拆分成不同的部分,最后拼接起来,从不匹配到匹配,慢慢调整,最后让自己满意。
这就是编程的核心思想:模块化。下一步是代码清晰,可重用,可读性强。好的程序员不只是完成功能,他们的代码也非常漂亮。有些程序员会嗤之以鼻,觉得能实现功能就好了,代码质量有什么重要。其实那些程序大神是会将抽象逻辑与艺术家的敏感性融合在一起。他们相信美感是任何算法或设计模式的一部分,只有将两者完美结合,才是好的代码。
例如和孩子一起烘焙,可以和他一起讨论烤饼干的每一步是怎样的。揉面团的时候,讨论一下面团的质地和颜色。进一步讨论如何精确测量成分,放置精确,混合面团才能达到好的光滑度。让孩子参与父母所重视的事情,在其中教会他们如何做好事情。
我们让孩子学会的是——在这个世界里充满了有趣的东西要发现。如果孩子单纯学会了编码没有地方练习,那这个技能毫无价值。编程的思想可以用在日常生活中。发现问题,如何解决问题,如何将问题分解为一个个子问题,如何漂亮地完成。这中间需要提出很多假设,进行许多尝试,最终达到目的地。
这就是关于编程学习,我目前的一些思考。