PHP之父Rasmus Lerdorf演讲:激情下的PHP

今天看到了 Rasmus 在 2007 年的一篇演讲。Rasmus 分享了开发 PHP 最初的原因,然后在 PHP 开源之后,如何与其他开发者合作。在当时做互联网开发,面临的一些问题。以及以后(在当时看来)PHP 的未来的发展。感触颇多,以下是演讲内容(内容稍作整理,原文十分不通顺)。

 


 

“激情与PHP” - 我觉得这是一个比较有趣的议题。我是一个技术人员,一个工程师。我会给大家看一些代码,可能有一些非常技术层面的东西。但我希望这次演讲对你来说会是有趣的,一起来了解一些你们之前或许不知道的事情。

对我来讲互联网是从93年开始的,并且是我第一次看到浏览器。对很多很多人来讲,也是他们第一次见到互联网的时候。我刚开始是在一家小的公司工作,也是做一些开发工作。后来我开始做了一些东西,比方说我写了一个网页的程序,程序代码在93年看起来是这个样子的(演示93年代码),这个页面非常简单。

我后来又做了技术咨询和编程的工作。大家在页面上看到的其实是PHP的第一个版本的代码,虽然和现在的看起来不一样,但是它们的理念是一样的。这是一个非常简单的工作。

我对这个语法是非常熟悉的,然后我重新写了这个系统。之后我发现这个方式非常流行,我们有很多不同的新技术和想法,但是一开始我做得并不是很好,也不是很对。

(演示95年代码)这是95年的代码,你可以看到它已经PHP非常像了,但是没有内置的标签。

因为网络从95年开始发展得非常非常快。一些公司的老板只不过是看过了一些网页,认识到公司必须要做出一些东西来。就给他们的程序员分配了去建立 HTML 和 CGI 的一个页面任务,或者是数据库。所以这些程序员工作起来可能是日夜不休的,因为他们是先驱者,没人给他们铺路。他们发掘了新的技术,并且帮助了 PHP 发展。

在过去的几年中,PHP也不断地发展。10年过去了,PHP变成了现在这个样子。我也不明确这些改变是不是好,但是你可以看到很多东西都不一样了。对我来讲是非常有趣的事,在95年的时候,我可以把我的代码作很大的改变,然后把这个代码发给PHP的开发者就好。但是今天我不能这样做,因为现在已经有很多的人在一起开发PHP了,我一旦过了修改,就要通知其他人。

然后,还有一个非常有趣的事情。我一开始,并不知道为什么要开源代码,而且其他人为什么要加入进来。但是后来我发现这些人是有共性的,我总结了一下,跟我合作的有以下四类人。

第一类是精英,因为他们需要这个合作、这个工具。 同时我也认为把这个代码给别人解决问题的话,我们就成为一个合作伙伴的关系。我的老板认为我是一个天才,因为我会写代码,而且很快。因为我早上醒来的时候, 我会突然有一个灵感。我把代码分享给了很多的人,而且他们会分钱给我。其实我有很多的同伴和同事是在和我一起工作的。我们有时候会在一起工作,我们会解决同一个问题,但是别人不太知道这一点。

第二类人,就是想要表达自我的人。画家会画是希望别人看到他的画。程序员也是希望别人来认可他们,让他的同伴和同事知道他在做什么。这也是一种自我表达的方式。其实这并不是我为什么要开发PHP,其实我不喜欢写代码和写程序,它们非常的无聊和枯燥。但是我选择 PHP 无非是希望我能够写得出非常简单的代 码。如果说我有问题的话,我不需要花很多的时间来写。而很多的人非常喜欢这个写代码的程序。他们只在乎编码的工作,他们只在乎写出非常漂亮的代码。 就好象乘飞机一样,虽然我经常坐飞机,但是我非常讨厌飞机,空气那么差。但是比方说我对我要去的目的地是非常有兴趣的,这样我才觉得我作飞机是有价值的。 因为我对去的目的地非常有兴趣。编程也是如此,我不喜欢这个过程,但是最后解决了这个问题我非常高兴。

第三类人,这种参与感能让他们兴奋。有很多的人喜欢玩很多的游戏,很多人却没有太多的社交活动。但是我认为每一个人都需要和其他人的互动。而且你在工作的时候,也会有激素的产生,这种激素会让人亢奋。孩子在玩游戏的时候,他们知道在线上也可以和别人互动。在这样的时候,他们也会产生更多的激素,让他兴奋。那么这类人就是和很多这样的人一样,喜欢这种让人亢奋的感觉。

第四类人,就是很奇怪的人,他们认为通过他们的贡献这个世界会变得非常好。我不是这类的人,这是一个非常酷的事情,非常好的事情,但这不是我。我觉得如果你有这个梦想,把你的梦想付出实施,让这个世界变得更好地这是非常好的事情,但是这不是我开发 PHP 的目的,不是我的的初衷。

