为了使他们对计算机科学产生兴趣,我应该如何应对一堆16-17岁的年轻人?


40

几周后,我将在我的大学参加某种“开放日”活动。作为这段时间的一部分,我(和同事一起)被给了一大堆高中生两个小时的时间,以及一个足以容纳所有人的计算机实验室,我必须做一些与他们一起进行的一项或多项活动,以鼓励他们学习计算机科学(理想情况下在我的大学,但总体上也是如此)。我绝对不知道该怎么做,欢迎任何建议。


我既不是老师,也不是专家,但是我建议您教他们如何编写一个小型益智游戏(选择一种概括性为NP完全的益智游戏),内容包括:水平生成,解决方案检查,自动解决方案查找:- )
2013年

1
我喜欢2008年英国皇家学会的圣诞节讲座。您可能想尝试类似的活动/演示。
melhosseiny 2013年

Answers:


21
  • 您可以让它们使用无上下文语法来绘制图片。上下文无关的艺术这也适用于以前从未编程过的人员,并可以扩展为经验丰富的程序员。基本语言很容易解释,可能需要半个小时。
  • 使用Turtle图形学习有关几何的知识也应该很好。徽标是为儿童设计的,因此高中生应该没有问题。在YouTube上有关于儿童使用徽标的精彩视频
  • 如果您可以使用MindStorms机器人,那么对它们进行编程会很有趣。
  • 在各种各样的编程游戏中,您可以对机器人进行编程,使其相互抗争,或者对试图在虚拟机中相互覆盖的汇编程序进行编程。维基百科上的话题相关的问题计算器
  • 您还可以考虑某种硬件项目。例如,根据收件箱中未读电子邮件的数量,使微控制器使LED闪烁。
  • 让他们实施不同的迷宫生成算法,尝试提出使迷宫“对人类不利”的标准。如果时间允许,可以扩展算法,不仅包括走廊,还包括房间。
  • 购买几个Arduino和LED。让他们对眨眼灯进行编程。

1
您可能希望将可汗学院的计算机编程教程的链接添加到列表中:这是对以上内容的一种非常酷/交互的添加。例如:khanacademy.org/cs/intro-to-animation/830742281
博士

CFG也是+1-可以尝试并应用的相同概念的另一个版本是尝试使用迭代功能系统绘制灌木丛;让它们从一个矩形开始,设置更多的矩形,然后将第一个矩形(包括所有子矩形)的“内容”重复到每个子矩形中。您可以设置数字版本以进行比较。
史蒂文·斯塔德尼基

13

查看未插拔的计算机科学。从他们的网站:

CS Unplugged是免费学习活动的集合,这些活动通过使用纸牌,绳子,蜡笔和大量跑来跑去的有趣游戏和拼图来教计算机科学。

这些活动向学生介绍了基本概念,例如二进制数算法数据压缩,与我们通常在计算机上看到的干扰和技术细节分开了。

CS Unplugged适用于所有年龄段的人,从小学到老年人,以及来自许多国家和背景的人。Unplugged已在世界各地使用超过15年,用于教室,科学中心,家庭,甚至用于公园的度假活动!


1
这是一个很好的建议,但我怀疑OP希望使用某种实际上已被搁置的计算机实验室。
安德拉斯·萨拉蒙

有效点。对于不懂编程的人应该有一个robocode项目。
2013年

11

我认识的大多数计算机科学专业的本科生都认为学习编程是他们教育中最痛苦,最令人沮丧的部分。因此,我将远离与编程本身有关的任何事情。正如scphantm所指出的,您可能也没有时间这样做。

您想要的是一个两个小时的练习,可以满足两个目标:

  • 足以让高中毕业生对两个小时保持足够的兴趣,
  • 它将使他们了解什么是计算机科学,并希望使他们对此感兴趣。

第一个目标与您实际要显示的内容完全无关,并且与成为一名好老师/演讲者还有很多关系。好的教学实践,即让听众保持警惕,让他们分组尝试小事情,每15分钟让他们喘口气,依此类推。

第二个目标有些棘手,我认为在这里最好的方法是解决一个可以用他们目前的知识解释的问题,展示如何以算法描述解决方案,然后展示如何分析该解决方案并得到改善。

