原文:http://flyingapplet.spaces.live.com/blog/cns!F682AFBD82F7E261!375.entry
“我们争取的是C++程序员。我们已经成功地把很多人从转向Lisp的半路上给拉过来了。”
- Guy Steele,Java规范作者之一
软件行业里一直有两股力量在争斗:酷想法的学院派和同样可怕的酷头发的老板。每个人都知道酷头发的老板指哪些人,对吧?我想大多数做技术的不仅认识这个卡通人物,而且知道自己公司里面哪些人可以和这个卡通人物对号入座。
那些酷头发的老板们的身上神奇地结合了两种品质,这两种品质各自都很常见,但很少同时出现在同一个人身上:(1)对技术完全彻底一窍不通;(2)对技术有很强的主见。
比方说,你要写一个软件,酷头发的老板完全不懂软件,对编程语言也一无所知,但是他就是知道你应该有什么编程语言来开发。真的,他觉得你应该用Java开发。
他为什么这样想呢?让我们研究一下酷头发的老板的大脑的思维方式,他是这样想的:Java是标准,肯定是标准,因为天天都可以在媒体上看到。既然是 标准,用它就不会给自己带来麻烦。同时市面上总是有很多Java程序员,所以如果我手下的程序员辞职了(不知道什么在捣鬼,我手下的程序员老有人辞职), 我很容易找到人替代他们。
嗯,听起来不是完全没有道理。但是,这种思路基于一个隐含的假定,而且这个假定不成立。酷头发的老板们相信所有的编程语言都是基本等价的。如果真是这样他就对了,如果所有编程语言都是等价的,当然用大家都在用的语言。
但是所有的语言都不是等价的,其实不用分析语言之间的具体差异就可以证明这一点。如果1992年你问酷头发的老板应该有什么语言开发软件,他会同样 毫不犹豫地告诉你答案。应该用C++开发软件。如果语言都是等价的,酷头发的老板的观点为什么会改变呢。更进一步讲,开发Java的人们还有什么必要创造 一门新语言呢。
通常情况下,如果你创造一门新的语言,那肯定是因为它可以在某些方面优于已有的方法。实际上,Gosling在第一版Java白皮书中明确指出设计 Java是为了解决C++语言的一些问题。所以现在你知道了:不是所有语言都是等价的。如果你顺着酷头发的老板的思路看到Java,然后沿着Java的历 史看到其来源,你就会发现自相矛盾之处了。
那么谁对谁错呢?是James Gosling,还是酷头发的老板?不用说当然Gosling是对的。对于某些问题,有的语言确实 比其它语言好。下面我们来看一些有意思的问题。Java被设计得在某些问题上比C++好。哪些问题呢?什么情况下Java好,什么情况下C++好?有没有某些场景下其它的语言比它们俩都好? Continue reading →