热门标签 | 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?

推荐阅读
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文提供了处理WordPress网站中出现过多重定向问题的方法,包括检查DNS配置、安装SSL证书以及解决数据库连接错误等步骤。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • 利用无代码平台实现高效业务应用开发
    随着市场环境的变化加速,全球企业都在探索更为敏捷的应用开发模式,以便快速响应新兴的商业机遇。然而,传统的软件开发方式不仅成本高昂,而且耗时较长,这往往导致IT与业务部门之间的合作障碍,进而影响项目的成功。本文将探讨如何通过无代码开发平台解决这些问题。 ... [详细]
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
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社区 版权所有