今天看到了 Rasmus 在 2007 年的一篇演講。Rasmus 分享了開發(fā) PHP 最初的原因,然后在 PHP 開源之后,如何與其他開發(fā)者合作。在當(dāng)時(shí)做互聯(lián)網(wǎng)開發(fā),面臨的一些問題。以及以后(在當(dāng)時(shí)看來)PHP 的未來的發(fā)展。感觸頗多,以下是演講內(nèi)容(內(nèi)容稍作整理,原文十分不通順)。
“激情與PHP” - 我覺得這是一個(gè)比較有趣的議題。我是一個(gè)技術(shù)人員,一個(gè)工程師。我會(huì)給大家看一些代碼,可能有一些非常技術(shù)層面的東西。但我希望這次演講對(duì)你來說會(huì)是有趣的,一起來了解一些你們之前或許不知道的事情。
對(duì)我來講互聯(lián)網(wǎng)是從93年開始的,并且是我第一次看到瀏覽器。對(duì)很多很多人來講,也是他們第一次見到互聯(lián)網(wǎng)的時(shí)候。我剛開始是在一家小的公司工作,也是做一些開發(fā)工作。后來我開始做了一些東西,比方說我寫了一個(gè)網(wǎng)頁的程序,程序代碼在93年看起來是這個(gè)樣子的(演示93年代碼),這個(gè)頁面非常簡單。
我后來又做了技術(shù)咨詢和編程的工作。大家在頁面上看到的其實(shí)是PHP的第一個(gè)版本的代碼,雖然和現(xiàn)在的看起來不一樣,但是它們的理念是一樣的。這是一個(gè)非常簡單的工作。
我對(duì)這個(gè)語法是非常熟悉的,然后我重新寫了這個(gè)系統(tǒng)。之后我發(fā)現(xiàn)這個(gè)方式非常流行,我們有很多不同的新技術(shù)和想法,但是一開始我做得并不是很好,也不是很對(duì)。
(演示95年代碼)這是95年的代碼,你可以看到它已經(jīng)PHP非常像了,但是沒有內(nèi)置的標(biāo)簽。
因?yàn)榫W(wǎng)絡(luò)從95年開始發(fā)展得非常非??臁R恍┕镜睦习逯徊贿^是看過了一些網(wǎng)頁,認(rèn)識(shí)到公司必須要做出一些東西來。就給他們的程序員分配了去建立 HTML 和 CGI 的一個(gè)頁面任務(wù),或者是數(shù)據(jù)庫。所以這些程序員工作起來可能是日夜不休的,因?yàn)樗麄兪窍闰?qū)者,沒人給他們鋪路。他們發(fā)掘了新的技術(shù),并且?guī)椭?PHP 發(fā)展。
在過去的幾年中,PHP也不斷地發(fā)展。10年過去了,PHP變成了現(xiàn)在這個(gè)樣子。我也不明確這些改變是不是好,但是你可以看到很多東西都不一樣了。對(duì)我來講是非常有趣的事,在95年的時(shí)候,我可以把我的代碼作很大的改變,然后把這個(gè)代碼發(fā)給PHP的開發(fā)者就好。但是今天我不能這樣做,因?yàn)楝F(xiàn)在已經(jīng)有很多的人在一起開發(fā)PHP了,我一旦過了修改,就要通知其他人。
然后,還有一個(gè)非常有趣的事情。我一開始,并不知道為什么要開源代碼,而且其他人為什么要加入進(jìn)來。但是后來我發(fā)現(xiàn)這些人是有共性的,我總結(jié)了一下,跟我合作的有以下四類人。
第一類是精英,因?yàn)樗麄冃枰@個(gè)合作、這個(gè)工具。 同時(shí)我也認(rèn)為把這個(gè)代碼給別人解決問題的話,我們就成為一個(gè)合作伙伴的關(guān)系。我的老板認(rèn)為我是一個(gè)天才,因?yàn)槲視?huì)寫代碼,而且很快。因?yàn)槲以缟闲褋淼臅r(shí)候, 我會(huì)突然有一個(gè)靈感。我把代碼分享給了很多的人,而且他們會(huì)分錢給我。其實(shí)我有很多的同伴和同事是在和我一起工作的。我們有時(shí)候會(huì)在一起工作,我們會(huì)解決同一個(gè)問題,但是別人不太知道這一點(diǎn)。
第二類人,就是想要表達(dá)自我的人。畫家會(huì)畫是希望別人看到他的畫。程序員也是希望別人來認(rèn)可他們,讓他的同伴和同事知道他在做什么。這也是一種自我表達(dá)的方式。其實(shí)這并不是我為什么要開發(fā)PHP,其實(shí)我不喜歡寫代碼和寫程序,它們非常的無聊和枯燥。但是我選擇 PHP 無非是希望我能夠?qū)懙贸龇浅:唵蔚拇?碼。如果說我有問題的話,我不需要花很多的時(shí)間來寫。而很多的人非常喜歡這個(gè)寫代碼的程序。他們只在乎編碼的工作,他們只在乎寫出非常漂亮的代碼。 就好象乘飛機(jī)一樣,雖然我經(jīng)常坐飛機(jī),但是我非常討厭飛機(jī),空氣那么差。但是比方說我對(duì)我要去的目的地是非常有興趣的,這樣我才覺得我作飛機(jī)是有價(jià)值的。 因?yàn)槲覍?duì)去的目的地非常有興趣。編程也是如此,我不喜歡這個(gè)過程,但是最后解決了這個(gè)問題我非常高興。
第三類人,這種參與感能讓他們興奮。有很多的人喜歡玩很多的游戲,很多人卻沒有太多的社交活動(dòng)。但是我認(rèn)為每一個(gè)人都需要和其他人的互動(dòng)。而且你在工作的時(shí)候,也會(huì)有激素的產(chǎn)生,這種激素會(huì)讓人亢奮。孩子在玩游戲的時(shí)候,他們知道在線上也可以和別人互動(dòng)。在這樣的時(shí)候,他們也會(huì)產(chǎn)生更多的激素,讓他興奮。那么這類人就是和很多這樣的人一樣,喜歡這種讓人亢奮的感覺。
第四類人,就是很奇怪的人,他們認(rèn)為通過他們的貢獻(xiàn)這個(gè)世界會(huì)變得非常好。我不是這類的人,這是一個(gè)非??岬氖虑椋浅:玫氖虑?,但這不是我。我覺得如果你有這個(gè)夢想,把你的夢想付出實(shí)施,讓這個(gè)世界變得更好地這是非常好的事情,但是這不是我開發(fā) PHP 的目的,不是我的的初衷。
好的,我在過去的幾年當(dāng)中學(xué)到了一件事情,特別是關(guān)于 PHP 的項(xiàng)目的。你在放棄權(quán)力的時(shí)候,必須知道每個(gè)人是怎么看待自己的。在很早的時(shí)候,我總是全局地掌控 PHP 的這個(gè)項(xiàng)目,不管是誰寫的代碼,我自己都會(huì)重新寫一遍,變成我想要的樣子。而且我不和別人商談,因?yàn)槲沂抢习濉5俏疫@樣做了,這些做貢獻(xiàn)的人就覺得沒有意思,因?yàn)檫@樣他們就沒有自己的創(chuàng)新和自己理念。有些人是不希望以這個(gè)方式來作貢獻(xiàn)的,而我是希望很多的人加入這個(gè)項(xiàng)目。因此,我在掌控全局的基礎(chǔ)上,下放了一定的權(quán)力。雖然我是一個(gè)領(lǐng)導(dǎo)者和一個(gè)貢獻(xiàn)者,但是我和其他的人是一樣的。如果有人想作改變,那么我們可以討論。而且我對(duì)這個(gè)項(xiàng)目沒有絕對(duì)控制的權(quán)力,因此每個(gè)人在個(gè)項(xiàng)目里都是平等的。我們必須進(jìn)行平等的討論。我們?cè)僮鳑Q定。這樣每個(gè)人都是主人翁和歸屬感,這都是他們的項(xiàng)目,這樣他們有了非常好的工作熱情。
(下一話題,關(guān)于web開發(fā)的現(xiàn)狀,性能和網(wǎng)絡(luò)安全)
你必須要想一下,比方說你作為一個(gè)用戶或者一個(gè)工程師,你想一下亞馬遜、雅虎這些網(wǎng)站。如果這些網(wǎng)站沒有用戶的話,那么這些網(wǎng)站就什么都不是了。網(wǎng)站一開始是和報(bào)紙一樣的,提供信息,有人來看。這是單向的交流,但是現(xiàn)代的網(wǎng)絡(luò)來說,它比之前要更簡單來維護(hù)了,因此你只需要有很多的理念和環(huán)境,很好的氣氛,這樣每個(gè)人在你網(wǎng)站上的點(diǎn)擊都可以幫助你把網(wǎng)站變得更好。受關(guān)注程度越來越高,所以每次用戶的互動(dòng)可以使網(wǎng)站變得更好。說起雅虎問答的網(wǎng)站,也變得越來越好了。
對(duì)我來講,這就是 Web2.0 的優(yōu)勢。如果你把網(wǎng)站變得更優(yōu)秀,每個(gè)人都喜歡來訪問你的網(wǎng)站。那么你必須滿足這一點(diǎn),這是必須的。
對(duì)開發(fā)源代碼的項(xiàng)目來講,你必須要建立一些東西,來吸引你的用戶,人們會(huì)上傳很多的照片。比方說,在其他地方的兄弟姐妹都可以看到他們的照片。
比方說,你在瀏覽的時(shí)候,你是不可能回避激情的這個(gè)問題的,因此我要回到剛才的頁面上,很多的人想要驗(yàn)證世界,和證明自己給世界看。滿足它們講的目的。
你在建立一個(gè)網(wǎng)站所需要做的事情,首先你必須吸引客戶的眼光,你的網(wǎng)站要運(yùn)行得非常好。我們?cè)谶^去發(fā)現(xiàn),有一些很好的理念,可以吸引很多的用戶。但是你的網(wǎng)站建立起來,但是崩潰了。當(dāng)用戶點(diǎn)擊你的網(wǎng)站卻看不到什么東西的時(shí)候,這是一個(gè)很不好的問題。這是讓一個(gè)網(wǎng)站死亡最快的辦法,也是讓一個(gè)用戶離開你的最快的辦法。我們看到非常多的商業(yè)網(wǎng)站,他們的理念和點(diǎn)子非常好,但是他們執(zhí)行得不好,因此他們就敗給了競爭對(duì)手。因此網(wǎng)站的性能是非常重要的。這是幾個(gè)問題當(dāng)中的一個(gè)。我給大家講一下,我們?cè)趺刺幚硇阅艿膯栴},首先要評(píng)測。
你要知道這個(gè)網(wǎng)站到底有多快,在這個(gè)例子里面,我是想要來測試一下它到底有多快。如果我們要來建立或者啟動(dòng)這個(gè)應(yīng)用的話,我們到底是可以應(yīng)付多大的流量等等。同時(shí)我們要知道,它的響應(yīng)時(shí)間是多快。我這里有一些例子,我們可以看到測試運(yùn)行了很多次,反應(yīng)的時(shí)候卻非常慢。那你要怎么辦呢?已經(jīng)有這么多代碼了,你也建立網(wǎng)站了,怎么辦呢?我們就要處理2000個(gè)請(qǐng)求的話,我們需要很多的服務(wù)器,但是我們的預(yù)算可能是不夠的,哪怕是你有預(yù)算可以買服務(wù)器的話,還是有很多的服務(wù)器是非常慢的,因此響應(yīng)時(shí)間會(huì)非常慢。這是技術(shù)和表現(xiàn)之間的區(qū)別。這個(gè)工具來看一下運(yùn)行的代碼,并且告訴我這個(gè)運(yùn)代碼已經(jīng)到哪一段了,每個(gè)代碼用了多少時(shí)間,這個(gè)工具是非常重要的,它可以提供一個(gè)圖形化的界面來告訴你。今天下午我會(huì)給大家講一些更詳細(xì)的問題。
另外我們也用一些別的工具。只要你是X86系列的,都可以用這些的工具。如果你要用不同的語言的話,你可能就需要用不同的 DEBEG 的工具,我經(jīng)常看到在優(yōu)化自己的代碼的時(shí)候并不真正知道代碼的瓶頸在哪里。這個(gè)時(shí)候我建議一定要用 DEBEG 工具,它可以告訴你到底什么地方出問題了。
在對(duì)它進(jìn)行了檢測之后,評(píng)測就告訴我們并不是一秒鐘三次請(qǐng)求,而是81次。那么我們的響應(yīng)時(shí)間也降低到了50毫秒。因此起到了一個(gè)非常大的提升。其實(shí)我們說在每秒鐘的處理請(qǐng)求,不是特別重要。因?yàn)槟愕恼w性能提高了。
但是如果處理時(shí)間短的話就是安全問題,我們要保護(hù)個(gè)人信息,我們不能泄漏用戶的信息。如果安全性不高的話,網(wǎng)站會(huì)很快死掉而且有的人來攻擊你的網(wǎng)站,攻擊你的用戶用戶,你的用戶也會(huì)流失掉。而且你也得不到新用戶,因?yàn)樗麄儾换貋砟愕木W(wǎng)站。所以你必須非常關(guān)心安全性的問題。在這邊有比較常見的問題,我們有一個(gè)跨域的腳本問題,如果這個(gè)數(shù)據(jù)可以返回用戶這邊的話,可以由人利用它來竊取這些信息。如果他們能夠竊取這個(gè)信息的話,他們可能引誘用戶區(qū)訪問一個(gè) 錯(cuò)誤的頁面,然后提供了用戶非常隱秘的信息。這里有一些常見的情況,比方說有人看到了404頁面,就是這個(gè)頁面到找到了,想到的信息找不到了。
在頁面里可能也會(huì)嵌入一些 javascript?的語言,有人可以在頁面里面建立一些字段,就可以欺騙 IE。如果你不斷地打補(bǔ)丁就可以避免這些問題。
還有其他的一些問題。比方說有一些IE的插件和遠(yuǎn)程的欺騙等等。所以我們的網(wǎng)絡(luò)的平臺(tái)不是很安全、不是很穩(wěn)定。他隨時(shí)會(huì)倒塌和崩潰。我們?cè)谑褂眠@些技術(shù)的時(shí)候,如果說底層平臺(tái)完全崩潰了,就什么事都干不了了。
再給大家說一件我們碰到的具體問題。曾經(jīng)有一個(gè)黑客在服務(wù)器上放了惡意腳本,可以找出來你瀏覽過的網(wǎng)站,然后他可以進(jìn)入你所有最近瀏覽的頁面,知道你去過的一個(gè)銀行,或者是阿里巴巴、雅虎,然后他知道了你是阿里巴巴的用戶,他可以偷窺到這些信息。他以前也在雅虎工作。 如果他能夠在網(wǎng)站上找到這些東西的話,他可以看到用戶以前瀏覽的東西是什么。然后把這些網(wǎng)站放在那邊看上是正常的,就像是你在瀏覽一樣,像正常的網(wǎng)站頁面是一樣的。但是你瀏覽了之后,把他那個(gè)貓眼放在你后面,偷窺到了你的信息。
(刪掉一部分關(guān)于安全方面和互聯(lián)網(wǎng)發(fā)展相關(guān)的內(nèi)容,真心看不懂原文,就不貼出來坑人)
提問:首先我有一個(gè)看法,我非常喜歡您講到的,你說的下放權(quán)力。我的問題是:你覺得對(duì)PHP來說有什么事情是你最想做還是沒有做到的?
Rasmus Lerdorf:我剛剛加入PHP的時(shí)候,它對(duì)我來講只是一個(gè)工具,我并沒有很多的想法,也沒有想到十幾年后我還在做這個(gè)事情,它對(duì)我來講只是一個(gè)工具, 如果那個(gè)時(shí)候我能夠看到過去這幾年走的歷程的話,我很多事情是可以做得不一樣的。當(dāng)然還有一些事情,因?yàn)槟壳暗木W(wǎng)絡(luò)已經(jīng)變成了,我們知道在PHP里,功能有很多不同的函數(shù)的名稱,還有大寫、小寫、不管怎么樣,這樣是不太好,不一致的,最開始的時(shí)候,我們發(fā)現(xiàn)所有的人都是把所有的字大寫或小寫的。我認(rèn)為之前 是不太好的,因此我們想要來符合目前寫字的習(xí)慣。但是我覺得這個(gè)決定不是很好。這是另外一件事情。如果可以改變的話我也要改變。
另外安全模式對(duì)我來講并不是非常的安全,雖然有一定的幫助,但是我覺得這個(gè)名詞并不是很恰當(dāng)。另外我對(duì)一致性和連貫性函數(shù)上花我很多的工夫。你可以看出來PHP代碼是很多人寫的,因?yàn)樗拇a風(fēng)格不一樣、IP不一樣。但是如果你不是很了解每一種API的話,后面的事情的話,你只是看PHP的話, 你會(huì)覺得很亂。但其實(shí)我要跟你講你看到的只是一個(gè)表面的情況,你必須了解一下底層的東西。這對(duì)我來講并不是什么問題,我不是覺得PHP漂亮才選它的。因?yàn)樗浅5暮唵魏蛯?shí)用。我對(duì)可以實(shí)現(xiàn)目標(biāo)的東西我就可以接受。但是我還是希望不同的代碼之間有一個(gè)連貫性。很多的目前PHP代碼不一致,這是我目前需要處理 得問題,如果我能夠看到的話,我可以做到。但是這是一個(gè)小問題,不會(huì)影響到最后的結(jié)果。
提問:Rasmus Lerdorf,您好,我不是阿里巴巴的員工,你可不可以向我們介紹一下PHP項(xiàng)目的下面打算完善哪些功能?
Rasmus Lerdorf:你是指下一個(gè)版本嗎?不是我是指未來的藍(lán)圖。
提問:未來的藍(lán)圖。
Rasmus Lerdorf:PHP下一代是第六版了。有一個(gè)很大的特性,有一點(diǎn)改動(dòng),但是我們必須知道你這個(gè)函數(shù)有很大的提升。對(duì)人們來講并不是很自然,他們可能會(huì) 認(rèn)為,這些函數(shù)的字段會(huì)有提升。你使用任何一種字段和任何一種字符,我們都會(huì)在PHP來很好地處理。這是很難的一件事情。對(duì)PHP來講這不是一個(gè)很大的改變。目前我們還有很大的期望,因?yàn)檫@是一個(gè)很大的困難,目前我們還沒有完成這樣的工作。當(dāng)然了,我們也把這個(gè)工作放到了這個(gè)版本,也進(jìn)行了一些調(diào)試,但是這個(gè)工作還沒有完成,所以我不能說完成了。我們目前的期望是非常短的,一年來講,我們對(duì)字段、字符段的處理可以進(jìn)一步提升。這對(duì)網(wǎng)絡(luò)來講是一個(gè)非常大的問題。 PHP第五代的發(fā)展是跟隨網(wǎng)絡(luò)發(fā)展而發(fā)展的。
提問:你能告訴我2015年是什么樣子的嗎?
Rasmus Lerdorf:我也不知道。
(今年已經(jīng)是2015年,從94年 PHP 的一個(gè)版本到現(xiàn)在已經(jīng)21年過去了?,F(xiàn)在看來很多事情在當(dāng)時(shí)是不敢想象的,PHP 的發(fā)展離不開 Web 2.0 發(fā)展,他真的是最好的web開發(fā)服務(wù)端語言?,F(xiàn)在 PHP 也有很多優(yōu)秀的項(xiàng)目,主要是倆個(gè)方向吧,一個(gè)是更多的發(fā)揮自身的優(yōu)勢,另一個(gè)是補(bǔ)齊自身的短板。比如說 swoole,支持高并發(fā)異步的框架,讓 PHP 也可以做到像 java 那樣支持幾十萬并發(fā)的服務(wù)器。相信 PHP 會(huì)越來越好,我也會(huì)一直做下去,因?yàn)檫@是我的飯碗。)