学习对象语言

2003 年 5 月 23 日

如果我想教人们面向对象,我应该使用哪种语言?

在过去几年中,学习面向对象的首选语言一直是 Java。使用 Java 有很多很好的理由。

  • 它广为人知
  • 它使用 C 语言的语法,这正在成为主流风格。
  • 免费、高质量的开发环境广泛可用
  • Java 知识有助于获得工作

出于这些原因,我当然不会阻止使用 Java(尽管我会指出 C# 也拥有大多数这些属性,因此可以成为一个可行的替代方案)。但是,我不会仅仅局限于 Java。Java/C#/C++ 展示了一种面向对象编程的特定风格,如果你要向人们介绍面向对象,我认为展示一个替代方案是好的。

我考虑的替代方案是 RubyPython。两者都是动态类型语言,我认为在静态和动态类型中都有经验是有用的。这两种语言也非常有用 - 有很多任务可以用一个简单的脚本轻松地自动化,我认为每个开发人员都应该至少掌握一种脚本语言。

选择哪一个并不重要。我个人会选择 Ruby。虽然 Python 使用更广泛(并且可用),但 Ruby 在面向对象方面更纯粹(如果你正在学习面向对象,这很有用),而且对我来说感觉更简洁。此外,Ruby 还有块:能够轻松地将代码块作为对象创建。块是一个强大的编程工具,它可以教授关于代码结构的许多想法,这些想法在其他情况下很难理解 - 并为函数式语言提供了一个切入点。

许多人可能会问“Smalltalk 怎么样?”我理解这种想法,因为 Smalltalk 仍然是我最喜欢的编程体验。但是,脚本语言的优势在于,它是一个专业程序员会定期使用的工具,而即使像我这样的 Smalltalk 爱好者,也已经好几年没有启动过一个映像了。

所有这些都提出了另一个问题 - 你是否应该使用编程语言来教授面向对象。另一种方法是讨论这些原则,也许用 UML 来举例说明。我坚信你应该主要使用一种语言,这样人们就可以用它来做事情。对我来说,软件设计就像数学一样。虽然你可以通过阅读或聆听获得肤浅的理解,但你只有通过实践才能真正理解它。因此,要真正理解面向对象,你真的需要构建一些东西 - 并鼓励尝试不同的方法,秉承 PragDave 的 Kata 的精神。