13.书呆子的复仇
软件业有一场永不停息的战斗,书生气的开发者与官僚主义的经理之间总是发生冲突。大家应该都看过漫画《呆伯特》,熟悉里面那个发型高耸的经理^。我想,技术行业的大部分人对这个角色都过目难忘,因为在他们的公司里就有这个角色的原型。
^「这篇文章发上网后,我收到了一封显然发自肺腑的电子邮件,开头是这样写的:发型高耸?难道有谁的头发不是向上耸的吗?如果你只能想出这种词去悔辱你的经理,那么你们这些人活该被称为“书呆子”。」
那些经理奇迹般地同时具备了两种很常见但很难结合在一起的特点:(a)对技术一无所知;(b)对技术有强烈的个人观点。
举例来说,假设你需要写一个软件。你的经理根本不懂这个软件的运作机制,也不知道各种编程语言有什么区别。但是,他竟然明确要求你一定要使用某一种语言进行开发。没错,他就是要求你一定要用Java语言。
为什么他会提出这种要求?让我们看看他脑袋里是怎么想的。他的想法无非就是,Java是业界的标准。我知道肯定如此,因为媒体对此有铺天盖地的报道。既然它是标准,那么使用它就不会错。另外,这也意味着人才市场上肯定有无数Java程序员,即使现在为我打工的这批人都辞职了(真奇怪,这种事情总是不断发生),我也能够轻易地找到替代者。
嗯,这听起来也不无道理。但是,它的前提是一个没有说出口的假设,而这个假设实际上是错的。你的经理相信所有编程语言的功能都差不多,可以互相替代。如果这种想法是对的,那么他要求你用Java编程就很合理了。反正编程语言之间没有区别,那么就用大家都在用的那种语言吧。
但是,编程语言是不一样的。就算不探讨各种语言之间的具体区别,我也能向你证明这一点。回到1992年,如果你问经理使用什么语言开发软件。他会像今天一样毫不迟疑地回答说C++。如果所有编程语言都一样,为什么答案变了?进一步说,为什么Java语言的设计者要如此麻烦地去创造一种新语言呢?
一般来说,如果你动手创造一种新语言,那是因为你觉得它在某些方面会优于现有的语言。Java语言之父詹姆斯·戈斯林在第一份《Java白皮书》中说得很清楚,之所以要设计Java,就是想解决C++的一些弱点。所以结论就是,各种编程语言的编程能力是不相同的。如果你接受你的经理的假设,然后一路追溯到Java语言的源头,就会得到与他的假设完全不同的结果。
到底谁对?戈斯林还是你的经理?结果当然是意料之中的,戈斯林是正确的。某些情况下,一些语言就是比另一些语言更出色。可是这样一说又导致了另外的问题。C++不适合解决某些难题,所以Java才被设计出来。那么,什么情况下应该使用Java,什么情况下应该使用C++呢?会不会某些情况下其他语言比它们更合适呢?
一旦你开始思考这个问题,就会发现它非常棘手。如果你的经理被迫去想这个问题,当他看到它的复杂性时,脑袋恐怕都会爆炸。如果所有语言真的都一样,那么他只需选择一种看上去获得大部分人拥戴的语言就可以了,因为这实际上是一种流行风尚,而不是技术问题,所以即使像你的经理这样对技术无知的人也有可能轻松得到正确答案。但是,如果语言各有不同,你的经理就会突然发现,有两个互相关联的方程,他必须找到一个能够同时满足两个方程的最佳解,而最要命的却是他对此根本一无所知。第一个方程是找到(相对于要解决的问题)能够适用20年左右的最佳语言,第二个方程是(为这种语言)找到合适的程序员、函数库的机会有多大。如果假定所有语言都不同,就会遇到这种苦苦求解的情况,所以难怪你的经理不愿意接受这个假设了。
认为所有语言都一样的看法的缺点是自欺欺人,但是优点是可以使许多事情变得很简单。我想这就是为什么它被广泛接受的主要原因。它是一个令人舒服的想法。
大家都觉得Java—定有过人之处,因为它是一种很酷的新兴编程语言。但是真的如此吗?如果你站在远处观察编程语言的世界,似乎Java就是最新的东西。(如果你站得足够远,那么你看到的所有东西就是Sun公司出钱制作的大型霓虹广告牌。)但是,如果你靠近观察这个世界,就会发现不同的人对“酷”的理解是不一样的。在黑客圏子里,Perl被公认比Java酷得多。黑客社区网站Slashdot就是用Perl开发的。我估计你不可能看到黑客愿意使用Java的JSP技术开发网站。可是,还有一种更新的语言叫做Python,它的使用者往往看不起Perl。另一些人则认为Ruby语言是取代Python的最佳选择。
当你按照Java、Perl,Python,Ruby这样的顺序观察这些语言,你会发现一个有趣的结果。至少,如果你是一个Lisp黑客,你就看得出来,排在越后面的语言越像Lisp。Python语言模仿Lisp,甚至把许多Lisp黑客认为属于设计错误的功能也一起模仿了。至于Ruby语言,如果回到1975年,你声称它是一种有着自己句法的Lisp方言,没有人会提出反对意见。编程语言现在的发展不过刚刚赶上1958年Lisp语言的水平。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论