使用游戏学习编程:Codewars 和 CodeCombat 评测

还没有读者喜欢这篇文章。
Leveraging 21st-century education with open source

Opensource.com

我最近偶然发现了两个学习编码和编程技能的网站:CodeCombatCodewars。两者都采用了自由软件理念(所有代码示例都是开源的,已授权和/或在 GitHub 上可用),并帮助教授不同的计算机编程语言。当我的部分学生想要学习 Python 编程语言时,我测试了 CodeCombat 和 Codewars。

CodeCombat

CodeCombat screenshot

截图由 Horst Jens 提供。CC BY-SA 4.0

CodeCombat 专注于游戏化,这使其适合年轻受众。如果您喜欢带有卡通奇幻图形的 RPG 游戏,您也会喜欢它。该游戏建立在较早的学习代码系统之上,例如 RurpleKarel。屏幕在右侧的代码编辑器和左半部分的迷宫之间分割。迷宫内部是一个化身,玩家可以使用一组受限的命令来控制它(例如 self.moveDown()self.moveRight()self.attack(self.findNearestEnemy()) 等)。必须正确键入命令才能控制化身,并且逻辑错误的程序(例如命令化身撞墙)会导致其失去生命值并最终死亡。

在每个关卡中,玩家都会被分配一组任务——通常是收集宝石、击败怪物并移动到关卡的出口。玩家逐渐被引入新的命令,例如循环、条件和变量。在关卡中收集的钻石可以在关卡之间用于购买更好的盔甲、武器和编程命令(巧妙地象征为魔法书和魔法设备),以掌握更高关卡中越来越棘手的任务。

CodeCombat 以平滑的学习曲线开始,非常适合没有编码经验的玩家。随着玩家的进步,任务涉及更复杂的编程概念。最重要的是,由于与游戏世界中对象的更多可能互动,关卡本身变得更加复杂:可以建造栅栏,可以设置火焰陷阱,可以将敌人诱入雷区,特殊武器允许使用带有冷却计时器的特殊攻击等。

除了设计精美的关卡外,游戏的后期阶段还拥有足够复杂的谜题,足以让游戏玩家和程序员都着迷。

许可协议

CodeCombat 本身可以在 GitHub 上找到,采用免费的 MIT 许可证。所有美术资源(精灵、背景、音效等)也可以在 GitHub 上找到,并根据 Creative Commons CC BY 4.0 许可证发布。这使得学生的项目可以轻松使用游戏美术作品。

商业模式

有关许可证和署名的更详细说明,请参阅 CodeCombat 法律页面。CodeCombat 保留以非免费许可证发布使用 CodeCombat 关卡编辑器创建和上传的 CodeCombat 关卡的权利。

当前的商业模式依赖于“推动”家长和教师订阅每月 9.99 美元的订阅,以访问视频教程、更多关卡和更多(虚拟)钻石。虽然内置广告和订阅推动对于某些玩家来说可能有点 раздражающий,但这是围绕免费/自由/开源核心构建商业生态系统的合法方式。

由于完整的 CodeCombat 源代码在 GitHub 上,forker 可以创建自己的代码战斗系统,并附加不同的商业模式(或根本没有商业模式)。

用户参与

CodeCombat 寻求用户为关卡设计、编码、翻译和其他任务做出贡献。我特别期待教师和教育工作者创建的社区内容,例如课程计划或将 CodeCombat 会议整合到计算机科学课程中的最佳实践指南。

CodeCombat ways to contribute

截图由 Horst Jens 提供。CC BY-SA 4.0

教学经验

我自己在编程课程中使用 CodeCombat 的经验是愉快的。CodeCombat 在我 11 岁的学生中很受欢迎,并且经常吸引年龄较大的学生“帮忙”。学生们能够在几乎不需要老师帮助的情况下自己解决大部分任务。对于某些关卡,任务描述隐藏在代码注释中。在更高级别中,我讲德语的学生的英语技能有限,这是一个问题。

