Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


“最好的语言” PHP 如何造就 Facebook?

2015-4-8 08:58    评论: 3 收藏: 2    

编程语言会塑造这门语言使用者的思维方式,这有助于解释科技创业公司的运行方式,以及它们能重新发明自己的原因。

当日本计算机科学家松本行弘决定创造 Ruby 时,他正在追逐 Samuel R. Delany 于 1966 年创作的科幻小说《巴别 17 语》(Babel-17)中的一个想法。这部小说的核心是一种与书名同名的人工语言,可以让所有说这种语言的人的思想升级。小说里的主角曾说过:“巴别 17 语是一门非常精确的分析语言,几乎能确保让你掌握任何情况的技术细节。”松本行弘想要通过 Ruby 实现同样的事:重新改造并提高程序员的思维方式。

PHP与Facebook

这听起来很宏伟,但松本行弘的想法并不少见。软件开发者们倾向于认为,编程语言能改变使用者思考问题的方式,甚至会改变使用者想要去解决的问题。这也是他们扩大公司、产品以及同事人数的方法:“你用什么语言?”

这能帮助外部人士理解已经变得极其强大和有价值的软件公司,以及充斥我们生活的产品和服务。哪怕是这些公司最内部的决定,比如用 Ruby 或 PHP 或 C 打造了某个新产品,这个决定都能一下子影响到所有人。如果你想知道 Facebook 给人以现在这种印象和工作方式的原因,以及 Facebook 能为/对我们做什么,你就需要了解 PHP,这门马克·扎克伯格创建 Facebook 所使用的语言。

PHP 可能是最不受程序员尊重的编程语言。一篇目前已经成为权威的博文在描述 PHP 的缺陷时称, PHP 是“支离破碎的糟糕设计”,愿意使用 PHP 的人都被视为外行。知名编程问答网站 Stack Overflow 联合创始人 Jeff Atwood 表示道:“那些聪明的工程师们加入 Facebook,却在 Windows XP 上编写 PHP 代码,这已然成迷。说他们是黑客简直是在侮辱黑客这个词。”在不到 10 分钟的谈话里,Atwood 称 PHP 是“拖沓的怪物”,“瘟疫”和一间住户必须爱上鬼的鬼屋。

大多数成功的编程语言都有全局哲学或系列指导原则,以便将编程语言的词汇表和语法组织成一个合乎逻辑的整体。PHP 则不然。PHP 的创造者 Rasmus Lerdorf 坦承,PHP 是他胡乱拼凑而成。他在 2003 年的一次采访中说道:“我不知道该如何阻止它。我根本不知道该怎么编写一门编程语言,在我觉得需要时,就往里面加东西。”

程序员们最喜欢举的一个例子是 PHP 的 mysql_escape_string 函数,这个函数可以在恶意输入查询进入数据库之前将它排除掉。当这个功能被发现有问题时,出现了一个名为 mysql_real_escape_string 的新函数,但原来的那个函数并没有得到替换。结果就像是飞机驾驶舱里有两个很像的按钮靠在一起:一个按钮可以放下起落架,另一个按钮则可以安全地放下起落架。这根本不合常理,是制造灾难的温床。

然而,尽管对 PHP 的轻视普遍存在,但很多网站都是用 PHP 创建的。根据一项估计,有 39% 的网站使用了 PHP 语言。Facebook、维基百科、WordPress 都是 PHP 项目。这是因为尽管 PHP 有很多缺陷,但它却很容易用在项目的起步阶段。PHP 是“personal home page”(个人主页)的缩写。用户可以很方便地使用 PHP 向静态 HTML 页面中添加日期、用户名等动态内容。PHP 极大地缩小了修改网站和编写网络应用之间的差距,你不必成为专家。

运营维基百科的维基媒体基金会首席软件工程师 Ori Livneh 表示,这种一路走来的特性对维基百科的成功至关重要。他告诉我:“我一直都讨厌 PHP。”由于对 PHP 的依赖,维基百科饱受大规模设计缺陷的困扰。但 PHP 可以让非软件工程师为维基百科贡献新功能。埃及古物学的维基百科条目可以显示象形文字就得益于此。

