前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Stephen Wolfram:如何训练孩子们的计算思维(III)

Stephen Wolfram:如何训练孩子们的计算思维(III)

作者头像
WolframChina
发布2018-05-31 14:56:28
6470
发布2018-05-31 14:56:28
举报
文章被收录于专栏:WOLFRAMWOLFRAM

█ 本文译自2016年9月7日的 Stephen Wolfram 博文 How to Teach Computational Thinkinghttp://blog.stephenwolfram.com/2016/09/how-to-teach-computational-thinking/

孩子们能做什么?

顶尖的科学家和技术专家每天都在使用 Wolfram 语言做很多复杂的事情。但是最近 Wolfram 语言最重要的发展是,孩子们也可以开始使用这门语言了。而且我说的不是什么打折的玩具版本,而是专家们都在使用的 Wolfram 语言版本。(是的就像英语语言一样,有些孩子们不会使用的生僻字,所以 Wolfram 语言中也有一些孩子们一般不会用的晦涩的函数。)

所以是什么帮助实现了这一点呢?基本上就是过去30年我们在 Wolfram 语言中写入的一层又一层的自动化技术。我们的目标就是让这门语言越自动化越好——这样使用 Wolfram 语言的任何人,无论是顶尖的专家还是中学的孩子,只要提供概念和他们的计算思维,这门语言就可以自动做剩下的工作,并且完成赋予的任务。

过去,孩子们和专家用的经常是两个分开的系统。但是由于有了这个自动化技术,两个系统可以合并了。这样的事在其他领域也发生过。比如以前,业余剪辑手用的是简单系统,专家使用更复杂的系统,但是现在,从孩子到大片的制作人,使用的都是同一套系统。

对于计算思维和编程,要达到这一点可能更困难,但是经过 Wolfram 语言30年来的努力,我认为我们已经实现了这个目标。

在很多标准课程学科,孩子们只是模仿老师教学的东西。但是有了计算思维,孩子们已经有了和老师一样的工具,所以现在孩子们也能做一些专业级别的事情了。

在某种程度上,孩子们在学校里所学的功课,都很少能够举一反三。孩子们花很多精力做数学或化学题。如果要写论文,他们要清清楚楚地写出每个字。但是有了计算思维和 Wolfram 语言,情况就完全不同了。一旦孩子知道了怎么计算式地构建,然后知道怎么把这个思路用 Wolfram 语言表达出来,然后语言就可以接管剩下的事,构建出一个复杂的结果。

有学生可能对历史王国的发展和灭亡有一些想法,而且可能想到了一个规划历史国家的地理面积的时间序列的办法。只要他能把这个思路用 Wolfram 语言写出来,Wolfram 语言就可以帮助该学生立即生成精细的表格、信息图像等等,然后学生就可以根据这些图表得出各种结论。

孩子又可以从用 Wolfram 语言写东西中学到什么呢?首先最重要的,他们学习了计算思维。计算思维是一种非常新的思考方式。但是它和孩子们做的其他事也有一些相同的特点。比方说,和数学一样,它强调的是思路的准确与清晰。和写作一样,本质上是在交流思想,是一种创作活动。Wolfram 语言中的优秀代码,像写作一样,是清楚优雅的,而且易读易懂。但与普通意义上的写作不同的是,它的受众不仅仅是人类,还有计算机,Wolfram 语言告诉它们应该自动执行什么。

当学生在做数学、化学或其他学科的题目时,他们如果想知道是不是得到了正确答案,通常不是问老师就是看“课本最后的答案”。但是 Wolfram 语言代码给他们带来了不同的体验。因为孩子们可以知道他们解题的思路方向是否正确。代码应该可以做一个像蜂巢的阵列。Wolfram 语言真的做得到这一点吗?

写代码的整个过程与孩子们做的其他事还是有一点小区别。首先要构思代码,然后对代码进行调试。调试是一个非常有趣的脑力活。在 Wolfram 语言中调试的难度比起以前已经大大降低,这是因为 Wolfram 语言是符号化的,任何代码片段都可以单独运行、分开研究。

