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

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

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

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

到底什么是计算?什么又是编程?

近几年来,很多人都在谈“写代码”教学。当然,“写代码”跟计算思维不同。这有点像手写或键入一篇文章与写作的关系。您(通常)要手写或打字才能完成一篇文章,但这不是核心的智力活动。OK,那么“写代码”应该怎么教呢?

Wolfram 语言的理念是,一个人应该能够运用计算思维,把人类形成的想法尽可能直接地转换成语言中的代码。在一些小的情况下(它们可以被逐渐变大), 可能只需用英文指定他(她)想要什么。但通常人们就直接用 Wolfram 语言写出。这意味着,在某种程度上我们是在写代码,或者称为编程。

但这其实是一种级别很高的编程,比大多数程序员所习惯的级别要高得多。这正是为什么它现在正被越来越多的人使用,也是为什么把它大规模地应用于教育教学领域更有意义。

但它与“传统的”编程教学有什么联系呢?实际上,迄今为止我们采用过的编程教育只有两种类型:一种大概可以称为”高中版“,另一种是”小学版“。近年来,高中版主要是关于 C++ 和 Java。小学版主要是 Logo 的衍生品,比方说 Scratch。有一点很令我震惊,即使是在美国很顶尖的学校里那些喜欢玩科技的小孩子,他们在学校里所学到的编程知识也是少之又少。

但当他们真的开始学习”编程“时,比方说到了高中,他们会学到什么?通常是大量的语法细节,而顶尖的概念则往往是条件语句、循环和变量。作为一个对计算倾注了大半生心血的人来说,这实在是令人失望。是的,这些概念是低级计算机语言的一部分,与我们现在所广为理解的计算还相去甚远,在一般意义上的计算型思维这个大的概念中,它们充其量是几张幻灯片而已。

重要的是什么?在实践中,最重要的一个概念大概是一切事物 (文本、图像、网络、用户接口,等等等等)都可以表示为计算形式。函数和列表这类概念也很重要。如果一个人很聪明,通用计算 (软件由此产生) 的概念也很重要。但问题是现在所教的不仅不是一般的计算型思维,甚至都不是一般的编程。条件语句、循环和变量是1960年代所出现的第一代实用计算机语言的核心。今天的计算机语言,比如 C++ 和 Java,有了很多更好的方法来管理大量代码,但其基本的计算结构仍然与上世纪60年代的语言非常类似。而孩子们通常只写极少量的代码,事实上这跟那个年代所进行的计算没什么不同(只不过由于致力于大型代码库的机制,可能更复杂一些)。

