4.8 KiB
说明
“我的语言极限,即是我的世界的极限。” ——路德维希·维特根斯坦
这句话对于口头/书面语言和编程语言来说同样适用。有一种微妙的现象:那就是你所使用的编程语言会将你的思维模式固化从而远离其他语言。Java 作为一门傲娇的派生的语言尤其如此。最早的语言设计者不想在项目中使用 C ++,因此创建了一种新的语言,这种语言看起来很像C ++,但有了改进(他们的原始项目从未实现过)。核心变化是虚拟机和垃圾回收机制的结合,这两个都在本书中有详细描述。 Java 还在其他方面推动行业了发展;例如,现在绝大多数语言都包含文档注释语法和生成HTML文档的工具。Java 最主要的概念之一来自SmallTalk语言,它坚持认为“对象”(在下一章中描述)是编程的基本单元。于是万物皆对象。
时间已经检验了这种信念,并发现它太过狂热。有些人甚至认为“对象”是完全错误的概念,应该被丢弃。就我个人而言,把一切都当成一个对象不仅是一个不必要的负担,而且还会招致许多设计朝着不好的方向发展。尽管如此,“对象”的概念依然有其闪光点。固执地要求所有东西都是一个对象(特别是一直到最底层级别)是一个设计错误。相反,完全逃避“对象”的概念似乎同样太过苛刻。
其他 Java 语言决策并没有像承诺的那样完成。在本书中,我会尝试解释这些。你不仅了解这些功能,还要了解为什么他们可能对你不太适用。这无关 Java 是一种好语言或者坏语言。一旦你了解了该语言的缺陷和局限性,你就能够:
-
当遇到似乎“已停用”的功能特性时,不会疑惑为什么.
-
通过了解界限的位置来更好地设计和编码。
编程有关管理复杂性;问题的复杂性依赖于机器的复杂性。由于这种复杂性,我们的大多数编程项目都失败了。许多语言设计决策时都考虑到了复杂性,但在某些时候,其他问题也势必不会少的,程序员不可避免地“碰壁”。例如,C ++必须向后兼容C(允许C程序员轻松迁移),并且效率很高。这些目标诚然很好,并且也解释了为什么C ++在编程界取得了成功。为了保证兼容性的代价会造成语言额外的复杂性。当然,你可以责怪程序员和管理人员,但如果一种语言可以通过捕捉异常来提供有用的信息,为什么不呢?
虽然Visual BASIC(VB)绑定在BASIC上,但BASIC实际上并不是一种可扩展的语言。在VB上堆积的所有扩展造成大量无法维护的语法。Perl 向后兼容 awk,sed,grep 以及其它要替换的 Unix 工具,因此它经常被指责生成“只写代码”(也就是说,你看不懂自己的代码)。另一方面,C ++,VB,Perl 和其他语言(如 SmallTalk)的一些设计工作集中在复杂性问题上,因此在解决某些类型的问题方面非常成功。通信革命使我们所有人更容易地相互沟通:一对一,团体和行星。据说下一次革命会形成一种新全球性的思想,这种思想源于足量的人之间的相互联系。Java 可能会也可能不会成为这场革命的工具之一,但至少这种可能性让我觉得我现在正在做的传道授业是一件有意义的事情。