一个很好的例子是图形中的最短路径问题,也称为GPS导航系统。无需任何解释。您可以给他们一张小地图,并画出边缘权重/长度和一束蜡笔,以按照您的描述实际执行算法。

然后,您可以开始讨论如何找到最短的路径,依此类推,让他们尝试将其表达为一种算法,等等。然后,描述Dijkstra的算法,让他们为访问的节点,临时的和着色的节点着色。未访问的集。am 您有一个算法!

如果您还有时间,可以继续解释一些细节,即我们认为理所当然的事情,例如在暂定节点集中找到最小值。如果到此为止,您可以显示线性搜索和堆之间的区别,此外,您还可以引入表示法。O

说了这么多,这差不多是我想做的。用十英尺的杆子远离整个 vs.讨论。尽管大多数计算机科学家都觉得这很有趣,但大多数高中学生却不会。我从经验得到的这个结论。我认为,关键是从一个他们可以理解或相关的问题开始,然后从那里解决这个问题,而无需太多介绍。ñ PPNP


9

如果您只有2个小时,那么您将无法完成很多编码工作。那时,仅学习语法会很困难,但是可以做很多事情来代替。

作为建议,请尝试教他们控制流程以及保持具体性的重要性:

  1. 将课程分为2个类别,即“机器人”和其他“程序员”。
  2. 提出一个合适的挑战,需要一些简单的逻辑,循环等。-下面是一个示例。
  3. 让“程序员”写出给“机器人”的指令列表
  4. 让“机器人”执行指令,但让“机器人”知道,如果指令令人困惑,它们将被停止,出错或以其他方式执行,直到“程序员”停止并调试它们为止。保证,如果有机会玩,一个高中生会。

作为示例任务,设置一些不同颜色的球的桶,在其他位置放置相应的彩色纸条,并为每个机器人/程序员对配备足够的小桶。任务是使机器人将球装满铲斗,但这样做只能使机器人拿到与特定纸条匹配的球。如果浴缸中不再有这种颜色的球,则机器人必须退回它们的纸条并收集新的纸条。

此任务需要条件分支,循环,错误处理和逐步思考。无论语言或活动如何,程序员都需要擅长的所有事情。

两次运行类似的操作,以便“机器人”和“程序员”可以互换。在这两者之间,就上述思维方式进行一堂小课,然后在第二步中,他们的表现会好得多,最后以编程方面的重大事件作为结束语,包括打败纳粹分子,登月,互联网和您将拥有一个潜在的,敬业的程序员!


1
我为什么不能给它+10?这是一个好主意。
Xynariz 2013年

@Xynariz谢谢!我已经在非常小的小组中做过几次,并且通常最终会变得既有趣又令人沮丧-沮丧的原因是行为不当的“机器人”,而不是孩子们还不理解的计算机。

有时人们似乎并不了解计算机非常,非常擅长于完全按照您告诉他们的方式进行操作。仅此而已。甚至还有关于此的
Cyber​​Chase

7

我已经培训了许多程序员。如果您只有2个小时,请不要理会他们如何编码。计算机实验室也是不必要的。要从零开始走向世界,您将失去一半的班级,并花2小时中的45小时来处理故障,并且什么也不做。

您可能会更幸运地向他们展示像程序员一样的想法。给他们每个人一纸本和笔,并告诉他们用自己的语言编写一个程序,说明如何从办公桌上拿起手机并打个电话。走遍他们的答案。如果您在代码上遇到了麻烦,可以通过他们的程序,告诉他们如何使它们变得更好,以及如何调整所需的细节。然后请他们用自己的语言编写一个程序,以做其他平凡的事情。穿上裤子,刷牙,开门,随便什么。对那个程序做同样的事情。

让他们尝尝像程序员一样思考的感觉。与您尝试在2小时内教他们Python相比,他们一定能从中得到更多的收益。


6

您可以尝试爱丽丝。这是3D动画的IDE和API。它具有各种内置对象(兔子,外星人,树木,建筑物等),您可以使用非常高级的方法将它们放置在初始场景中:像walk(north)(在角色移动时为手臂和腿设置动画)并say("my name is Winky")可能导致卡通气泡从角色口中冒出来。

它允许您挂接键盘和鼠标事件,以便您可以进行交互操作。