游戏化效果非常好,尤其是在年龄较小的学生中。他们喜欢花时间思考如何最好地投资他们辛苦赚来的虚拟钻石,并且当他们获得更好的虚拟盔甲和武器时非常高兴。

批评

我没有太多可批评的,但有一些事情

    • Pythonic 非 Python:CodeCombat 学生学习了很多仅在游戏世界中存在的命令。虽然这在游戏中很好,但像 loop: 这样的一些“结构”命令可以很容易地被正确的 Python 命令(while True:)替换。
    • 强制面向对象CodeCombat 在开始时引入了像 self.moveDown() 而不是 moveDown() 这样的命令,表明化身是化身类的一个实例。虽然我喜欢从一开始就做对并在以后解释的概念,但我怀疑是否有必要在没有面向对象范例的情况下也能很好地教授必要的教学(循环、条件、变量)时,立即将面向对象的概念强加给学生。我想这是为了让 CodeCombat 能够使用其他编程语言,如 Java。

 

Codewars

Codewars 是 CodeCombat 的更成熟版本。学生不会通过课程进行指导,而是面临编程任务——与典型的计算机科学课程的家庭作业任务非常相似。

Kata(卡塔)

每个编程任务都参考了日本武术,称为 Kata(卡塔)。它们包括简短的任务描述、一组输入数据和所需的输出数据。学生的任务是用他首选的编程语言编写一个函数,将给定的输入转换为所需的输出。这一切都在在线内置编程编辑器中完成。

学生的任务还在于编写自己的测试,测试的结果(通过或失败)提供了代码是否已准备好提交给公众的线索。为了使卡塔更具难度,任务描述中给定的输入-输出数据集只是用于在提交给公众之前测试卡塔的数据子集。用户可以使用按钮针对自己的测试运行他的函数,或者可以按“提交”以针对更大的隐藏数据集进行测试。只有当所有测试都通过后,该函数才能上传并由公众检查。

这是一个非常具有启发性的时刻:即使对于一个看似简单直接的问题,也存在无数不同的解决方案。解决方案可以被顶为“最佳实践”,以便所有程序员的群体智慧将最可接受的解决方案排序到顶部。也可以将解决方案投票为“巧妙”。

还有一个内置的 Web 论坛,可以在其中讨论卡塔解决方案。

Codewars 中没有太多的游戏化,但是解决卡塔——以及其他一些活动——将缓慢地提高学生的等级。

Codewars screenshot

截图由 Horst Jens 提供。CC BY-SA 4.0

Kumite(组合)

比卡塔更进一步的是 Kumite(组合),更复杂的编码问题,邀请其他程序员重构代码并提供解决方案。

教学经验和批评

虽然我个人喜欢 Codewars,但我发现它不太适合教授 Python(我用 14 岁的、讲德语的学生进行过测试,他们有一些 Python 知识和基本的英语知识)。与 CodeCombat 相比,教学必须在使用 Codewars 之前进行,或者学生必须具备技能和自律性,才能通过其他方式学习必要的编码技能。

最大的问题是理解任务描述和理解如何编写测试。简而言之,大多数测试都使用 assert.equal 语句

Test.assert_equals(function_name('输入数据'),'期望的输出数据')

不幸的是,所有卡塔的测试区域中都没有这一行,这进一步使学生感到困惑。

然而,Codewars 通过查看(和讨论)他人的解决方案提供了巨大的学习机会。它也是一个很好的工具,可以使用一种不同的、新的编程语言来处理已经在首选编程语言中解决的卡塔。

最后,Codewars 非常适合通过编码道场引入 结对编程 的概念:两名学生必须一起解决一个卡塔,一名学生进行思考(导航员),而另一名学生进行打字(驾驶员)。在给定的时间间隔之后或至少通过一项测试之后,一名新学生成为驾驶员,而驾驶员成为导航员。

参与和许可

