PHP 鸟哥:我也曾经是“不适合”编程的人

网名:雪候鸟,你们尊称鸟哥,惠新宸 @Laruence, 是国内最有影响力的 PHP 技术专家,PHP 开发组核心成员,PECL 开发者,Zend 公司外聘顾问。他曾供职于雅虎,百度,如今新浪微博任平台及数据部总架构师兼首席 PHP 顾问。惠新宸是 PHP NG 核心开发者,PHP5.4,5.5 的主要开发者。做为 PECL 开发者贡献了 Yaf ,Yar 以及 Yac、Taint 等多个优秀开源做品,同时也是 APC,Opcache,Msgpack 等项目的维护者。php

从一个在网上搜 PHP 教程的初学者,到 PHP 开发组核心成员,惠新宸以为整个过程就像“打怪升级”。和 Java 同样也被称为蓝领语言的 PHP,在他看来偏偏是可以培养更多编程者的摇篮,而人人都能编程的时代,势必会产生更多可以推进技术进步的牛人。他在博客风雪之隅上分享关于 PHP 语言和 Zend 引擎相关的研究、技术、新闻。左手代码,右手诗。web

问:你是如何开始对编程感兴趣的?面试

我第一次进行“编程”好像仍是在小霸王学习机上。后来大学学的是计算机,研究生的时候负责学校校园化建设,主动或者被动地作了不少 Web 开发工做,包括当时学校不少二级部门的网站,校园 BBS 的维护等。 想一想好像也没有那么一件事,或者一个契机说我就喜欢上编程了。就感受很天然地就作了这个行业,也没有以为不喜欢,就这么作下来了。sql

问:你是如何喜欢上 PHP 的?你又是如何成为 PHP 开发组核心成员的?编程

当时在研究生的时候要作一个网站,彻底不会的状况下就去网上搜,恰好搜到一个 PHP 的教程,教怎么作一个简单的网站,因而试着照着作了一下,发现不管从安装、部署(当时尚未那种集中化部署工具,不过也有不少教程教怎么部署 LAMP)、编写代码,测试都很方便,语法还和C语言很像,甚至不少 API 的名字也和 libc API 的同样。因而就这样开始了和 PHP 的不解之缘。缓存

应该是在 2011 年吧,那个时候为百度开发了 Ap(Yaf 的前身项目),当时在百度内部用的还不错,因而我想着要贡献到 PECL 上去,修改了一些之后,更名为 Yaf(Yet another framework,这个名字也是有点自嘲的意思,由于 PHP 的框架很是多),就发邮件到 PHP 的邮件组,由于英语比较烂,因此过程仍是比较曲折,好在当时 Pierre Joye 帮助我了不少,让 Yaf 进入了 PECL。性能优化

另外在提交 Yaf 以前我其实一直都在研究 PHP 的源代码,因此也提交了很多 Bug 和 Fix,好比我记得有一天中午,Rasmus(PHP 之父)在 IRC 上说发现一个 Bug,我差很少 5 分钟后就给出了 Fix。架构

等慢慢的和一些人熟悉,获得了你们的信任之后,我就发起申请,以后就得到了 PHP 核心代码的提交权限,参与到 PHP 的直接开发和 Bug 修复中,成为了开发组的一员。框架

至于说核心么,那是慢慢积累来的,其实也是一个互信的过程。若是你的工做你们承认,那么就会尊重你的意见。我慢慢地和 Dmitry Stogov 变的熟了起来,获得了 Zend 核心部分的提交权限,提交了不少核心 Bug 的修复和新特性,再后来成为了 Zend 外聘顾问,慢慢成为了 Core Developer。编程语言

听起来好像有点打怪升级的感受吧。

问:你是在什么样的契机下开发了 Yaf?当时百度是如何支持 Yaf 开发的?

在 Yaf 以前,关于使用不使用框架其实一直有一个经典的争论就是:“使用框架会下降性能,而不使用框架会下降开发效率。”

当时百度内部的框架不少,包括开源的 Yii,ZF 之类的,也包括有的团队本身写的。这样有一个问题就是类库,一些周边设施没有办法互通。

还有一个缘由就是,不少框架做者把框架发布出去之后,会发现不一样的人会对框架作各类修改,致使时间久了,一个框架发出去,就变成了各类变种,后续统一升级也变得不可能。

因此,我决定要用 PHP 扩展实现一个框架来解决这些问题,固然在写这个扩展以前其实也不是颇有信心,不知道采用扩展能带来多大的性能提高。好在最后的结果是很好的。

问:为何选择用C语言来写 Yaf?

PHP 是C语言写的,因此他的扩展也是采用C语言来写的,因而就选择了C语言来写 Yaf。

问:为何会离开百度,来到新浪微博?

这个其实缘由不少,好比当时在百度是 T7 了,业务上的事情参与得少了,感受本身好像没有那么多事情要作,有点虚度的感受。

另外,我当时在百度的商业搜索部,并不直接接触访问量大的系统,因此也但愿找个大的平台再锻炼下,而微博恰好就是这样一个平台。

来了微博之后,确实接触到了不少以前没有遇到过的挑战,也感受本身的知识有了更大的舞台能够发挥。

问:你如今在新浪微博具体负责的工做是什么?

我如今在微博技术部,带着一个基础服务小组,咱们主要的工做也分阶段,前两年的主要工做就是作微博 LAMP 的性能优化,包括各类基础框架,工具研发,环境优化,规范制定等等。

这两年,微博的 LAMP 架构已经趋于稳定,总体性能也有几倍的提高。咱们也有了一套本身的高性能 LAMP 总体解决方案。因此 LAMP 优化的工做少了一些。如今主要精力都放在基础设施的研发上,好比缓存中间层,转码服务,通讯平台等等。