Wolfram 语言是一门现代化的语言。如果是在1960年代,它不会如此实用:那时的计算机不够大也不够快,也没有维护大型知识库的云端。(凑巧的是,在1960年代初期,LISP 和 APL 等语言已经有了更高水平的、与 Wolfram 语言相似的理念,但那些理念直到几十年后才真正被实际应用。

那么条件语句、循环和变量又如何呢?它们全部存在于 Wolfram 语言中,不过不再是前端和中心概念。比方说,在我的《Wolfram 语言入门》一书中,直到第38章,才开始讨论变量赋值,而在此之前,我已经介绍过在网页上部署基于知识的高级应用程序。

举个例子,比方说我们想要作前10个平方数的表格。在 Wolfram 语言中,这非常简单:

但如果用 C 语言的话,大概得这样:

一个没有编程背景的人可能会问:”这都是些什么东东?” 我们不是直接把想法说出来,而是用一种低层的语言告诉计算机具体做什么。我们告诉它分配内存来存储 n 的整数值。我们告诉它从 n = 1开始,并且连续递增至10。然后我们让计算机输出每一个整数值的平方。全都是些细枝末节。(公平起见,在 Python 或 JavaScript 等比较现代的语言中,有些细节不需再考虑,但在这个例子中,我们仍然需要处理明确的循环及其变量。)

说到这里,关键的一点是,循环、条件语句和变量并不是计算真正要关注的点;它们只是低层语言中具体执行的细节。有人说,当有明确的循环、条件语句和变量时,让孩子们来理解到底怎么回事要容易得多。但据我观察,事实并不是这样。这些年来,有些事情在改变,人们越来越多地在日常生活中接触到计算和计算理念。但到目前为止,要理解计算的概念,讨论循环、条件语句和变量的细节似乎只会让孩子更加困惑。

那还需要学习循环、条件语句和变量吗?当然。它们是计算和计算型思维的有机组成部分。只不过它们不是最重要的,也不是最先需要学习的部分。哦,顺便说一下,如果一个人想要讨论关于图像、网络或其它什么的计算,循环这样的概念根本用不上。

Wolfram 语言的一个重要特征是,在它努力涵盖一般的计算型思维的同时,集成了大量的不同计算范式,有函数式编程,过程化编程,基于列表的编程,符号式编程,还有基于编程的机器学习和范例,等等。所以,当人们学习 Wolfram 语言时,他们能立刻接触到广泛的计算理念,所有的这些理念都方便一致地打包在一起。

但是,如果一个人学会了在 Wolfram 语言中编程,想在C++ 或 Java中进行低层的编程会出现什么情况呢?这种情况我已经目睹了好几次,而且是太有意思了。他们看上去完全掌握了怎样在低层语言中写出好程序,但会不停地对所有要做的事情和所有不工作的情况发出感慨。“噢天啊,我要亲自来分配内存”。 “哇哦,整数的大小得有个限制“。如此种种。

从 Wolfram 语言过渡到低层语言看上去很简单。但反过来则有时会很有挑战性。不得不说,在教小孩子计算型思维时,我经常发现教一个对编程一无所知的孩子往往更容易:他们能快速地掌握概念,不需要忘记把一切变成循环和条件语句等这些想法。

在我开始考虑教小孩子计算型思维和 Wolfram 语言时,我想象的对象是教高中生。但当我的《入门》一书问世,我惊讶地发现很多十一、二岁的孩子也是我的读者。我当前的结论是 Wolfram Programming Lab 等完全适用于11岁或12岁的孩子。

那么更小的孩子呢?嗯,在今天的世界,他们都使用计算机或者智能手机,从小就耳濡目染各种计算活动。也许他们正在制作和编辑视频,也许正在构造游戏组件,所有这类活动都是计算思维的初期形式。

早在1960 年代,一个大胆的实验从 Logo 开始。我听说最初的设想是构造 50 个"微世界",让孩子们可以用计算机来进行试验。第一个是一只在屏幕上四处挪动的海龟,半个世纪之后,它演化的结果与 Scratch (后者是一只橙色的猫,而不是海龟)。令人遗憾的是,另外 49 个微世界根本没有建成。尽管海龟(或猫)挺可爱(并且在那个年代看来是一个非常了不起的想法),与今天人们对计算的理解和经验相比,却远不尽如人意。

尽管如此,很多孩子已经在小学阶段接触到 Scratch 或与之类似的程序开发平台,即便有的一年仅有一次"Hour of Code"(编程一小时)的活动。在过去,人们很明确地认为让小孩子明白他们可以让计算机帮他们实现想法这一点很有意义,但小孩子把计算和计算理念在其它方式的滥用使这一点越来越不重要。而且是的,在现代社会,教小学生们循环和条件语句似乎有点奇怪。

我相信教年轻人计算型思维的理念一定有一些更好的方法—— 充分利用我们现在所掌握的一切技术和自动化。Scratch 这类平台的一个特征是它们的程序都是像搭积木一样组装在一起的,而不必键入。通常在实践中这些程序是在结构上有着良好的线性关系。但积木做了两件事。首先,它们避免了任何明确的语法(相反,只需问"这块积木合适不合适?")。第二,通过在屏幕一侧放上一堆可能的积木块,它们立即记录下什么是可能用上的。

或许更重要的是,这整个设置让人不得不选择一小组积木块的集合,也就是一个微世界。而在完整的 Wolfram 语言中,有超过 5000 个内置函数,要把它们全变成积木块会让人手忙脚乱并且毫无益处。关键是从所有这些可能的函数中选出几个组成(50个?)微世界,每个仅涉及一小组函数,但每个选择都能够作出丰富而有趣的事情。

用我们目前的技术,这些微世界可以轻松地涉及图像计算、自然语言理解或者机器学习,而最重要的是,可以立即与现实世界相联系。而且我深信不疑,通过把这些远远超出 1960 年代的想法纳入进来,我们可以让幼小的孩子们更直接更成功地了解计算思维,并在他们以后深入学习时派上用场。

这一切将如何发生?向孩子(和世界)传授计算思维的过程才刚刚开始。通过 Wolfram 语言与它周围的系统,我认为我们可以找到解决核心技术问题的工具,我对此激动不已。但还要面临很多结构和组织上的其他问题。

比方说,通过写《Wolfram 语言入门》一书,发布 Wolfram Programming Lab,创建 Wolfram Open Cloud,我在尽我的一己之力。但这仅仅是万里长征第一步。需要有针对不同人群的更多书籍和课程,需要组织各种在线和离线社区及活动,需要有向学生传递哪些已经成为可能的途径,还需要各种方式来教教师如何提供帮助。

我们已经作了一些基本的工作,有基于《入门》一书的课件,挑战自己写代码能力和计算思维的 Wolfram Challenges 网站,有为每个学生做项目助力的更加结构化的导师计划,还有可授权组办的 Wolfram 夏令营,等等。其中有一些是 Wolfram Research 的一部分,有些来自 Wolfram Foundation。我们正在考虑倡导更广泛的非盈利行动来支持计算思维教育。我们甚至在考虑创建一所以计算思维为中心的学校— — 不再局限于展示如何实现的至少一种模型。

除了我们所做的所有事情之外,最令我激动的是还有其他人和机构也开始在为之努力,以课内活动、课外活动和暑期活动等形式。这只是全球各地超大规模活动的开始。

我们自己的公司和基金会尚且势单力薄。要向全世界推行计算思维教育,还需要让更多的人和机构参与进来。经过三十年的探索,我们已经有了技术。但现在我们必须以正确的方式将它实际交付给全世界的孩子们。

我认为可以把计算思维成功地教给范围广泛的人群,而无论他们的经济状况如何。因为它如此之新,教育设施优越或者技术实力雄厚的国家和地区并不比其它地方更有优势。

最终,世界上大部分人都将能够进行计算思维,并能与计算机使用代码通信,就像他们现在可以读书和写字一样。但今天,我们只是站在起点上。我很高兴能够对此提供一点技术,作出些许贡献。我期待着我的愿景能够在未来一年左右,以及今后几年中快速进展。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档