惠新宸:我也曾經是“不適合”程式設計的人(圖靈訪談)
惠新宸@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嗎?
其實我是一個很懶的人,從來不會考慮得很遠,今朝有酒今朝醉。所以對未來其實我也不是很清楚,我只是覺得現在我還是喜歡程式設計,喜歡通過自己的工作讓大家受益並獲得社群的讚譽,我覺得這樣挺好的,我會繼續做下去的。
更多精彩,加入圖靈訪談微信!
相關文章
- 惠新宸:我也曾經是“不適合”程式設計的人程式設計
- 池建強:我的人生超程式設計(圖靈訪談)程式設計圖靈
- 聚勝萬合CTO胡寧:IT特別適合我這種喜新厭舊的人(圖靈訪談)圖靈
- 《程式碼本色》作者Daniel Shiffman:藝術家也程式設計(圖靈訪談)程式設計圖靈
- 什麼樣的人不適合當程式設計師?程式設計師
- 薑餅人:旅行才是我真正的人生(圖靈訪談)圖靈
- 什麼樣的人不適合當程式設計師呢?程式設計師
- @程式設計師鄒欣 訪談問題有獎徵集(圖靈訪談)程式設計師圖靈
- C++ API設計大師Martin Reddy:選擇最合適的語言(圖靈訪談)C++API圖靈
- 白宸—阿里雲資料庫專家,訪談問題有獎徵集(圖靈訪談)阿里資料庫圖靈
- [英]C++ API設計大師Martin Reddy:選擇最合適的語言(圖靈訪談)C++API圖靈
- 又拍雲CTO沈志華:曾經坎坷的雲創業之路(圖靈訪談)創業圖靈
- 譯後訪談《Scratch少兒趣味程式設計》作者阿部和廣(圖靈訪談)程式設計圖靈
- 《我的第一本程式設計書》作者平山尚,訪談問題有獎徵集(圖靈訪談)程式設計圖靈
- 圖靈訪談圖靈
- “閃總”曹力:創業是為了自由,程式設計是為了快樂(圖靈訪談)創業程式設計圖靈
- 雲風:一個程式設計的自由人(圖靈訪談)程式設計圖靈
- 《高效程式設計師的45個習慣》作者:掌握多種語言是我的財富(圖靈訪談)程式設計師圖靈
- 我和圖靈訪談的2017圖靈
- 《Erlang程式設計(第2版)》作者Joe Armstrong訪談問題有獎徵集(圖靈訪談)程式設計圖靈
- Linus Torvalds訪談:我已經不讀程式碼了
- 新的產品,新的挑戰(圖靈訪談)圖靈
- 《黑客與設計》作者David Kadavy:我要解構設計的配方(圖靈訪談)黑客圖靈
- Python 並不適合職場程式設計Python程式設計
- Ben Evans:保守的設計思想是Java的最大優勢(圖靈訪談)Java圖靈
- 《Java程式設計師修煉之道》作者Ben Evans訪談問題有獎徵集(圖靈訪談)Java程式設計師圖靈
- 《圖靈的祕密》作者Charles Petzold:我眼中的圖靈機和Windows(圖靈訪談)圖靈Windows
- 訪談嘉賓推薦(圖靈訪談)圖靈
- 《Java 8函數語言程式設計》作者Richard Warburton訪談問題有獎徵集(圖靈訪談)Java函數程式設計圖靈
- Susan Lammers:與程式設計大師們的對話(圖靈訪談)程式設計圖靈
- 什麼樣的人適合學UI設計?UI
- 《寫給大家看的設計書》作者Robin Williams:我永遠是一位教師(圖靈訪談)圖靈
- 蔡學鏞:這一題不答(圖靈訪談)圖靈
- 王棟:要做好推薦,只有技術是不夠的(圖靈訪談)圖靈
- Anson:關於Google Glass,我們在做的是未來(圖靈訪談)Go圖靈
- 也談程式設計改革程式設計
- 我曾經得到的一個最好的程式設計建議程式設計
- 《Python計算機視覺程式設計》作者Jan Erik Solem訪談問題有獎徵集(圖靈訪談)Python計算機視覺程式設計圖靈