儿童节|别只教小朋友编程,传授算法的智慧给他们同样重要

儿童节|别只教小朋友编程,传授算法的智慧给他们同样重要

大数据文摘作品,转载要求见文末

作者 | Ali Almossawi

编译 | 沈爱群,笪洁琼

编程和算法有什么不同?这样的问题对于从事相关工作的人都不一定能解释清楚,更何况还要解释给五岁小孩听并让他/她能听懂,这不是一件容易的事。然而算法可不仅仅只在互联网上可以用,生活中随处可见算法的机智。大人感受到了算法的强大,同时也能带给孩子不一样的体验。

编程是时下的热门,但是对于计算机科学来讲远不止只是编码。就比如说算法,算法在生活中像在互联网一样的有用。

两年前,当我女儿接受学前教育时,她了解到人们从事工作有不同种类。 她问我关于我的工作,我反复思考着,得到一个关于我如何做出一些人们不能真正触摸的东西,还有关于我写出的不是每个人都能读懂的东西(我编写电脑软件)。 不用说,这是一个令人失望的答案,而且我也知道她对这个答案感到失望。

我想得到一个更好的答案,所以我开始寻找有用的书籍、项目、游戏和玩具来在向年轻人介绍计算机科学。我开始意识到,我列表中的二十几个项目中,除了极少的几个项目,其他所有项目都集中在编程上,也就是说,他们强调程序流程的概念或者说是对特定编程语言的教学。我在旧金山的一所小学进行访问时发现,他们也只专注于编程和码代码。计算机科学和编程几乎总是混合在一起。

令人奇怪的,因为计算机科学中有一些更原始以及永恒的概念,如算法,算法是指由清晰的步骤组成并完成一些有用的事情的过程。我们通常把算法比做菜谱。

我个人更偏爱将算法类比作我们在日常生活中做出的决定。

如何整理一堆刚烘干的衣服,如何在杂货店的走道中穿梭,如何决定要听什么音乐。而且我喜欢算法就像日常生活中的做决定一样,因为它表明算法的涵义随处可见,而不仅仅是在计算中。

关于算法的另一个令人着迷的点是它们来自于历史。甚至古代的历史。公元前1800年至公元前1600年的巴比伦碑显示古代巴比伦人利用算法写下了一些程序来做决定,例如计算复利,或者是在给定高度和容积的情况下计算水池的宽度和长度。也就是说,他们的程序由一系列明确的步骤组成的:他们有输入,有输出,他们最终终止,并且它们是有用的。当你阅览几个世纪前的数学家的成果时,你会发现更多这样的例子。

我发现一个可以用但不限于单一学科的永恒概念的想法来向年轻人介绍计算机科学的机会,而不是用关注“流程”或“语法”(与编程相关的特质)的主意。而且我的做法和我强迫女儿吃健康食物的方式一样:“嘿,爸爸,这勺土豆泥味道像西兰花一样。”“我并不知道你在说什么,孩子”。

2006年,我在研究所的时候,一位教授进行了一次演讲(他的名字叫兰迪 · 鲍许,他演讲的内容随后被编成一本书叫做《最后的演讲》)。在那次演讲中,对我来说最生动的隐喻之一就是好的教学,在很大程度上就像一个足球中的障眼法。看上去你在向一个方向移动,但你实际上最终是向另一个方向移动。

所以,我开始整理日常生活中的12个场景来解释计算机科学中的基本算法。

但是,相比专注于明显的课程(算法),我将重点放在可以让这些算法引人注目的障眼法上。并且,障眼法就是比较。

比较是非常强大的。孩子们学习的第一件事情之一就是像大和小这样的抽象形容词,这就是为什么当一个孩子问:“自然历史博物馆里的无法龙(白垩纪一种两栖食草大恐龙)有多高”的时候,“十七英尺高,是个小型的无法龙”,这样的回答对孩子们来说是没有意义的,更有意义的听到,“如果苏珊女士,玛格丽特女士和贾斯查先生叠站在对方的肩膀上,贾斯查先生有可能会让无法龙的下巴发痒。”

上面所说的又与算法有什么联系? 这才是真正令人兴奋的部分。计算机科学家,和他们在数学,系统工程以及其他学科的朋友一样,一直对算法进行相互比较,以得到更好的算法。在决定哪一个更好的时候,他们通常会看到一到两个效率的质量:哪个算法耗费的时间较少就能完成,以及哪个算法仅需要更少的空间就能完成。

因此,有什么更好的方法来展示算法的概念,而不是从一个新的角度来解释它:不是解构它,展示它是如何工作的,而是通过让两种算法相互竞争,然后看哪一种算法能先把它排到终点线。

还有什么更好的方法让这些赛车算法熟悉,而不是把它们设定成12个故事中的一组人物必须做出的日常决定。

我喜欢这种方法的深度。

对这种方法的最终价值的考验是安排我与我现在五岁的女儿开会,记住,当你三岁的时候,你问我我以什么谋生?

我们经历了我脑海中的第一个故事,一个保姆面前堆着一堆袜子并且正在努力找出如何有效地对袜子进行配对的方法。我问我的女儿,她说:“好吧,我的方法就是从袜子堆里拿出一只袜子,然后去找它的配对的袜子,把它们放在一边。最后我会找拿出另外一只袜子,并寻找和它配对的那只袜子。“

很好,这是一种方法。另一种替代方法是将一只袜子从袜子堆里拿出来放在一边,然后从袜子堆中拿出另外一只袜子,看它是否与我们已经放在一边的袜子相匹配。如果相匹配,就匹配它们,如果不匹配,我们就像之前一样把它放在一边。

事实证明,当我们拥有足够数量的袜子时,第二种方法效率会更高,这是因为我们正在改变存货(我们在一旁放置的的一排袜子),而且我们也减少了我们必须翻找的袜子的数量。

上面的场景会带来什么样的影响呢? 第一点,它是互动的。 第二,这个场景我们很熟悉。第三,它介绍了计算机科学中的一些重要的概念(搜索,增长率,哈希表和内存)。第四,它鼓励人们思考“为什么”类型的问题而不是“如何”类型的问题。我们并不关心搜索算法的工作原理,但是我们关心为什么它更有效率。

对K-12计算机科学教育的兴趣的持续增长,无疑是受到让孩子为更加苛刻的劳动力市场做准备的意愿的影响,与此同时,不忽视基本目标尤其重要。 为什么我们要让学生在小时候就去接受计算机科学呢? 编程可以帮助孩子们在不久的将来获得一份工作。这是一个非常宝贵的技能。

但是,为了让孩子们对他们身边的世界随后可能产生的变化做好准备要求他们对更深层次的概念加以领会。而我的观点就是算法可能是这些更深层概念中最重要的。

相关推荐