但是调试的最终目的是理解和解决问题,是处理生活中很多事物的单纯形式。但调试最好的地方——尤其是在 Wolfram 语言中——是它能立即反馈。所做的改变有没有效果,是不是需要深入研究,想点其他办法,等等。

调试的一部分是让一段代码生成结果。调试的另一部分是了解生成的结果是不是正确的。比如莎士比亚戏剧的社交网络是不是合乎情理的?为什么有很多角色好像和其他人都没有联系?我们要理解我们是怎么定义"联系"的。这么定义有意义吗?有没有更好的定义?

这就是计算思维在做的事。和编程没有太大关系,而是关于应该对什么进行编程,是关于构思整个问题,使之可以用计算的形式表达。而有了如今的 Wolfram 语言,我们已经有了这样一个环境,把自己的构想变成现实。

让孩子引导

当我向孩子们展示 Wolfram 语言的时候,我一般都是尝试了解孩子们对什么感兴趣。他们对艺术感兴趣吗?还是科学?历史?电子游戏?或者其他的什么。而且这件事还挺有意思的。我会用一些和他们兴趣相关的东西作为例子,然后向他们演示。会得到一些结果,图像或者可视化的图。然后孩子们看着这些结果,基于他们的知识储备理解这些结果。然后他们经常会问,“怎么把这个扩展到那个东西?”或者“这样做行不行?”。这时时机就来了,因为孩子们在提出自己的问题,他们已经置身其中、在思考将要发生的事情。

很多在学校教授的学科都或多或少被严格限制了。可以问问题,但是这些问题更多的像一般的"技术支持":帮我理解这个已经存在的特点,而不是"我们来说一些新东西吧"。有几次我在给孩子们聊科学的时候做过"问我任何问题"的部分,很有意思。有一些问题,可以用大学水平的物理知识回答,有一些可能要用到研究生级别的知识,然后还有一些问题,天哪有几个问题据我所知是还没人能回答的。可能有一个我知道答案,但不过是因为我上个月刚和全世界最顶级的专家讨论过这个问题,他也是刚刚得出了这个问题的答案。在我做这个"问我任何问题"的事情之前,我并没有意识到这些"没有边界"的问题能难到什么程度。但是现在我知道了,除非学校老师有超广的研究水平的知识,不然现阶段的学校教育只能被严格限制。

但是现在使用 Wolfram 语言作为工具,这成为了一件可能的事。因为有了 Wolfram 语言,教师不必知道一个问题的所有答案,他们只需要知道怎么用计算的方式将问题表达出来,然后 Wolfram 语言就能把答案计算出来。所以需要的技巧只是教师有能力把问题用 Wolfram 语言表达出来。而且这个过程很有趣也很有教育意义,因为教师和学生将会一起努力得到答案。

我经常做一些"现场实验"。我选择一些话题——有些是观众选择的,有些是我事先想好的——然后开始现场使用 Wolfram 语言对这个话题进行深入探究,看我能得到什么。这些年来随着 Wolfram 语言的自动化水平提高,这件事变得越来越容易。我经常在 Wolfram 暑期学校用"现场实验"做开讲,我告诉他们,在接下来的一个小时里,我们会新建一个笔记本,在这里我们可能会发现一些新的有趣的东西,足够写一篇学术论文了。对我而言这个过程可能很紧张。不过大多数情况下效果都非常好。而且我觉得这个过程很有教育意义。因为大多数人根本意识不到,在一个小时内可以把一个话题从零发展到一个可发表的结论。但这正是现代 Wolfram 语言可以实现的事。显然在我一生的计算思维和探索发现的经验中,Wolfram 语言无疑帮了我很多。对任何一个在计算思维上有足够知识的人而言,Wolfram 语言可以帮助他们完成很多引人入胜的"现场实验"。

我还是个孩子的时候,我很不喜欢课本后的练习题。我总是觉得做别人已经做过的事情很没意思。所以我尝试去发现很多不同的问题,在这个过程中我看到了很多别人没见过的东西。而现在有了 Wolfram 语言,做别人没做过的事情已经变得很容易。当然,不是所有孩子都和我一样有这样的动力。但是对于很多人而言,如果能靠自己的创新,而不是重复别人做过的事,得到一些东西,是会有额外的满足感的。在实践阶段,人们还可以通过 Wolfram Cloud 分享自己的成果。比如你建立了一个自己的网站或应用,你可以把它们展示给同学、朋友、或者全世界。

