编程语言:变革创业思维的工具
作为Twitter、Hulu和许多当代互联网服务的开发语言,Ruby备 受关注。而当日本计算机科学家松本行宏决定设计这一语言时,他借鉴了萨莫埃尔·德拉尼(Samuel R. Delany)1966年科幻小说《Babel-17》中的概念。这部小说的核心是一种名为“Babel-17”的人造语言,能明显提高使用者的思维水 平。“Babel-17是一种准确的分析语言,能让你精通任何技术。”小说主角曾经这样说。通过Ruby,松本行宏希望实现类似的目标:变革及优化程序员的思维方式。
这一目标听起来非常宏大,但松本行宏的观点已经成为主流。软件开发者通常都会相信,编程语言足以扭转他们的思维方式,从而改变解决问题的方法,甚至改变他们对于应该去解决哪些问题的认识。这也是他们估计某家公司、某一产品和竞争对手规模的方式:“你们使用什么语言?”
对编程语言的审视将有助于外部人士了解,这些软件公司为何能如此强大,有着如此高的价值,以及它们的产品和服务如何融入我们的生活。这些企业的内部决策,即使用什么样的语言,无论是Ruby、PHP还是C,将对我们所有人产生影响。如果你希望知道,为何Facebook看起来及用上去是当前的模样,以及未来会有什么样的发展,你需要去了解马克·扎克伯格(Mark Zuckerberg)使用的编程语言PHP。
在程序员之中,PHP或许是最不受尊重的编程语言。由于存在许多缺陷,知名技术博客Eevee认为,PHP是“糟糕设计的一块碎片”,而愿意使用PHP的开发者很业余。
编程问答网站Stack Overflow联合创始人杰夫·艾特伍德(Jeff Atwood)则表示:“聪明的工程人才纷纷前往Facebook,这非常奇怪。他们在Windows XP环境中开发PHP代码。他们是黑客,但这里的‘黑客’是一种贬义。”艾特伍德将PHP称作“笨拙的巨兽”、“流行病”,以及吸引神秘事件爱好者的“鬼屋”。
成 功的编程语言有着整体化的哲学,或是一整套逻辑自洽的指导原则,以组织词汇和语法(即提供给程序员的指令)。但PHP并非如此。这一语言的设计者拉斯姆 斯·莱尔多夫(Rasmus Lerdorf)曾经承认,他只是将许多东西混合在一起。“我不知道怎么阻止这一切。”他在2003年接受采访时表示,“我完全不知道如何编写一款编程语 言,我只是在这一过程中不断加入新的逻辑步骤。”
程序员最喜欢讲的一个例子是PHP函数“mysql_escape_string”。在将信息发往数据库之 前,这一函数能从中去除恶意输入请求。(恶意输入的例子包括网站上表格请求用户的电子邮件地址,以及黑客植入一段代码窃取网站用户的密码。)在发现该函数 的一个漏洞之后,一个名为“mysql_real_escape_string”的新版本被创建出来,但老版本并未被替换。因此目前的情况就像是在飞机驾 驶舱中并排放两个功能类似的按钮:其中一个按钮用于放下起落架,而另一个则用于安全地放下起落架。这不仅违背常理,甚至会引起灾难。
尽管许多人都不喜欢PHP,但PHP仍是很大一部分网站的基础。一项研究显示,在当前互联网的所有域中,基于PHP技术的部分多达39%。Facebook、维基百科,以及领先的发行平台WordPress均利用了PHP来开发。这是由于,尽管存在许多缺陷,但PHP对入门者来说几乎完美。
PHP的名称最初是“个人主页”的英文缩写。通过这一语言,程序员可以方便地在静态HTML页面上添加日期和用户姓名等动态内容。PHP的兴起推动了从网站开发向网页应用开发的飞跃,而开发者甚至不必是专业人士。
维 基媒体基金会负责维基百科项目的首席软件工程师奥利·利夫尼(Ori Livneh)表示,PHP易于上手的特点正是维基百科成功的关键。不过他指出:“我一直讨厌PHP。”由于对PHP的依赖,维基百科在用户规模扩大之后 出现了设计漏洞。(正是由于这一原因,在2008年之前,维基百科一直没有支持移动设备。而直到2013年,该网站才提供了对用户友好的编辑界面。)不 过,基于PHP,一些不熟悉软件编程的人士也可以开发新功能。例如,利用PHP语言,维基百科在“埃及古物学”条目上展示了象形文字,并可以在页面上实现音乐播放。
谷歌无 法使用PHP语言,因为当前的谷歌需要非常出色地完成一项工作,即迅速而准确地进行搜索。因此,谷歌搜索引擎采用了更强大的语言,例如Java和C++。 与谷歌相比,Facebook是一个小规模实验的集散地,一个按钮、消息流和小发明的大杂烩。在这种情况下,PHP可以更快地实现功能。
你 甚至可以想象,哈佛大学宿舍里的扎克伯格如何在决定性时刻选择Facebook的开发方式。他需要以最小的成本使网站上线。网络发展速度很快,用户的喜好 变幻无常,把握机会的唯一方式就是成为市场的先行者。究竟是做成一盘大杂烩,还是一份精致的意大利面,这无关紧要。他首先需要完成这一网站,让用户可以使 用。他考虑的并不是代码是否优美,而是如何让好友们登上这一名为TheFacebook的网站,评价他们熟悉的女生。
今天,Facebook的市值超过2000亿美元,而该公司办公室的墙上有这样的标语:“完成工作比完美更重要”,以及“快速行动,打破僵局”。
这些大胆的口号是为了确保员工符合该公司的“黑客”文化。而这也准确体现了PHP的价值。快速行动,打破僵局,这正是PHP的本质,代表了PHP程序员思考问题的方式。你甚至可以这样说:PHP本身创造并维持了Facebook的文化。
秘密武器:更强大的语言
如果你希望找到与PHP截然相反的另一种理念,看看另一个极端是什么样,那么金融交易公司Jane Street Capital位于纽约下曼哈顿的总部值得一看。这家有着400名员工的公司目前处理着美国每日证券交易量的约2%。
当 我见到Jane Street Capital技术主管雅隆·明斯基(Yaron Minsky)时,他正坐在办公桌旁,旁边放着一台恩尼格玛密码机,这是为数不多仍然现存的二战时代装备之一。我原本以为,这就是他房间中最酷的秘密武 器,但随后我发现自己犯了错误。明斯基谈到了一款名为OCaml的编程语言。作为计算机科学博士,明斯基于10年前说服自己的老板,使用OCaml重新编 写公司的整个交易系统。
在此之前,几乎没有人在实际应用中使用过OCaml。这一语言的设计者是法国一家研究机构,而最初目的是为了优化能 自动证明数学定理的计算机系统。明斯基在自己的研究生阶段接触到了这一语言。他认为,这一语言可以取代Jane Street Capital交易系统中使用的Excel电子表格。
OCaml的最大特点在于“输入检查系统”。这类似于微软Word的语法检查功能,能 在系统认为错误的代码下方使用绿色波浪线做出标记,随后禁止这样的代码运行。利用这一系统开发出的程序有着极强的可靠性,而当所开发的软件每天需要处理 300亿美元的交易时,这一点很重要。
明斯基表示,通过捕捉漏洞,OCaml的输入检查系统使Jane Street Capital的程序员可以专注于更高大上的问题。
而如果该公司能将OCaml的检查功能进一步内化,那么将培养出一种习惯,使程序员不可能再去思考错误的想法。
此 外,为了让输入检查工具发挥功能,程序员需要在代码中添加复杂的注释。这就好比说,Word的语法检查工具要求你对所有句子进行标注。在输入受限制的情况 下编写代码有些麻烦,甚至会令人丧气。而更糟糕的是,与其他编程语言相比,OCaml会涉及非常抽象的数学,从而给大部分程序员带来困难。
不 过,这一语言的精确性对某些人来说极具吸引力,同时也给Jane Street Capital带来了不同寻常的招聘优势。尽管一些软件开发者不理会PHP的缺陷而加入Facebook和维基百科,但明斯基表示,OCaml语言以及他 的著作《现实世界的OCaml》有助于吸引优秀的编程人才。吸引力并不仅仅在于语言,也在于使用这一语言的人群。在Jane Street Capital,员工在休息时间会去下象棋。这种智力竞争的文化似乎与对OCaml语言的使用密切相关。
谷歌似乎也试图凭借自主设计的高性能语言Go来实现同样的目的。为了让网络服务变得更优雅、更高效,针对大型网络服务背后的服务器开发更先进的软件颇有益处。此外,对于喜欢新鲜事物、喜欢挑战困难的程序员来说,这也是一种吸引力。
适当时机:发展壮大之后
2010年底,Facebook曾遭遇过一场危机。PHP并不是一种强调代码性能的语言,但当时Facebook出现了这方面的需求。Facebook的发展速度很快,因此如果不作出一些重大改变,那么该公司将会走向失败。
彻底改变编程语言并非可选方案之一。Facebook使用PHP编写的代码已达到数百万行,从事这一开发的工程专家已有数千人,而所形成的产品已积累了数亿用户。
因此,Facebook的多名高级工程师成立了一个小团队。他们试图发明一种方式,使Facebook正常提供服务,同时不必放弃自己的“母语”。
整个解决方案的一部分是开发一款编译器,将Facebook的PHP代码翻译成运行速度更快的C++代码。而另一部分则是计算机语言工程领域的一项壮举:继续给Facebook程序员带来PHP风格的文化,同时让他们编写可靠性更高的代码。
这一“救援小组”为此设计了PHP语言的一个变种,即Hack。 Hack是一种带可选输入检查系统的PHP语言。你既可以像以往一样,快速编写出代码混乱的PHP程序,也可以遵循系统要求,通过添加注释让系统来检查代 码的正确性。这一输入检查工具完全使用OCaml来开发,而这并非巧合。Facebook希望程序员使用熟悉的语言来快速编写代码,但并不希望他们将事情 搞错。(去年,扎克伯格公布了Facebook新的工程口号:“在确保基础设施稳定的情况下快速行动。”)
与此同时,Twitter也在进行类似的转型。Twitter的开发最初基于Ruby on Rails。这是一款采用Ruby语言开 发的热门网络编程框架,并借鉴了PHP的很多思想。然而,Twitter随后也看到了用户数的暴涨。如果某一用户有着数十万关注者,那么当他发布消息时, 数十万用户的时间线需要得到相应的刷新。以往,一些热门Twitter消息常常会压垮系统,导致Twitter工程师不得不暂停服务,对问题进行修复。 Twitter也因随之而来的频繁宕机而“名声昭著”。
Twitter随后用Scala语言重写了服务的很大一部分代码,从而解决了这一问题。意料之中地,与OCaml类似,Scala也是一款由学术机构设计的语言,有着强大的输入检查系统,强调代码的准确性和性能,并因此牺牲了程序员个人的编程自由和娱乐感。
在 找到营收模式之后,创业公司将走向成熟。与此类似,它们也可以利用编程语言的力量来操纵企业文化。编程语言设计师圭多·范洛塞姆(Guido van Rossum)曾在谷歌供职7年,而目前加入了Dropbox。他表示,当软件公司达到一定规模之后,避免混乱的唯一方式是使用对程序员有更多要求的编程 语言。“你的速度可能会因此减慢,因为你需要重复3次去表述同一件事情。”他表示。