闲话 java

今天收到一封读者来信,顺着 email 找到了他的 blog 。看到上面扯到 java ,<a href="http://dreamhead.blogbus.com/logs/2005/12/1676755.html">http://dreamhead.blogbus.com/logs/2005/12/1676755.html</a> 忍不住也闲话两句。

最初,作为一个 die-hard 的 C++ 程序员,我曾经是很瞧不起 java 的。不知道时候还有朋友保留我在 5 年前,作为一个自由程序员印过的私人名片。当时便直接把自己对 java 的不屑一顾签写在上面。

日子过了好久,人的思想也在一步步改变。在我写那本书的时候,对 java 的态度已经好了许多。至于现在,离那些文字又过去一年,java 于我,可以说很有好感的,了解也逐渐增多。

记得在前不久的 C++ 会议上,曾有对 C++ 的批评。说是对于设计模式这些于现代程序员应该耳熟能详的名词,居然有许多 C++ 高手还很陌生,至少在碰到问题时,脑子里闪现的第一个念头不是这些。而换作一个 java 程序员,即使使刚入门不久,就可以对一个问题该用哪种设计模式而争论不休了。

我们可以看到不同语言的使用者观察问题的层面和角度居然可以有这么大的不同。

或许真的如朋友笑谈,java 封装和统一了太多东西,导致程序员的智慧无初发挥,只能集中到设计模式上发泄了 :) 而 C++ ,却有无数的方法证明你的聪明。

另一个例子也很恰当:如果在 java 社区,宣布了一向新特性,会使整个社区的开发效率明显提高,即使这个特性会使世界上所有的 java 程序效率损失 10% 。大多数 java 程序员还是会拍手称快。反正 java 在运行效率上的名声已经臭名招著了,大家也不再在乎。而换到 C++ 社区,即使这个新特性只有 0.1% 而不是 0 的性能损失,必然招至一片唾骂声,吵上10年也不可能写进 ISO 标准。在效率问题上,java 程序员更加指望那些为他们写虚拟机的人做出新的发明,然后发布一个报告,谈即新的技术可以使 java 程序运行速度加快即可。

不得不说,C++ 和 java 是在两个层次上的语言。一个从机器模型延续而来,一丝一环紧紧相扣。而 java 语言却从机器层面向上一跃,中间留下一个空挡。阻止程序员去跨越。这使整个社区的人力集中于更高的层面,未尝不是一件好事啊。

我在书中,思想毕竟还是局限了一点。用 C++ 角度考虑问题还是偏多了些。或许,慢慢的,游戏行业真的要演变为 C++ 社区最大的根据地了。

ps. 我隐隐感觉, .net 技术有超越 java 之势。
关于 SIMD ,新的 intel 编译器正在重点考虑向量化技术,让C++编译器自动产生使用 SIMD 的代码,成果显著。