惠新宸:我也曾经是“不适合”编程的人

非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/article/142454php

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

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

图片描述

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

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

问:你是如何喜欢上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吗?

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


更多精彩,加入图灵访谈微信!

图片描述

相关文章
相关标签/搜索