鼓励 Codewars 用户参与。讨论、共享和 fork 卡塔和 Kumite 的能力是内置的。正如 Codewars 条款页面中所述,所有上传的代码均根据 FreeBSD 2-Clause 许可证 获得许可。

商业模式

Codewars 的商业模式尚不清楚。我认为该网站可以成为 IT 职位招聘工具,但我希望该网站能够吸引足够多的感激的计算机科学教师的捐款,像我一样,他们终于摆脱了创建和评分家庭作业的需求。

最初发布于 spielend-programmieren.at。经许可重新发布,采用 Creative Commons 许可。

Avatar
在我在奥地利维也纳的公司向儿童教授开源游戏编程课程

4 条评论

尊敬的 Jens 先生:
感谢您对 Code Combat 的评论。我刚刚发现了这个游戏,想更多地了解它,您作为老师对游戏的评论对我很有帮助。我对通过代码战斗学习编码有一些疑问,希望您能帮助我。

我是一名成人学习者,已经尝试学习 python、java 和 swift 的所有基本语法。但是,我发现深入学习这些语言并加以利用非常困难。我尝试通读 apple 的 swift 文档,基本知识还可以,但协议、扩展、泛型、高级运算符等的深入使用非常难以掌握。我认为问题在于提供的示例太少且不够吸引人。我将很高的希望寄托在 Code Combat 上,以帮助我成为一名优秀的程序员,我担心代码战斗只处理基本语法,而不提供任何更深入的指导。

我喜欢通过游戏学习编程的想法,因为它让我参与到特定的任务和要求中。但是,我担心游戏关卡太简单,不够深入,无法帮助我成为中级或高级程序员。

另一方面,我不想放弃希望。我认为我的担忧可能是没有必要的,因为 Code combat 具有开源性质。我假设能够充分参与玩游戏和阅读源代码,我应该能够晋升为中级程序员。这有可能吗?那么问题是,对于刚掌握基本语法的人来说,源代码是否太深奥而无法理解?

期待您的回复
最好的,

hubert

您好 Hubert:
很高兴听到您喜欢这篇文章,并祝贺您成为一名成人学习者!
从理解基本语法到编写有意义的复杂程序,这是一个漫长的过程,与编程语言和学习思想无关。对于我自己的(年轻)学生,我使用 Python 和 easygui,其他人通过深入研究 html、css 和 javascript 取得了成功。这取决于什么主题吸引您。没有任何编程书籍、游戏或视频可以给您经验;它随着时间推移而来,它需要热情。

我建议前往 reddit/r/learntocode 与他人讨论学习策略。我还建议在 github 上找到一个不错的、小的(?)开源项目,一些真正吸引您的项目。谦虚地开始,询问项目管理员您如何提供帮助,不一定需要编码:测试、编写文档、帮助整理问题并在论坛中回答、审查和评论代码等。我个人发现参加程序员会议或用户组会议非常有益。随着您更多地参与您的宠物项目及其人员,您将学到很多东西,主要是通过他人和从他人那里学到的。专注于您的热情!

回复 作者 hubert

尊敬的 Jens 先生:
非常感谢您的建议。它们非常有见地。我将尝试将这些建议应用到 Code Combat 中。

我希望 codewars 能够改进他们的排名过程,使其特定于每种语言,而不是整体排名。他们可以按国家/地区排名,并允许招聘人员搜索世界各地的人。codewars 的另一个问题是几乎不可能搜索要加入的氏族,而且卡塔评级也变得有缺陷,因为大多数排名的人都是前 10%,他们可能会认为 6kyu 卡塔非常微不足道,并将其评为 8kyu,这让初学者感到困惑。还需要在卡塔获得批准之前改进标记卡塔,一个卡塔可能只包含一个基本标记,但实际上它需要很多其他标记,例如算法、正则表达式、数学、优化等。我还注意到出现的数学或物理卡塔太多,例如项目欧拉中的那些,这不是一件坏事,但我希望看到更多没有数学定理作为先决条件的真实世界卡塔。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.