孩子们能在哪里有所发现呢?什么地方都行!甚至在科技领域,甚至在已经发展成熟的数学领域都有无穷无尽的实验数学等着人们去探索。在科学方面,有一个小小的障碍,就是必须面对真实的数据。当然,Wolfram 语言有大量内置数据。而且想要获取更多数据也不是难事,可能只需要用相机或者麦克风,或者直接用连接 Raspberry Pi 或 Arduino 的传感器等等,都可以。

那么人文学科怎么样呢?你仍然需要数据。但是 Wolfram 语言中也有很多现成数据(著名艺术作品的图像、著名书籍的文本、历史国家的信息、等等)。而且在现代社会,要在网络上查找数据非常容易,然后再把数据导入 Wolfram 语言。有时候需要对数据进行一些处理(这个过程也是很有意思很有教育意义的),但你会很惊讶地发现,现在查找数据,甚至是很久以前那些难找的晦涩的文件,有多么容易。(而且这也是帮助我建立学习历史的兴趣的一个因素了)。

计算思维是一个基于课题进行学习的领域。我每年都会为我们的夏令营计划提出上百个适合孩子的话题。只需要一点点帮助,孩子们就能发现更多。我们的夏令营中,我们让孩子建立自己的课题,而且让孩子们在课题中合作也不难。我们通常会对课题设立一个目标,比如创建一个 Demonstration 演示,或者一个网络应用,或写一段描述文字,可能会发布在 Wolfram Community 上。(尤其是我们 Wolfram Demonstrations Project 中的 Demonstration,实际的操作和演示发布都让整个过程充满教育意义。)

当然,即使是做别人"做过"的课题,再做一遍的时候也通常会有些不一样。最简单的,写代码是一个创造过程,不同的人会写出不同的代码。然后,如果课题中还包括了可视化或者用户界面,每个人可能都会创新地发明出自己的一套方法。

当然,所有这些创新都很好,但是在教育实践中,很多事情被做成了流水线模式,结果就是大多数学生都总是在做同一件事。但即使在这样的约束环境下,计算思维和用 Wolfram 语言写代码也还是有其可以发挥作用的余地。数学学科有一个好处就是,在做习题的时候,总是有一个确定的答案,所以学生们可以很轻松地检查自己的答案(至少在代数表达式的等价性问题上,只需要我们的计算得到正确答案就行了)。在写论文的时候,基本上没有其他选择,只能让真正的人去阅读论文(没错,你可以做一些自然语言处理或者机器学习来做一些决定,但是写论文最终的目的是为了和人交流,所以无论怎样必须让真正的人来判断这篇论文)。

好了,现在有人写了一段代码,这是一个创造过程,就像写论文一样。但是写代码是为了和计算机交流,所以最应该的是让计算机阅读和评估这段代码。这件事工作量并不小。因为,比如,你想检查学生不是只把正确答案直接放进了代码中,而是把整个计算过程和思路都清楚明白地表达出来了。这个过程需要一些高科技,但是有了 Wolfram 语言的符号字符,再加上一些自动的定理证明和机器学习,实践中其实可以把这件事做得很好。而且这也是我可以把《wolfram语言入门》这本书中习题的自动批改版本发布到网上的原因。

在一定程度上我们可以通过学生写的最终代码来评判。尽管可能的程序可以有无穷个,我们仍然可以判断哪些是正确的,甚至哪些是满足特定的效率或优雅性标准的。可以做的还有更多。因为与有些领域不同,比方说数学,学生们习惯在草稿纸上进行思考,而写代码时,编程过程中的每一步都习惯在计算机上完成,每一次按键都可以被记录下来。我自己一直以来就是个个人分析的爱好者,偶尔会对我编写和调试程序的过程做那么一点分析。在教育领域,这却是很好的机会,首先是在制作精细的教育分析(Wolfram 语言和 Wolfram Cloud 是完美的选择)方面,然后是创建针对每个学生实际行为和学习过程的深度方法。

