高中夏令营:为期两周的计算思维之路

夏令营成功了!

从今年的调查结果来看,在两周的时间里,向高中生教授计算思维能走多远沃尔夫勒姆高中夏令营答案是:非常远。

我越来越意识到现在是一个巨大而独特的机会教授计算思维我们在世界各地建立了一整套技术Wolfram语言.但是,当看到这种方法在真正的高中生身上效果如此之好,以及他们在短短两周内完成的各种项目时,我还是很兴奋的。

来自2017 Wolfram夏令营的项目

我们的高中夏令营已经进行了5年了(还有我们的3周暑期学校对于经验更丰富的学生(15年)。每次我们去露营的时候,我们都会想出更多的办法。我认为,到现在为止,我们真的做到了,我们甚至能够让以前从未真正接触过计算的学生,在夏令营结束时,让他们进行认真的计算思考,通过编写有时令人惊讶的复杂Wolfram语言代码,流利地实现他们的想法(以及制作书写良好的笔记本和“计算论文”,交流他们所做的事情)。

在未来的一年里,我们将大幅扩大我们的业务计算思维活动,并努力为尽可能多的学生带来类似夏令营的体验。但是夏令营提供了关于什么是可能的有趣和重要的数据。

营地的设置

那么夏令营到底是怎么运作的呢?我们今年有40个名额,有很多人申请。一些人是被家长、老师或之前参加过夏令营的人介绍过来的。但有很大一部分人刚刚在Wolfram | Alpha侧边栏。有来自美国各地和海外各类学校的学生(尽管我们仍然需要找出如何从服务不足的人群中获得更多申请人)。我们的团队进行了面试来挑选最终的学生,我认为他们挑选的学生非常棒。

Wolfram夏令营的学生

学生们过去的经历是多种多样的。有些人已经是有成就的程序员(几乎都是自学成才的)。其他人上过一两节CS课。但有相当一部分人以前从未真正做过任何计算工作,尽管他们在各种STEM领域(如数学)往往相当先进。但是,几乎不管背景如何,对我来说,计算思维的核心概念对这么多学生来说是多么新鲜,这让我感到震惊。

一个人是如何把一个想法或一个问题,几乎所有的东西,并找到一种方法,把它表述成计算机?公平地说,只是在最近,随着所有的知识和自动化,我们已经能够构建到Wolfram语言,它成为现实,让孩子们真正地做这些事情。所以,在他们的学校或其他地方,我们的学生以前没有接触过这些东西也就不足为奇了。但现在,这是可能的——这意味着有一个伟大的新机会,认真地教孩子们计算思维,并使他们追求范围惊人的方向,计算思维正在打开。

顺便说一下,区分“计算思维”和“直接编码”是很重要的。计算思维是关于用计算的术语来构造事物。编码是告诉计算机做什么的实际机制。我们使用Wolfram语言的一个伟大目标是尽可能地自动化编码过程,这样人们就可以专注于纯粹的计算思维。当一个人使用较低级的语言,如c++和Java时,他别无选择,只能参与编码的详细机制。但是有了Wolfram语言,令人兴奋的事情是可以教授纯高层次的计算思维,而不必被迫处理底层的编码机制。

这在实践中意味着什么?我认为这对学生来说是非常有力量的:只要他们“得到”一个概念,他们可以立即应用它,并用它做真实的事情。在夏令营中,我们非常清楚地看到,即使是以前从未编写过程序的学生,也能够用Wolfram语言表达出人意料的复杂计算思想。有时,看起来像是学过低级语言的学生事实上,我们处于不利地位。虽然对我来说,几次目睹“啊哈”是很有趣的当一个学生意识到他们不必像所教的那样把他们的计算分解成微小的步骤,他们可以把他们所写的一些大代码变成一行简单的代码,他们可以立即理解和扩展。

建议项目

夏令营计划包括每天几个小时的讲座和研讨会,旨在让学生掌握计算思维以及如何用Wolfram语言表达。但该计划的真正核心是每个学生都在做一个独立的、原创的计算思维项目。

是的,这是一件很难安排的事情。但在过去的几年里,我们一直在做我们的暑期学校和夏令营,我们已经开发出了一种非常成功的方式。它有很多片段,细节取决于学生的水平。但现在让我们来谈谈高中生和今年的夏令营。

就在夏令营开始之前,我们(实际上是我)提出了一个大约70个潜在项目的清单。有些是非常具体的,有些是非常开放的,还有一些更像“元项目”(例如,在Wolfram数据存储库和分析)。有些项目在几年前就已经以某种形式完成了。但许多项目才刚刚成为可能,特别是今年,由于我们最近的所有机器学习的进展

2017年夏令营项目建议

我试图为这些项目设定一系列名义上的难度等级。我之所以说“名义上”,是因为即使一个项目原则上可以用一种简单的方式完成,也可以用一种更精细、更复杂的方式完成。我想要的项目范围从定义非常明确和精确(实现这种特定类型的精确算法),到涉及争论数据或机器学习培训的项目,到基本自由形式的项目,以及学生定义目标的项目。

这个列表中的许多项目对高中生来说可能是有挑战性的。但我的计算(实际上进行得很好)是,以我们现在拥有的技术,所有这些都在我们的范围内。

将这些项目与我为今年的暑期学校提出的建议进行比较也许是有趣的。暑期学校面向经验丰富的学生,通常是大学、研究生院或博士后级别的学生。因此,我能够提出需要更深入的数学或软件工程知识的项目,或者更大的项目,以更高的门槛实现合理水平的成功。

2017暑期学校的项目建议

将项目与学生配对

在学生开始挑选项目之前,重要的是他们要了解一个完成的项目应该是什么样子,以及在做这个项目时涉及到什么。因此,在训练营的一开始,教员们就检查了以前训练营的项目,并讨论了项目的“输出”应该是什么。也许这会是一场灾难活跃的网站; 也许是互动演示;也许会是一篇研究论文。做一个笔记本来描述这个项目和它的结果是可能的,并为它写一篇文章Wolfram社区

在讨论了项目的总体思路,并给出了以前项目的例子后,指导者对今年的建议列表做了一个快速调查,填写了一些想象中的项目实际是什么细节。在这之后,学生们被要求从我们的列表中选出他们最喜欢的三个项目,然后创造两个他们自己的潜在项目。

为每个学生找到合适的项目总是一个有趣的挑战,这也是我个人在过去几年在我们的夏令营中参与的事情。(是的,我在组织专业项目和研究项目以及寻找最佳人选方面有几十年的经验,这对我很有帮助。)

我们进行了几次迭代,但以下是我们发现的有效方法。首先,我们随机地把学生分成十几个小组。然后我们与每个小组会面,在房间里四处走动,询问每个学生一些关于他们自己的情况,他们的兴趣和目标——以及他们的项目清单。

在我们完成每个小组的工作后,我们单独见面,并试图为每个学生提出一个项目。有时它会直接从我们的清单上的项目之一。有时是学生自己提出的项目。有时是一些创造性的组合,甚至是一些完全不同的东西基于他们说他们感兴趣的东西。

在我们认为我们想出了一个好项目之后,下一步就是单独与每个学生见面,并向他们提出建议。很令人满意的是,很多时候,学生们似乎对我们最后提出的项目很感兴趣。但有时我们会发现某个项目并不适合我们,然后我们会实时修改它,但更常见的情况是,我们会在稍后再回过头来提出不同的建议。

一旦项目设置好,我们会考虑学生和项目的主题,为每个学生分配合适的导师。然后一切就开始了。我们有各种各样的检查点,比如学生必须写下他们的项目描述,并将其张贴在内部夏令营网站上。

我个人并没有参与项目的实际执行(尽管我有机会检查了一些项目)。对我来说,在集中营的最后看到到底发生了什么是非常有趣的。值得一提的是,我们的方案是导师可以对项目提出建议,但项目中的所有最终代码都应该由学生创建。如果项目的一个版本太难了,就由导师来简化它。所以不管最终的项目是什么,它都是学生的作品。

很多时候,夏令营将是学生们第一次完成原创项目。这可能看起来令人生畏。但我认为,我们提供了这么多其他项目的例子,营地的其他人也在做一个项目,这真的很有帮助。最终,经历从一个项目的想法到一个真正的、完成的项目的整个过程是令人难以置信的教育——似乎对我们的许多学生都有很大的影响。

一些案例研究

这就是理论。今年的夏令营到底发生了什么?下面是学生们做的所有项目,还有他们给的题目:

2017年夏令营的最终项目

这是一个非常有趣、令人印象深刻和多样化的榜单。但让我半随机地挑几个来详细讨论一下。将这些作为高中生在夏令营中使用Wolfram语言在几周内完成的“案例研究”。

让飞机绕山飞行

我们夏令营的一个年轻人有很丰富的数学背景,他告诉我他对飞机和飞行感兴趣,并设计了自己的遥控飞机。我开始考虑各种各样的无人机调查项目。但他没有带无人机——我们必须想出一个项目,实际上可以在几周内完成。所以我最后提出了以下建议:给定地球上的两个点,找出一架飞机如何从一个点飞到另一个点的最短路径,而不需要超过一定的高度。(是的,这种方法的小规模版本也适用于无人机测量等事情。)

下面是这个学生是如何完成这个项目的。首先,他意识到,人们可以把可能的飞行路径想象成图上的边,这些边的节点分布在地球上的网格上。然后他使用了内置的地理高程数据删除无法访问的节点,因为该节点的标高高于临界值。然后他就用FindShortestPath在图形中从开始到结束查找最短路径。

我认为这是一个非常聪明的解决方案。这是一个很好的计算思维,认识到路径元素可以被认为是一个删除节点的图上的边。不用说,还有一些额外的细节,以得到一个真正好的结果。首先,学生在网格上添加对角线连接,使用适当的权重仍然可以得到正确的最短路径计算。然后他通过连续合并线段来细化路径,以更好地逼近大圆路径,在每一步使用计算几何检查路径是否经过一个“太高”的区域。

寻找从洛杉矶到纽约的最短飞行路线,海拔7000英尺

发现猕猴桃调用

你永远不知道人们会带什么来夏令营。一位来自新西兰的年轻人来到我们的营地,他在屋外隔夜录制了一些录音,其中偶尔会有(听起来很奇怪)的叫声,显然是一只或多只猕猴桃鸟的叫声。这个年轻人想做的是自动“猕猴桃语音识别”,找到叫声,也许还能区分不同的鸟类。

我说,我认为这不是一个特别容易的项目,但无论如何他应该尝试一下。看看发生了什么,很明显这个项目开始的很好。很容易从他的音频中找出所有不只是沉默的间隔。但这将所有东西,包括几维鸟通话,分割成很小的块。他通过下面这段有趣的代码解决了这个问题,这段代码使用模式匹配来组合符号音频对象:

Wolfram语言代码的kiwi-call识别项目

在这一点上,它可能只是工作使用无监督机器学习和FeatureSpacePlot区分几维鸟和非几维鸟的声音片段。但机器学习仍然是一个碰运气的行业——在这个案例中,它并没有大获成功。学生做了什么?他在笔记本上为自己设计了一个小巧轻便的用户界面,然后开始手动对声音片段进行分类。(许多老师评论说,幸运的是他带了耳机……)

在对200个片段进行分类后,他使用了分类自动分类所有其他剪辑。他对数据应用进行了各种转换信号处理,产生一个光谱图等。最后,他让他的几维鸟分类器的准确率达到了82%:这足以让他第一次合理地找到几维鸟的叫声,并进入计算鸟类学的道路。

行走和跑步的生物力学

一名年轻女子说,她最近脚上应力性骨折,她被告知这与她跑步时施加的力量有关。她问她是否可以做一个计算模型来描述正在发生的事情。我不得不说,我对能否在两周内做到这一点持悲观态度——我建议做一个我认为更容易管理的项目,包括研究不同数量腿的生物可能的步态(走路、小跑等)。但我鼓励她花一点时间看看她是否能完成她最初的项目——我建议,如果她真的到了建模骨骼的阶段,她可以使用我们的内置骨骼解剖数据

第二天我知道已经是夏令营结束的前一天了,当我看到这些项目的进展时,我真的很惊讶!她找到了一篇论文,里面有一个合适的模型,她理解了它,并实施了它,现在她有了一个交互式的演示,展示了行走或跑步时脚上的力。她甚至用解剖数据来展示正在发生的事情的3D图像。

她解释说,当一个人走路时,力有两个峰值,但当一个人跑步时,力只有一个峰值。当我为自己的日常步行方案设置互动演示时,我发现(她说这很典型),当我走路时,脚上施加的最大力量约为体重的两倍。

行走和跑步的生物力学

香蕉成熟度分级器

一开始我不知道他是不是认真的,但一个年轻人坚持说他想用机器学习来判断水果什么时候熟。碰巧的是,我在a一段时间前的博客文章讨论机器学习在智能合约中的应用。所以我说,“当然,你为什么不试试呢?”。夏令营期间,我曾几次看到这个学生,奇怪的是,他总是拿着一根香蕉。在夏令营结束时,我发现香蕉是他项目的关键元素。

首先,他在网上搜索香蕉的图片,描述为“未熟”、“过熟”等,然后使用FeatureSpacePlot

香蕉分类员:它是香蕉吗?如果是,是熟的吗?

然后他意识到,他可以通过先观察香蕉图像的像素在颜色空间中的位置来获得更多的定量。结果是,他实际上能够定义一个“香蕉成熟度等级”,正如他所描述的那样:“给处于腐烂边缘的香蕉赋值1。”给刚从树上摘下来的绿色香蕉赋0值。给‘完美’香蕉的评分为0.5。”这是一个很好的例子,说明了日常的和定性的东西是如何被计算出来的。

对于他的项目,这个学生制作了一个“香蕉分类器”应用程序,他通过Wolfram云部署了这个应用程序。他甚至有一个真正的香蕉来测试它!

香蕉分类器:香蕉图像中成熟度的feature respaceplot网络

许多国际化

我建议的一个项目是实施“国际或历史数字系统”——类似于罗马数字,但适用于不同的文化和时代。一位精通韩语的年轻女子说她想做这个项目,从韩语开始。

碰巧的是,我们的内在IntegerName函数转换为传统的韩国数字。所以她给自己定下了把韩语数字转换成韩语的任务。这是一个有趣的算法练习,她用一些优美的代码解决了它。

Wolfram语言代码翻译韩国数字到印度阿拉伯

到那时,她的运气很好,所以她决定继续使用缅甸语和泰国语。她试图找出缅甸网络来源才发现他们是不一致的…结果最后她接触的人有一个教育对缅甸数字视频,并最终先入为主地问题,编写代码来表示它,然后纠正维基百科页面关于缅甸数字。总之,这是一个真实世界算法管理的好例子。哦,她把转换设置为Wolfram语言网络上的微型站点

那是个玩笑吗?

机器学习能分辨出有趣的东西吗?参加夏令营的一个年轻人想知道答案。所以在他的项目中,他用了我们的Reddit API连接从reddit的“笑话”版块提取笑话,(大概)从AskReddit版块提取非笑话。这需要一些清理和数据处理,但之后他能够直接将训练数据输入分类函数,并生成一个分类器,然后根据该分类器构建网站

在“Reddit式幽默”之外,要知道它的效果有多好有点难——但他在夏令营的轶事研究表明,成功率约为90%。

“这是一个笑话吗?”分类器评估一个问题和答案有多有趣

生成和检查校验和

不同的项目包含不同的挑战。有时候最大的挑战就是足够精确地定义项目。其他时候是获取或清理所需的数据。还有一些时候,它是为了找到一种方法来解释大量的输出。还有一些时候,是为了看看某些特定的想法能有多完美地实现。

一个在夏令营学习数学的年轻女性从我的清单中选择了“执行校验和算法”。这样的算法(用于社会安全号码、信用卡号码等)定义得非常精确。但是在Wolfram语言中如何简单而优雅地实现它们呢?这是一个很好的计算思维练习,需要真正理解算法和语言。对我来说,能够立即从这位年轻女士的代码中读出这些校验和算法是如何工作的,这很好……

Wolfram语言中的校验和算法

四维在宇宙魔方上绘图

如何在4D中绘制函数?我的清单上有一个关于这方面的项目,尽管我不得不承认我还没有真正弄明白应该如何做。但是,幸运的是,夏令营里的一位年轻人很想尝试一下。他将计算思维和数学思维有趣地结合在一起,创造了ParametricPlot4D然后做了一堆数学计算,想办法用两种有用的方法来渲染结果:正交投影和立体投影。一个操作使结果互动-他们看起来相当整洁…

绘制镶嵌线

州一级死亡率

除了我的明确的项目建议列表之外,我还有一个“元建议”:取任何数据集,例如从新的Wolfram数据存储库,并尝试分析和理解它。一个学生拿了一个关于陨石撞击的数据集;另一个是关于非洲最近爆发的埃博拉疫情。一位年轻女士说她对精算科学感兴趣,所以我建议她研究一些精算的典型数据:死亡率数据。

我建议她可以看看(名字有点可怕)死亡主文件。我不知道她能坚持多久。但在训练营结束时,我发现她已经处理了9000万条记录,并成功地将它们缩减为25个不同州的总生存曲线,并对结果进行了交互式演示。(例如,让我得出结论,我目前在马萨诸塞州活到100岁的概率比在印第安纳州高28%。)

印第安纳州和马萨诸塞州的总生存曲线

“ocr识别普通的瓷砖

每年当我为夏令营列出项目清单时,我都想知道是否有我特别喜欢的项目。我的目标实际上是避免这种情况的发生,并尽可能使项目的兴趣分布保持一致。但今年,“用机器学习识别多面体”(Use Machine Learning to Identify Polyhedra)成了小热门。结果是,在我们和一个学生谈话之前,他就已经开始做这个项目了——尽管那个时候这个项目已经被分配给别人了。

但实际上“复苏”比最初的要好。因为我们找到了一个非常适合学生的非常好的替代项目。该项目是从一本书中拍摄规则瓷砖的图像,并推导出它们的计算表示,例如,适合LatticeData

这名学生提出了一种相当复杂的方法,主要基于图像处理,但加入了一些计算几何、组合学甚至一些聚类分析。首先,他使用相当精细的图像处理来识别瓦片中的基本单元。然后他弄清楚了这个单元是如何组成最后的瓦片的。它最终有102行相当密集的算法代码,但结果是一个相当健壮的“平铺OCR”系统,他也将其部署在了网络上。

分析规则平铺

在卫星图像中寻找建筑物

在我的清单中,我有一个项目“从卫星图像识别建筑物”。一些学生认为这听起来很有趣,但当我进一步思考时,我开始担心这可能真的很难。然而,我们的一个学生是一个有能力的年轻人,他似乎已经对机器学习有了一定的了解。所以我鼓励他试一试。他最终做了一份令人印象深刻的工作。

他首先通过比较卫星图像和标记建筑物的街道地图来获取训练数据(而且,方便的是,从即将发布的Wolfram语言版本开始,不仅有街道地图,还有卫星图像):

通过比较卫星图像和街道地图来识别建筑物

然后,他使用NetChain建立一个神经网络(基于经典的LeNet网络,但进行了修改)。然后他开始尝试将图像的某些部分划分为“建筑”或“非建筑”。

对图像部分是否包含建筑物进行分类

结果一点也不坏。但到目前为止,他们只回答了一个问题:“那个广场上有建筑吗?”,而不是“哪里有一座建筑?”于是,在一个很好的计算思维中,这个学生提出了一个更进一步的想法:在图像上画一个窗口,每一步都估计建筑和不建筑的可能性。结果是一个非常精确的建筑热点图。

在图像中显示建筑位置的热图

这对任何人来说都是一个很好的机器学习结果。但作为一个高中生在两周内完成的事情,我认为这真的令人印象深刻。这是另一个很好的例子,说明在我们的教育水平上Wolfram语言技术栈

夏令营之外

好的,我们的夏令营很成功,幸运的是,来自it的学生现在成功地“启动”成为独立的计算思考者。(就我而言,测试是,当他们在教育或生活中遇到问题时,他们是否会习惯性地转向计算思维,只是“编写一个程序来解决问题”。我希望他们中的许多人现在会这样做。顺便说一句,他们立即拥有了“可销售的技能”-比如能够做各种与数据科学相关的事情。)

但是,我们如何扩大夏令营所取得的成绩呢?嗯,我们有一个完整的计算思维活动我们一直在设计这样做。我们会在接下来的一段时间里推出不同的部分,但其中一个方面是做其他的营地使别人也参加夏令营。

我们现在已经有了一份如何“做一个营地”的操作手册。但我只想说,它的核心是拥有精通Wolfram语言的教师(例如,达到我们认证教师计划的水平),能够接触到一群优秀的学生,并使用合适的场所。两周似乎是一个不错的长度,尽管更长一点也可以。(对于没有工作经验的学生来说,短一些的篇幅可能不足以让他们完成真正的项目。)

我们的夏令营是为高中生(主要是15到17岁的学生)而设的。我认为也有可能为高年级中学生(可能是12岁和13岁)举办一次成功的夏令营。当然,我们长期开办的暑期学校为年龄较大的学生提供了一个非常成功的模式。

除了营地,我们已经有一段时间了辅导计划我们将精简和扩大这些项目,帮助学生从事更长期的项目。我们也在计划各种各样的活动和场所,让学生们展示他们的计算思维工作。

但就目前而言,看到两周内所取得的成就是令人兴奋的今年的夏令营是的,有了我们现在拥有的技术,高中生真的可以进行认真的计算思考,这不仅能让他们立即就业,而且还能定位于我认为未来几十年最有趣的职业方向。

Baidu