现今,许多面向儿童的计算机教程和编程语言十分风行,那么是否人人都应该从小学计算机呢?
美国前总统奥巴马曾表示,应该“向每个学生提供动手式的计算机科学和数学课程,从一开始就让他们为将来的工作做好准备。”不久,他启动了“人人来学计算机”(Computer Science For All)的项目,项目经费高达40亿美元。
科技公司对此热情很高。亚马逊发起了“亚马逊未来工程师”项目,每年想教1000万儿童编程。脸书、微软和谷歌等公司也有类似项目,规模及范围各有大小。许多家长也很热心。Code.org是一家促进计算机教育的非营利机构,具他们统计,有九成家长希望孩子在学校学习计算机。这解释了为什么许多面向儿童的教程和计算机编程语言会如此风行,比如Scratch语言和“编程一小时”活动。
那么,要让你的孩子参加编程营吗?要执意让他们上计算机课吗?可以,但不一定。如果是对编程感兴趣的小孩,肯定会在学习编程的过程中受益匪浅,他们不仅学到了新的技能,自己也会觉得很开心很好玩,甚至对以后工作方向的选择有很大的帮助作用。
可是对于那些兴趣不大的孩子呢?难道也要强迫他们学习编程,只为了能从事最热门的行业?在我看来,几十年后,我们不太可能还像今天这样给计算机编程。就拿机器学习来说(我们今天讲到“人工智能”,主要指的就是机器学习),它迥异于为计算机下达详细的逐步指令。我们今天要做的是给机器学习算法输入大量数据,让程序自行建构完成工作所需的模型。
我举一个显著的例子:从前的谷歌翻译包含50万行代码,但今天改用机器学习语言,大约只有500行代码。现在最大的难题不是学习一门编程语言,而是拥有大量数据,并在数学上理解计算机构建的模型如何运作,这样才能调整、测试这些模型。
在未来,这类计算机工作要注重什么呢?在技术方面,主要是数学:统计学、线性代数、概率论和微积分。数学仍是一门重要技术,除了编程,对许多职业都很有用。对日常生活也不可或缺。建立算法思维未必要通过编程。懂一点数学,再从烹饪、缝纫和编织(这些都包含了某种算法)中积累适当的学习经验,都很有价值。
对未来更重要的,是认清一个事实:计算机编程本身鼓励我们建构一个闭合的世界。这也是我当年觉得编程好玩的一个原因:能用一条条指令组装起一个(乏味的)东西,然后在自己建构的世界中玩耍,简直像魔法般诱人。但可惜,这和当今科技产业的做法已经相去甚远。当今需要的人才,要懂历史、社会学、心理学、数学和计算机,还要擅长分析复杂、开放和混沌的系统。
那么,你应该让一个对编程感兴趣的孩子加入编程营吗?当然应该。要不要让他们用Scratch语言编程玩,或参加“编程一小时”课程,看看他们是否感兴趣?绝对要。但如果他们对编程没有兴趣,只想学习如何做纸杯蛋糕、缝布娃娃或是爬树,你也不必担心。
我们绝不能让年轻人认为,世界正强迫他们在两条道路之间选择,一边是数学和理科,一边是社会科学和人文。我们要面对的最有趣或许也是最艰难的问题,将位于这两条道路的交叉处――而不在我们为了好玩创造出来的那个渺小封闭的世界里。