使用游戏学习编程: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 上,因此 forkers 可以创建自己的代码战斗系统,并附加不同的商业模式(或根本没有商业模式)。

用户参与

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(型)。它们包括简短的任务描述、一组输入数据和所需的输出数据。学生的任务是用他们首选的编程语言编写一个函数,将给定的输入转换为所需的输出。这一切都在在线内置编程编辑器中完成。

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

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

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

Codewars 中没有太多游戏化元素,但解决 Katas——以及其他一些活动——将缓慢提高学生的排名。

Codewars screenshot

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

Kumite (组手,日语“格斗”)

Kumites 比 Katas 更进一步,是更复杂的编码问题,邀请其他编码人员重构代码并提供解决方案。

教学经验和批评

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

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

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

不幸的是,并非所有 Katas 的测试区域都存在此行,这进一步使学生感到困惑。

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

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

参与和许可

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

商业模式

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

最初发布于 spielend-programmieren.at。经许可重新发布,遵循 Creative Commons 协议。

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

4 条评论

尊敬的 Jens 先生,
感谢您对 Code Combat 的评测。我刚刚发现了这款游戏,想了解更多信息,您作为教师对游戏的评测对我很有帮助。我对通过 code combat 学习编码有一些疑问,希望您能帮助我。

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

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

另一方面,我不想放弃希望。我感觉我的担忧可能是没有必要的,因为 Code combat 具有开源性质。我认为能够完全投入到玩游戏和阅读源代码中,我应该能够提升到中级程序员。这可行吗?那么问题是,对于刚刚掌握基本语法的人来说,源代码是否太深奥难以理解?

期待您的回复
最好的,

hubert

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

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

回复 作者 hubert

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

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

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