Java的封面

关于译者

感谢BOOM提供了本文翻译。BOOM是个程序员,就职于某IT公司,有关他的更多信息请他的新浪微博:http://weibo.com/huji0624

译者注:这篇文章是Paul Graham写于2001年的一篇预言Java的文章。

这篇短文起源于我和几个程序员曾经的一次关于为什么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的预言中,我搞错了。它有可能成为一门由大公司为了削弱另外一家大公司而推广,由一个委员会为主流拥护者而设计,被捧得天花乱坠,并且被国防部所喜爱的编程语言,虽然如此,但是这门语言又碰巧是一门简洁美观而又很强大的语言,我超喜欢用它写程序。这是有可能的,但是可能性非常小。

[英文原文:java's cover ]

分享这篇文章:

42 Responses to Java的封面

  1. champ says:

    即使10多年过去了,这篇文章仍然说中了Java的要害。

  2. abc@abc.com says:

    无知者无畏啊。这个傻逼连C和C++谁先谁后都不知道就开始胡喷了。Java的确有问题,但是也不是这样啊!

    • momo5269 says:

      文中没有C和C++先后问题的语句啊…….难道我看错了

    • 小张 says:

      “而不像C语言那样。它被设计成了另一个C++:C加上一些从几个更高级的语言里拿过来的思想。”

      老兄,注意了,第一具后面是句号,不是都好;后面一句是翻译的不好,但是没有说错。是你没看清楚。

    • Null says:

      你让我想起了这个.

      老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。”当晚,程序员老公手捧一个包子进了家门。。。老婆怒道:“你怎么就买了一个包子?!”老公答曰:“因为看到了卖西瓜的。”

    • 程序员 says:

      To:abc@abc.com
      无知者无畏啊。
      =========
      你的这个评价放你自己身上还真是合适

    • D.L says:

      1.先了解下Paul Graham看看是谁无知
      2.根本没提到c和c++的先后,作者的意思是java被设计成了另一个c++:”C加上一些从几个更高级的语言里拿过来的思想。”
      3.这篇文章主要也不是来数落java的不是的,作者在文章1,3两段反复强调”是关于程序员的嗅觉的东西”,用java来作为程序员的嗅觉的学习案例。
      (1).生理上嗅觉是一种感觉,是远感.想想我们自己在闻到好味道跟坏味道的反应吧,我们甚至不用看到或者尝到那个散发味道的东西就做出了判断.对于未经训练的人来说依靠的更多是本能与经验(比如闻到臭脚丫子味你肯定想逃离这种环境,因为这意味着危险的有害的,可能是能传染的脚气.闻到烤肉的味道的时候不自觉的口水就哗啦啦的了,你的身体已经为你进食这种东西做好了准备工作,它在告诉你那是肌肉与脂肪对你有好处.这些都是本能).经过训练的人(比如大厨与品酒师)可以分辨很多的气味,以及散发这些气味的物质,分析它们如何的组合与处理.
      (2).作者是要教我们如何嗅出各种技术的味道.这不是我们与生俱来的所以要学习.至于为什么不去直接”尝”而是去”嗅”是因为”这个世界上有太多的技术,你不可能把他们都学完。你应该学会利用一些外在的信号来评判是否值得花时间去学习。”作者也说自己从来没有用过java.文章中的11点就是作者告诉我们他是如何来嗅的.
      (3).评估一个语言居然几乎没有一点针对这种语言的技术分析,而是大量的带有感性色彩的东西(动机,虚伪,官僚,喜欢…),很多人可能会说”这不科学!”.这就是嗅,嗅觉是一种感觉,先感觉在理性思考分析是什么造成这种感觉.作者是个黑客文章中有浓浓的黑客文化的味道,个性,喜欢自由,不循规蹈矩.语言发明出来是给人用的,如果不考虑人因素如何”科学”?abc@abc.com估计又是陷入到技术分析中去了
      4.Paul Graham还是很NB的,预测还是挺准的(04年预测过ipod如果升级成手机再加入移动互联网肯定会很NB,让微软很难过.果然如此….)这篇文章中sun又被他的乌鸦嘴说中了…
      5.总觉得国内程序太注重技术了,其实直觉,灵感,品位,也是很重要的.我不是程序员(其实我很想做,一言难尽…),算个爱好者吧,说的不对的请见谅!

  3. Sevenx Wasly says:

    个人觉得,一人东西有没有价值,和有没有人是真心喜欢它的没有多大关系,最重要的是看它对于生产力的提高有没有起到同类所不能达到的效果。从一定的程度上来说我支持Java。

  4. 者年 says:

    现在看来,不可否认的事实是:Java是成功的。Paul Graham 关于语言的论调太不靠谱。

  5. Jade says:

    CAFE BABE 已经被喷得习惯了……

  6. youngto says:

    没有用过请不要妄加评论!

  7. haitao says:

    与原文作者类似,一直觉得IT界有种 捧标准 的娱乐圈通病:
    b/s、xml、java,流通率都是纯粹被捧出来的
    从实际使用角度,明明都是比较差的东西。但是人云亦云、三人成虎的年代,就真的成了主流。。。。。

    • cyler123 says:

      XML为什么算是“被捧出来的东西”啊?那里差了?不用XML的话,替代的是什么?(PS:YAML其实也是XML的思路)

      • haitao says:

        xml以前也是像java一样神圣,谁批评谁就是外行。。。。。
        不过,很久以后,json普及,才使得xml走下神坛。
        我说xml差,其实是因为它的层次模式,解释开销会大很多,
        因为我一直在用扩展的ini(其实就是平板式的key=value),好处现在应该很容易接受了吧。
        (当然,未扩展的ini,不能支持层次信息,的确不太够用。另外,json其实也是层次模式,解释开销也不会低,只是它由js解释器来负责了,造成性能不错的错觉)

    • champ says:

      是啊,Google开放Android平台上的C/C++编程接口的初衷有人指出了可呢的两个原因,正好都和java有关:
      1.Google开始觉得自己整的JVM在性能上可以全面超越传统JVM,并接近C/C++,现在发现搞不定了。
      2.Google发现Java的程序员不像C/C++程序员那样注重程序的性能和效率,开发App太耗CPU和内存。
      引用来源:http://coolshell.cn/articles/3549.html

      对于第一条,我就想说一个技术如果足够好能够让google这样的大公司都感到“搞不定”,那它能好到怎样?
      我向来不歧视任何编程语言和Java,但这第二条不禁让我思考,既然Java如此易用,以至于许多水平一般的程序员都掌握它,为什么注重程序的性能和效率的那些C/C++程序员没有去学Java变为Java开发人员?或者是一些变为Java程序员后开始不注重性能和效率了?我想Java一定出了什么问题。

      • 唐海康 says:

        其实我觉得注意效率和性能这个问题基本上每一个有GC的语言都会有的。而且这种问题应该是菜鸟身上比较常见。用java的人多了,实际上精通的其实和精通C或者C++的人比估计也多不到那里去。而且java在教学的时候一般都不会去强调这东西= =

    • cyler123 says:

      回复的层次限制。。。。好蛋疼。
      YAML不就更好了~解析简单,出现数据丢失时的影响不大(XML),不需要复杂的解析来保证安全性(JSON),冗余的标记字符少,层次的表达依赖缩进,所以必然是阅读友好的(和python一样,虽然YAML是perl众搞出来的)。

      • 依云 says:

        回复的层次限制。。。。好蛋疼。
        @haitao, json 那么简单的语法,在绝大多数语言中有着对应的数据结构,都是可以由编程语言自身直接解释的,和 JavaScript 关系不大(本来语法和 JS 也不兼容)。

      • haitao says:

        @依云 @cyler123 ,只要描述协议支持层次关系(不管是通过{-}还是缩进表达),解析的的过程就复杂了,同时开销也就大了。
        ini支持层次关系的扩展实现,是很“原始”的。。。。所以能继续保持“解析(取value)”的最高效

  8. xnnyygn says:

    从语言使用排行上,Java是排第一的。这已经说明了一半。
    剩下的一半是你怎么看待这个第一,也就是你怎么看待编程语言。
    我的态度是:理解这门语言的长处并且使用他。比如C适合系统开发,C++桌面程序不错,Java擅长服务器端,Ruby的Rails框架可以快速开发网站原型,Erlang是并行开发等等。

  9. tangzhaohua says:

    仔细品味原文, 有思想. ‘喜欢’,’品味’这类概念不能用对错好坏来评价.
    另, 通过”D.L 说:2012年09月24日11:30 上午”的评论, 可以看到他认真读了这篇文章.
    好文, 留存再看. 与是不喜欢 java无关. 这是一种分析问题的思路.
    和饮食一样, 有人为了充饥, 有人为了品味, 有人为了调养身体. 角度不一样吗.

  10. qiujumper says:

    我是慕名来看评论的,哈哈哈哈

  11. island205 says:

    看了文章,我就想来看评论,很激烈……

  12. 拓星 says:

    用不用java有什么关系呢?
    语言只是一种解决问题的手段,只要能解决问题,谁会在乎你用什么手段。

  13. FlyAway says:

    Java现在的成功已经不是因为Java语法了。而是强大的JVM和经过许多生产环境考验过的开源库。所以大企业才会离不开Java
    个人来说不喜欢Java语法,但平时写小程序用Groovy,以后搞并行的话还可以学学Scala.

  14. dffdfd says:

    作为一个已java出道的程序员,我坦然的说,我不喜欢java,作者的嗅觉跟我对这种语言的感觉是类似的。在我使用java的年月里,java没有让我掌握任何好的编程思想和编程习惯,它甚至一度使我陷入了精神上的绝境,觉得自己根本当不好一个程序员,太悲催了。

    用户数量和占有率根本说明不了任何问题。因为,编程语言是一门技艺,不是消费品,好的,尖端的,强大的技艺永远只会掌握在少数的优秀人才手里,而大部分人只能去使用一种受限的,低端的,愚蠢的工具,因为大部分人资质平庸,且在这方面不会没有上进心,对他们来说掌握Java,用来糊口,就够了。

    这篇文章写于10年前,现在看来依然犀利。

  15. Adam says:

    用户数量和占有率根本说明不了任何问题。因为,编程语言是一门技艺,不是消费品,好的,尖端的,强大的技艺永远只会掌握在少数的优秀人才手里,而大部分人只能去使用一种受限的,低端的,愚蠢的工具

    按dffdfd这么说,排名在前面的c和c++也一样了

  16. jeremy says:

    评价一门语言,如果没有算上它的社区支持,不算全面

  17. 梵天卡纳 says:

    真正牛逼的东西永远只有少部分人懂 不为广为人知的。
    从这一点看,Java应该算不上牛的
    本身社会就是由N种组成 优缺点通通都会有的 再牛也有缺点
    平常心看待评论,寻找一条适合自己的道路,做程序也选择一个适合自己的语言,每个语言都有其存在的支持者。

  18. sioux says:

    我是过来看评论的。。。。 评论比文章精彩。。

  19. 石头 says:

    李敖在接受访问时评论韩寒的文章说,看到一个臭鸡蛋,我不必要吃它才知道,闻闻就行了。

  20. 天涯一望 says:

    “应该如何介绍Paul Graham,才能让中国读者了解,这是一个在美国互联网界如日中天的教父级人物?”

  21. leon says:

    看了这篇文章,不得不说一下我自己的感受。我自己并不是一开始就在学习Java,由于需要所以才学习的Java。从我最爱C,到很烦的C++,再到Java,不得不说,相对于C++我更喜欢Java。C,C++,Java以及其他使用比较广泛的语言,各自有各自的优势和劣势,都有自己的运用范围,Java一样可以写出优秀的代码。语言只是一种工具,合适的最好,如果你硬要在上面去添加一些个人情感或者其他的一些什么,就自己在被窝里面说吧,别拿出来说,不然会影响正在探索的优秀编程者!

    • 王大锤 says:

      说的有道理,文章中的个人感情色彩太重了,而且通篇都是在说java,虽然一直强调不是在说Java,但是作为一个Java程序员的我,还是感觉很蛋疼。

  22. 你的益达 says:

    请问,其实 java和C等语言无法比较,就像说 windows7和linux哪个好一样!?
    你觉得哪个好呢?!
    windows7普通用户最多。而linux是许多编程者才主动使用的!
    windows7花哨。属于适合娱乐,服务大众的平台,而linux适合做服务器或者运行一些代码,侧重编程人员服务。
    所以对于服务不同群体来说,对于他们的好坏就不同,没有绝对的好坏!
    java比较适合做服务器应用等直接面向用户的或者其他。
    而C等等是做得更底层的事情。
    你拿这个比较谁好谁坏。就像拿乔丹和毛泽东比较好坏吗!?
    最后看完,感觉 扯淡 !

  23. fanfan says:

    编程语言好不好不重要,也没法定量评价,用得上就行

发表评论

电子邮件地址不会被公开。 必填项已用*标注