问:PHP7(PHPNG)有没有把新浪微博平台使用 PHP 的需求和痛点当作重要的反馈?

这个固然是有的,自从我加入开发组以来,和很多的其余成员有过相似的争论就是:我认为性能很重要,而有人会认为新特性很重要,那么当一个新特性影响性能的时候咱们就会发生争执。

我很偏执于性能提高,这也是为何我后来和 Dmitry Stogov 合做比较多的缘由,由于他也特别关心性能。

而我关心性能的主要缘由就是,对于每1% 的性能提高能给微博这样的国内最大的 LNMP 平台带来的价值我有很真实的体会。目前咱们微博的总体性能虽然相比两年前有了很大的提高,可是我认识到在不影响开发效率的状况下,进一步的提高只能依赖于 语言、环境的性能提高。因此这部分也就是微博对 PHP 的需求。

PHP7 在 WordPress 上相比于 5.6,有 100% 以上的真实性能提高(QPS),我相信明年,等 PHP7 发布之后,咱们微博的总体 LAMP 平台的各项业务也能够获得 100% 的性能提高。

问:你参与 PHP7(PHPNG)开发的流程是什么样的?你是如何和其余开发组成员合做的?

PHPNG 当时是一个秘密的项目,最初的参与者只有 Dmitry 和我,我还记得是今年开春的时候,当时咱们作的基于 PHP5 的 JIT 项目由于效果不理想因此搁置了,你们都比较郁闷。

Dmitry 说他有个想法,把 ZVAL 从新设计下,压缩一下大小来减小内存占用。而后咱们俩我的讨论了一下,由于其实咱们天天都会有各类想法,因此当时也只是以为:嗯,这个想法也许能 Work。但还不是颇有信心。

当时的主要想法是赶忙作出一个能运行的原型来测试下效果。这个过程当中咱们主要是讨论想法,而后各自实现要作的部分,再合并。

合做的主要工具仍是靠 Skype,不过由于他在圣彼得堡,和咱们有时差,因此也会借助于邮件交流,经过 Github 来 Review 代码。

等到后来项目差很少有告终论,咱们发现,“嘿,这个主意不错,起做用了”。而后就公开了。以后就变成了正常的你们协做模式,有想法就提交 RPC,提交 Patch,投票,你们 Reivew,而后合并。

问:PHP7 到目前为止已经增长或减小了哪些特性?在发布以前,还将如何提高性能?

有不少,除了 PHPNG 这个分支主要提供性能提高之外,咱们还有 AST(抽象语法树)的支持,Uniform Variable syntax,64bits length string supports,一些新的语法糖,以及最近的 Native TLS 等。

PHP7 将在 2015 年 10 月正式发布, 在这以前,咱们还有一些想法要尝试,好比使用 zend_array 直接替代 Hashtable;好比经过指定函数从新分节,排序来减小 iTLB miss;好比把 JIT 的一部分优化手段(类型推倒)引入到 PHP 中,配合一些类型专有的 OPCodeHandler 来提速;再好比进一步提升代码数据局部性减小 Cache miss 等等。

固然,咱们还有一个并行在作的 JIT 项目,只不过我很担忧这个项目能不能在 PHP7 发布的时候准备就绪。

问:PHP 的新版本将跨过 PHP6 直接升级为 PHP7 吗?为何?

这个主要的缘由是,当年 PHP 有过一个开发版本叫作 PHP6,但后来这个版本失败了,没有发布。因此,此次的版本也就应该是 PHP7 了。

问:Facebook 发布的语言 Hack 和 PHP 是什么关系?Hack 的目的是要取代 PHP 吗?这两种语言相比各自有什么优点?

没什么太大的关系,Hack is not PHP。要说取代的话,我相信他们(Facebook)可能会有这样的想法吧,不过这个要看社区接受不接受了。

对于 Hack 我不是特别熟悉,很差具体评价。

问:有人认为因为 PHP 易于学习,门槛低,因此致使一些并不适合编程的人涌了进来,你怎么看待这种观点?

这个观点我实在不敢赞同。我在本科毕业的时候,也尝试找了一些开发工做,面试了几个单位,都被拒了,也许在当时面试个人那些人眼里,我就是一个不适合编程的人吧。

可是 PHP 由于门槛低,让人能够很快看到本身“编程”的成果,会对新手产生一个正向反馈激励的做用,让有兴趣的人变得更有兴趣。 而编程的人越多,那么产生大牛、对整个技术进步作出贡献的人出现的几率也越大。

而且,将来的编程语言必定是朝着易用性发展,进一步下降编程的门槛,也许会有一天人人都能编程也说不定呢!

问:一名合格的 PHP 工程师的知识结构是怎样的?

我记得之前有一句话说:“ PHP 工程师都是万金油”,其实这句话不只仅对 PHP 工程师适用,应该对全部的工程师都适用。

知识结构要很广。Web 开发涉及的技术点是比较多的,HTML、CSS、JS、SQL 这些之外,还要懂得一些 Nginx、Linux、Mysql 的配置、维护、排错经常使用的办法,这些都应该懂一些。

问:除了技术能力以外,你在面试的时候还会注重什么?

我会特别注意思惟清晰、沟通、谈吐。其实说穿了就是将来一块儿共事的话,会不会有障碍,以及成长潜力是否大。

问:曾经的 phpe.net 站长陈伯乐如今在卖男人袜。你对将来的打算是什么?会一直都是一位 coder 吗?

其实我是一个很懒的人,历来不会考虑得很远,今朝有酒今朝醉。因此对将来其实我也不是很清楚,我只是以为如今我仍是喜欢编程,喜欢经过本身的工做让你们受益并得到社区的赞誉,我以为这样挺好的,我会继续作下去的。

相关文章
相关标签/搜索