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