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

推荐阅读
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • Java源代码安全审计(二):使用Fortify-sca工具进行maven项目安全审计
    本文介绍了使用Fortify-sca工具对maven项目进行安全审计的过程。作者通过对Fortify的研究和实践,记录了解决问题的学习过程。文章详细介绍了maven项目的处理流程,包括clean、build、Analyze和Report。在安装mvn后,作者遇到了一些错误,并通过Google和Stack Overflow等资源找到了解决方法。作者分享了将一段代码添加到pom.xml中的经验,并成功进行了mvn install。 ... [详细]
  • 本文介绍了CSS样式属性text-overflow、overflow、white-space、width的使用方法和效果。通过设置这些属性,可以实现文本溢出省略号、隐藏溢出内容、禁止换行以及限制元素宽度等效果。详细讲解了每个属性的作用和用法,以及常见的应用场景和注意事项。对于前端开发者来说,掌握这些CSS样式属性的使用方法,能够更好地实现页面布局和文本显示效果。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
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社区 版权所有