热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

“最好的语言”

编程语言会塑造这门语言使用者的思维方式,这有助于解释科技创业公司的运行方式,以及它们能重新发明自己的原因。当日本计算机科学家松本行弘决定创造Ruby时,他正在追逐SamuelR.D

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

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

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

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 说道:“这种语言会让你觉得拖慢了速度,因为你必须把一件事说上三次。”这也是许多创业公司尽可能拖延转换语言的原因。因为转换语言会失去一些帮助公司起步的牛人,小团队也不大可能快速推出新功能。但一门更精确的语言能帮助公司员工理解彼此的代码,让公司的产品具备稳定性,从而成为人们日常生活的组成部分。

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

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

推荐阅读
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • Java第四周作业:条件语句实践与分析
    本次作业主要围绕Java编程中的if语句展开,通过具体案例深入理解选择结构的使用方法。学生需要完成多个编程任务,并在博客中详细记录每道题目的题目、代码及运行结果。 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
  • 异常要理解Java异常处理是如何工作的,需要掌握一下三种异常类型:检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常ÿ ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • Kotlin基础教程:集合详解
    本文深入探讨了Kotlin中的集合类型,包括可变和不可变集合,并详细介绍了List、Map和Set的使用方法及其增删改查操作。 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
  • PHP插件机制的实现方案解析
    本文深入探讨了PHP中插件机制的设计与实现,旨在分享一种可行的实现方式,并邀请读者共同讨论和优化。该方案不仅涵盖了插件机制的基本概念,还详细描述了如何在实际项目中应用。 ... [详细]
  • 本文详细介绍如何通过修改配置文件来隐藏Apache、Nginx和PHP的版本号,从而增强网站的安全性。我们将提供具体的配置步骤,并解释这些设置的重要性。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
author-avatar
明诺新源研_889
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有