神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。
编者按:“未来的文盲,就是现在不懂编程的小孩”“不会写代码就丧失了网络生存能力”大量少儿编程广告,充斥于自媒体和公共场所。但作者作为一名开发者,确认为不应该让儿童去学习编程,他希望他的孩子学习编程语法。希望他们学会解决问题,深入研究一个问题,发挥创造力。那么我们该如何教呢?作者认为应该让你的孩子参与到你所重视的事情中,与其教孩子编程语法,不如和孩子一起做饼干。原标题《I’m a Developer. I Won’t Teach My Kids to Code, and Neither Should You.》
最近的一个晚上,我路过了一个大型的书展,关于教孩子学代码的书展。我看到过这类书,但从来没有见过这么多的针对小龄儿童的编程书籍。与这些书相关的还有大量的资源:暑期编码营、课后代码俱乐部、旨在教授幼儿园学生JavaScript基础的应用程序,这些都旨在让孩子们掌握面向未来的技能:编程。
很容易理解为什么父母要让孩子接触编程。有什么比训练孩子们如何构建软件,能更好的让孩子们对未来做好准备呢?如果一切都要通过代码自动化,那么做自动化代码的人就安全多了。而如果学习代码是好事,那么早一点学习就更好。但是,虽然这些产品可能会教给孩子们特定的编码语言,但实际上它们与创建软件的工作关系不大。
我的一位前同事曾在一个编程训练营接受过培训,训练营的口号是 "编码是新的素养"。这种情绪是所有编程书籍和编程游戏的核心。一本流行书中的描述说,尽早开始编码是 "为孩子们的未来做准备的必要条件"。"这给人的印象是,不教孩子们编码就等于不教他们阅读。
这当然是荒谬的。学代码不是学识字。虽然大多数家长都有文化,知道给孩子读书,但大多数人都不是程序员,不知道程序员需要什么样的技能。给孩子们看的编码书,将编码呈现为一套有 "正确 "解法的问题,以为如果你的孩子只要掌握了语法,他们就能快速、轻松地做出东西来。但这不是编程的工作方式。编程是混乱的,编程是创造力和决心的混合体。作为一个开发者不仅仅需要掌握编程的语法,而某些技能只能教给很小的孩子。
在我职业生涯的早期,我写了一些代码来配置和运行一组远程服务器。这些代码工作得很好。至少我是这么想的,直到18个小时后,我的手机在半夜发出提示声,告诉我一组服务器出现了故障。从床上摇摇晃晃地走到我的笔记本电脑前,我再次运行代码,替换掉坏掉的服务器。几个小时后,另一组服务器出现了故障。
这不是编程语法问题,如果语法有问题的话,服务器一开始就建不出来。问题要深得多,隔离和解决这个问题花了我好几个星期和许多不眠的夜晚。
写代码就是这样。试试吧,看看它是否有效,再试一次。如果一个问题是直接的,它就会被自动化,或者至少用一些开源的代码来解决。剩下的就是创造一些独特的东西的艰巨任务。没有书籍教你如何解决一个没有人见过的问题。这就是为什么我不希望我的孩子学习编程语法。我希望他们学会解决问题,深入研究一个问题,发挥创造力。那么我们该如何教呢?
有一天,我儿子担心他的一把椅子摇摇晃晃。我们看了看,他帮我找到了问题所在:其中一个螺丝松了。我从我们剩下的许多六角扳手中找到一个螺丝,教他如何把它拧回去。之后,他很好奇,如果他用另一种方式拧,会发生什么,他照做了,直到螺丝脱落。最后我们把椅子全部拆开,又重新组装了好几次,经常是件件错位,他才满意地完成了工作,试试不同的办法,看看它是如何工作的,再试一次。
当然,把东西弄好只是构建软件的第一步。下一步是让代码清晰、可重用、整洁。有一次,在我职业生涯的早期,我写了一个功能,并把它交给一个高级开发人员审查。他看了一眼我那粗疏的间距、不匹配的行数和不稳定的命名惯例,就说:"再做一次"。它是可行的,语法是有效的,但还是不对的。优秀的编码者不只是让一些东西可以运行,他们希望它是好的。
这种质量感是很多开发者最难掌握的。设计良好的代码让人感觉很好用,而丑陋的代码会让开发者不由自主地皱起眉头。最好的开发者学会了将抽象的逻辑与艺术家的敏感融合在一起。学会相信这种审美感受和任何算法或编码模式一样,都是开发的一部分。
我和妻子最近和儿子一起做糖饼。每当我们混合一些材料时,我们都会停下来看看面团,并谈论质地和颜色。它是否光滑?我们是否把所有的部分都混合均匀了?当我们擀开面团的时候,我儿子摸着面团的表面,看着我妻子教他如何把所有的东西都弄均匀、弄薄。但最难的部分是切出形状。像所有的孩子一样,他本能地把切刀推到了擀好的面团中间,每次我们都会试着解释如何切面饼,以减少浪费。
每一个步骤:精确地测量原料,测量混合面团的光滑度和一致性,精确地切割以减少浪费,都让他学到了一些关于质量的东西。仅仅是执行步骤,比如按照配方做,和做好一件事之间的区别是很难教的。只能通过感觉和经验来传递,而每当你让你的孩子参与到你所重视的事情中时,你就是在教他们如何做好事情,你就是在为他们写代码做准备。
但你不只是教他们这些。你在教他们这个世界充满了有趣的东西,等待着他们去发现。你在向他们展示如何充满激情,并在他们所做的每件事中寻找充实感。最好的部分是,即使他们长大后不成为程序员(大多数人不应该也不会成为程序员)同样的技能也可以用在几乎所有的职业、所有的爱好、所有的生活中。当我们强迫孩子们学习编程语法的时候,我们强化了这样一种观念:如果某样东西不是一种明显的就业技能,它就没有价值。成人可以学习编程语法,只有孩子能学会拥抱好奇心。
(译者:蒂克伟)