好的,我在过去的几年当中学到了一件事情,特别是关于 PHP 的项目的。你在放弃权力的时候,必须知道每个人是怎么看待自己的。在很早的时候,我总是全局地掌控 PHP 的这个项目,不管是谁写的代码,我自己都会重新写一遍,变成我想要的样子。而且我不和别人商谈,因为我是老板。但是我这样做了,这些做贡献的人就觉得没有意思,因为这样他们就没有自己的创新和自己理念。有些人是不希望以这个方式来作贡献的,而我是希望很多的人加入这个项目。因此,我在掌控全局的基础上,下放了一定的权力。虽然我是一个领导者和一个贡献者,但是我和其他的人是一样的。如果有人想作改变,那么我们可以讨论。而且我对这个项目没有绝对控制的权力,因此每个人在个项目里都是平等的。我们必须进行平等的讨论。我们再作决定。这样每个人都是主人翁和归属感,这都是他们的项目,这样他们有了非常好的工作热情。

(下一话题,关于web开发的现状,性能和网络安全)
你必须要想一下,比方说你作为一个用户或者一个工程师,你想一下亚马逊、雅虎这些网站。如果这些网站没有用户的话,那么这些网站就什么都不是了。网站一开始是和报纸一样的,提供信息,有人来看。这是单向的交流,但是现代的网络来说,它比之前要更简单来维护了,因此你只需要有很多的理念和环境,很好的气氛,这样每个人在你网站上的点击都可以帮助你把网站变得更好。受关注程度越来越高,所以每次用户的互动可以使网站变得更好。说起雅虎问答的网站,也变得越来越好了。

对我来讲,这就是 Web2.0 的优势。如果你把网站变得更优秀,每个人都喜欢来访问你的网站。那么你必须满足这一点,这是必须的。

对开发源代码的项目来讲,你必须要建立一些东西,来吸引你的用户,人们会上传很多的照片。比方说,在其他地方的兄弟姐妹都可以看到他们的照片。

比方说,你在浏览的时候,你是不可能回避激情的这个问题的,因此我要回到刚才的页面上,很多的人想要验证世界,和证明自己给世界看。满足它们讲的目的。

你在建立一个网站所需要做的事情,首先你必须吸引客户的眼光,你的网站要运行得非常好。我们在过去发现,有一些很好的理念,可以吸引很多的用户。但是你的网站建立起来,但是崩溃了。当用户点击你的网站却看不到什么东西的时候,这是一个很不好的问题。这是让一个网站死亡最快的办法,也是让一个用户离开你的最快的办法。我们看到非常多的商业网站,他们的理念和点子非常好,但是他们执行得不好,因此他们就败给了竞争对手。因此网站的性能是非常重要的。这是几个问题当中的一个。我给大家讲一下,我们怎么处理性能的问题,首先要评测。

你要知道这个网站到底有多快,在这个例子里面,我是想要来测试一下它到底有多快。如果我们要来建立或者启动这个应用的话,我们到底是可以应付多大的流量等等。同时我们要知道,它的响应时间是多快。我这里有一些例子,我们可以看到测试运行了很多次,反应的时候却非常慢。那你要怎么办呢?已经有这么多代码了,你也建立网站了,怎么办呢?我们就要处理2000个请求的话,我们需要很多的服务器,但是我们的预算可能是不够的,哪怕是你有预算可以买服务器的话,还是有很多的服务器是非常慢的,因此响应时间会非常慢。这是技术和表现之间的区别。这个工具来看一下运行的代码,并且告诉我这个运代码已经到哪一段了,每个代码用了多少时间,这个工具是非常重要的,它可以提供一个图形化的界面来告诉你。今天下午我会给大家讲一些更详细的问题。

另外我们也用一些别的工具。只要你是X86系列的,都可以用这些的工具。如果你要用不同的语言的话,你可能就需要用不同的 DEBEG 的工具,我经常看到在优化自己的代码的时候并不真正知道代码的瓶颈在哪里。这个时候我建议一定要用 DEBEG 工具,它可以告诉你到底什么地方出问题了。

在对它进行了检测之后,评测就告诉我们并不是一秒钟三次请求,而是81次。那么我们的响应时间也降低到了50毫秒。因此起到了一个非常大的提升。其实我们说在每秒钟的处理请求,不是特别重要。因为你的整体性能提高了。

但是如果处理时间短的话就是安全问题,我们要保护个人信息,我们不能泄漏用户的信息。如果安全性不高的话,网站会很快死掉而且有的人来攻击你的网站,攻击你的用户用户,你的用户也会流失掉。而且你也得不到新用户,因为他们不回来你的网站。所以你必须非常关心安全性的问题。在这边有比较常见的问题,我们有一个跨域的脚本问题,如果这个数据可以返回用户这边的话,可以由人利用它来窃取这些信息。如果他们能够窃取这个信息的话,他们可能引诱用户区访问一个 错误的页面,然后提供了用户非常隐秘的信息。这里有一些常见的情况,比方说有人看到了404页面,就是这个页面到找到了,想到的信息找不到了。

