我最近偶然发现了两个学习编码和编程技能的网站: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 上,forker 可以创建自己的代码战斗系统,并附加不同的商业模式(或根本没有商业模式)。
用户参与
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(卡塔)。它们包括简短的任务描述、一组输入数据和所需的输出数据。学生的任务是用他首选的编程语言编写一个函数,将给定的输入转换为所需的输出。这一切都在在线内置编程编辑器中完成。
学生的任务还在于编写自己的测试,测试的结果(通过或失败)提供了代码是否已准备好提交给公众的线索。为了使卡塔更具难度,任务描述中给定的输入-输出数据集只是用于在提交给公众之前测试卡塔的数据子集。用户可以使用按钮针对自己的测试运行他的函数,或者可以按“提交”以针对更大的隐藏数据集进行测试。只有当所有测试都通过后,该函数才能上传并由公众检查。
这是一个非常具有启发性的时刻:即使对于一个看似简单直接的问题,也存在无数不同的解决方案。解决方案可以被顶为“最佳实践”,以便所有程序员的群体智慧将最可接受的解决方案排序到顶部。也可以将解决方案投票为“巧妙”。
还有一个内置的 Web 论坛,可以在其中讨论卡塔解决方案。
Codewars 中没有太多的游戏化,但是解决卡塔——以及其他一些活动——将缓慢地提高学生的等级。
截图由 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 许可。
4 条评论