你不可能用 PHP 做出来谷歌,因为谷歌需要进行精心设计,让搜索可以快速高效地进行。谷歌使用了更精确和强大的语言,比如 Java 和 C++。相反,Facebook 由众多小试验组成,是一个由按钮、消息流和试图引起你关注的元素组成的大杂烩。PHP 天生是用来快速开发出功能的。

几乎可以想象,在 Facebook 诞生的那个命运之日,扎克伯格在他的哈佛宿舍里肯定是想尽可能地省事,好让网站上线。网络变化的太快,用户如此善变,你能抓住机会的唯一方法就是成为第一个,而无论做出了什么东西。扎克伯格完工了。人们能用 Facebook。扎克伯格当时想的不是漂亮的代码;他在想的是他的朋友们要登录“Thefacebook”看美女照片。

如今 Facebook 的市值超过 2000 亿美元,“完成比完美重要”、“快速行动,打破成规”的标语遍布在 Facebook 办公室的墙上。这些直率的消息是为了让员工们与 Facebook 的“黑客”文化保持一致。但这些都是 PHP 的价值观。快速行动和打破成规就是 PHP 的精髓,任何“说”这一语言的人都会不可避免地这么想。也可以说,PHP 创造并维系了 Facebook 的文化。

秘密武器

如果你想要寻找 PHP 的反例,金融交易公司 Jane Street Capital 就是最好不过的例子了。这家 400 人的公司号称处理了全美日股票交易量的 2%。

Jane Street 的技术负责人 Yaron Minsky 十分推崇一门名为 OCaml 的冷门编程语言。10 年前,身为计算机科学博士的 Minsky 说服了 Jane Street Capital 用 OCaml 重写公司的整个交易系统。在此之前,几乎没有人在实际产品中用过 OCaml。OCaml 由一家法国研究机构的学者们开发,旨在改进一个能自动证明数学定理的计算机系统。但 Minsky 认为 OCaml 能取代驱动 Jane Street 交易系统的复杂 Excel 电子表格。

OCaml 的大卖点是其“类型系统”,对于不符合类型的数据,程序不会运行。对于一个在行情好的日子里每天能交易 300 亿美元的程序而言,用类型系统编写的程序要可靠得多。

Minsky 表示,通过捕获错误,OCaml 的类型系统可以让 Jane Street 的程序员专注于更大的问题。程序员们会想,他们是否修复了系统捕获的错误,这样 OCaml 就成了一种让人不可能思考糟糕想法的新语。

这里的诀窍是,为了让类型检查器奏效,程序员们必须给代码添加复杂的注释。编写对类型进行限制的代码很讨厌,甚至会让人丧气。更糟糕的是,OCaml 需要高深的抽象数学能力。但这种语言的精确性却牢牢地吸引了一些人,这让 Jane Street 在紧俏的程序员招聘市场中具备非同寻常的优势。尽管使用 PHP 作为开发语言,大部分软件开发者还是会选择加入 Facebook 和维基百科。但 OCaml 却能稳定地吸引到高质量的求职者。这种吸引不仅源自语言,还和使用它的人有关。Jane Street 是一家允许员工在休息室里玩四人国际象棋的公司。这种竞争智慧的文化与花哨编程语言的使用交相辉映。

谷歌似乎打算在 Go 语言上实现类似的效果。Go 是谷歌开发的高性能编程语言,旨在让互联网的运作更优雅、更高效,很适合开发驱动大型互联网服务的高并发软件。Go 也很吸引对困难的新语言感兴趣的程序员。

成长壮大

在 2010 年末时,Facebook 遭遇了一场危机。PHP 并不强调性能,但 Facebook 却需要性能。Facebook 发展得太快,似乎如果不大改 PHP,Facebook 就会开始衰落。

彻底转换语言不在考虑之列。Facebook 的 PHP 代码数超过数百万行,这些代码由数千名工程师编写而成,服务超过 5 亿用户。相反,Facebook 任命了一小队高级工程师来发明一种方式,让 Facebook 在不更换编程语言的情况下继续保持运作。

