我最近偶然发现了两个学习编码和编程技能的网站:CodeCombat 和 Codewars。两者都采用了自由软件理念(所有代码示例均为开源 许可 和/或在 GitHub 上可用),并帮助教授不同的计算机编程语言。当我的部分学生想要学习 Python 编程语言时,我测试了 CodeCombat 和 Codewars。
CodeCombat
截图由 Horst Jens 提供。 CC BY-SA 4.0。
CodeCombat 专注于游戏化,使其适合年轻受众。如果您喜欢带有卡通奇幻画面的 RPG 游戏,您也会喜欢它。该游戏建立在较早的学习代码系统之上,例如 Rurple 和 Karel。屏幕在右侧的代码编辑器和左半部分的迷宫之间分割。迷宫内部是一个头像,玩家可以使用一组受限的命令来控制它(例如,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 课程整合到计算机科学课程中的课程计划或最佳实践指南。
截图由 Horst Jens 提供。 CC BY-SA 4.0。
教学经验
我自己在使用 CodeCombat 进行编程课程的经验是愉快的。CodeCombat 在我 11 岁的学生中很受欢迎,并且经常吸引年龄较大的学生愿意“帮助”。学生们能够自己解决大多数任务,几乎不需要老师的帮助。对于某些关卡,任务描述隐藏在代码注释中。在更高级别,我讲德语的学生的英语技能有限,这成了一个问题。
游戏化效果非常好,尤其是在年龄较小的学生中。他们喜欢花时间思考如何最好地投资他们辛苦赚来的虚拟钻石,并且当他们获得更高级的虚拟盔甲和武器时非常高兴。
批评
我没有太多要批评的,但有一些事情
-
- Pythonic 非 Python:CodeCombat 学生学习了很多仅在游戏世界中存在的命令。虽然这在游戏中很好,但像
loop:
这样的某些“结构化”命令可以很容易地被正确的 Python 命令 (while True:
) 替换。 - 强制面向对象:CodeCombat 在开始时引入了
self.moveDown()
而不是moveDown()
等命令,表明头像是头像类的实例。虽然我喜欢从一开始就做对并在以后解释的概念,但我怀疑是否有必要立即将面向对象的概念强加给学生,因为必要的教学(循环、条件、变量)也可以在没有面向对象范例的情况下进行教学。我猜这是为了使 CodeCombat 能够使用其他编程语言,如 Java。
- Pythonic 非 Python:CodeCombat 学生学习了很多仅在游戏世界中存在的命令。虽然这在游戏中很好,但像
Codewars
Codewars 是 CodeCombat 的更成熟版本。学生不会在课程中受到指导,而是面临编程任务——与典型的计算机科学课程的家庭作业非常相似。
Kata (卡塔,日语“型”)
每个编程任务都参考了日本武术,称为 Kata(型)。它们包括简短的任务描述、一组输入数据和所需的输出数据。学生的任务是用他们首选的编程语言编写一个函数,将给定的输入转换为所需的输出。这一切都在在线内置编程编辑器中完成。
学生的任务还需要编写自己的测试,测试结果(通过或失败)会提供代码是否已准备好提交给公众的线索。为了使 Kata 更具难度,任务描述中给定的输入-输出数据集只是用于在提交给公众之前测试 Kata 的数据子集。用户可以使用按钮针对自己的测试运行其函数,也可以按“提交”以针对更大、隐藏的数据集进行测试。只有通过所有测试后,才能将函数上传并由公众检查。
这是一个非常具有启发意义的时刻:即使对于看似简单明了的问题,也存在无数不同的解决方案。解决方案可以被投票为“最佳实践”,以便所有编码人员的群体智慧将最可接受的解决方案排序到顶部。也可以将解决方案投票为“巧妙”。
还有一个内置的 Web 论坛,可以在其中讨论 Kata 解决方案。
Codewars 中没有太多游戏化元素,但解决 Katas——以及其他一些活动——将缓慢提高学生的排名。
截图由 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 协议。
4 条评论