PHP 7.1 已于12月1日正式发布,带来了全新的特性和功能。对于 PHP 开发者来说,每个正式版本的更新都是值得记住的日子,每次发布的新特性也都值得去尝试和研究。本期,【开源访谈】邀请到了 PHP 大神鸟哥惠新宸@Laruence ,听听他对 PHP 7.1 的看法,聊聊他当初学习 PHP 的那些事。
【本期嘉宾】
惠新宸,鸟哥,国内最有影响力的 PHP 技术专家, PHP 开发组核心成员,PHP 7 核心开发者。曾供职于雅虎、百度、新浪,现任链家网技术副总裁兼总架构师。是 Yaf、Yar 以及 Yac 、Taint 等多个开源项目的作者。
【采访实录】
1、最初是因为什么喜欢上 PHP 的?
答:其实倒没有一开始就喜欢,06年还是研究生的时候,要给学校做一些网站,就逼着自己去学,阴差阳错的学了 PHP ,然后就一直做到现在。现在来说肯定是喜欢的,有感情在里面,别人说它不好,也会不舒服。当觉得自己有力量和途径去让它变好时,当发现它有哪里不好的时候,感觉会像是一个责任,会觉得可能自己不去管或许就没人管,可能更多的时候是这种感觉吧。
2、学习过程中是怎么一步步提高自己的技术能力的,有没有一些心得分享?
答:我觉得更多的是要去研究,把每个遇到的问题都搞清楚。我经常会跟一些刚毕业的同学讲,你现在学的东西跟你的课本到底能不能联系起来?如果现在学的、用的东西通过一系列的摸索,能跟课本里面学到的那些东西贯通起来,说明你已经找到了好的学习方法。
记得在刚开始学做网站时,听说一项新技术,我就想在自己的网站里面去实现。结果各种不通,各种搞不定。我两天一夜没有睡觉去研究它,最后发现是编码的问题。还有07年刚开始参加工作在雅虎实习的时候,有段时间公司项目组做封闭开发,当时我住得离公司比较远,就在公司附近的一个酒店住了好几个月,每天都是工作到晚上12点以后,甚至到凌晨1、2点,然后早上起来吃个饭又去上班。我觉得更多的时候是要去专研,把遇到的每个问题、每个分支都搞清楚是什么原因。比如去研究一个东西,当研究到它操作系统的层面时,操作系统会告诉你一个结论。这个结论是怎么来的?你有没有兴趣去搞清楚,我觉得这就是关键。
3、据了解,您有同时参与多个项目的开发,是怎么来安排自己的时间呢?
答:对于那个时候的我来说,根本没有时间管理一说,基本上都是一件事搞定之后再去做另外一件事。我觉得唯一需要时间安排的就是跟人约好的事情,当涉及到别人的时候,因为要尊重别人,要守时。更多的时候,一项工作搞不定我不会去做下一项工作。当然,所谓的搞定也有一个度,比如说做到了一个里程碑,我会歇一歇,换个思路去做另一件事情。
时间管理,我觉得可能更多的时候是你的事情是相对来说比较灵活的情况下才会去做。如果是真正去研究一个问题的时候,不可能时间管理,你吃饭也想,睡觉也想,什么时候都在想,这个问题解决不了,睡不好吃不好,还谈什么时间管理。
4、对于普通技术人员来说,遇到问题可以请教高手。那对于您这样的技术大神遇到阻力时,会如何去解决?
答:每个人都有一套自己的学习方法,这分很多种。比如说,问别人,这也是一套学习的方法,但问别人必须要有人可问。我刚开始做 PHP 的时候,几乎整个中国都没有几个人在做内核这块相关的东西。当时为了研究出一个变量的含义,去 Google 查不到,了解到上海有一个人写过一些内核的文章,就给他留言、发邮件,他可能比较忙也没回我。当费了好大的劲去研究一个东西,如果还搞不明白,那就重头再来!从它相关的地方开始读,直到有一天,恍然大悟,原来是这个样子。
很多时候,大家需要的只是一个学习的方法。对于我来说,就是去 Google ,去搜索,去读一些别人写的东西。当然,这两年,整个开发环境好了很多,资料越来越多。你要去研究任何的东西,基本上都会有人已经有一些研究和产出,而且他们也比较愿意去分享。
以前大家可能也没那么乐意去分享,包括我自己。我一开始也不想去分享,因为你分享一些东西,你说不清楚。比如分享一些东西涉及到操作系统层面,那操作系统层面有一些高手会说你这什么东西啊,这完全不对。不过慢慢的,我愿意去分享,愿意把知道的那些分享出来。如果你告诉我哪哪错了,我会非常感激,因为你帮助我学到了一些东西。学东西不是只有主动学习,被动学习也未尝不可。我有时候会出错,很多人会出错,我现在看以前写的文章,有很多关键点是错的,还是有很多东西没有搞明白。
5、PHP 7.1 刚刚发布,最喜欢或最看好的新特性是什么?
答:还真没有。我在北京源创会年终盛典上分享新特性时也说过,大部分我都投了反对票。因为我其实觉得语法糖这样的东西,会把这个语言搞得越来越复杂。我表达了我的观点,因为 PHP 比较民主。我记得前两天有一个特性30多个人赞成,就我一个反对。但我不觉得有什么,因为我表达了我的意见,我反对,不同意,我认为这个东西不好,没意义。但别人会觉得有意义,有的人会喜欢。
我觉得每一个去做开源,或者是做一些跟别人打交道特别多的工作的人,一定要有这样的心理素质,或养成这么个习惯,就是勇于表达自己的观点,不要害怕别人的反对。别人反对你,没关系,如果耐心的去听每个人的理由,其实都会有一定道理。这些新特性也是如此,他们也有自己的理由。我强烈反对的情况下或许是因为这东西对性能有影响,如果它对性能没有影响,我只会表达说它好或者不好。比如说 List 那个我觉得还 OK,因为它是一致性的问题。还有一个 Catch 多个 Exception,也是如此。非要说喜欢的话,那个 List 可以用方括号代替的特性还行,写起来可能会方便一点。
6、PHP 7.1 是否达到了最佳性能?
答:不能说最,别看 PHP 7.1 现在这么快,但相比其它语言,在某些场景下,还是有差距的。这跟它天然的像动态、符号表、间接引用等特性有很大关系。PHP 7.1 相比 7.0 来说,做的最大的工作,就是一个类型推断系统加一个类型相关的中间代码执行引擎。这个不是新的工作,在2013年我们做 PHP 5.5 的 JIT 的时候类型推断系统已经做出来了,但当时把这个项目停掉了,现在把那项工作其中的类型推断部分拿过来,放到 7.1 。基于这个类型推断未来还可以做更多的东西。PHP 7.1 更多的是对 7.0 未完成的工作的一个补充。
7、PHP 国内开发环境越来越成熟,您觉得 PHP 的未来会是怎样?
答:这个真不好说,谁知道呢是吧!之前有人问我为什么 PHP 这么火,我觉得是跟它的历史原因是有关系的。因为在 Web 诞生时期,其实可学的不多。但是现在可学的特别多,写 Web 的可以有 PHP、Go、Java、Node.js、Python 等等。时代在进步,大家的选择越来越多,根据喜好每个人的选择也不一样。未来到底怎样?这个真不好说……
8、伴随着 PHP 火的声音的同时,还有 PHP 人员已经饱和的争议,对此怎么看?
答:他们说饱和就饱和呗。其实有很多时候就是这样,以前的时候我会去争论一些事情,后来觉得其实没有什么意义。哪怕这个语言只有那么几个人在用,但这些人用的舒服,解决了他们的问题,我觉得也是好的。我曾经开玩笑说,PHP 100万人用和 1000万人用对我们来说有什么区别?没有区别,可能就是演讲的时候来的人多一些吧。
9、还有种说法就是 PHP 学习起来特别简单,不利于展示个人能力,对此怎么看?
答:PHP 确实简单,这也是我们追求的目标,我们希望它简单,简单难道不好吗?可能有些人会寄希望通过一些复杂的东西来体现自己的优越感,这其实也没什么问题。只是我个人不认可这种态度,我觉得什么简单就用什么呗。我们公司里面之前有个分享,有同事说他费了好大劲去完成了某项工作,我提出了反对,我觉得这项工作可以在 Ngnix 上通过简单的配置去实现,为什么偏偏要花那么多的精力去做。当然,最后他告诉我说他不知道 Ngnix 上可以这么做。很多时候,有些人习惯于自己去解决一些问题,这是好事,但一定要努力扩充自己的视野,因为你花了那么大的精力最后可能会发现做的还不如人家一两下做得好。对于你来说可能损失不会很大,但对于一个集体、组织来说,损失就大了。你在团队里很重要,你的精力很重要,你花那么多时间做出的工作,可能别人用其他方法很快就能做出来。
回过头来说,你说 PHP 简单吧它也不简单,PHP 相关的东西现在也有很多,比如一些很优雅的框架。有些框架我自己看半天也会觉得还挺复杂的,学起来费劲。
我自己是用 C,我就是喜欢用简单的东西,我不太喜欢那种特别复杂的东西,因为要去理解它。之前我跟别人好像有过一次争吵,他的意思是说你只要肯学一定能学会,学不会说明你有问题。对我来说,我会去学也会去看别人的东西,但是用起来一定是用我最顺手的东西去解决问题。
不说机器语言,汇编层面就那么多东西,类型再复杂,落到汇编上也就是Size 和偏移上的问题。只要能搞清楚这个东西,你去学习其它的,都会觉得它最终的目的就是这个,那学习其它东西还有什么意义呢。当然,这只是在这个层面,如果是人生哲理啊、工作道理什么的,还是要多学习一些。
10、能简单透露一点PHP后续的动作吗?
答:我们几个人现在对新特性关注的比较少,更多的还是关注性能。现在我们在做 PHP 的 JIT 引擎,不出意外的在最近几个月就可能会合并到主干。
11:最后,对于处于迷茫期的PHP新手有怎样的一些建议?
答:我觉得不仅仅是学习 PHP ,学习任何东西都一样,一定要自己去专研。很多时候,有人问我的问题特别简单的话,我不会去回答他。一方面是我确实比较忙,另一方面是我觉得回答他反而对他不好。我更建议他们多去想,多去了解。每一个学习新东西的人,一定要养成自己的一个良好的学习方法,这也会是最高效的方法。尽量少问人,多问搜索引擎,多看 paper,多把自己学的东西和遇到的问题结合起来,学会融会贯通。举例说,你去学习 PHP ,你要搞清楚 PHP 是怎么跑起来的,当一个请求过来,它是怎么通过一系列东西去运行的。说到底我觉得就是需要养成良好的学习方法,而这个方法一定不是去问别人,即便你身边有个特别牛的人,人家也很难做到天天有耐心解答你的问题。