用什么样的语言就有什么样的公司
想知道语言的威力有多大,可以看看《通天塔-17》。里面星际战争的一方只需让另一方学习了一门语言,即让对方弃明投暗。编程语言也具有类似的威力,它赋予了软件公司重塑自我的能力,它不仅能改变问题的解决方式们甚至还可以改变提出什么样的问题。这也许是Google、苹果等推出自己语言的原因所在,而初创企业想要成就什么样的愿景,编程语言的选择很关键。
Ruby语言帮助开发出了Twitter、Hulu以及许多的现代Web网站。其发明者是日本人松本行弘。松本行弘发明Ruby则是受到了美国作家Samuel R. Delany发表于1966年的一部科幻小说《通天塔-17》。
这 部小说里面有一个核心的思想—语言会改变人的思想、影响人的行动。故事里面讲到,星际战争的一方发明了一种名为Babel-17的语言,敌方的人学了这门 语言之后,思想和感觉都会发生改变,从而变成了本方的叛徒。这本书说明了语言的若干特点—即生活条件塑造了语言形式和意义,但是语言本身也会塑造人的行 动。
小说主角对通天塔-17的评价是:
Babel-17是那么精确的一门分析语言,几乎可以确保你在技术上应对面临的任何情况。
松本行弘也希望实现同样的事情—用一门语言重组并改进程序员的思考方式。实际上开发者这种群体也倾向于认为,编程语言不仅能改变问题的解决方式,甚至也能改变提出什么样的问题。所以这些人衡量公司规模、产品好坏或者同事强弱时往往会问一个问题:
你用什么语言?
这有助于外界理解软件公司为什么会变得如此强大、为什么会那么有价值,有助于了解那些影响我们日常生活的产品和服务。一项看似与我们无关的最内部的决定,比方说新产品的开发究竟是用Ruby、PHP还是C语言,突然之间却会影响到我们所有人。所以,如果你想知道Facebook为什么会是这个样子,为什么这么运作,接下来又会干什么,那就得了解一下PHP—扎克伯格开发Facebook用的语言。
PHP 也许是所有编程语言当中最不受程序员待见的语言了。编程问答网站Stack Overflow的联合创始人Jeff Atwood用了非常恶毒的语言点评PHP,称PHP设计糟糕、东拼西凑,是 “步履蹒跚的怪物”、“瘟疫”、鬼屋,说在里面住的人都是喜欢鬼的人,称用PHP的都是业余爱好者。“有人误以为进入Facebook的都是才华横溢的工 程师,但其实他们是一群用Windows XP写PHP的人。说他们是黑客几乎跟骂人差不多。”
大多数成功的编程语言都有整体哲学或者一套用于组织词汇语法的原则指南,但是PHP没有—PHP的创始人Rasmus Lerdorf早在2003年就承认,自己不知道如何写编程语言,只是走一步看一步,想到什么加什么。
比方说防止恶意数据攻击的PHP函数“mysql_escape_string”被发现存在漏洞之后,其补救措施不是对这个函数打补丁,而是重新开发了一个名为“mysql_real_escape_string”的函数,这就好比是在飞机驾驶舱安装了两个类似的按钮,按下其中一个可以让飞机放下起落架,而按下另一个则会让飞机掉下。
虽然很多人都说PHP很烂,但是却不能阻止它的火。据估计全球有39%的网站用PHP编写,其中就包括了Facebook、Wikipedia、WordPress著名网站等。原因在于PHP尽管有缺陷,但是做动态内容上手简单,不需要专业人士也能弄。
PHP 的持续发展对于Wikimedia(维基百科)的成功非常关键。由于严重依赖PHP,维基百科遭遇了大规模的设计缺陷,并且直到2008年才推出了能适应 移动设备的版本,到2013年才做出对用户友好的编辑界面。但是PHP让那些不是软件工程师的人也能贡献新功能,维基百科之所以能展示古埃及的象形文字、 处理散页乐谱正是因为此。
但是Google不能用PHP来开发,因为Google要求搜索要快要精确,其实现需要更加精细和强大的语言,比 方说Java或者C++。Facebook与之对比就相当于是小型试验的集市,加几个按钮、feeds或者小玩意来吸引你的注意力。PHP是为了迅速炮制 出新功能而生的。
你几乎可以想象得出在决定命运的那一天里,扎克伯格在哈佛大学宿舍里是如何琢磨着以最快的速度和最小的代价让 Facebook上线的。Web的节奏太快,用户又太善变了,要想捕捉到这一刻唯有成为第一个。程序写得再怎么烂都不要紧,最关键是把事情干完,让别人用 上。那一刻他满脑子想的不是如何把代码写漂亮,而是让他的朋友登录上“Thefacebook”对认识的姑娘评头论足一番。
现在的 Facebook市值已超过2000亿美元,办公室的墙上贴的都是这样的东西:“完成好过完美”,“快速行动、打破陈规。”扎克伯格希望用这些话让员工与 Facebook的“黑客”文化保持一致。但其实这些恰恰是PHP的价值观。快速行动打破陈规实际上正是PHO的真髓,只要是“讲”这门语言的人都不可避 免要按照这种方式思考。可以说是这门语言本身造就和维系了Facebook的文化。
秘密武器
如果要找跟PHP这种自然实验语言完全相反的例子,没有地方比下曼哈顿区的金融交易机构Jane Street Capital更合适。这家400人的公司每天处理着美国大约2%的股权交易。
他们用的编程语言是OCaml,10 年前,公司的技术负责人Yaron Minsky说服了老板用这门晦涩的语言重写了公司的整个交易系统。这语言原本由法国的一家研究机构的学者开发,目的是想改进某个用来自动证明数学定理的 计算机系统,此前几乎没人用这门语言进行过实际工作。但是Minsky在读研时接触到OCaml之后,认为这门语言可以替代Jane Street 交易系统的那些Excel表。
OCaml的一大卖点是它的“类型系统”,类型系统跟Word的语法检查器有点类似,不同的是语法检查器只是 用绿色波浪线标出有问题的文字,而类型系统检查出错误后会阻止系统运行。写有类型系统的程序的可靠性往往要比没有的高很多—这一点对于一个日交易量高达 300亿美元的系统来说是非常有用的。
OCaml的类型系统帮忙拦截了bug,Jane Street的程序员就可以专注于更加高级的问题。有人甚至猜测随着时间转移这些人是不是已经内化了系统的不断纠缠,OCaml变成了某种新语(Newspeak),没人敢打任何坏主意。
其 要点在于,要想充分获得类型检查器的好处,程序员必须给自己的代码增加复杂的注解。就好像Word的语法检查器需要你对所有的句子进行解释一样。写代码还 要进行类型约束是令人讨厌甚至泄气的事情。更糟的是,OCaml比大部分的编程语言要求都要高,需要对数学抽象有很深的理解,这已经超出了大部分开发者的 能力范畴。但是这种语言的严格对于某些人来说却相当于猫薄荷,这反而让Jane Street在紧张的招聘市场里有了一项与众不同的优势。OCaml就像猫薄荷一样替Jane Street源源不断地吸引了一批批的高素质人才候选人。那些人被吸引的不仅是因为这门语言,更是因为使用这门语言的人。人以群分,这里的人平时玩的都是 四人国际象棋。看起来竞争情报的文化与一门奇特语言的使用密切相关。
类似地,Google似乎也打算通过Go语言的推广使用来达到类似目的。Go是Google开发的一种高性能编程语言,目的是要让Web的处理工作更加优雅和高效。开发此类高风险软件是有好处的,因为大型Web服务背后的那一大群服务器的运行需要这样的语言。对于喜欢新奇和挑战的开发者来说Go尤其具有吸引力。
成长的烦恼
2010年末,Facebook遭遇了一次危机。PHP本身并不是针对性能优化而开发的,而Facebook网站又发展得太快,若不进行相当彻底的改造网站看起来快要瘫掉了。
换语言根本不在考虑的范围之内。Facebook网站上有着数千专家工程师撰写的上百万行PHP代码,还有超过5亿用户在使用它。因此Facebook派遣了一支由资深工程师组成的特种部队,让这批人去攻关一个特殊项目,找出让Facebook不放弃它那带黑客口音(hacky)母语的情况下维持运转的办法。
解决方案其中的一部分是开发出一种编译器软件,将Facebook的PHP代码编译为更快的C++代码。而项目的另外一项工作则成为了计算机语言工程的一大壮举,它使得Facebook的程序员在保持PHP血统文化的同时还可以编写出更加可靠的代码。
这 支救援分队发明了一门PHP方言,名字叫做Hack。Hack是带可选类型传系统的PHP,也就是说,你可以还继续写原来随性写意的PHP,也可以选择增 加注解让类型系统检查代码的正确性。跟Jane Street一样,这种类型检查器完全是用OCaml编写的,这绝非巧合。Facebook希望自己的码农用感到舒服的母语继续快速行动(move fast),但是同时不希望他们在这么做时不得不打破一些东西(break things)。(去年扎克伯格宣布了新的口号:“稳定结构、快速行动”)
与 此同时,Twitter也经历了类似的变革。Twitter原先是用流行的Web框架Ruby on Rails开发的,而后者则是在Ruby基础上受PHP启发做出来的。然后Twitter的用户开始暴涨。一旦大V发布了新的推特,数十万粉丝的 tinemline也必须马上更新。此轮情况往往会令系统不堪重负,Twitter工程师不得不把网站暂时关闭才能应付。由于经常干这种事情,维护页面的 那头失败的鲸鱼形象都变得臭名卓著了。后来Twitter用Scala语言替代了公司很大一部分的服务实现。不出意料,跟OCaml一样,Scala也是由学者开发,一样拥有强大的类型系统,都是以程序员的自由和开发的惬意为代价来确保准确和性能。
跟 初创企业最终找到收入来源而走向“成熟”类似,他们同样也可以借助编程语言的力量来操控组织心理。在Google干过7年、现在Dropbox工作的编程 语言设计师Guido van Rossum说,软件公司到达一定规模之后要想避免陷入混乱,唯一的办法是借助预先需要程序员做更多事情的编程语言。“就是那种让你放慢下来的感觉,因为 所有事情你都需要说上三遍。”这就是为什么许多初创企业尽可能拖延切换语言的原因所在。换上更严谨的语言有可能会让你失去一些NB的创业元老黑客,迸发出 新功能的可能性也会降低。但是这能帮助整个公司更好地理解别人的代码,保证产品日常运营必要的稳定性。