解决方案之一就是开发一个编译器,将 Facebook 的 PHP 代码转换成运行速度快得多的 C++ 代码。另一种解决方法是创造一种 PHP 方言,这样就不会改变 Facebook 的 PHP 文化,又能让他们写出更可靠的代码。

于是 Facebook 开发出了名为 Hack 的 PHP 方言。Hack 是拥有可选类型系统的 PHP。Hack 的类型检查器完全用 OCaml 编写也绝非偶然。Facebook 想要自己的程序员继续用 PHP 快速开发,但不再想要他们像以前一样打破成规了。

与此同时,Twitter 也经历了类似转变。Twitter 最开始采用 Ruby on Rails 框架。但随后用户暴增。当有成千上万粉丝的用户发布推文时,这些粉丝的时间线就必须立即得到更新。像这样的大推文经常会挤爆系统,迫使工程师们将网站下线,以查找问题所在。Twitter 的工程师这么做了很多次,以至于 Twitter 维护页面上的“失败鲸”都出了名。Twitter 用 Scala 语言重写了大部分服务,从而阻止了情况恶化。和 OCaml 一样,Scala 也是由学者们开发的,拥有一个强大的类型系统,强调正确性和性能,哪怕是以牺牲程序员在代码上的自由和愉悦为代价。

就像创业公司的“成熟”是以最终弄清楚了营收来源为标志一样,公司也能聪明地利用编程语言的威力来操纵组织心理。编程语言设计师 Guido van Rossum 表示,一旦一家软件公司达到一定规模,避免混乱的唯一方法就是使用需要程序员预先投入很多的语言。van Rossum 说道:“这种语言会让你觉得拖慢了速度,因为你必须把一件事说上三次。”这也是许多创业公司尽可能拖延转换语言的原因。因为转换语言会失去一些帮助公司起步的牛人,小团队也不大可能快速推出新功能。但一门更精确的语言能帮助公司员工理解彼此的代码,让公司的产品具备稳定性,从而成为人们日常生活的组成部分。

软件公司能进行这类布局也许还能解释为什么它们会变得这么强大。计算机不断扩展的边界是原因之一。但这些公司也具备再造自己的特质。随着它们改变和壮大,它们将不局限于重绘组织结构图。因为它们建立在代码之上,也就能做些更加激烈的事。它们可以改造自己、自己的文化以及思维方式。

发表评论


最新评论

我也要发表评论

linux 2015-4-8 20:32
1
来自 - 山东德州 的 Chrome/Windows 用户 发表于 2015-4-8 17:13 的评论:
好吧!你赢了,如此的贬低PHP就是为了让大家吐槽!吸引用户的目的达到了!
我不会解释什么~~~
但是我再也不会关注这个网站了!
所谓“最好的语言”——这是一个对 PHP 的调侃而已,我近些年一直用是用 PHP 的,包括本站也是用 PHP 的。
回复
linux 2015-4-8 20:30
1
来自 - 山东德州 的 Chrome/Windows 用户 发表于 2015-4-8 17:13 的评论:
好吧!你赢了,如此的贬低PHP就是为了让大家吐槽!吸引用户的目的达到了!
我不会解释什么~~~
但是我再也不会关注这个网站了!
真是。。。你到底看懂文章的意思了吗?
2 回复
来自 - 山东德州 的 Chrome/Windows 用户 2015-4-8 17:13
好吧!你赢了,如此的贬低PHP就是为了让大家吐槽!吸引用户的目的达到了!
我不会解释什么~~~
但是我再也不会关注这个网站了!
2 回复
运维世界大会

热点评论

linux 2015-4-8 20:30
真是。。。你到底看懂文章的意思了吗?
2
来自 - 山东德州 的 Chrome/Windows 用户 2015-4-8 17:13
好吧!你赢了,如此的贬低PHP就是为了让大家吐槽!吸引用户的目的达到了!
我不会解释什么~~~
但是我再也不会关注这个网站了!
2
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。