虚拟机技术现在非常热门人们认为它可以完成一切事情人们热衷于让JVM可以运行RubyPHP或其它一些热门语言以及支持像Java FX之类的技术这种现象是好是坏?Joe Winchester以自己的经历来论证了对此的看法
在Java出现之前我一直是Smalltalk(注Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境)的爱好者从Smalltalk转向Java的经历到现在依然让我记忆犹新从一门语言转向另一门语言并不是一件轻松的事情我依然记得当你真正掌握这门新语言时所到达的临界状态掌握一门新语言往往需要花费数月甚至数年的时间经过这段时间的历练你才能做出真正优秀的设计以及知道如何最好的应用它的哪一个模式如何避免错误发生以及如何进行性能调优等等
最近因为工作需要我要回过头来看一些以前的Smalltalk代码这时我发现在经历过这一段学习Java编程的阶段后我已经很难清晰的理解过去自己所编写的Smalltalk代码很明显我肯定不能再称自己是一个合格的Smalltalk程序员
说这些只是为了表达我的一个观点我认为每个人只可能精通一门编程语言换句话说如果你什么都精通其实也就说你什么都精通我喜欢一个只有一门语言漂亮简单的扁平结构世界在这样一个世界中程序员之间交流会变得更加轻松每个人可以彼此分享共同的经验而且不也不用来回的在不同的语言之间跳来跳去
当Java第一次面世的时候曾经有些虚拟机方面的家伙进行一些没有前途的尝试让Java运行在Smalltalk虚拟机上尽管他们拥有一个非常酷的叫做通用虚拟机(Universal Virtual MachineUVM)的技术但是归根到底这实际上还是一个保护Smalltalk地盘的反抗行为从理论上说这可能是一个好的思路人们不再用必须学习一种新的语法就可以体验新语言的好处但是实际上并非如此使用Java本地接口JNI编程来使两者联系起来是一件令程序员非常痛苦的事情这简直就是一场噩梦程序员在编程的时候要陷入很多麻烦例如在不同语言类型之间存在很多数据类型转化的问题
要想在Java下进行Smalltalk编程或者在Smalltalk下进行Java编程你需要非常精通两种语言而且你需要拥有一个非常发达的大脑来调试虚拟机注册表和大量设置DOS堆栈的个数
数年以来微软的家伙一直在抨击Java程序的速度慢它们认为Java程序是解释型字节码而不是完全编译好的这也是人们怀疑Java性能的一个主要借口而多数微软的语言则都被编译为解释好的pcode然而现在微软又开始鼓吹它的通用语言运行时(CLR)将其称为编程的圣杯这一点和Smalltalk/Java混合UVM非常相似实际上CLR上似乎只运行微软的语言自从其问世以来并没有引起太多其他语言的程序员倒戈
现在有一种现象令我感到非常忧虑虚拟机可以完成一切的观点正在逐渐复苏人们的精力不再集中在Java和这个语言向前发展所需要的改进上人们把精力都投入到让Java虚拟机JVM去运行RubyPHP或其它同类流行语言上还有让Java虚拟机支持Java FX这个几乎和Java语法无关的技术上如果这一切都实现了留给我们的又是什么呢?
我们拥有了一个不仅仅可以运行Java还可以运行其它语言的虚拟机我们拥有了很多不使用Java编写但可以编译为Java的语言我们拥有一些失去了自身价值定位的东西换言之我们迷失了自己的方向失去了准确的定位
对于我们这些编程序的人来说我依然认为熟练掌握多种语言实际上是行不通的我们最终会变为二流程序员只能编写性能糟糕和设计恶劣的程序更不用说随着环境和语言的切换调试方面的噩梦随处可见
那么为什么人们对虚拟机的热情如此高涨呢?你或许会说其它语言是动态的而Java是静态的或者其它语言像PHPRuby更适于Web编程或者什么其它的原因?这些都是现实不过我认为我们应该去完善Java来解决这些问题而不是增加复杂度朝着虚拟机使劲让其支持这些几年前已经不存在的语言对于Java来说没有什么错误和难题是不可以被解决的我认为这才是人们应该关注的地方而不是让JVM变成一个杂而不精的东西否者Java最终将面临与Smalltalk相同的命运
历史总是在惊人的重复如果我们不把Java看作一门语言而仅仅看作是一些Java技术之类的东西的话我们就正在让它走向灭亡使其相对于其它语言的优势逐渐削弱同时也让编写优秀软件变为一件更难的事情