基本的编程语言是Java,但是IDE为您提供了一个图形变体,您可以在其中将部分表达式拖放到编辑器窗口中。(它不会让您创建语法错误。)

我认为您可以通过一个场景预先设置好所有内容,以便没有编程经验的人可以在几个小时内完成一些有趣的事情。


1
我会犹豫使用这种方法。它可能对较年轻的学生有效,但高中生更可能将其视为幼稚的。也就是说,这是一个快速的方式来完成的东西在2个小时的时间限制...
Izkata

6

即使在一个玩具或图形语言中进行编码,在一个小时的过程中似乎也牵强。地狱,我不确定我是否可以再次接爱丽丝,并在2小时内做任何值得的事情。也许是一个周末,但不是两个小时。

我建议将CS简化为基本要点:问题解决和分析。将小组分成小组。花10分钟描述一些高级计算问题。这些应该是容易解决的问题,可以轻松地向没有数学或CS背景的人们解释。示例包括:

  1. 排序清单
  2. 寻找最小的生成树
  3. 计算(近似)整数的根
  4. 等等

再花10分钟进行进一步讨论,并解释任务。每个小组都分配有一个问题,他们将针对这些问题进行头脑风暴。团队将有一个半小时的时间来共同解决他们分配的问题的一个或多个解决方案。然后,花一个小时浏览整个小组的解决方案,让孩子们弄清楚他们是否工作,是否有更快/更好的方法来解决问题,等等。

如果孩子们没有找到正确/最优的解决方案,那就可以了。但是,不要仅仅给出答案-这绝对是至关重要的。孩子们不再做STEM的原因是,教育者给孩子们的印象是,一切都已经搞清楚了。需要非常成熟的辅导员,让孩子们自己解决这些问题,并成功或失败。获得正确答案不是重点。重点是给孩子们带来有趣的问题,并向孩子们展示计算机科学的意义:解决问题以及评估解决方案的正确性和效率。让孩子们提出自己的答案会给他们一种主人翁感,并使他们感到参与。

当然,如果孩子们问他们是否得到正确/良好/最知名的答案,请告诉他们真相。但是,不要仅仅放弃答案,除非它们是通过讨论学生的解决方案而有机地提出来的。总结一下:

  1. 让孩子们容易理解,但要探索的问题很多。
  2. 让孩子们提出自己的解决方案,仅提供足够的帮助以确保孩子们理解当前的问题。
  3. 在小组讨论中讨论正确性/效率,使小组有机会解释其解决方案。作为顾问,您可以自由地讨论正确性/效率,以为它可以从中获利。
  4. 除非与学生提供的解决方案基本相同,否则在任何情况下都不应提出自己的解决方案或任何众所周知的解决方案。不要让人觉得CS是人们已经弄清楚所有答案的领域。
  5. 如果可能的话,让孩子们觉得自己学到了什么,但是他们仍然有疑问:他们找到了最佳答案吗?他们是否可以以类似方式解决其他问题?您甚至可以以一种易于理解的格式为他们提供一些无法确定的问题,以使他们事后有所作为。

您甚至可以考虑在一场友好的比赛中互相对抗。给成对的团队同样的问题,看看谁想出更好的解决方案。
Patrick87 2013年

1
这类竞争会极大地阻止害羞的人,只会助长那些已经知道这些知识的人的自负。这只会增强CS的形象,“仅适用于书呆子”。
adrianN

6

