Facebook為什么使用PHP編程語(yǔ)言?
PHP 實(shí)現(xiàn)了從設(shè)計(jì)一個(gè)網(wǎng)站到編寫一個(gè) Web 應(yīng)用程序的飛越,而投入?yún)s很小,你完全不需要成為專業(yè)人士就可以做到。
當(dāng)日本計(jì)算機(jī)科學(xué)家松本行弘決定創(chuàng)造一種名叫 Ruby (這種技術(shù)支撐了 Twitter、Hulu 以及其他許多現(xiàn)代 Web 流行網(wǎng)站) 的程序語(yǔ)言時(shí),他是從 1966 年一部名為 Babel-17 的科幻電影中獲得了靈感。這本書主要講的是一種新發(fā)明的語(yǔ)言能夠讓那些使用它的人升級(jí)自己的頭腦思維。“Babel-17 是一種極精確的分析語(yǔ)言,幾乎可以確保任何情況下的技術(shù)優(yōu)勢(shì)。”影片中的主人公有這樣一句臺(tái)詞。通過(guò)發(fā)明 Ruby,松本行弘希望實(shí)現(xiàn)同樣的效果:重編并改進(jìn)程序員思考的方式。
這目標(biāo)聽(tīng)起來(lái)很宏大,但他的想法是一種主流。軟件開(kāi)發(fā)者做為一個(gè)工種,普遍認(rèn)為程序語(yǔ)言對(duì)于思維有影響力,大到足夠可以改變你解決問(wèn)題的方式——甚至是你選擇解決哪些問(wèn)題。這也是他們?nèi)绾螖U(kuò)大公司規(guī)模、改進(jìn)產(chǎn)品、招聘團(tuán)隊(duì)的方式:“你用什么編程語(yǔ)言?”
明白這一點(diǎn)能夠讓圈外人了解軟件公司的運(yùn)作,尤其是在它們變得如此強(qiáng)大又賺錢,制造的產(chǎn)品和服務(wù)進(jìn)入我們生活各個(gè)角落的今天。如果你想知道為什么 Facebook 的外觀和工作方式是現(xiàn)在這個(gè)狀態(tài),F(xiàn)acebook 未來(lái)能為我們或?qū)ξ覀冏鍪裁矗憔托枰酪恍╆P(guān)于 PHP 的知識(shí),因?yàn)檫@是馬克?扎克伯格 (Mark Zuckerberg) 最初打造 Facebook 使用的程序語(yǔ)言。
在 程序員當(dāng)中,PHP 可能是所有編程語(yǔ)言中最不被“仰視”的一種。有人在博客文章里評(píng)價(jià)其為“糟糕的設(shè)計(jì)”,而那些愿意使用 PHP 的人則被看作是業(yè)余選手。“有這種傳奇的事,那些去 Facebook 工作的頂尖工程師,他們?cè)?Windows XP 上寫 PHP 代碼,”程序問(wèn)答網(wǎng)站 Stack Overflow 創(chuàng)始人杰夫 (Jeff Atwood) 說(shuō)道,“他們可是那種毀三觀級(jí)的黑客。”在近 10 分鐘的談話中,杰夫用如下的詞語(yǔ)描述 PHP:“一個(gè)消瘦的怪獸”,“一場(chǎng)大瘟疫”,一個(gè)鬼屋里的住客愛(ài)上了幽靈。
大部分得到承認(rèn)的程序語(yǔ)言都有一個(gè)總體的設(shè)計(jì)哲學(xué)或 是指導(dǎo)原則,用來(lái)組織關(guān)鍵字和語(yǔ)法——也就是交給程序員使用的指令集合——并形成一個(gè)邏輯上的整體。PHP 沒(méi)有。其設(shè)計(jì)者 Rasmus Lerdorf 主動(dòng)承認(rèn)他當(dāng)初是東拼西湊的。“我不知道該怎么停止,”2003 年他在接受一次采訪時(shí)說(shuō)到,“我根本不知道要如何寫一個(gè)程序語(yǔ)言——我只是一邊用一邊增加新的邏輯模塊。”
程序員最愛(ài)用的一個(gè)例子是 PHP 函數(shù)“mysql_escape_string”,該函數(shù)能夠?qū)⒁欢位旌献址蕹糁笤偬峤粩?shù)據(jù)庫(kù)。(混合字符的例子可以參考一般網(wǎng)站會(huì)要求你輸入電郵 地址之類,黑客能夠嵌入一段代碼,從網(wǎng)站獲得你的密碼。) 當(dāng)這個(gè)函數(shù)的一個(gè)漏洞被發(fā)現(xiàn)時(shí),一個(gè)新的版本出現(xiàn)了,叫做“mysql_real_escape_string”,但是原有的版本并沒(méi)有被替換。這種結(jié)果 就好像在飛機(jī)駕駛倉(cāng)上有兩個(gè)外觀接近的按鈕并列排放一樣:一個(gè)用來(lái)把起落架放下,另一個(gè)用來(lái)把起落架安全地放下。這可不是什么友好的操作——這是導(dǎo)致災(zāi)難 的原因。
但是盡管對(duì) PHP 的嗤之以鼻隨處可見(jiàn),如今的 Web 網(wǎng)絡(luò)有許多都是基于 PHP 設(shè)計(jì),全網(wǎng)有 39% 的網(wǎng)站使用 PHP。Facebook、Wikipedia 和 WordPress 都是 PHP 項(xiàng)目。這是因?yàn)?PHP 雖然有許多缺陷,但是上手很快。PHP 這個(gè)名字來(lái)自最初的“個(gè)人主頁(yè)”,可以很容易地讓用戶在靜態(tài) HTML 頁(yè)面中添加諸如日期和用戶名之類的動(dòng)態(tài)內(nèi)容。PHP 實(shí)現(xiàn)了從設(shè)計(jì)一個(gè)網(wǎng)站到編寫一個(gè) Web 應(yīng)用程序的飛越,而投入?yún)s很小,你完全不需要成為專業(yè)人士就可以做到。
而 PHP 這種“即刻運(yùn)行”的特性對(duì)于 Wikipedia 的成功至關(guān)重要,維基媒體基金會(huì)的總軟件工程師奧 瑞 (Ori Livneh) 這樣認(rèn)為。“我一直討厭 PHP,”他對(duì)我說(shuō)。維基百科過(guò)于依賴 PHP,導(dǎo)致了大規(guī)模的設(shè)計(jì)缺陷。(這也是為什么直到 2008 年維基百科才推出移動(dòng)端版本,直到 2013 年編輯界面才變得友好起來(lái)。) 但 PHP 讓那些不是——或幾乎剛剛是——軟件工程師的人能夠提交新功能:這也是為什么維基百科詞條可以在古埃及文明頁(yè)面顯示象形文字,并且可以處理五線譜的原因。
但是你用 PHP 設(shè)計(jì)不了 Google,因?yàn)?Google 之所以成為 Google 需要把一件事做到最好——搜索結(jié)果。設(shè)計(jì) Google 的是更加精煉和強(qiáng)大的語(yǔ)言,比如 Java 和 C++。而 Facebook 恰恰相反,更像一系列的小試驗(yàn):按鈕、信息流、信息模塊等等只是為了抓住你的注意力。PHP 是為了快速制造新東西而生的。
你可以想象扎克伯格在哈佛宿舍里完成 Facebook 的情景。互聯(lián)網(wǎng)發(fā)展如此之快,用戶多變,唯一能夠抓住機(jī)會(huì)的辦法就是快。無(wú)論他做的是一團(tuán)泥也好,或者是一盤意粉,甚至是什么都好。他把東西做成了,人們可以用。他當(dāng)時(shí)沒(méi)有考慮什么優(yōu)雅代碼的問(wèn)題;他想的是讓好友們可以登陸 Thefacebook 去看他們認(rèn)識(shí)姑娘的圖片。
如 今 Facebook 已經(jīng)是價(jià)值超 2000 億美元的公司了,辦公室里到處可以見(jiàn)到標(biāo)語(yǔ)“完成要比完美更重要”;“快速推進(jìn),打破常規(guī)”。這就是 Facebook 的“黑客”文化,但也恰恰是 PHP 的價(jià)值觀??焖偻七M(jìn)打破常規(guī)實(shí)際上正是 PHP 的本質(zhì),任何使用這種語(yǔ)言的人都會(huì)這樣思考??赡苣銜?huì)說(shuō),正是這種編程語(yǔ)言,打造并維系了 Facebook 的文化。
2010 年末,F(xiàn)acebook 迎來(lái)了一場(chǎng)危機(jī)。PHP 并不是一種性能優(yōu)化的設(shè)計(jì),但是現(xiàn)在要求提升性能。Facebook 發(fā)展速度太快,如果沒(méi)有重大的調(diào)整,看起來(lái)可能會(huì)出現(xiàn)問(wèn)題。
整 體更換程序語(yǔ)言并不是一個(gè)可選的方案:Facebook 有數(shù)百萬(wàn)行 PHP 代碼,上千名 PHP 工程師專家,超過(guò) 5 億用戶。Facebook 的做法是,由資深工程師組成的一個(gè)小團(tuán)隊(duì)被分配到一個(gè)特別的任務(wù)。其中之一就是設(shè)計(jì)一個(gè)編譯器,能夠?qū)?Facebook 的 PHP 代碼轉(zhuǎn)換成運(yùn)行更快的 C++ 代碼。另外一個(gè)任務(wù)則是由計(jì)算機(jī)語(yǔ)言專家完成,他們要讓 Facebook 的程序員保持 PHP 風(fēng)格文化,但是編寫更可靠的代碼。
于 是 PHP 的一個(gè)分支版本 Hack 應(yīng)運(yùn)而生,這種語(yǔ)言是帶有可選的類型系統(tǒng)的 PHP。也就是說(shuō),你既可以用老式的方法快速編寫 PHP 代碼,或者選擇讓類型系統(tǒng)檢查你的代碼正確度。Facebook 希望他們的程序員用自己熟悉的語(yǔ)言繼續(xù)快速推進(jìn),但是不想讓他們像之前那樣打破東西。(去年扎克伯格宣布了一個(gè)新的工程師口號(hào):“快速推進(jìn),穩(wěn)定架 構(gòu)”。)
當(dāng)創(chuàng)業(yè)公司終于解決了營(yíng)收問(wèn)題而“變成熟”之后,他們可以聰明地利用編程語(yǔ)言的威力來(lái)操縱企業(yè)組織的文化。曾經(jīng)在 Google 供職 7 年的程序語(yǔ)言設(shè)計(jì)者羅桑 (Guido van Rossum) 認(rèn)為,一旦軟件公司發(fā)展到一定的體積,解決混亂局面的唯一方式,就是使用一種要求程序員在一線做更多工作的語(yǔ)言。“感覺(jué)上就好像你被拖慢了一樣,因?yàn)槟阋?把每件事說(shuō)三次。”這也是為什么許多創(chuàng)業(yè)公司在更換語(yǔ)言之前希望能等越久越好。你會(huì)失去一些最初幫你起步的牛逼黑客,也會(huì)失去小團(tuán)隊(duì)突擊新功能的可能性。 但是一種更精確的語(yǔ)言會(huì)幫助公司的其他人了解彼此的代碼,獲得產(chǎn)品穩(wěn)定性,這也是公司每天運(yùn)作所必須的。
軟件創(chuàng)業(yè)公司能夠做到這一點(diǎn)調(diào)整, 或許能夠幫助解釋為什么他們?nèi)绱藦?qiáng)大。計(jì)算機(jī)不端擴(kuò)張的觸及領(lǐng)域也是如此。這些軟件公司同樣具有獨(dú)特的能力,重新構(gòu)建自我。隨著變化和發(fā)展,它們能夠做的 不僅僅是組織機(jī)構(gòu)調(diào)整,因?yàn)樗鼈兓诖a設(shè)計(jì),所以能夠?qū)崿F(xiàn)更加巨大的變化。它們能夠重編自身,它們的文化,以及它們思考的方式。