这篇短文起源于我和几个程序员曾经的一次关于为什么Java不可靠的谈话,这不是批评Java,这只是一次关于程序员的嗅觉的学习案例。
长时间以来,程序员们发展出了对好(或者坏的)技术的灵敏嗅觉。我想,把对我觉得Java不靠谱的原因写下来会是件非常有意思的事情。
有些读过这篇文章的人觉得像这种方式提出一种新观点是一种有趣的尝试.其他人觉得似乎对自己不太了解的事情妄加评论会招来麻烦。所以,以防万一,我先澄清一下,我所写的这些不是针对Java的(我从来没有用过Java),而是关于程序员的嗅觉的东西(关于这方面我想过很多)。
有句老话叫“你无法根据封面看出一本书内容(you can‘t tell a book by its cover)”,它源自于书被出售的时候,是以买主的个人喜好来装订封面的时代。在那个年代,你不可能通过书的封面辨别出它是哪本书。但随后出版商们也在进步,现代的出版商们让你很容易通过书的封面来分辨一本书。
我在书店花费了大量的时间,我觉得到目前为止,我已经学会了理解出版商想告诉我的关于一本书的所有事情,或许更多。在余下我没有待在书店的时间里,我大部分时间都在电脑前,我觉得从某种程度上来说,我也学会了通过一种技术的外在面貌来评判它。有可能是运气的原因,我让自己免于了几种终被证明很不靠谱的技术。
目前为止,我不太喜欢Java。我从来没有写过哪怕一行Java代码,顶多瞟过一眼Java相关的参考书籍,但我有种预感,Java不会成为一门很成功的语言。也许后会被证明我搞错了;做技术预言是一件很危险的事。但从某意义上来说,把为什么我不喜欢Java的原因,作为一种时间胶囊保存起来,是值得的,以下是这些原因:
1.它被吹得有点太天花乱坠了。真正的标准是不需要推广的。没有人会去推广C,Unix,或是Html。一个真正的标准往往是随着时间的推移被建立起来的,在这个过程中大多数人已经听说过它了。在程序员的雷达屏幕上,Perl阵营和Java差不多庞大,甚至还要大些,但它是依靠自己的长处逐步发展起来的。
2.Java的目标太低。在初的Java白皮书中,Gosling明确表示,Java被设计得让程序员更容易使用,而不像C语言那样。它被设计成了另一个C++:C加上一些从几个更高级的语言里拿过来的思想。像情景喜剧和垃圾食品或是旅游团的发明者一样,Java的设计者有意识地设计了一个供没有他们聪明的人使用的产品。从历史上来说,被设计成提供给他人使用的语言都不怎么样: Cobol, PL/I, Pascal, Ada, C++都是这样的。好的语言是那些设计者为自己创造的语言,比如C, Perl, Smalltalk, Lisp.
3.Java动机不纯。有人说过,如果人们只因为自己有些想说的话而写书,而不是为了写书而写书,这个世界将会更加美好。同理,我们总是对Java如雷贯耳不是因为它想表达一些关于编程语言的看法。而是因为Sun把它作为对付微软的计划之一。
4.没有人真正喜欢它。C, Perl, Python, Smalltalk, 和 Lisp 序员都非常喜欢他们的编程语言。我从来没有听人说过他喜欢Java。
5.人们是被强制使用Java的。我认识的很多使用Java的人用Java写程序因为他们觉得他们不得不用Java。要么是因为他们觉得他们必须用Java才能吸引到投资,要么是他们觉得顾客需要Java,或者是他们的经理让他们使用Java。他们都是很聪明的人;如果一门技术很好,那么人们应该是自愿使用它的。
6.Java有太多维护人员。好的编程语言一直以来都是被一小拨人开发出来的,但Java似乎是被一个委员会所维护的。如果Java终被证明是一门好语言,那历史上会首次出现委员会设计出了一门好语言这样的事情。
7,官僚作风太重。根据我所知甚少的Java知识,似乎使用Java的时候有很多的规定需要遵从。真正的编程语言不会是这样的。它会让你做你自己想做的事,然后摸索出一套自己的办法。
8.太虚伪。Sun目前假装Java是一门一如Perl,Python一样的开源草根语言,而它只是碰巧被大公司控制。所以,Java也拥有了大公司的沉闷。
9.Java是为一些大型组织所设计的,大型组织和程序员们有着不同的目标。他们希望一种适合于一大帮平庸的码农所使用的语言,这种语言的特点是把愚蠢的人所犯的错误的破坏力减到小,像U-Haul卡车上的限速器一样。程序员们不喜欢居高临下的编程语言。程序员们只需要力量。历史上,为大型组织所设计的语言(PL/I,Ada)在竞争中败下阵来,程序员们的语言(C,Perl)终赢得了胜利。所以有这么个说法:现在的青少年程序员,是未来的CTO。
10.不靠谱的人才喜欢Java。基本上我欣赏的大多数程序员都不迷Java。那谁喜欢Java?那些穿着西装的上班族,所了解的编程语言很少,但是他们经常从各种媒体上听说Java;还有大公司的程序员,因为他们发现尽然有比C++还好的东西;再有是愣头青的准毕业生,会喜欢任何能给他带来一份工作的东西(他们比较在乎这个东西会不会出现在测验上)。这些都是些见风使舵的人。
11.它老爸都自身难保了.Sun的商业模式正在从两个方面上被打压。用在桌面电脑上同样类型的廉价Intel处理器,现在用在服务器上也足够快了。并且FreBSD作为服务器的操作系统似乎不比Solaris差。Sun的广告暗示你需要使用Sun的服务器来运行工业用的应用程序。如果真是这样,那么Yahoo将会是第一个排队购买Sun服务器的公司;但我在Yahoo工作的时候,那里的服务器都是运行着FreeBSD的Intel铁盒子。这预示着Sun的前途不容乐观。如果Sun遇上了麻烦,那Java也会和它一起被拖下水。
12.国防部喜欢它。国防部鼓励开发者使用Java。这对我来说似乎是个毁灭性的信号。国防部在保卫这件事上干得很好(也很贵),但它热衷于计划,走流程和规定。他们的文化和黑客文化是完全相反的两个极端;在软件问题上,他们常站错队。上一次DoD很喜欢的编程语言是Ada。
谨记,这不是一篇关于Java的评论,而是一篇关于Java所表现出来的外在因素的评论。我对Java的了解还没有充分到喜欢不喜欢它。这只是关于为什么我没有急切地想学习Java的一种解释。
在尝试使用一种语言写过程序之前不考虑接受它看起来有点太随意了。但这是所有程序员不得不做的。这个世界上有太多的技术,你不可能把他们都学完。你应该学会利用一些外在的信号来评判是否值得花时间去学习。我同样也很随意地没有理会Cobol, Ada, Visual Basic, the IBM AS400, VRML, ISO 9000, the SET protocol, VMS, Novell Netware, 和 CORBA。这些技术是让我觉得有点不对头。
有可能在这个Java的预言中,我搞错了。它有可能成为一门由大公司为了削弱另外一家大公司而推广,由一个委员会为主流拥护者而设计,被捧得天花乱坠,并且被国防部所喜爱的编程语言,虽然如此,但是这门语言又碰巧是一门简洁美观而又很强大的语言,我超喜欢用它写程序。这是有可能的,但是可能性非常小。