最终我们想要的是每个学生的精确计算模型。通过我们目前在 Wolfram 语言中所掌握的机器学习技术,我想我们已经开始拥有建立这个模型的前提。有了这个模型,我们可以做的是对学生布置任务后将要发生什么进行大量的模拟,试着确定什么是最佳的解释,或者在任何给定的时间提供最优化的习题。

在帮助像基本数学这样的领域时,这种个性化通过简单的启发式是相当容易实现的。 当涉及到帮助编写代码和计算思维时,问题则变得相当复杂。 但通过良好的计算思维和系统内部的复杂计算,我认为可以在这一领域大有作为。

有一个常见问题,或许我该说一下,那就是到底要怎样确定学生真的理解了某一事物呢?如果有对每一个学生的良好计算模型,这个答案可以非常复杂。但有时候我们还是需要发明各种类型的习题或测验来给学生(好吧,假定一个人不只是对项目整体的评估选择更好的计划)。一种基本的习题类型是这样的,“写一段代码,来进行 X”,这在我的《wolfram语言入门》一书中随处可见。但还有很多其他类型:“简化这段代码”,或者“求一个使该函数失败的输入”。当然,还有这类习题,“这段代码的作用是什么?”但在某种意义上,这样的练习似乎很愚蠢:毕竟,学生可以通过运行代码来得到答案。

现在,我不得不说人们有必要“像一台计算机那样”做一点事。这有助于理解什么是计算机,以及计算过程是怎样的。但完全不必总是这样。真正的关键,我认为,是教会他们自己实际上需要做什么。我们有技术和自动化,而且随时间推移会越来越多。没有必要教人们去做计算机的工作;而是应该教给他们在用计算机作为工具和合作伙伴,什么能够做到,以尽可能最好的方式。(关于教小孩子在没有计算器的情况下学习算术,我曾经听过有些论点,“要是你被放逐到一个没有计算器的荒岛上怎么办?”现在正听到有人在关于用手代替程序解题作出相同的论断。但是,呃,如果你在一个没有计算机的荒岛上,为什么还要写代码呢?[当然,当代码变得像识字那样普遍,那就另当别论了,因为在荒岛上的人可能会编写代码来读自己...])

好吧,那么什么是教学重点呢?计算思维的重点是思维,是用结构化的方式形成想法,能在现代社会与计算机方便地进行交流,然后完成有意义的工作。

有一些事实和观点需要知道。其中一些是关于计算的抽象过程。还有一些与世间万物如何变得系统化有关。颜色是如何表示的?如何指定地球上的一点?如何表示不同人类语言的字形?等等。我们几年前做过一张海报,介绍数据系统表示法的历史。光是这张海报的内容就是一门有趣的课程。好的,但如果你知道如何表示事物,也了解计算过程,应该学什么把它弄清楚吗?基本目标是把你想要知道或想要做的事情找出来,并能够转换为计算形式。往往就是”发明一种算法”,或”发明一种启发式”。将罗马帝国的成长与蒙古人的扩张进行比较的好方法是什么?需要计算什么?需要显示什么?如何说明月球两极附近的环形山较多?如何从图像识别环形山?

诸如此类的问题,正是基本上每一个“计算X”领域取得进展的核心。而擅于解决这类问题的人将成为这些领域的佼佼者。在我们公司周围,每天都在解决各种像“发明算法;发明启发式”这样的问题,这是这些年来构建 Wolfram 语言和 Wolfram|Alpha 的主要部分。是的,算法或启发式一旦被发明,计算机只需要执行任务就可以。但发明它通常首先要用一个清晰和结构化的方式来理解想要做什么,把它变成可计算的形式。通过努力,你可以发明脱离实际的、尽可能抽象的的习题。但更常见也更有用的是把问题与外部世界联系起来。即便是像“已知一堆 x,y 数对,决定是否应该绘制为单独的点还是连接它们的线的好的算法是什么?”这样的问题实际上也跟人们对世界的思考方式有关。而且从教育学的观点来看,计算思维的问题的美妙之处在于,它们几乎不可避免地涉及来自其他知识领域的输入。它们强化了广泛通用型思维和常识的应用,这对于人们需要做的很多事情是非常有价值的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WOLFRAM 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档