希望所有人在参与语言争论之前都先认真读一读Richard P. Gabriel的
Worse Is Better。这篇文章(其实是讲稿的一节以及一系列后续文章)本身极具争议,但为所有诸如“为什么X比Y好却不流行”之类的讨论提供了一个很好的框架。最重要的是,语言是否流行与其设计优劣并不完全相关,其中工程和社会因素都有影响。
比如说:
- 大部分公司程序员并没有权利决定项目的主要语言
- 决定主要语言的常常不完全是技术因素
- 语言在流行后有可能快速的修复和进化
比较近的一个例子是Facebook和PHP。HipHop的出现符合Worse Is Better里说提到的“烂”系统的“进化”。还有一个鲜活的榜样是JavaScript。另一面,尽管有深厚的学术渊源和Paul Graham的
榜样鼓吹,优雅的LISP仍然没有成为硅谷创业公司的主流。这些可以看作是Worse Is Better的当代版。
另一个例子是C++。许多人以批评C++为乐,却故意忽视它流行多年且依然
屹立不倒的基本事实。以下几条优点足以是C++成为高性能大团队项目的主要考虑之一:
-
性能模型直观清晰(相对各类解释型语言和函数式语言),直接映射硬件的性能模型对编码和优化都有巨大帮助。
- 提供丰富的抽象机制(相对C),适合大团队协作。
- 编译器成熟高效(不考虑编译速度),经过多年发展,严重BUG已经很少。
而C++的主要问题之一——特性滥用——也可以通过
内部规范和代码审查基本解决。我更喜欢Go的语言设计(有一定保留),但很难看到未来五年甚至十年内Go(以及许多其他“主流”语言)的编译器和类库能够进化到今天C++的成熟度。这可能也是一个“烂”语言成功的例子。
抛开具体场景谈论语言的优劣很容易误导初学者。 我觉得
Dreyfus模型中的初学者和高级初学者更喜欢简单化和绝对化的比较,而熟手和专家能够全面综合的考虑,不轻言孰优孰劣。“X好,Y烂”之类的表述对专家没营养,对新手有毒害。让
计算机系的学生以VB入门属于误人子弟,而教技校的孩子Haskell搞不好会饿死人。当然,这涉及到“大学”和“计算机系”这两个词的定义,不展开谈。
如果倒回十五年,我希望告诉年轻的自己这几件事情: