编程语言塑造了用户的思维方式,使他们有能力实现自我变革。
氧分子网科技讯 4月3日,《麻省理工科技评论》本周刊文称,编程语言塑造了用户的思维方式。这也可以反映科技行业创业公司的策略,以及他们为何有能力实现自我变革。
以下为文章全文:
作为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次去表述同一件事情。”他表示。
因此,许多创业公司希望等待尽可能长的时间再做出改变。它们可能会失去一些起步初期的牛人,同时也不利于小型团队迅速开发出新功能。不过,这样的语言将帮助全公司的程序员相互理解彼此的代码,带来更稳定的产品。如果希望你的产品成为人们日常生活的一部分,那么这样的稳定性必不可少。
视不同情况采取不同策略的能力在一定程度上推动软件创业公司的发展。软件的发展依赖于计算机的普及,而这些公司也有着独特的方式去重塑自我。随着变化和发展,它们所能做的并不仅仅是调整组织架构,还可以做出一些更深层次的改变,即变革自身的文化及思维方式。