017 极客的复仇
想要创业吗?由 Y Combinator 提供资金支持。
2002 年 5 月
“我们的目标是追逐 C++ 程序员。我们成功地将他们中许多人拉到了 Lisp 的半途。”
- Guy Steele, Java 规范的联合作者
在软件行业内,存在一场持续的斗争:一方是理论派的学者,另一方则是同样强势的实务派管理者。尖发型的老板,大家都知道是谁吧?我相信,在科技界,大多数人不仅能认出这个卡通形象,还能指出自家公司中的现实原型。
尖发型老板奇迹般地融合了两种通常独立存在却很少见于一身的特质:(a) 他对技术一窍不通,(b) 对技术却有着强烈的偏见。
比如,假设你需要编写一段软件。尖发型老板对这软件的运作一无所知,分不清楚各种编程语言,但他却坚信知道你应该用哪种语言编写。没错,他认为你应该用 Java。
他为何这么想?让我们窥探一下尖发型老板的思维:Java 是一个标准。我肯定没错,因为新闻上总是这么说。既然它是标准,我用了就不会出错。这也意味着将来 Java 程序员会很多,如果现在的程序员离开了 —— 他们总是神秘地离开 —— 我也能轻松找到替代者。
听起来似乎还算合理。但这全建立在一个未被明说的假设上,而这个假设是错误的。尖发型老板认为所有编程语言基本上是等同的。如果这是真的,他的观点也许就对了。如果语言都是等同的,那么当然,使用大家都在用的语言。
但不是所有语言都等同,我认为即使不深入探讨它们之间的差异,也能向你证明这一点。如果你在 1992 年问尖发型老板软件应该用什么语言编写,他会毫不犹豫地回答:应该用 C++。但如果语言真的等同,尖发型老板的观点为何会变?实际上,Java 的开发者们为何还要费心创造一种新语言?
显然,如果你创造了一种新语言,是因为你认为它在某些方面优于现有的选择。事实上,Gosling 在 Java 的首份白皮书中明确表示,Java 旨在解决 C++ 的某些问题。所以,语言并不全然等同。如果你追溯尖发型老板的思维逻辑,从 Java 到它的起源,你最终会得出一个与最初假设相矛盾的结论。
那么,谁是对的?James Gosling 还是尖发型老板?不出所料,Gosling 是对的。有些语言_确实_比其他语言更适合解决特定问题。这引出了一些有趣的问题。Java 在解决某些问题上被设计得比 C++ 更好,是哪些问题呢?Java 何时更胜一筹,C++ 又是何时?是否存在其他语言在某些情况下比这两者都要好?
一旦你开始思考这个问题,就像打开了潘多拉的盒子。如果尖发型老板真的考虑到问题的全部复杂性,他的大脑可能就会爆炸。只要他认为所有语言都等同,他所需要做的就是选择那个看起来势头最猛的,而这更多是关于时尚而非技术的问题,即便是他也可能做出正确的选择。但如果语言真的有差异,他突然需要在自己一无所知的两件事之间找到最佳平衡:他需要解决的问题适合的二十多种主流语言的相对适用性,以及为每种语言找到程序员、库等资源的可能性。如果门后是这种情况,难怪尖发型老板不愿意去开它。
认为所有编程语言等同的缺点在于这是不真实的。但优点在于这让人生活得更简单。我认为这就是这个观点如此普及的主要原因。这是一个_舒适_的观念。
我们知道 Java 很不错,因为它是新潮的编程语言。但真的是这样吗?如果你从远处观察编程语言世界,看起来 Java 是最新鲜的事物。(从足够远的地方看,你只能看到 Sun 支付的大型、闪烁的广告牌。)但如果你近距离观察,你会发现冷酷度有不同的层次。在黑客的亚文化中,有另一种叫做 Perl 的语言被认为比 Java 更酷。例如,Slashdot 就是用 Perl 生成的。我不认为你会发现那些人会使用 Java Server Pages。但还有一种更新的语言,叫 Python,它的用户往往看不起 Perl,而且更多的语言正在等待时机。
如果你按顺序看这些语言,Java、Perl、Python,你会发现一个有趣的模式。至少,如果你是一个 Lisp 黑客,你会看到这个模式。每一种语言都更接近 Lisp。Python 甚至复制了许多 Lisp 黑客认为是错误的特性。你几乎可以逐行将简单的 Lisp 程序翻译成 Python。现在是 2002 年,编程语言几乎追上了 1958 年的 Lisp。