在页面里可能也会嵌入一些 javascript 的语言,有人可以在页面里面建立一些字段,就可以欺骗 IE。如果你不断地打补丁就可以避免这些问题。

还有其他的一些问题。比方说有一些IE的插件和远程的欺骗等等。所以我们的网络的平台不是很安全、不是很稳定。他随时会倒塌和崩溃。我们在使用这些技术的时候,如果说底层平台完全崩溃了,就什么事都干不了了。

再给大家说一件我们碰到的具体问题。曾经有一个黑客在服务器上放了恶意脚本,可以找出来你浏览过的网站,然后他可以进入你所有最近浏览的页面,知道你去过的一个银行,或者是阿里巴巴、雅虎,然后他知道了你是阿里巴巴的用户,他可以偷窥到这些信息。他以前也在雅虎工作。 如果他能够在网站上找到这些东西的话,他可以看到用户以前浏览的东西是什么。然后把这些网站放在那边看上是正常的,就像是你在浏览一样,像正常的网站页面是一样的。但是你浏览了之后,把他那个猫眼放在你后面,偷窥到了你的信息。

(删掉一部分关于安全方面和互联网发展相关的内容,真心看不懂原文,就不贴出来坑人)

 


 

提问:首先我有一个看法,我非常喜欢您讲到的,你说的下放权力。我的问题是:你觉得对PHP来说有什么事情是你最想做还是没有做到的?

Rasmus Lerdorf:我刚刚加入PHP的时候,它对我来讲只是一个工具,我并没有很多的想法,也没有想到十几年后我还在做这个事情,它对我来讲只是一个工具, 如果那个时候我能够看到过去这几年走的历程的话,我很多事情是可以做得不一样的。当然还有一些事情,因为目前的网络已经变成了,我们知道在PHP里,功能有很多不同的函数的名称,还有大写、小写、不管怎么样,这样是不太好,不一致的,最开始的时候,我们发现所有的人都是把所有的字大写或小写的。我认为之前 是不太好的,因此我们想要来符合目前写字的习惯。但是我觉得这个决定不是很好。这是另外一件事情。如果可以改变的话我也要改变。

另外安全模式对我来讲并不是非常的安全,虽然有一定的帮助,但是我觉得这个名词并不是很恰当。另外我对一致性和连贯性函数上花我很多的工夫。你可以看出来PHP代码是很多人写的,因为它的代码风格不一样、IP不一样。但是如果你不是很了解每一种API的话,后面的事情的话,你只是看PHP的话, 你会觉得很乱。但其实我要跟你讲你看到的只是一个表面的情况,你必须了解一下底层的东西。这对我来讲并不是什么问题,我不是觉得PHP漂亮才选它的。因为它非常的简单和实用。我对可以实现目标的东西我就可以接受。但是我还是希望不同的代码之间有一个连贯性。很多的目前PHP代码不一致,这是我目前需要处理 得问题,如果我能够看到的话,我可以做到。但是这是一个小问题,不会影响到最后的结果。

提问:Rasmus Lerdorf,您好,我不是阿里巴巴的员工,你可不可以向我们介绍一下PHP项目的下面打算完善哪些功能?

Rasmus Lerdorf:你是指下一个版本吗?不是我是指未来的蓝图。

提问:未来的蓝图。

Rasmus Lerdorf:PHP下一代是第六版了。有一个很大的特性,有一点改动,但是我们必须知道你这个函数有很大的提升。对人们来讲并不是很自然,他们可能会 认为,这些函数的字段会有提升。你使用任何一种字段和任何一种字符,我们都会在PHP来很好地处理。这是很难的一件事情。对PHP来讲这不是一个很大的改变。目前我们还有很大的期望,因为这是一个很大的困难,目前我们还没有完成这样的工作。当然了,我们也把这个工作放到了这个版本,也进行了一些调试,但是这个工作还没有完成,所以我不能说完成了。我们目前的期望是非常短的,一年来讲,我们对字段、字符段的处理可以进一步提升。这对网络来讲是一个非常大的问题。 PHP第五代的发展是跟随网络发展而发展的。

提问:你能告诉我2015年是什么样子的吗?

Rasmus Lerdorf:我也不知道。

 


 

(今年已经是2015年,从94年 PHP 的一个版本到现在已经21年过去了。现在看来很多事情在当时是不敢想象的,PHP 的发展离不开 Web 2.0 发展,他真的是最好的web开发服务端语言。现在 PHP 也有很多优秀的项目,主要是俩个方向吧,一个是更多的发挥自身的优势,另一个是补齐自身的短板。比如说 swoole,支持高并发异步的框架,让 PHP 也可以做到像 java 那样支持几十万并发的服务器。相信 PHP 会越来越好,我也会一直做下去,因为这是我的饭碗。)