不管是在华为、百度还是东软,我都问过同事一个问题:“你希望你的孩子长大后从事什么工作?”得到的大部分回答居然是:“不管从事什么工作,别干程序员就行。”好像大家都后悔当了程序员。但是另一方面,许多其他专业的学生却在自费学编程,目标就是毕业后找到一份软件工程师的工作。那作为一个从业10多年、经历过多个岗位、对这个行业有着深刻认识的我,愿不愿意再让自己的孩子学编程呢?我想答案是肯定的。
对于互联网老兵来说,我不至于因为别人的孩子都在学,就因为焦虑去学;也不至于人云亦云,听到天花乱坠的招生广告就去学;更不至于因为父母不会,所以想让孩子弥补自己的遗憾而去学。相反,当我重新回顾编程对我的改变时,才发现它如此深刻地影响了我。以至于当面对下一代的教育时,我很乐意花大量的时间和精力,去了解编程教育课程,学习儿童发展心理学,并利用自己从业以来所形成的国际视野和洞察力,帮助孩子探索编程学习之路,帮助他们进入程序这个广袤的世界。在我看来,学习编程的优势在于多个方面。
编程时代已经来临
很显然,我们已经进入了编程时代。随着城镇化的发展与网络的普及,我们无时无刻不在享受着互联网为我们带来的便利生活。当我们就餐、购物、出行、教育、娱乐甚至是工作时, 反应就是拿出手机,查找相关的信息,或者进行相应的操作,这样的便利正是大量程序运行的结果。甚至在我们看不见的地方,如空气质量监测、地铁车辆调度、产品生产等,都有大量的程序参与工作。随着人工智能的出现,程序已经告别了以往机械式执行命令的阶段,转而具备了积累经验和推理判断的能力,这种智能化使得程序的能力大大增加,不仅可以代替人做简单重复性的工作,甚至可以做一些创造性的工作,例如下棋、画画、谱曲等。
在这样一个程序环绕的时代,如果不会编程,虽然这并不意味着失败。但是如果条件允许,我当然会选择让孩子学习编程,这并不是为了将来他可以从事一份程序员的职业,而是让他可以更深入地融入这个世界。不管他将来的工作是什么,不管是理财顾问、律师、运动员或科学家,熟悉编程,都可以利用程序更好地完成这些工作,事半功倍。
例如在足球行业,足球俱乐部利用程序自动分析每场比赛每名球员的表现,并得出关键数据,如跑动距离、传球次数、传球成功率、射门次数等。这些数据将在球员估值、薪酬谈判、球员买卖等决策中发挥重要作用。
锻炼英文阅读能力
由于计算机是由美国人发明的,因此编程语言源自于英语。发展到今天,几乎所有的计算机权威书籍、编程文档都是英语编著。有人可能会说,很多书籍和文献都有相应的中文翻译,英语不好同样可以学习。这诚然不错,但先不论翻译的准确性,关于翻译书籍的时效性,一本英文书,经过翻译之后再呈献给读者,至少都是好几个月过去了,而计算机是个快速发展的行业,能够 时间获取到 手信息非常重要。特别是在遇到关键问题时,能通过论坛或电子邮件直接和各国程序员进行交流,对及时解决问题非常重要。因此,在编程启蒙教育过程中,尽量一开始就选择英文教材,并逐步通过编程学习培养孩子学习英语的兴趣。
编程的深入需要提高英语水平,英语的进步又可以帮助理解编程,这种相互作用可以形成良性循环,帮助孩子建立良好的学习动机,更有助于让孩子感到学有所用,激励他们好好学习。
锻炼逻辑思维能力
一位澳大利亚朋友曾跟我分享过自己的一段经历。他曾经教他的孩子打扫厨房,先亲身示范了一遍,然后让孩子学着做。满以为孩子可以很容易学会,但是通过几次观察之后,他发现孩子打扫完的厨房仍然乱糟糟的。一开始他很生气,直到后来他才明白,孩子不能打扫干净的真正原因,并不是他们淘气,而是因为没有学会将”打扫厨房“这个大问题划分成一个个小问题,再通过解决一个个的小问题,最终解决大问题。用一句话来形容,就是做事没有条理。相信不仅是小孩子,许多大人身上也存在这个问题。我们时常可以发现有的人做事始终井井有条,而有的人做事总是慌慌张张,却并没把事情做好。归根到底,这是大脑中没有经过良好的逻辑思维训练的缘故。
而编程则是逻辑性很强的工作,程序是一行一行严格布置的,计算机执行代码时也是严格按步骤一步步执行,只有执行完上一行的代码,才会执行下一行代码。因此,任何编程解决的问题,都需要明确清楚解决问题的步骤,当遇到复杂问题时,还需要将问题逐步分解,化整为零,变成若干小问题,逐个攻破。在这个过程中,孩子的逻辑思维能力可以得到极大的锻炼,形成程序员思维的孩子,是不会存在逻辑混乱的现象的,因为他们早已熟悉如何分解问题和逐步解决问题了。
培养查找与解决问题的能力
记得我给椰子小朋友上的 堂编程课,就是找Bug(缺陷)和解决Bug。这个Bug并不是程序中的Bug,而是我们生活中的各类Bug。例如,自行车坏了,钟表不走了,那它们就是有Bug了,怎样找到这些Bug呢?找到后要怎样修复这个Bug呢?这就是在训练孩子分析问题与解决问题的能力。通过这堂课,椰子不仅开始用心观察周围的事物,还常常思考如何解决遇到的Bug。这种思维方法贯穿了整个编程事业生命周期。程序员遇到Bug总是在所难免的,当程序异常时,需要找到Bug所在,并要修复Bug。我现在每天的工作中,仍会花时间思考修复一些项目上的Bug,可见这种训练是一直存在的。特别在大型项目中,找到与解决问题的能力甚至比开发新功能的能力更重要,因为一个项目组中,开发新功能几乎人人都能做,但修复一些关键Bug,往往只有技术负责人一个人能胜任。因此,培养查找与解决问题的能力贯穿了编程教育的始终,也是编程教育的关键所在。
形成批判性思维模式
编程的工作其实就是与数据打交道:提取数据、分析数据、处理数据、产生数据。长期与数字打交道,自然而然会形成“从数据出发”的思维范式。举例来说,医院验血时,普通人拿到报告单后的 反应是找医生解读报告,而程序员则是先将报告单上每一项异常数据进行搜索,根据数据做初步判断,再找医生进行专业解读。这其实就是一种不同的思维模式——相信数据而不是权威。这种不盲从权威的思维模式,正是批判性思维的来源。这在当下这个时代尤为可贵。随着碎片化阅读的泛滥,人们越来越乐于接受表面的结论,而忽略了结论获取的方法与原理。中文由于比英文具有更强的表述能力,所以更擅长将文案写得天花乱坠,却隐藏了事物最真实的部分。而数据相比文字则诚实得多,因为数据不会说谎。获取数据,并合理地运用数据得出结论,是编程的真正含义。
小结
编程是一个跨越了众多学科的综合性学科,学好编程离不开对英语、数学、物理等学科知识的掌握。理解编程教育的意义只是 步,如何进行编程教育才更为关键。但正如有句话所言:只要找对了路,就不怕路远。当我看到这里隐藏着批判性思维的苗子,隐藏着未来的独立思考者,就让我觉得编程教育这件事值得去做。如果他们就是未来那个改变世界的人,呵护他们成长,为什么不呢?