早在 2000 年(当 .NET 向我们释放 IIRC 时)它是一种创新的尖端语言(我上次使用它是 2003 年)。
不过,从我读到的内容来看,Sun 的语言发展非常缓慢。我什至读过该语言在哪些地方发生了演变,例如添加了泛型,开发人员抱怨实现不佳。
这些是准确的看法吗?如果是,有什么想法,尤其是在看似明显的 C# 竞争的情况下?
从企业的角度来看,发展一种语言并不是一件好事,它实际上是非常糟糕的。
这就是为什么你会听到像 cobol、fortran 甚至 C 之类的老语言在它们后面写上年份数字的原因——许多企业坚持使用年份。
最重要的是,更大的团队意味着您团队中的某个人更有可能做其他人不理解的事情,因此保持语言简单和干净有一个重要但被低估的价值。这意味着不要添加太多替代方法来做事。
我与 Ruby 合作过,并且对这门语言很感兴趣,但从企业的角度来看,它是一种绝对可怕的语言。我无法计算一个糟糕的程序员会如何搞砸一个大团队,迫使他们花费数天时间来解决几分钟内造成的混乱。
由于泛型的复杂性,有些公司拒绝使用 java 5.0。(我们仍在研究 1.3 倍,但这是另一个原因)。
老实说,大多数“改进”给你买的很少。一些语法更改,删除几级大括号的能力。
我想不出一个 Java 迫使我重复业务逻辑的案例(当我试图让我的代码“DRY”时,我担心的就是这个)——它是一种足够干净的语言,可以完全 DRY,如果你是一个很好的程序员。
例如,你可以用闭包做的任何事情都可以用子类做而无需重复业务逻辑——由于大括号/额外的类定义层,你最终得到的看起来更糟,但通常更可重用(你可以扩展类你用来实现你的回调,但你不能扩展一个闭包方法,你必须重写它。)
在我职业生涯的前几十年里,我对代码并没有这种感觉(我喜欢语言技巧,越有趣越好),但现在我已经在这很长一段时间了——这可能是我的晚年潜入,或者可能是经验,但现在我看到了简单、明确、稳定的代码(由一种不会让你玩花样的语言提供)的巨大好处,并且无法真正找到许多替代方法的单一优势,即使他们节省了一两行打字。
但是,如果您正在寻找 java 升级,请查看 Scala。它非常惊人,仍然在 JVM 上运行,与 Java 交互等等。
大多数语言的起源和演变都有一只强大的手。想一想:Larry Wall/Perl、Guido/Python、Matz/Ruby、Odersky/Scala、Hickey/Clojure 等等。这些人都是语言天才。我愿意让我的左臂比他们中的任何一个聪明一半。
Java 实际上的区别在于掌舵的不仅仅是一个,而是一系列令人惊叹的语言专家——从 Gosling 开始,但我也想到 Guy Steele、Bill Joy、Gilad Bracha、Neal Gafter 等——都是了不起的人。这实际上是一件好事(我认为)。它使语言更好,但防止了停滞。
但在过去的几年里,语言领导力确实存在真空。目前,没有人在意这家商店。没有人会做出艰难的决定来决定什么适合 Java 模型并且添加(或更重要的是不添加)有意义。我不知道那是什么意思。我希望 Java 的巨大普及和影响力以及 JVM 的强大基础意味着这个真空太有吸引力了,不能在某个时候被填补和指导。但我只是谨慎地抱有希望,因为我不知道那会是谁。
John Rose 就是 JVM 方面的那个家伙。虽然如果我只能在其中一项中获得创新,我现在无论如何都会采用 JVM。:)
Java 的发展当然非常缓慢——尤其是如果您将它与 C# 和 VB 进行比较。我个人认为他们在以牺牲执行时安全性和效率为代价保持向后兼容性方面对泛型做出了错误的决定。.NET 方法在几乎所有方面都工作得更好,IMO。
Java 7 有很长的潜在特性列表——语言和平台——但它的制作时间非常长,而且许多特性仍然存在很大的问号。
但是,我不想对为什么会发生这种情况有任何“责备”。
Java 语言的发展一直很缓慢,但故意如此。
泛型提供了一个很好的例子。与早期版本的 Java 兼容是一项要求。鉴于项目的目标,泛型实现完全按照设计执行非常有用的功能。但是,它并没有满足许多开发人员对具体泛型行为的期望。
另一方面,JVM 的创新非常迅速,经常引领其他 VM,并促进性能领域的竞争。
在我看来,Java 语言应该尽可能稳定。我喜欢闭包的想法,但我不相信 Java 是它们的语言。(如果必须加入,我更喜欢保守的 FCM。)我与一个需要培训的开发人员团队合作,以构建和维护一个复杂的生产应用程序。Java 语言为我们提供了强大的功能和结构的完美结合。
其他语言,如 Scala 和 Groovy,以及移植到 JVM 的 Ruby 和 Python,将继续为 Java 平台带来生命,即使在 Java 语言本身已经走上了 COBOL 的道路之后。
Java目前与.Net有不同的问题,导致选择不同。
.Net,相对较新,有机会避免 Java 的一些错误,有机会做不同的事情。这给了它两个主要优点:
这两件事共同使 .Net 语言(目前)能够更快地发展。但是,就像我已经说过的那样,我们开始看到这些影响也赶上了 .Net。
我认为 Sun 现在是保守的,并确保他们在做出一些糟糕的决定后做出正确的决定。
此外,在 Java 1.5 出来之前,还有很多政治和混乱。许多公司都在使用像 Generic Java 这样的第三方 hack,因为这些核心语言功能不可用,但非常需要。
我认为他们从 1.5 开始再次加速,即将推出 1.7,看起来每个都提供了非常有用的新功能。该语言的开源也很好。
不管有些人怎么说,保持向后兼容性一直是 Java 语言中一个非常重要的特性。
我会说 .NET 已经让 Sun 的驴子发挥了作用,而且它们都存在是件好事。
长期以来,Java(无论好坏)都更喜欢通过框架引入新功能,而不是通过语言本身。
例如,您可能会争辩说,编写 Spring/Hibernate/Struts 应用程序的人实际上是在使用 Java 的一种特殊方言编写代码,因为如果没有框架执行的所有反射/注入/检测魔法,他们的代码将在很大程度上无法运行。
就个人而言,我更希望该语言能够进一步发展,并且框架作者可以通过字节码操作停止对语言语义的胡思乱想。
作为旁注,我也强烈不同意 Sun 在其泛型实现中使用类型擦除的决定。据说,他们想要确保向后兼容性,但对我来说这似乎完全是虚假的,因为注释(在 Java 5 中同时添加)创建了他们自己的一组不兼容性。无论如何,为 Java 5 编译的代码永远无法在早期的 JVM 上执行,因此向后兼容性声明对我来说似乎非常可疑。