热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

网名:雪候鸟,大家尊称鸟哥,惠新宸@Laruence,是国内最有影响力的PHP技术专家,PHP开发组核心成员,PECL开发者

网名:雪候鸟,大家尊称鸟哥,惠新宸 @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 引擎相关的研究、技术、新闻。左手代码,右手诗。

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

我第一次进行“编程”好像还是在小霸王学习机上。后来大学学的是计算机,研究生的时候负责学校校园化建设,主动或者被动地做了很多 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 吗?

其实我是一个很懒的人,从来不会考虑得很远,今朝有酒今朝醉。所以对未来其实我也不是很清楚,我只是觉得现在我还是喜欢编程,喜欢通过自己的工作让大家受益并获得社区的赞誉,我觉得这样挺好的,我会继续做下去的。


推荐阅读
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
author-avatar
楠楠2502858265
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有