我是开发商。我不会教我的孩子编程,你也不应该

2020-06-02 13:43:42

在最近的一次深夜公式跑中,我路过一大堆教孩子编程的书籍。我到处都看过这些书,但从来没有这么大规模的针对小学生的陈列。这些书籍是大量资源的一部分,这些资源包括暑期编程夏令营、课后代码俱乐部、旨在向幼儿园儿童传授JavaScript入门知识的应用程序,这些资源旨在让孩子们具备面向未来的技能。

很容易理解为什么父母要把编码强加给他们的孩子。要让我们的孩子为软件统治的未来做好准备,还有什么比培训他们如何构建软件更好的方式呢?如果一切都要自动化,那么做自动化的人要安全得多。如果学习编程是好的,那么越早学习越好。但是,虽然这些产品可能会教孩子们特定的编码语言,但它们实际上与创建软件的工作几乎没有什么关系。

我的一位前同事在一家编码新兵训练营接受培训,培训的座右铭是“编码是新的识字”。这种情绪是所有编程书籍和游戏的核心。一本畅销书中的描述说,及早开始编码“对孩子们为未来做好准备是必不可少的”。这给人的印象是,不教孩子编程在某种程度上等同于不教他们阅读。

这当然是荒谬的。编码不是新的识字方式。虽然大多数父母都识字,知道给孩子读书,但大多数不是程序员,不知道程序员需要什么样的技能。面向儿童的编码书籍将编码描述为一组具有“正确”解决方案的问题。如果你的孩子能掌握语法,他们就能快速、轻松地做事情。但这不是编程的工作方式。编程是杂乱无章的。编程是创造力和决心的混合体。作为一名开发人员,不仅仅是语法,某些技能只能教给非常年轻的人。

在我职业生涯的早期,我编写了一些代码来配置和运行一组远程服务器。代码运行得很好。至少我是这么想的,直到大约18小时后,我的手机在半夜叮当作响,告诉我有一组服务器出现了故障。我摇摇晃晃地从床上爬到我的笔记本电脑上,再次运行代码来更换损坏的服务器。几个小时后,另一个小组失败了。

没有语法问题。如果有的话,服务器从一开始就不会建造。问题要严重得多。隔离和解决这个问题花了几个星期和很多个晚上被打断的睡眠。

编码就是这样的。试试吧。看看它能不能用。再试试。如果一个问题很简单,那么它将是自动的,或者至少可以通过一些开放源码来解决。剩下的就是创造一些独一无二的东西的艰巨任务了。没有书教你如何解决以前没有人见过的问题。这就是为什么我不想让我的孩子学语法。我希望他们学会解决问题,深入研究问题,富有创造力。那我们该怎么教呢?

有一天,我儿子担心他的一把椅子摇晃。我们看了看,他帮我隔离了问题:其中一个螺丝松了。我找到了我们许多剩余的六角扳手中的一把,并教他如何拧回它。在那之后,他好奇如果他用另一种方式拧会发生什么,他一直这样做,直到螺丝出来。在他满意工作完成之前,我们最终把椅子完全拆开,再把它放回原处几次,经常是不匹配的碎片。试试吧。看看它是怎么工作的。再试试。

当然,让某些东西正常工作只是构建软件的第一步。下一步是使代码清晰、可重用和整洁。有一次,在我职业生涯的早期,我写了一个特写,并把它交给了一位资深开发人员进行审查。他看了一眼我草率的间距、不匹配的行和反复无常的命名约定,只是说,“再来一次。”它起作用了。语法有效。这仍然是错误的。优秀的程序员不只是让一些东西工作。他们希望它是好的。

这种质量感对许多开发人员来说是最难掌握的。设计良好的代码使用起来感觉很好,而丑陋的代码会让开发人员不由自主地退缩。最好的开发人员学会将抽象逻辑与艺术家的敏感度融合在一起。学会相信美感是发展的一部分,就像任何算法或编码模式一样。

我的妻子和我最近和我们的儿子一起做了糖饼干。每次我们混合一些配料时,我们都会停下来看看面团,谈论一下面团的质地和颜色。很顺利吗?我们把所有的部分都混合均匀了吗?当我们摊开面团时,我儿子摸了摸面团的表面,看着我的妻子教他如何把每样东西都弄得均匀而薄。然而,最困难的部分是裁剪出形状。像所有的孩子一样,他本能地把切割机推到了摊开的面团的中间,每次我们都会试图解释如何将形状挨着放在一起,以最大化每个卷。

每一步-精确地测量配料,测量混合面团的平滑度和一致性,放置精确的切割以最大限度地减少浪费-都教会了他一些关于质量的知识。很难讲授仅仅执行步骤(如遵循食谱)和做好某件事之间的区别。它只能通过感觉和体验来传递。每次当你让你的孩子参与你重视的事情时,你就是在教他们如何把事情做好。您正在为他们编写代码做准备。

但你不仅仅是在教他们这一点。你在教他们这个世界充满了有趣的东西等着你去发现。你是在向他们展示如何充满激情,并在他们做的每件事中寻找那种短暂的质量感。最好的部分是,即使他们没有成为程序员-大多数人不应该也不会-同样的技能可以用在几乎任何职业、每种爱好、每一种生活中。当我们强迫孩子们学习句法时,我们强化了这样一种观念,即如果某件事不是一项明显可雇用的技能,它就没有价值。成年人可以学习语法。只有孩子才能学会拥抱好奇心。