我现在17岁,我16岁那年开始编程。我要讲故事,而不是提一些建议:我对编程的兴趣始于我看着一个计算机技术人员,我打电话给我的注册表和命令提示符(即使他想用500美元来修复我的BSOD,但我没有付款,我还是自己修复了。)于是,我用Google搜索了“命令提示符语言”,发现那里有一个叫做“源代码”的东西,它允许您进行编程。那时我还不知道c ++是什么,我什至不认为我从未听说过它。因此,我进入了cpp.com(非常糟糕的教程,您将学习坏的和过时的做法)并开始学习基础知识。我的脑子发疯了,我实际上得知我感染了引起我的问​​题的病毒是用c ++编写的,这使我更加感兴趣。后来我开始阅读,学习汇编语言和其他高级语言。我最初是想学习恶意软件和图形编程的,后来我做到了。

  1. 这听起来可能很糟糕,但实际上我这个年龄的很多人都对编程的破坏性方面感兴趣。当我告诉朋友我对C ++非常满意时,我从朋友那里得到的第一个问题是“您能制作病毒,更改等级或修改游戏吗?”我的水平还不高...我最近一直在研究DLL注入,因此我得到了那里。也许您可以提出一些既不危险也不违法但仍很有趣的恶意软件。(也许可以从学校服务器获取学生的登录信息。)您也可以与他们讨论病毒和恶意软件的工作方式。
  2. 按照口袋妖怪的方式开发一个小型游戏,并向他们描述游戏和游戏引擎的工作方式。很多人可能会惊讶地发现,在许多像这样的2d游戏中,角色实际上并没有移动,背景是并且角色只是在使用动画,谈论随机数等。还提出一些3D演示。
  3. 尽量避免解释代码的作用,尝试告诉他们程序的作用本身并不需要过多地讨论代码。以我的经验,这是一种容易引起人们注意的简便方法,特别是如果他们不了解该语言的基础知识的话。实际上,我会尽量不要将源代码完全摆在那儿,因为对于某些人来说,查看500行代码而不理解其中的任何代码可能会令人相当沮丧。另外,如果您有一个像我一样向您展示的人,他们可能会问一连串的问题,因为他们有好奇心。即:您在谈论随机数,他们问随机数是什么以及它们来自何方...比您不得不向他们解释电子噪声及其随机性和所有事物的方式要大得多,否则您可能会发现自己处于这种情况下就像“我不知道”一样。
  4. 乐高头脑风暴是一个好主意。如果您不想走长途而使用一种主要语言,那么它将附带一种您可以使用的块样式编程语言。我在30到40分钟的时间内就弄明白了这门语言,当您考虑它时,所有内容都会排列在一起

  5. 您可以快速开发一个应用程序并将其展示出来,并与他们讨论应用程序开发可能带来的收益。


4

我的一些最爱

  • 产生分形。它们与深层数学和计算机图形学有很强的联系,并且自然也适合并行处理。它说明了复杂性和紧急行为,尤其是当您缩放到任意比例时,并且与科学和自然现象有很强的联系。编写在多台计算机上运行的并行分形代码并不难。一个实验是让每台计算机显示它处理的随机行(例如,“从”计算机处理队列中的行),然后由一台中央计算机显示组合的结果。

  • 乐高机器人(或其他机器人工具包,例如邮票)。头脑风暴是一种玩具,但它可以是非常先进的玩具,可以切实地演示抽象概念。可以在其上运行的软件可能非常复杂,并且它们可能具有复杂的“感知-思考-行动”循环/算法。有很多关于建筑的好书。同样令人印象深刻的是Rubiks立方体求解器,最近打破了世界纪录。

  • raspberry pi是一个新的廉价平台,受到了很多关注和使用。它可以用于演示linux编程,机器人技术等,并具有HD输出等。请参见例如带有Lego机架的Southhampton 树莓派超级计算机

  • 另一个答案中提到的徽标是古老的经典。另一个较新的角度是游戏编程,例如使用一种新的新兴流行语言Scratch(由MIT发明)。它可以教授许多自然/高级CS主题。


2

这是另一个角度。在科学认识的前沿,计算机科学中有许多有趣的开放性问题或新兴技术,它们可以激发人们的好奇心/奇迹,即探索附近的地表隐身。如果您提出问题,然后让班级参加有关解决方案后果的讨论,则可能会引起极大的兴趣/启发。[因为您提到了计算机实验室的可用性,所以也有可能创造性地提出一些与这些领域有关的动手计算机练习。]

