编程语言与思维:科技公司如何自我重构?
当日本计算机科学家松本行弘决定创造一种名叫 Ruby (这种技术支撑了 Twitter、Hulu 以及其他许多现代 Web 流行网站) 的程序语言时,他是从 1966 年一部名为 Babel-17 的科幻电影中获得了灵感。这本书主要讲的是一种新发明的语言能够让那些使用它的人升级自己的头脑思维。“Babel-17 是一种极精确的分析语言,几乎可以确保任何情况下的技术优势。”影片中的主人公有这样一句台词。通过发明 Ruby,松本行弘希望实现同样的效果:重编并改进程序员思考的方式。
这目标听起来很宏大,但他的想法是一种主流。软件开发者做为一个工种,普遍认为程序语言对于思维有影响力,大到足够可以改变你解决问题的方式——甚至是你选择解决哪些问题。这也是他们如何扩大公司规模、改进产品、招聘团队的方式:“你用什么编程语言?”
明白这一点能够让圈外人了解软件公司的运作,尤其是在它们变得如此强大又赚钱,制造的产品和服务进入我们生活各个角落的今天。如果你想知道为什么 Facebook 的外观和工作方式是现在这个状态,Facebook 未来能为我们或对我们做什么,你就需要知道一些关于 PHP 的知识,因为这是马克•扎克伯格 (Mark Zuckerberg) 最初打造 Facebook 使用的程序语言。
在 程序员当中,PHP 可能是所有编程语言中最不被“仰视”的一种。有人在博客文章里评价其为“糟糕的设计”,而那些愿意使用 PHP 的人则被看作是业余选手。“有这种传奇的事,那些去 Facebook 工作的顶尖工程师,他们在 Windows XP 上写 PHP 代码,”程序问答网站 Stack Overflow 创始人杰夫 (Jeff Atwood) 说道,“他们可是那种毁三观级的黑客。”在近 10 分钟的谈话中,杰夫用如下的词语描述 PHP:“一个消瘦的怪兽”,“一场大瘟疫”,一个鬼屋里的住客爱上了幽灵。
大部分得到承认的程序语言都有一个总体的设计哲学或 是指导原则,用来组织关键字和语法——也就是交给程序员使用的指令集合——并形成一个逻辑上的整体。PHP 没有。其设计者 Rasmus Lerdorf 主动承认他当初是东拼西凑的。“我不知道该怎么停止,”2003 年他在接受一次采访时说到,“我根本不知道要如何写一个程序语言——我只是一边用一边增加新的逻辑模块。”
程序员最爱用的一个例子是 PHP 函数“mysql_escape_string”,该函数能够将一段混合字符剔除掉之后再提交数据库。 (混合字符的例子可以参考一般网站会要求你输入电邮地址之类,黑客能够嵌入一段代码,从网站获得你的密码。) 当这个函数的一个漏洞被发现时,一个新的版本出现了,叫做“mysql_real_escape_string”,但是原有的版本并没有被替换。这种结果 就好像在飞机驾驶仓上有两个外观接近的按钮并列排放一样:一个用来把起落架放下,另一个用来把起落架安全地放下。这可不是什么友好的操作——这是导致灾难的原因。
但 是尽管对 PHP 的嗤之以鼻随处可见,如今的 Web 网络有许多都是基于 PHP 设计,全网有 39% 的网站使用 PHP。Facebook、Wikipedia 和 WordPress 都是 PHP 项目。这是因为 PHP 虽然有许多缺陷,但是上手很快。PHP 这个名字来自最初的“个人主页”,可以很容易地让用户在静态 HTML 页面中添加诸如日期和用户名之类的动态内容。PHP 实现了从设计一个网站到编写一个 Web 应用程序的飞越,而投入却很小,你完全不需要成为专业人士就可以做到。
而 PHP 这种“即刻运行”的特性对于 Wikipedia 的成功至关重要,维基媒体基金会的总软件工程师奥瑞 (Ori Livneh) 这样认为。“我一直讨厌 PHP,”他对我说。维基百科过于依赖 PHP,导致了大规模的设计缺陷。(这也是为什么直到 2008 年维基百科才推出移动端版本,直到 2013 年编辑界面才变得友好起来。) 但 PHP 让那些不是——或几乎刚刚是——软件工程师的人能够提交新功能:这也是为什么维基百科词条可以在古埃及文明页面显示象形文字,并且可以处理五线谱的原因。
但是你用 PHP 设计不了 Google,因为 Google 之所以成为 Google 需要把一件事做到最好——搜索结果。设计 Google 的是更加精炼和强大的语言,比如 Java 和 C++。而 Facebook 恰恰相反,更像一系列的小试验:按钮、信息流、信息模块等等只是为了抓住你的注意力。PHP 是为了快速制造新东西而生的。
你可以想象扎克伯格在哈佛宿舍里完成 Facebook 的情景。互联网发展如此之快,用户多变,唯一能够抓住机会的办法就是快。无论他做的是一团泥也好,或者是一盘意粉,甚至是什么都好。他把东西做成了,人们可以用。他当时没有考虑什么优雅代码的问题;他想的是让好友们可以登陆 Thefacebook 去看他们认识姑娘的图片。
如 今 Facebook 已经是价值超 2000 亿美元的公司了,办公室里到处可以见到标语“完成要比完美更重要”;“快速推进,打破常规”。这就是 Facebook 的“黑客”文化,但也恰恰是 PHP 的价值观。快速推进打破常规实际上正是 PHP 的本质,任何使用这种语言的人都会这样思考。可能你会说,正是这种编程语言,打造并维系了 Facebook 的文化。
2010 年末,Facebook 迎来了一场危机。PHP 并不是一种性能优化的设计,但是现在要求提升性能。Facebook 发展速度太快,如果没有重大的调整,看起来可能会出现问题。
整体更换程序语言并不是一个可选的方案:Facebook 有数百万行 PHP 代码,上千名 PHP 工程师专家,超过 5 亿用户。Facebook 的做法是,由资深工程师组成的一个小团队被分配到一个特别的任务。其中之一就是设计一个编译器,能够将 Facebook 的 PHP 代码转换成运行更快的 C++ 代码。另外一个任务则是由计算机语言专家完成,他们要让 Facebook 的程序员保持 PHP 风格文化,但是编写更可靠的代码。
于 是 PHP 的一个分支版本 Hack 应运而生,这种语言是带有可选的类型系统的 PHP。也就是说,你既可以用老式的方法快速编写 PHP 代码,或者选择让类型系统检查你的代码正确度。Facebook 希望他们的程序员用自己熟悉的语言继续快速推进,但是不想让他们像之前那样打破东西。(去年扎克伯格宣布了一个新的工程师口号:“快速推进,稳定架构”。)