5

什么是完美的教学语言 - Garth

 2 years ago
source link: https://www.jdon.com/57771
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
什么是完美的教学语言 - Garth

Python 作为一种教学初学者的语言远非理想。完美的教学语言是什么,或者至少应该是什么。我将列出这种语言的十二个特征,八个基本特征和四个理想特征。之后,我将对当代语言的衡量标准进行一些(相对)冷静的观察。

理想的特性

以下是理想的特征:

  • 工具支持。显然,我们希望我们的语言拥有一个强大的 IDE,并提供广泛的重构支持。应该有一个声明式构建工具和一个全面的测试环境,支持一系列方法(包括 TDD、BDD 和 PBT)。
  • 杂耍装置。初学者应该可以在没有帮助的情况下安装运行时、核心工具和 IDE。在语言版本之间切换应该很简单,就像在同一设备上维护多个版本一样。
  • 适用性。该语言应该可用于一系列应用程序。理想情况下,应该支持浏览器、移动设备、桌面和云。
  • 工业采用。该语言应该在整个软件行业中得到认可,并在面试过程中发挥重要作用。开发人员应该能够直接在行业中使用该语言,或者至少可以轻松转换为类似的替代方案。

主要特点

以下是我们理想的编程语言的主要特征。

  • 融合的:语言的特性应该结合在一起以提供一致的方法。在存在重复的情况下,它应该是一个深思熟虑的选择,而不是事后的改造。就像一个好的故事或电影一样,在语言的一部分中实现的“世界构建”不应该在其他部分中被挫败或被取消。例如,应该提供集合文字,但集合应该是常规类型,遵循与其他规则相同的规则,并且能够由开发人员扩展。
  • 综合的:尽管使用单一范式语言进行编码是一门优秀的学科,但学生的母语应该让他们接触到他们在工作场所可能需要的风格。为便于讨论,我将这些定义为命令式、面向对象、函数式和通用。该语言应该提供在这些范式中的每一个中进行编码的能力,并且(如上所述)尽可能无缝地集成它们。
  • 相关的:该语言不应违反我们行业的既定惯例。语言中使用的术语应与主流用法相呼应,而不是重新定义通用术语或进行任意替换。如果某个术语过时和/或仅因偶然使用,则可以例外,例如将static替换为shared。
  • 简洁:应谨慎使用关键字和特殊符号。保留字的数量应该最少,但至关重要的是,同一个关键字绝不能有多种含义。违规的例子是C++ 中的类和Java 中的扩展。理想情况下,符号也应该如此,但由于实用性,让步是不可避免的。在重用符号的地方应该有一些更高的主题来统一不同的含义,例如在 Scala 中使用下划线。
  • Goldilocks Typed:必须有一个没有特殊情况的统一类型系统。值类型和引用类型之间的任何内部区别都应该对开发人员隐藏。该语言必须在每个声明中都要求一个关键字或符号,并且每个变量都必须有一个已定义的类型。应明智地使用类型推断,以确保静态类型不会成为障碍。相反,类型推断不能如此普遍和阴险以致引起混淆。
  • 可扩展:认识到现代性,该语言应使其运行时能够利用多核和云托管硬件。默认情况下,变量应该是不可变的并且评估是惰性的。理想情况下,应该可以将代码库划分为纯区域和有副作用的区域。
  • 敏捷:学习者应该能够在快速反馈循环中工作,在那里他们可以快速看到代码更改的后果。编译和部署时间不应导致学生注意力不集中。理想情况下,构建/部署/测试周期应该是持续且无缝的。
  • 具有挑战性:该语言不应要求使用高级功能来完成日常任务。也不应该将常见的错误误认为是尝试使用高级功能。然而,语言应该提供一个开放式学习路径,在那里可以扩展语言和运行时。

对现有语言的思考

以下是我对当前语言如何衡量这些标准的看法:

  • 有许多较新的语言建立在过去的经验之上,并且在集成性、简洁性和可扩展性方面得分很高。在我大量的空闲时间里,我试图学习ReScriptElm,我觉得这两个都令人印象深刻。遗憾的是,这些语言严重依赖纯粹的 FP,因此在综合性和相关性上得分很低。它们非常适合以易于理解的方式教授 FP,但可以排除在此讨论之外。
  • TypeScript是一门极好的语言,它改变了我对代码的看法,变得更好。它在全面和具有挑战性的类别中获得加分,使结构类型和映射类型成为主流。不幸的是,它最大的优势仍然是最大的弱点,尤其是在当前背景下。通过在 JavaScript 上构建,它打开了一个潘多拉魔盒,我们不希望将这些问题强加给初学者。
  • C# 和 Java 非常全面,在可扩展性方面做得很好,并且正在改进类型和简洁性。对于有经验的开发人员来说,它们是很好的选择,但在集成性、相关性和简洁性方面严重不足。这两种语言仍然有很多仪式、杂耍值和引用类型,这使得教授函数式编程变得困难,并且有许多不推荐使用的特性。
  • 十年前Scala本来是一个竞争者,但由于技术债务问题而被其社区的优先事项所拖累。Scala 3 在很多方面都是一门新语言,在解决这些问题方面还有很长的路要走,但任何人都在猜测采用的速度。五年后它可能是一个不同的故事,但现在我们排除它。
  • RustF#是我们遇到的第一个强有力的竞争者。两者都会对我们所有理想的特征给予高度评价。它们越来越受欢迎,吸引了新采用者的称赞,并被第一篇文章的读者推荐给了我。然而,他们(以不同的方式)太固执己见,无法做出最后的决定。
  • 这给我们留下了RubyGoSwiftKotlin。我不得不承认我是 Ruby 的忠实粉丝,并相信它是一种很棒的教学语言,尤其是在 Ruby 3 中可用的静态类型。在类型栏的另一侧 Kotlin 和 Swift 选中每个框,优势将归于 Kotlin当您包括理想的标准时。最后,我找不到排除 Go 的理由,即使它不是我的菜。我认识的使用它的教育工作者都是忠实拥护者,对泛型的支持即将到来。所以值得认真考虑。

结论

想象一下,如果明天你被告知必须教授“X 语言”一年,而你的薪水将完全取决于学生作为开发人员的成长,你会有什么感受。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK