8 q Y: N! I/ ?6 z5 U- V如果要找跟PHP这种自然实验语言完全相反的例子,没有地方比下曼哈顿区的金融交易机构Jane Street Capital更合适。这家400人的公司每天处理着美国大约2%的股权交易。 , F: M, W( C, m0 W8 {/ ?) I: n $ i! M" }; u- c+ u8 R- ^他们用的编程语言是OCaml,10年前,公司的技术负责人Yaron Minsky说服了老板用这门晦涩的语言重写了公司的整个交易系统。这语言原本由法国的一家研究机构的学者开发,目的是想改进某个用来自动证明数学定理的计算机系统,此前几乎没人用这门语言进行过实际工作。但是Minsky在读研时接触到OCaml之后,认为这门语言可以替代Jane Street 交易系统的那些Excel表。3 q- Z b8 g k' j0 v
1 ~; s" i9 S$ }2 m3 H/ ]; O
OCaml的一大卖点是它的“类型系统”,类型系统跟Word的语法检查器有点类似,不同的是语法检查器只是用绿色波浪线标出有问题的文字,而类型系统检查出错误后会阻止系统运行。写有类型系统的程序的可靠性往往要比没有的高很多—这一点对于一个日交易量高达300亿美元的系统来说是非常有用的。 - o( k- t h6 d; K# U 5 q+ z% o5 p2 u" d! h8 L; vOCaml的类型系统帮忙拦截了bug,Jane Street的程序员就可以专注于更加高级的问题。有人甚至猜测随着时间转移这些人是不是已经内化了系统的不断纠缠,OCaml变成了某种新语(Newspeak),没人敢打任何坏主意。 8 q5 m+ g+ u8 j. [1 t. u0 s. _, m2 D% L9 R3 H n
其要点在于,要想充分获得类型检查器的好处,程序员必须给自己的代码增加复杂的注解。就好像Word的语法检查器需要你对所有的句子进行解释一样。写代码还要进行类型约束是令人讨厌甚至泄气的事情。更糟的是,OCaml比大部分的编程语言要求都要高,需要对数学抽象有很深的理解,这已经超出了大部分开发者的能力范畴。但是这种语言的严格对于某些人来说却相当于猫薄荷,这反而让Jane Street在紧张的招聘市场里有了一项与众不同的优势。OCaml就像猫薄荷一样替Jane Street源源不断地吸引了一批批的高素质人才候选人。那些人被吸引的不仅是因为这门语言,更是因为使用这门语言的人。人以群分,这里的人平时玩的都是四人国际象棋。看起来竞争情报的文化与一门奇特语言的使用密切相关。 . @- ~ q- l( q$ u) j$ x5 B; d8 V- d% f
类似地,Google似乎也打算通过Go语言的推广使用来达到类似目的。Go是Google开发的一种高性能编程语言,目的是要让Web的处理工作更加优雅和高效。开发此类高风险软件是有好处的,因为大型Web服务背后的那一大群服务器的运行需要这样的语言。对于喜欢新奇和挑战的开发者来说Go尤其具有吸引力。* S) ~- r8 t* G8 c% [. E. V
' T/ x5 G% b4 b6 W: a- u
成长的烦恼2 |$ o* v/ P0 B1 y- Q( j( J
# K$ F/ A: B# A; n5 x! \
2010年末,Facebook遭遇了一次危机。PHP本身并不是针对性能优化而开发的,而Facebook网站又发展得太快,若不进行相当彻底的改造网站看起来快要瘫掉了。# J& G' I& p' a* Z/ M% U
/ ? ?% ], D# e8 {换语言根本不在考虑的范围之内。Facebook网站上有着数千专家工程师撰写的上百万行PHP代码,还有超过5亿用户在使用它。因此Facebook派遣了一支由资深工程师组成的特种部队,让这批人去攻关一个特殊项目,找出让Facebook不放弃它那带黑客口音(hacky)母语的情况下维持运转的办法。5 O5 K3 o U- V7 U
) V% _, N' G7 y, V8 |. X2 f8 L3 }3 z; x解决方案其中的一部分是开发出一种编译器软件,将Facebook的PHP代码编译为更快的C++代码。而项目的另外一项工作则成为了计算机语言工程的一大壮举,它使得Facebook的程序员在保持PHP血统文化的同时还可以编写出更加可靠的代码。& T& U x6 i+ u
" p, G/ C! b1 V! `2 ?这支救援分队发明了一门PHP方言,名字叫做Hack。Hack是带可选类型传系统的PHP,也就是说,你可以还继续写原来随性写意的PHP,也可以选择增加注解让类型系统检查代码的正确性。跟Jane Street一样,这种类型检查器完全是用OCaml编写的,这绝非巧合。Facebook希望自己的码农用感到舒服的母语继续快速行动(move fast),但是同时不希望他们在这么做时不得不打破一些东西(break things)。(去年扎克伯格宣布了新的口号:“稳定结构、快速行动”) : m2 Z8 w; t2 U. H) p5 N$ d* u- b0 i1 u* f% C
与此同时,Twitter也经历了类似的变革。Twitter原先是用流行的Web框架Ruby on Rails开发的,而后者则是在Ruby基础上受PHP启发做出来的。然后Twitter的用户开始暴涨。一旦大V发布了新的推特,数十万粉丝的tinemline也必须马上更新。此轮情况往往会令系统不堪重负,Twitter工程师不得不把网站暂时关闭才能应付。由于经常干这种事情,维护页面的那头失败的鲸鱼形象都变得臭名卓著了。后来Twitter用Scala语言替代了公司很大一部分的服务实现。不出意料,跟OCaml一样,Scala也是由学者开发,一样拥有强大的类型系统,都是以程序员的自由和开发的惬意为代价来确保准确和性能。9 f! M8 L& m# F9 ~; @ }5 _
4 X6 o& }' e! E5 U( E9 Y3 N) ?
跟初创企业最终找到收入来源而走向“成熟”类似,他们同样也可以借助编程语言的力量来操控组织心理。在Google干过7年、现在Dropbox工作的编程语言设计师Guido van Rossum说,软件公司到达一定规模之后要想避免陷入混乱,唯一的办法是借助预先需要程序员做更多事情的编程语言。“就是那种让你放慢下来的感觉,因为所有事情你都需要说上三遍。”这就是为什么许多初创企业尽可能拖延切换语言的原因所在。换上更严谨的语言有可能会让你失去一些NB的创业元老黑客,迸发出新功能的可能性也会降低。但是这能帮助整个公司更好地理解别人的代码,保证产品日常运营必要的稳定性。 ^! ]2 E. q* z+ x4 V