编程语言会塑造这门语言使用者的思维方式,这有助于解释科技创业公司的运行方式,以及它们能重新发明自己的原因。编程语言会塑造这门语言使用者的思维方式,这有助于解释科技创业公司的运行方式,以及它们能重新发明自己的原因。
当日本计算机科学家松本行弘决定创造 Ruby 时,他正在追逐 Samuel R. Delany 于 1966 年创作的科幻小说《巴别 17 语》(Babel-17)中的一个想法。这部小说的核心是一种与书名同名的人工语言,可以让所有说这种语言的人的思想升级。小说里的主角曾说过:“巴别 17 语是一门非常精确的分析语言,几乎能确保让你掌握任何情况的技术细节。”松本行弘想要通过 Ruby 实现同样的事:重新并提高程序员的思维方式。
这听起来很宏伟,但松本行弘的想法并不少见。软件开发者们倾向于认为,编程语言能改变使用者思考问题的方式,甚至会改变使用者想要去解决的问题。这也是他们扩大公司、产品以及同事人数的方法:“你用什么语言?”
这能帮助外部人士理解已经变得极其强大和有价值的软件公司,以及我们生活的产品和服务。哪怕是这些公司最内部的决定,比如用 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。扎克伯格当时想的不是漂亮的代码;他在想的是他的朋友们要登录“Thecebook”看照片。
如今 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 也很吸引对困难的新语言感兴趣的程序员。
彻底转换语言不在考虑之列。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 说道:“这种语言会让你觉得拖慢了速度,因为你必须把一件事说上三次。”这也是许多创业公司尽可能拖延转换语言的原因。因为转换语言会失去一些帮助公司起步的牛人,小团队也不大可能快速推出新功能。但一门更精确的语言能帮助公司员工理解彼此的代码,让公司的产品具备稳定性,从而成为人们日常生活的组成部分。
软件公司能进行这类布局也许还能解释为什么它们会变得这么强大。计算机不断扩展的边界是原因之一。但这些公司也具备再造自己的特质。随着它们改变和壮大,它们将不局限于重绘组织结构图。因为它们建立在代码之上,也就能做些更加激烈的事。它们可以自己、自己的文化以及思维方式。
推荐:
网友评论 ()条 查看