首頁 頭條 PHP 鳥哥:我也曾經是「不適合」程式設計的人

PHP 鳥哥:我也曾經是「不適合」程式設計的人

Feb 12, 2019 pm 01:20 PM

惠新宸@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引擎相關的研究、技術、新聞。左手代碼,右手詩。

PHP 鳥哥:我也曾經是「不適合」程式設計的人

問:你是如何開始對程式設計感興趣的?

我第一次進行「程式設計」好像還是在小霸王學習機上。後來大學學的是計算機,研究生的時候負責學校校園化建設,主動或被動地做了很多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嗎?

其實我是一個很懶的人,從來不會考慮得很遠,今朝有酒今朝醉。所以對未來其實我也不是很清楚,我只是覺得現在我還是喜歡編程,喜歡透過自己的工作讓大家受益並獲得社區的讚譽,我覺得這樣挺好的,我會繼續做下去的。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)