用游戏教授编码:Codewars 和 CodeCombat 回顾
最近偶然发现了两个学习编码和编程技巧的网站:CodeCombat和Codewars。两者都使用自由软件理念(所有代码示例都是开源的许可和/或可用的GitHub)并帮助教授不同的计算机编程语言。当我的一些学生正在寻求学习Python编程语言时,我测试了 CodeCombat 和 Codewars。
CodeCombat
截图由 Horst Jens 提供。CC BY-SA 4.0。
编程和开发
-
红帽开发者博客
-
编程备忘单
-
免费试用:红帽学习订阅
-
电子书:Bash 编程简介
-
Bash Shell 脚本备忘单
-
电子书:企业 Java 现代化
CodeCombat 专注于游戏化,使其适合年轻观众。如果您喜欢带有卡通奇幻图形的 RPG 游戏,您也会喜欢的。该游戏基于较旧的学习编码系统,例如Rurple和Karel。屏幕分为右侧的代码编辑器和左侧的迷宫。迷宫内部是玩家可以使用一组受限命令(例如self.moveDown()
、self.moveRight()
、self.attack(self.findNearestEnemy())
等)控制的化身。必须正确键入命令才能控制化身,而具有逻辑错误的错误程序(例如命令化身靠墙奔跑)将导致其失去生命值并最终死亡。
在每个关卡中,玩家都被分配了一组任务——通常是收集宝石、击败怪物并移动到关卡的出口。玩家逐渐被引入新的命令,如循环、条件和变量。在关卡中收集的钻石可以在关卡之间进行投资,以获得更好的盔甲、武器和编程命令(巧妙地象征为法术书和魔法装置),以掌握更高关卡中越来越棘手的任务。
CodeCombat 以平滑的学习曲线开始,非常适合没有编码经验的玩家。随着玩家的进步,任务涉及更复杂的编程概念。最重要的是,由于与游戏世界中更多可能的对象交互,关卡本身变得更加复杂:可以建造栅栏,可以设置火陷阱,可以将敌人引诱到雷区,特殊武器允许带有冷却时间的特殊攻击,等等
除了设计精美的关卡之外,游戏的后期阶段还拥有足够复杂的谜语,足以吸引游戏玩家和程序员。
执照
CodeCombat 本身可以在免费的MIT 许可证的 GitHub 上找到。所有艺术资产(精灵、背景、音效等)也可以在 GitHub 上找到,并在知识共享CC BY 4.0许可下发布。这样可以轻松地将游戏艺术品用于学生的项目。
商业模式
许可和归属在CodeCombat 法律页面上有更详细的解释。 CodeCombat 保留发布使用 CodeCombat 关卡编辑器在非免费许可下创建和上传的 CodeCombat 关卡的权利。
当前的商业模式依赖于“推动”家长和老师每月订阅 9.99 美元,以获得视频教程、更多关卡和更多(虚拟)钻石。虽然内置的广告和推送订阅可能会让一些玩家有些恼火,但这是围绕免费/自由/开源核心构建商业生态系统的合法方式。
因为完整的 CodeCombat 源代码在 GitHub 上,所以分叉者可以创建自己的代码战斗系统,并附加不同的业务模型(或根本没有业务模型)。
用户参与
CodeCombat 寻求用户对关卡设计、编码、翻译和其他任务的贡献。我特别期待来自教师和教育工作者的社区创建内容,例如将 CodeCombat 课程整合到计算机科学课程中的课程计划或最佳实践指南。
截图由 Horst Jens 提供。CC BY-SA 4.0。
教学经验
我自己在编程课程中使用 CodeCombat 的经历非常愉快。 CodeCombat 在我 11 岁的学生中很受欢迎,并且经常吸引愿意“帮助”的年长学生。学生们能够在几乎没有老师帮助的情况下自己解决大部分任务。对于某些级别,任务描述隐藏在代码注释中。在更高的水平上,我的德语学生有限的英语技能是一个问题。
游戏化效果很好,尤其是在年轻学生中。他们喜欢花时间思考如何最好地投资他们来之不易的虚拟钻石,并在获得高级虚拟盔甲和武器时非常高兴。
批判
我没有太多要批评的,但有几件事:
-
- Pythonicnon-python: CodeCombat 的学生学习了很多只存在于游戏世界中的命令。虽然这在游戏中很好,但像
loop:
这样的“结构”命令很容易被正确的 Python 命令 (while True:
) 替换。
- Pythonicnon-python: CodeCombat 的学生学习了很多只存在于游戏世界中的命令。虽然这在游戏中很好,但像
-
强制面向对象: CodeCombat 在开头引入了
self.moveDown()
之类的命令,而不是moveDown()
,表示头像是头像类的实例。虽然我喜欢从一开始就做,然后再解释的概念,但我想知道当必要的教学(循环、条件、变量)可以在没有对象的情况下进行教学时,是否真的有必要立即将面向对象的概念强加给学生- 定向范式。我想这是为了让 CodeCombat 能够使用其他编程语言,如 Java。
代码战
Codewars 是更成熟的 CodeCombat 版本。学生不会被引导完成课程,而是面临编程任务——与典型的计算机科学课程的家庭作业不同。
说
每个编程任务都参考了一种名为Kata的日本武术。它们包括简短的任务描述、一组输入数据和所需的输出数据。学生的任务是用他喜欢的编程语言编写一个函数,将给定的输入转换为所需的输出。这一切都是通过在线的内置编程编辑器完成的。
学生还负责编写自己的测试,测试的结果(通过或失败)提供了代码是否准备好提交给公众的线索。为了使 Katas 更加困难,任务描述中的给定输入输出数据集只是用于在将 Kata 提交给公众之前测试 Kata 的数据的一个子集。用户可以使用按钮针对他自己的测试运行他的函数,或者可以按“提交”以针对更大的隐藏数据集进行测试。只有通过所有测试后,才能将该功能上传到公众并进行检查。
这是一个非常具有启发性的时刻:即使对于一个看似简单直接的问题,也存在无数不同的解决方案。解决方案可以被评为“最佳实践”,以便所有编码人员的群体智能将最可接受的解决方案排在首位。也可以将解决方案投票为“聪明”。
还有一个内置的网络论坛,可以讨论 Kata 解决方案。
Codewars 中没有太多的游戏化,但是解决 Katas 以及其他一些活动会慢慢提高学生的等级。
截图由 Horst Jens 提供。CC BY-SA 4.0。
组手
Katas 的升级是 Kumites,这是更复杂的编码问题,邀请其他编码人员重构代码并提供解决方案。
教学经验与批评
虽然我个人喜欢 Codewars,但我发现它对于 Python 的教学并不理想(我对 14 岁的德语学生进行了测试,这些学生有一些 Python 知识和英语基础知识)。与 CodeCombat 相比,教学必须在使用 Codewars 之前进行,或者学生必须具备技能和自律才能以其他方式学习必要的编码技能。
最大的问题是理解任务描述和理解如何使用编写测试。简单地说,大多数测试使用 assert.equal 语句:
Test.assert_equals(function_name('input data'),'desired output data')
不幸的是,这条线并没有出现在所有 Katas 的测试区域中,进一步让学生感到困惑。
然而,Codewars 通过查看(和讨论)其他人的解决方案提供了巨大的学习机会。它也是解决已在首选编程语言中使用不同的新编程语言解决的 Katas 的好工具。
最后,Codewars 非常适合通过编码道场引入结对编程的概念:两名学生必须一起解决 Kata,一名进行思考(导航器),另一名进行打字(驱动程序)。在给定的时间间隔后或至少通过一项测试后,一名新学生成为司机,司机成为导航员。
参与和许可
鼓励 Codewars 用户参与。讨论、分享和分叉 Katas 和 Kumites 的功能是内置的。正如 Codewars 条款页面中所述,所有上传的代码都在FreeBSD 2-Clause license下获得许可。
商业模式
Codewars 的商业模式是什么并不明显。我认为该网站可以作为 IT 工作的招聘工具变得有用,但我希望该网站能够吸引像我这样感恩的计算机科学老师的足够捐款,他们终于能够摆脱创建和评分家庭作业的需要。
原贴于spielend-programmieren.at。经知识共享许可重新发布。
更多推荐
所有评论(0)