几周后,我将在我的大学参加某种“开放日”活动。作为这段时间的一部分,我(和同事一起)被给了一大堆高中生两个小时的时间,以及一个足以容纳所有人的计算机实验室,我必须做一些与他们一起进行的一项或多项活动,以鼓励他们学习计算机科学(理想情况下在我的大学,但总体上也是如此)。我绝对不知道该怎么做,欢迎任何建议。
几周后,我将在我的大学参加某种“开放日”活动。作为这段时间的一部分,我(和同事一起)被给了一大堆高中生两个小时的时间,以及一个足以容纳所有人的计算机实验室,我必须做一些与他们一起进行的一项或多项活动,以鼓励他们学习计算机科学(理想情况下在我的大学,但总体上也是如此)。我绝对不知道该怎么做,欢迎任何建议。
Answers:
查看未插拔的计算机科学。从他们的网站:
CS Unplugged是免费学习活动的集合,这些活动通过使用纸牌,绳子,蜡笔和大量跑来跑去的有趣游戏和拼图来教计算机科学。
这些活动向学生介绍了基本概念,例如二进制数,算法和数据压缩,与我们通常在计算机上看到的干扰和技术细节分开了。
CS Unplugged适用于所有年龄段的人,从小学到老年人,以及来自许多国家和背景的人。Unplugged已在世界各地使用超过15年,用于教室,科学中心,家庭,甚至用于公园的度假活动!
我认识的大多数计算机科学专业的本科生都认为学习编程是他们教育中最痛苦,最令人沮丧的部分。因此,我将远离与编程本身有关的任何事情。正如scphantm所指出的,您可能也没有时间这样做。
您想要的是一个两个小时的练习,可以满足两个目标:
第一个目标与您实际要显示的内容完全无关,并且与成为一名好老师/演讲者还有很多关系。好的教学实践,即让听众保持警惕,让他们分组尝试小事情,每15分钟让他们喘口气,依此类推。
第二个目标有些棘手,我认为在这里最好的方法是解决一个可以用他们目前的知识解释的问题,展示如何以算法描述解决方案,然后展示如何分析该解决方案并得到改善。
一个很好的例子是图形中的最短路径问题,也称为GPS导航系统。无需任何解释。您可以给他们一张小地图,并画出边缘权重/长度和一束蜡笔,以按照您的描述实际执行算法。
然后,您可以开始讨论如何找到最短的路径,依此类推,让他们尝试将其表达为一种算法,等等。然后,描述Dijkstra的算法,让他们为访问的节点,临时的和着色的节点着色。未访问的集。am 您有一个算法!
如果您还有时间,可以继续解释一些细节,即我们认为理所当然的事情,例如在暂定节点集中找到最小值。如果到此为止,您可以显示线性搜索和堆之间的区别,此外,您还可以引入表示法。
说了这么多,这差不多是我想做的。用十英尺的杆子远离整个 vs.讨论。尽管大多数计算机科学家都觉得这很有趣,但大多数高中学生却不会。我从经验得到的这个结论。我认为,关键是从一个他们可以理解或相关的问题开始,然后从那里解决这个问题,而无需太多介绍。ñ P
如果您只有2个小时,那么您将无法完成很多编码工作。那时,仅学习语法会很困难,但是可以做很多事情来代替。
作为建议,请尝试教他们控制流程以及保持具体性的重要性:
作为示例任务,设置一些不同颜色的球的桶,在其他位置放置相应的彩色纸条,并为每个机器人/程序员对配备足够的小桶。任务是使机器人将球装满铲斗,但这样做只能使机器人拿到与特定纸条匹配的球。如果浴缸中不再有这种颜色的球,则机器人必须退回它们的纸条并收集新的纸条。
此任务需要条件分支,循环,错误处理和逐步思考。无论语言或活动如何,程序员都需要擅长的所有事情。
两次运行类似的操作,以便“机器人”和“程序员”可以互换。在这两者之间,就上述思维方式进行一堂小课,然后在第二步中,他们的表现会好得多,最后以编程方面的重大事件作为结束语,包括打败纳粹分子,登月,互联网和您将拥有一个潜在的,敬业的程序员!
我已经培训了许多程序员。如果您只有2个小时,请不要理会他们如何编码。计算机实验室也是不必要的。要从零开始走向世界,您将失去一半的班级,并花2小时中的45小时来处理故障,并且什么也不做。
您可能会更幸运地向他们展示像程序员一样的想法。给他们每个人一纸本和笔,并告诉他们用自己的语言编写一个程序,说明如何从办公桌上拿起手机并打个电话。走遍他们的答案。如果您在代码上遇到了麻烦,可以通过他们的程序,告诉他们如何使它们变得更好,以及如何调整所需的细节。然后请他们用自己的语言编写一个程序,以做其他平凡的事情。穿上裤子,刷牙,开门,随便什么。对那个程序做同样的事情。
让他们尝尝像程序员一样思考的感觉。与您尝试在2小时内教他们Python相比,他们一定能从中得到更多的收益。
您可以尝试爱丽丝。这是3D动画的IDE和API。它具有各种内置对象(兔子,外星人,树木,建筑物等),您可以使用非常高级的方法将它们放置在初始场景中:像walk(north)
(在角色移动时为手臂和腿设置动画)并say("my name is Winky")
可能导致卡通气泡从角色口中冒出来。
它允许您挂接键盘和鼠标事件,以便您可以进行交互操作。
基本的编程语言是Java,但是IDE为您提供了一个图形变体,您可以在其中将部分表达式拖放到编辑器窗口中。(它不会让您创建语法错误。)
我认为您可以通过一个场景预先设置好所有内容,以便没有编程经验的人可以在几个小时内完成一些有趣的事情。
即使在一个玩具或图形语言中进行编码,在一个小时的过程中似乎也牵强。地狱,我不确定我是否可以再次接爱丽丝,并在2小时内做任何值得的事情。也许是一个周末,但不是两个小时。
我建议将CS简化为基本要点:问题解决和分析。将小组分成小组。花10分钟描述一些高级计算问题。这些应该是容易解决的问题,可以轻松地向没有数学或CS背景的人们解释。示例包括:
再花10分钟进行进一步讨论,并解释任务。每个小组都分配有一个问题,他们将针对这些问题进行头脑风暴。团队将有一个半小时的时间来共同解决他们分配的问题的一个或多个解决方案。然后,花一个小时浏览整个小组的解决方案,让孩子们弄清楚他们是否工作,是否有更快/更好的方法来解决问题,等等。
如果孩子们没有找到正确/最优的解决方案,那就可以了。但是,不要仅仅给出答案-这绝对是至关重要的。孩子们不再做STEM的原因是,教育者给孩子们的印象是,一切都已经搞清楚了。需要非常成熟的辅导员,让孩子们自己解决这些问题,并成功或失败。获得正确答案不是重点。重点是给孩子们带来有趣的问题,并向孩子们展示计算机科学的意义:解决问题以及评估解决方案的正确性和效率。让孩子们提出自己的答案会给他们一种主人翁感,并使他们感到参与。
当然,如果孩子们问他们是否得到正确/良好/最知名的答案,请告诉他们真相。但是,不要仅仅放弃答案,除非它们是通过讨论学生的解决方案而有机地提出来的。总结一下:
我现在17岁,我16岁那年开始编程。我要讲故事,而不是提一些建议:我对编程的兴趣始于我看着一个计算机技术人员,我打电话给我的注册表和命令提示符(即使他想用500美元来修复我的BSOD,但我没有付款,我还是自己修复了。)于是,我用Google搜索了“命令提示符语言”,发现那里有一个叫做“源代码”的东西,它允许您进行编程。那时我还不知道c ++是什么,我什至不认为我从未听说过它。因此,我进入了cpp.com(非常糟糕的教程,您将学习坏的和过时的做法)并开始学习基础知识。我的脑子发疯了,我实际上得知我感染了引起我的问题的病毒是用c ++编写的,这使我更加感兴趣。后来我开始阅读,学习汇编语言和其他高级语言。我最初是想学习恶意软件和图形编程的,后来我做到了。
乐高头脑风暴是一个好主意。如果您不想走长途而使用一种主要语言,那么它将附带一种您可以使用的块样式编程语言。我在30到40分钟的时间内就弄明白了这门语言,当您考虑它时,所有内容都会排列在一起
您可以快速开发一个应用程序并将其展示出来,并与他们讨论应用程序开发可能带来的收益。
我的一些最爱
产生分形。它们与深层数学和计算机图形学有很强的联系,并且自然也适合并行处理。它说明了复杂性和紧急行为,尤其是当您缩放到任意比例时,并且与科学和自然现象有很强的联系。编写在多台计算机上运行的并行分形代码并不难。一个实验是让每台计算机显示它处理的随机行(例如,“从”计算机处理队列中的行),然后由一台中央计算机显示组合的结果。
乐高机器人(或其他机器人工具包,例如邮票)。头脑风暴是一种玩具,但它可以是非常先进的玩具,可以切实地演示抽象概念。可以在其上运行的软件可能非常复杂,并且它们可能具有复杂的“感知-思考-行动”循环/算法。有很多关于建筑的好书。同样令人印象深刻的是Rubiks立方体求解器,最近打破了世界纪录。
raspberry pi是一个新的廉价平台,受到了很多关注和使用。它可以用于演示linux编程,机器人技术等,并具有HD输出等。请参见例如带有Lego机架的Southhampton 树莓派超级计算机。
另一个答案中提到的徽标是古老的经典。另一个较新的角度是游戏编程,例如使用一种新的新兴流行语言Scratch(由MIT发明)。它可以教授许多自然/高级CS主题。
这是另一个角度。在科学认识的前沿,计算机科学中有许多有趣的开放性问题或新兴技术,它们可以激发人们的好奇心/奇迹,即探索附近的地表隐身。如果您提出问题,然后让班级参加有关解决方案后果的讨论,则可能会引起极大的兴趣/启发。[因为您提到了计算机实验室的可用性,所以也有可能创造性地提出一些与这些领域有关的动手计算机练习。]
这可能会带来科幻感觉,但在CS中,是其他领域所无法比拟的,它将在短时间内将曾经科幻化的东西变成现实。它们也可能引起争议且及时,并与当今的头条新闻联系在一起,学生可以开始理解CS在我们的世界/社会中如何普遍存在,以及在广泛解释时它的重要性。这里有一些大的:
DNA到蛋白质的折叠问题。有没有一种算法可以准确地计算出来?
人工智能。可能吗?是否涉及道德?
机器人技术具有各种关键的新兴领域。例如自动驾驶/驾驶。它在不久的将来。这将如何影响社会?不久前DARPA竞赛的视频令人印象深刻。库兹韦尔的著作涉及很多东西。无人机是一个复杂的话题,很少公开讨论,并且将在国内越来越多地使用。该火星车是非凡的技术和有惊人的故事背后,比如系统是如何必须调试远程interplanetarily时,他们失败了。
最近,新闻中大量使用基于IT的监视系统来检测犯罪/恐怖主义。
摩尔定律。它将持续多久?它已经多少影响了社会/人类?
量子计算机。他们有可能吗?他们会更快吗?它们是低成本的还是总是不灵活的?Dwave是一个丰富多彩的案例研究,Aaronson撰写了一篇很棒的SciAm文章,等等
Google Pagerank算法是现代计算机科学数十亿美元的奇迹之一。会延长吗?垃圾邮件过滤如何工作?该公司似乎正朝着分析图像等方向发展。
算法/高频交易现在可以移动大量交易量/价值。是好是坏?它在增加/减少吗?将来会受到监管吗?涉及哪种计算军备竞赛?
超级计算机规模庞大,可以解决令人惊讶的问题,而且规模还会越来越大。有限制吗?他们将计算什么以及将来将计算什么?有点相关的大数据和数据挖掘。
我有一个主张
我们一直在与高中生一起举办小型研讨会,内容涉及扫雷。该研讨会大致如下:
让我们玩一下游戏(最了解它)。
我们刚刚做了什么?我们试图解决的问题是什么?我们可以制定一般规则吗?
这通常需要一段时间。孩子们不习惯用输入和输出来表达问题,以免解决它们的一般规则。那些曾经编程的人会很感激。引用“意大利面条代码”可能会有所帮助。尽管如此,规则在大多数时间都是简单的,一次只考虑一个单元。
展示有关规则的问题。
此时,您想引入Minesweeper模拟器。拜耳(Bayer),斯奈德(Snyder)和乔伊(Choiery)创作的作品并不完美,但可以展示精心设计的场景。
改进规则集以涵盖更多方案。
这通常会导致学生一起研究越来越多的单元格。您还可以将它们推向“解决所有问题”的方法,例如将现有信息表示为线性方程组-如果尝试以数学术语表示可用信息,则会出现这种情况。学生们已经知道如何解决这样的系统!
注意限制。
首先,有些方案没有(确定性)解决方案。此外,我们可以将蛮力与我们制定的策略进行对比。我们可以权衡速度与功率吗?如果出现方程组方法,请注意,我们只能在实数上有效地解决此问题,但是我们需要二进制答案。构建导致大量运行时的场景并不难(我们使用计算机代数进行说明)。
根据不同的小组,这种方法可以自然地涵盖计算机科学的多个原理:定义问题,描述通用算法,迭代问题解决以及可计算性和复杂性问题都可以涉及。
学生的反馈总体上是积极的。他们感到参与并表达了对概念的兴趣。重要的是让他们完成大部分工作,仅通过提出针对性的问题来小心地将他们按期望的方向推开。
您有很多事情要做...但是一件事情似乎太过“钱”了,于是提出“ P≠NP”问题和七千年奖,当我在中学时,尽管我我唯一理解的不是符号:有很大的收获和问题!其他事物也会提出数学和计算机科学的联系,如:求解方程,使用计算机检查解。
我建议的其他事情是介绍艾伦·图灵(Alan Turing)“计算机科学之父”并讲述他的故事。我建议的最后一件事是零知识证明和游戏“瓦尔多在哪里?” 和玩耍而没有作弊,加密和网络攻击。