这可能会带来科幻感觉,但在CS中,是其他领域所无法比拟的,它将在短时间内将曾经科幻化的东西变成现实。它们也可能引起争议且及时,并与当今的头条新闻联系在一起,学生可以开始理解CS在我们的世界/社会中如何普遍存在,以及在广泛解释时它的重要性。这里有一些大的:

  • DNA到蛋白质的折叠问题。有没有一种算法可以准确地计算出来?

  • 人工智能。可能吗?是否涉及道德?

  • 机器人技术具有各种关键的新兴领域。例如自动驾驶/驾驶。它在不久的将来。这将如何影响社会?不久前DARPA竞赛的视频令人印象深刻。库兹韦尔的著作涉及很多东西。无人机是一个复杂的话题,很少公开讨论,并且将在国内越来越多地使用。该火星车是非凡的技术和有惊人的故事背后,比如系统是如何必须调试远程interplanetarily时,他们失败了。

  • 最近,新闻中大量使用基于IT的监视系统来检测犯罪/恐怖主义。

  • 如果没有大型的基于CS的系统来分析“大数据”,就不可能发现希格斯玻色子,超级对撞机也根本无法运行。

  • 摩尔定律。它将持续多久?它已经多少影响了社会/人类?

  • 量子计算机。他们有可能吗?他们会更快吗?它们是低成本的还是总是不灵活的?Dwave是一个丰富多彩的案例研究,Aaronson撰写了一篇很棒的SciAm文章,等等

  • Google Pagerank算法是现代计算机科学数十亿美元的奇迹之一。会延长吗?垃圾邮件过滤如何工作?该公司似乎正朝着分析图像等方向发展。

  • 算法/高频交易现在可以移动大量交易量/价值。是好是坏?它在增加/减少吗?将来会受到监管吗?涉及哪种计算军备竞赛?

  • 超级计算机规模庞大,可以解决令人惊讶的问题,而且规模还会越来越大。有限制吗?他们将计算什么以及将来将计算什么?有点相关的大数据数据挖掘

  • 社交网站在不到十年的发展中就产生了巨大的影响。他们参与煽动民众起义,例如阿拉伯之春占领华尔街。他们的未来是什么?


2

我有一个主张

  • 专注于计算机科学(不是编程或辅助),
  • 从大多数孩子都知道的前提开始
  • 实际上已经尝试过并且可以工作。

我们一直在与高中生一起举办小型研讨会,内容涉及扫雷。该研讨会大致如下:

  1. 让我们玩一下游戏(最了解它)。

  2. 我们刚刚做了什么?我们试图解决的问题是什么?我们可以制定一般规则吗?

    这通常需要一段时间。孩子们不习惯用输入和输出来表达问题,以免解决它们的一般规则。那些曾经编程的人会很感激。引用“意大利面条代码”可能会有所帮助。尽管如此,规则在大多数时间都是简单的,一次只考虑一个单元。

  3. 展示有关规则的问题。

    此时,您想引入Minesweeper模拟器。拜耳(Bayer),斯奈德(Snyder)和乔伊(Choiery)创作的作品并不完美,但可以展示精心设计的场景。

  4. 改进规则集以涵盖更多方案。

    这通常会导致学生一起研究越来越多的单元格。您还可以将它们推向“解决所有问题”的方法,例如将现有信息表示为线性方程组-如果尝试以数学术语表示可用信息,则会出现这种情况。学生们已经知道如何解决这样的系统!

  5. 注意限制。

    首先,有些方案没有(确定性)解决方案。此外,我们可以将蛮力与我们制定的策略进行对比。我们可以权衡速度与功率吗?如果出现方程组方法,请注意,我们只能在实数上有效地解决此问题,但是我们需要二进制答案。构建导致大量运行时的场景并不难(我们使用计算机代数进行说明)。

根据不同的小组,这种方法可以自然地涵盖计算机科学的多个原理:定义问题,描述通用算法,迭代问题解决以及可计算性和复杂性问题都可以涉及。

学生的反馈总体上是积极的。他们感到参与并表达了对概念的兴趣。重要的是让他们完成大部分工作,仅通过提出针对性的问题来小心地将他们按期望的方向推开。


1

您有很多事情要做...但是一件事情似乎太过“钱”了,于是提出“ P≠NP”问题和七千年奖,当我在中学时,尽管我我唯一理解的不是符号:有很大的收获和问题!其他事物也会提出数学和计算机科学的联系,如:求解方程,使用计算机检查解。

我建议的其他事情是介绍艾伦·图灵(Alan Turing)“计算机科学之父”并讲述他的故事。我建议的最后一件事是零知识证明和游戏“瓦尔多在哪里?” 和玩耍而没有作弊,加密和网络攻击。


-2

用facebook做任何事情,他们都喜欢。也许这对初学者来说很难,但是您可以让他们绘制concontifications图,以显示他们的配置文件如何相互连接。我建议将Javascript作为编程语言。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.