在选择用于教授人们如何编程的编程语言时,有很多很多选择。Scratch 是教授基础知识的不错选择,因为它采用了拖放式积木编程方法。Python 或 Ruby 也是不错的选择——这两种语言都具有简洁明了的语法,被用于主要的实际项目中,并且拥有出色的社区和围绕它们构建的补充项目。或者还有 Java、Objective-C 和 C#,它们是可靠的编程语言和有市场的工作技能。老实说,它们都是不错的选择,但当谈到在学术环境中教授编程时,它们真的是最佳方式吗?
在 Linux.conf.au 2015 大会上,惠灵顿维多利亚大学的博士后研究员 Michael Homer 谈到了 Grace,这是一种专门为满足教育环境中编程教学和学习需求的开源编程语言。Grace 基于我们当前对编程语言的理解以及关于编程教学的教育研究从头构建。大学课堂中用于教授编程的许多语言都是较旧的语言——两种最流行的语言 Java 和 Python 现在都已经有几十年历史了——这些语言多年来积累了很多冗余。它们是强大而有用的语言,但有时它们对初学者不友好,并且在设计时没有考虑到编程教学。Grace 被设计为一种教育语言,因此其设计目标是尽可能地保持一致性并对新程序员友好。
Grace 具有四个主要设计原则。
- 简单的程序应该简单。
- 该语言需要具有可理解的语义模型。
- 该语言需要支持不同的教学顺序。
- 成为一种通用语言。
例如,Grace 中基本的“Hello world”程序是
print "Hello world"
相比之下,相同的程序在 Java 中是
class HelloWorld { public static void main(String[] args) { System.out.println("Hello world"); } }
对于新程序员来说,Grace 示例要容易得多,尽管更复杂的 Java 代码的每个部分都有其功能,但刚开始学习编写 Java 代码的人需要一段时间才能完全理解一切的含义。在他们学会之前,一切都只是一种需要遵循的咒语,魔法才能生效。这可能会使尚未完全理解所有规则的新程序员感到困惑。
Java 可能会让新程序员感到困惑。当我在大学担任计算机科学辅导员时,老实说,我花在教人们如何理解 Java 编译器错误消息上的时间比帮助他们学习编程概念(如变量和循环)的时间还要多。Homer 举了一个极好的例子,说明这一切会多么令人困惑,这就是他“最喜欢的 Java 错误”
class Counter { int total = 0; int add(int n) { return ( total += n); } int addAllNegative(Iterable < Integer > all) { for ( int n : all ) if (n < 0) int total = add( -n); return total; } }
在这个例子中,编译器为代码行“int total = add(-n);”显示了错误“error: ’.class’ expected”。错误消息导致学生按照错误提示去做,并添加“.class”(这会导致更大的混乱),而实际问题是他们不应该包含“int”。当他们编写那行代码时,他们使用了与之前一行代码中使用的相同的语法,但在这里却不起作用。值得庆幸的是,OpenJDK 8 没有这个问题,并返回了一个更理智但对新程序员不太友好的错误消息:“error: variable declaration not allowed here”。Grace 从一开始就被设计成易于初学者理解,而 Java 有时会使没有经验的 Java 程序员感到困惑。
Grace 还有许多许多使其更易于用于教学和学习编程的功能。观看 Homer 演讲的视频(如下)以了解更多详情,尤其是他的现场演示。该演示展示了 Grace 的一个界面,该界面在类似 Scratch 的拖放功能和基于文本的标准编码之间来回切换。在一个模式下所做的更改会自动转移到另一个模式。这是一种有趣的教学工具,一种语言的两种不同编程方法意味着新程序员可以在从积木式编程过渡到编写代码时继续使用他们对该语言的知识。如果学习者仍在学习同一种语言,那么积木式编程和编写代码之间的过渡会更加顺畅,并且能够以两种不同的风格查看代码真的很有帮助。
为了额外奖励,请查看惠灵顿维多利亚大学 Timothy Jones 在 Linux.conf.au 大会上关于在异步 JavaScript 中实现 Grace 解释器 Hopper 的演讲。如果说对 Hopper 解释器的开发进行了一次引人入胜的(如果相当技术性的)审视,那也不为过
Grace 是一种有趣的语言。我并不完全认同需要一种专门用于编程教学的语言,但我理解 Homer 的观点,并且在很多方面都同意他的看法。话虽如此,Grace 为多样化的编程语言世界提供了很多东西,并且它可以帮助学习者专注于学习编码,而不是处理其他语言由于其悠久历史而存在的一些细微差别和麻烦。因此,如果您正在教其他人如何编码,请查看 Grace,看看它是否适合您和您的学生。然后在这里给我们留言,让我们知道您的想法。
教育
文章合集,来自教育工作者、学生、倡导者、家长以及更多在教育领域实施开源并致力于为所有人构建更开放的知识库的人士。
1 条评论