在我们的近期文章中,我们谈到了 Exercism,这是一个 开源 项目,旨在帮助人们通过针对数十种不同编程语言的练习来提高他们的编程技能。 实践者完成每个练习,然后收到对其响应的反馈,使他们能够从同行群体的经验中学习。
Katrina Owen 是 Exercism 的创始人,我采访了她,作为撰写原始文章的研究。 其中有一些非常棒的信息和见解,我们想与任何有兴趣学习编程、教授编程以及像这样的项目如何接受来自他人的贡献的人分享。
Exercism 看起来很棒!有多少人在使用它?
数据库中有 125,000 人。 其中,自 2013 年项目启动以来,约有 29,000 人实际提交了解决方案,15,000 人评论了解决方案。 并且有 1,000 人在 GitHub 上为该项目做出了贡献。 Exercism 有 33 个活跃的语言轨道,以及 22 个正在进行中或已被请求但尚未开始的语言轨道。
根据 Google Analytics 的数据,我们每月约有 50,000 名访问者,每周 12,000 名,他们来自 201 个不同的国家/地区。
是否有任何教育机构在使用 Exercism?
是的,显然非常多! 我随机遇到一位法国教授,他说他将 Exercism 用于他的 OCaml 学生。 许多训练营都在使用它,包括 Fullstack、Turing、gSchool、IronYard、Ada Academy、Flatiron School、DaVinci Coders、General Assembly,可能还有其他机构。 但是,我不知道他们是如何正式使用它的。 它是课程的一部分吗? 还是只是他们向学生推荐的东西。 我不知道。 耶鲁大学 IT 部门的一位人士说,他正在使用它举办一个夏季编程课程。
所有练习都是社区贡献的吗? 新练习的标准是什么?
是的。 我创建或采购了最初的 30 个左右,并在 Ruby 中实现了它们,然后社区贡献了另外 70 个练习,并且他们此后贡献了大约 50 种语言的实现。
每个练习都必须是一个相当简单的问题,不涉及真实世界的技术(没有 Web 服务器,没有数据库等)。
练习不需要教授特定的概念。 我们的目标更多的是练习,因此我们需要为人们提供足够的练习内容,而不会让他们感到无聊。 我们已经弃用了一些我早期制作的问题,因为它们彼此太相似了。 任何新的练习都应该与现有问题有足够的差异。
有时语言具有难以学习的功能,因此我们提供了一些练习,让我们可以在该语言中一次引入一个功能。 之后,其他语言将把该练习作为练习来实现,而不是因为它与特定的语言功能有关。
学习者在完成当前练习之前无法继续进行下一个练习。 “完成”是什么意思? 只是提交它吗?
他们必须提交解决方案,在那时,如果他们再次“exercism fetch”,他们将获得下一个练习。 因此,从技术上讲,您实际上不必学习任何东西即可继续前进,您可以提交评论,也可以完全跳过练习(我们在命令行客户端中有一个用于此目的的命令)。
Exercism 的灵魂是发现和协作。 这是一段旅程,而不是目的地。 如果您放慢速度并探索,Exercism 将发挥其最大价值。 那些表现得好像重点是尽快完成尽可能多的练习的人,从中获得的收益会少得多。
我们还没有引入游戏化,因为这往往会鼓励错误类型的行为(玩弄统计数据,匆忙完成)。 这并不是说某些微妙或经过深思熟虑的游戏化形式不能成为产品的绝佳补充,但这是一个危险的领域,如果弄错可能会是灾难性的,并且最好完全避免它。
有很多方法可以放慢速度并从过程中获得更多价值
- 尝试针对同一问题的不同方法和解决方案
- 如果您使用标准库函数,请阅读其所有文档。
- 如果您无法解释某事物的工作原理,请学习足够的知识来撰写一篇关于它的博客文章。
有些人继续前进,做其他练习,然后稍后回来尝试其他事情。 提交者是否必须等待某人审核他们的提交才能提交更新版本?
否。 许多人会提交,在其他解决方案中摸索以查看其他人做了什么,从中学习,然后提交新的解决方案。 审阅者有时会查看三个迭代,然后在最后一个迭代上评论说“我喜欢这里的进展”或“我认为您的第二个迭代比这个更具可读性”或任何最有意义的内容。
为了使整个过程有效,必须有提交者和审阅者。 您在寻找执行审核和提供反馈的人员方面遇到任何问题吗?
是的,这是一个巨大的问题。 提供反馈比编写代码困难得多。
我认为人们可能不提供反馈的原因有三个
- 我能从中得到什么? 人们可能认为他们不会从中获得任何东西,但这是一个强大的学习经历。 您被迫表达直觉感受,并检查您的假设、习惯和偏见。 当人们不同意您的观点时,尤其是聪明的人,您会开始假设他们所说的话有道理,然后您会想,根据他们的经验,是什么必须是真实的,才导致他们得出这个结论。 因此,您从提供反馈中学到的东西比做练习要多得多。 但是,在您亲身体验之前,您永远不会知道(或相信)这一点,而要体验它,您需要克服实际去做它的障碍。
- 这很可怕。 您真的把自己置于比编写代码时更大的风险之中。 很多人害怕自己会被嘲笑或说出愚蠢的话。 网站上的很多人都是编程新手,而不仅仅是所讨论的编程语言的新手。 很容易想到“我到底懂什么?”或“我凭什么告诉别人什么更好?” 克服这个障碍的秘诀是直接进入并提出观察和问题。 “哦,我不知道你可以做 XYZ,真棒!” 或者“我不明白这个东西是如何工作的? 你能解释一下吗?” 或“我花了很长时间才弄清楚这三行代码在做什么。 ”有没有办法让它更具可读性? 或者“这只是我需要习惯的成语吗?”
- 很多人看代码,只看到... 代码。 很难知道该说什么或该寻找什么。 我们在识别代码异味方面没有太多培训,因此我们可以盯着代码看,但实际上不知道该说什么。
我看到了两种解决反馈不足问题的方法。
第一种是提供关于如何提供反馈的学习材料。
大约一年前,我做了一个实验,我为一个 Go 轨道中的练习编写了一个“代码异味实验室”。 它有大约 12 个针对同一问题的不同解决方案,人们通常会做的事情,然后对于每个示例,它都要求读者考虑他们可能会在代码中指出什么。 之后,它收录了来自其他人的许多评论,这些人通常会在这些解决方案之一上说些什么。 它要求这个人考虑他们是否同意,将其与他们的想法进行比较,然后详细讨论您可能会谈论的事情,包括指向有关每件事的资源的指针。
这需要很多工作,但这是值得的。 有几个人用它来让自己习惯于提供反馈,并继续在整个轨道上提供反馈,而不仅仅是在那个练习上。
我们可以做的第二件事是对解决方案进行机器学习。 当您提交解决方案时,我们应该能够告诉您,“嘿,这与其他内容非常相似,这是提交给其他内容的评论。” 此外,我们应该能够告诉您,“去看看这些与您的解决方案非常不同的解决方案。” 然后他们可以查看这些解决方案,从中学习,并开始对话。
您是否必须处理网站上的任何行为或社交问题?
出奇地少。 有几个人变得非常激动,并对所有事情做出回应或提供反馈,这可能有点像有人挤占您的空间,如果他们总是需要最后发言权。
很多人无意中很唐突。 有些人会非常直接:“做 X!” “Y 是错误的!” 当然,没有对错之分。 有权衡。 有一些原因可以解释为什么您可能不想选择 Y。 说“根据我的经验 XYZ”和“我看到很多人在做 PRQ,这是一篇博客文章”,或“这是一些文档”,会使对话更有趣。 因此,我们都可以学习很多关于就代码进行对话的知识。 这也取决于提交代码的人的学习目标。 刚刚开始学习一种语言的熟练程序员,将需要与那些第一次学习编程的人不同类型的反馈。 这也确实取决于个性风格。
《连线》杂志称 Exercism 为“让您学会足够好的代码以找到工作的网站”。 您对此有何看法?
Exercism 基于这样一种理念,即即使在较低的熟练程度下,您也可以培养高度的流畅度。 换句话说,您可以非常流利地掌握编程语言的基本语法、习惯用法、约定和标准库,而无需能够用该语言解决实际问题。
这是关键:我专门将 Exercism 的目标定位于一种熟练程度,这种熟练程度不会让您被聘用,除非您已经是程序员并且知道如何做现实世界的事情。
整个流畅性和熟练性问题很有用,因为它释放了认知资源。 一旦您在基本级别上具有流畅性,提高您的熟练程度,然后再提高您的流畅性就容易得多。
语言流畅性被 Language Hunters 项目描述为,“当您在半夜被手电筒照在脸上叫醒时,您可以说的话。”
Language Hunters 描述了 四个熟练程度级别,您可以在其中表达和理解
- 非常简单、具体的想法; 例如,“好音乐” 或“饮料”
- 简单、完整的句子; 例如,“我怎么去聚会?”
- 更复杂、描述性的语言; 例如,讲述一个关于聚会上发生的事情的故事。
- 复杂的政治、社会、经济话题; 例如,“聚会应该是非法的吗?”
现在将此带回通常参与 Exercism 的三类人
CodeNewbies:第一次学习编程的人。
- Exercism 不适合完全的编程初学者——该网站 假设学生已经使用其他资源掌握了非常基础的知识。
- 他们正在学习的语言是偶然的,但我认为通常是 Ruby、Python、JavaScript、Java 或 C#。
- 他们感到不知所措,并且常常感到非常困惑。 他们已经完成了手把手的教程,但他们不知道从哪里开始自己做事。
- Exercism 提供了许多小的成功,并揭示了知识差距,他们可以使用其他资源来填补这些差距。
- 对他们最有用的反馈类型往往是相当苏格拉底式的,引导他们思考简洁性、清晰性以及良好地使用语言(基本语法、数据类型、核心库函数等)。
Polyglots:正在学习一门新语言的程序员。
- 这些人通常需要学习这门语言以进行新的工作项目,或为转到更有趣的工作做准备。
- 他们经常感到沮丧,因为他们习惯于精通他们常用的语言,现在突然他们必须非常专注于基本语法。
- Exercism 让他们能够快速掌握语法的流畅性,然后他们将能够轻松地跳到其他地方的真实世界的东西。 奖励:他们熟悉了新语言的测试。
- 对他们最有用的反馈类型是关于语言习惯用法和约定,有时是可读性和清晰度之类的事情。
工匠:深入研究其主要语言的程序员。
- 通常,这是会花几个小时使用词库来为事物找到正确名称的人。
- 他们倾向于考虑代码异味、复杂性、遗留代码、重构、代码审查、命名事物等。
- Exercism 为他们提供了一个安全的地方来探索这些东西,并提供了一个关心这些东西的社区。
- 他们不想要反馈,而是想要就设计原则和想法进行深入而细致的对话。
CodeNewbies 和 Polyglots 都旨在实现低熟练度下的高流畅度。 然而,对于 CodeNewbies 来说,实现目标的道路有点漫长,因为他们还需要学习基本的编程概念,而不仅仅是语法、库和约定。
工匠不太符合高流畅度、低熟练度的模型,但他们对项目至关重要。 他们倾向于提供出色的反馈,他们通常处于职业生涯中发展他们的指导和领导能力(技术导向和人际导向)技能的位置,并且他们通常关心代码审查。
是否有计划将 Excercism 翻译成其他人类语言?
目前没有,但这已经出现过几次了。 我收到了许多关于葡萄牙语的请求,以及一个关于韩语的请求。
问题是我甚至还没有解决用户体验问题,在我解决用户体验问题后,我想致力于改进人们获得的反馈。 人工翻译还很遥远。
您告诉《连线》杂志,您想筹集资金来支付人们在该网站上的工作。 这件事发生过吗?
我现在终于开始做这件事了。
我已经提交了一份资助申请,并且一直在与一家英国公司洽谈,该公司的创始人之前曾为 Exercism 做出贡献,并且相信该项目。 如果我可以筹集到足够的资金,这家公司将给我很大的折扣,以便完成我们所需的设计工作。
如果我们没有获得资助,我将考虑赞助。 有这么多眼球,我想编程语言学习材料的一些出版公司可能会想与我合作。
您是否曾经让 Rikki 机器人在其他练习中运行?
是的。 Rikki 正在为 Go 中的几个练习提供反馈,并且即将开始在 Crystal 中提供反馈。
这肯定需要大量工作。 是否有一个核心团队在维持运转?
是的,他们做了很多工作。 我们有很多人参与语言轨道。 一个小型核心团队专注于命令行客户端,少数人积极参与网站。
我认为,如果我们能够完成这次重新设计,产品方面的事情将更易于维护。 一个问题是,当用户体验一团糟时,拥有精美的代码真的毫无意义。 该网站真的很难贡献。 目前,我们有一群没有设计经验的开发人员,对设计提出建议; 这不是一种非常有成效的状态。
您对 Exercism 的下一步发展有什么想法?
1. 课程和语言轨道的治理
2. 赞助以资助正在进行的工作(开发、研讨会、营销等)
3. 网站重新设计
4. 研讨会和聚会工具包,将 Exercism 带入现实世界
5. 机器学习和 AI(类似于 Rikki 机器人)
我正在做的第一件事是弄清楚所有课程内容的治理。 我想把它交给社区。 它已经主要掌握在社区手中,但我想使其正式化。
我最近一直在思考 Exercism 的健康状况和状态。 我花了一些时间和精力思考如何使项目更健康,以及如何帮助贡献者和维护者更快乐。
特别是,我想创建一个特别工作组(一个短期的、有时间限制的工作组),其明确目标是为如何更好地管理 Exercism 语言轨道提出建议。
我希望这个特别工作组考虑如何达到所有活跃轨道都有三到四个活跃维护者的程度,并提出关于如何
- 寻找新的贡献者(使用聚会、会议、博客文章、研讨会、闪电演讲、截屏视频或其他完全不同的方式)
- 指导和鼓励贡献者,以提高贡献频率
- 从现有贡献者中提名新的语言维护者
- 让维护者对 Exercism 感到更快乐和更兴奋(使用定制的赠品、赞助,以便我们可以送维护者参加相关会议、任何其他可能很棒或很酷的东西)
- 帮助维护者利用他们在 Exercism 的工作来提高他们的声誉或人脉(例如,如果他们想在会议上发言、撰写博客文章或制作其他作品)
- 退出项目(即,停止成为语言轨道上的活跃维护者)
- 如何发出语言轨道未被积极维护的信号,以及如何打开或关闭轨道(即,已维护和未维护)
理想情况下,我希望看到一种方法,使每个语言轨道都得到可持续的维护,没有人冒着精疲力竭的风险,并且 我们有足够的贡献者和维护者,以便某人可以在他们准备好时继续前进并完全做其他事情而不会感到内疚。
“研讨会”的事情对我来说很有趣。 Ashley Williams,Node 的核心维护者之一,今年早些时候在柏林 RustFest 上,使用 Exercism 作为课程举办了一个“Rust 入门”研讨会。 她说进展非常顺利。 人们非常兴奋。
我想尝试做更多这样的事情。
1 条评论