標籤:
當日本電腦科學家松本行弘決定創造一種名叫 Ruby (這種技術支撐了 Twitter、Hulu以及其他許多現代 Web 流行網站) 的程式語言時,他是從 1966 年一部名為 Babel-17 的科幻電影中獲得了靈感。這本書主要講的是一種新發明的語言能夠讓那些使用它的人升級自己的頭腦思維。“Babel-17 是一種極精確的分析語言,幾乎可以確保任何情況下的技術優勢。”影片中的主人公有這樣一句台詞。通過發明 Ruby,松本行弘希望實現同樣的效果:重編並改進程式員思考的方式。
這目標聽起來很宏大,但他的想法是一種主流。軟體開發人員做為一個工種,普遍認為程式語言對于思維有影響力,大到足夠可以改變你解決問題的方式——甚至是你選擇解決哪些問題。這也是他們如何擴大公司規模、改進產品、招聘團隊的方式:“你用什麼程式設計語言?”
明白這一點能夠讓圈外人瞭解軟體公司的運作,尤其是在它們變得如此強大又賺錢,製造的產品和服務進入我們生活各個角落的今天。如果你想知道為什麼 Facebook 的外觀和工作方式是現在這個狀態,Facebook 未來能為我們或對我們做什麼,你就需要知道一些關於 PHP 的知識,因為這是馬克•紮克伯格 (Mark Zuckerberg) 最初打造 Facebook 使用的程式語言。
在程式員當中,PHP 可能是所有程式設計語言中最不被“仰視”的一種。有人在部落格文章裡評價其為“糟糕的設計”,而那些願意使用 PHP 的人則被看作是業餘選手。“有這種傳奇的事,那些去 Facebook 工作的頂尖工程師,他們在 Windows XP 上寫 PHP 代碼,”程式問答網站 Stack Overflow 創始人傑夫 (Jeff Atwood) 說道,“他們可是那種毀三觀級的駭客。”在近 10 分鐘的談話中,傑夫用如下的詞語描述 PHP:“一個消瘦的怪獸”,“一場大瘟疫”,一個鬼屋裡的住客愛上了幽靈。
大部分得到承認的程式語言都有一個總體的設計哲學或是指導原則,用來組織關鍵字和文法——也就是交給程式員使用的指令集合——並形成一個邏輯上的整體。PHP 沒有。其設計者 Rasmus Lerdorf 主動承認他當初是東拼西湊的。“我不知道該怎麼停止,”2003 年他在接受一次採訪時說到,“我根本不知道要如何寫一個程式語言——我只是一邊用一邊增加新的邏輯模組。”
程式員最愛用的一個例子是 PHP 函數“mysql_escape_string”,該函數能夠將一段混合字元剔除掉之後再提交資料庫。(混合字元的例子可以參考一般網站會要求你輸入電郵地址之類,駭客能夠嵌入一段代碼,從網站獲得你的密碼。) 當這個函數的一個漏洞被發現時,一個新的版本出現了,叫做“mysql_real_escape_string”,但是原有的版本並沒有被替換。這種結果就好像在飛機駕駛倉上有兩個外觀接近的按鈕並列排放一樣:一個用來把起落架放下,另一個用來把起落架安全地放下。這可不是什麼友好的操作——這是導致災難的原因。
但是儘管對 PHP 的嗤之以鼻隨處可見,如今的 Web 網路有許多都是基於 PHP 設計,全網有 39% 的網站使用 PHP。Facebook、Wikipedia 和 WordPress 都是 PHP 項目。這是因為 PHP 雖然有許多缺陷,但是上手很快。PHP 這個名字來自最初的“個人首頁”,可以很容易地讓使用者在靜態 HTML 頁面中添加諸如日期和使用者名稱之類的動態內容。PHP 實現了從設計一個網站到編寫一個 Web 應用程式的飛越,而投入卻很小,你完全不需要成為專業人士就可以做到。
而 PHP 這種“即刻運行”的特性對於 Wikipedia 的成功至關重要,維基媒體基金會的總軟體工程師奧瑞 (Ori Livneh) 這樣認為。“我一直討厭 PHP,”他對我說。維基百科過於依賴 PHP,導致了大規模的設計缺陷。(這也是為什麼直到 2008 年維基百科才推出移動端版本,直到 2013 年編輯介面才變得友好起來。) 但 PHP 讓那些不是——或幾乎剛剛是——軟體工程師的人能夠提交新功能:這也是為什麼維基百科詞條可以在古埃及文明頁面顯示表意字元,並且可以處理五線譜的原因。
但是你用 PHP 設計不了 Google,因為 Google 之所以成為 Google 需要把一件事做到最好——搜尋結果。設計 Google 的是更加精鍊和強大的語言,比如 Java 和 C++。而 Facebook 恰恰相反,更像一系列的小實驗:按鈕、資訊流、資訊模組等等只是為了抓住你的注意力。PHP 是為了快速製造新東西而生的。
你可以想象紮克伯格在哈佛宿舍裡完成 Facebook 的情景。互連網發展如此之快,使用者多變,唯一能夠抓住機會的辦法就是快。無論他做的是一團泥也好,或者是一盤意粉,甚至是什麼都好。他把東西做成了,人們可以用。他當時沒有考慮什麼優雅代碼的問題;他想的是讓好友們可以登陸 Thefacebook 去看他們認識姑娘的圖片。
如今 Facebook 已經是價值超 2000 億美元的公司了,辦公室裡到處可以見到標語“完成要比完美更重要”;“快速推進,打破常規”。這就是 Facebook 的“駭客”文化,但也恰恰是 PHP 的價值觀。快速推進打破常規實際上正是 PHP 的本質,任何使用這種語言的人都會這樣思考。可能你會說,正是這種程式設計語言,打造並維繫了 Facebook 的文化。
2010 年末,Facebook 迎來了一場危機。PHP 並不是一種效能最佳化的設計,但是現在要求提升效能。Facebook 發展速度太快,如果沒有重大的調整,看起來可能會出現問題。
整體更換程式語言並不是一個可選的方案:Facebook 有數百萬行 PHP 代碼,上千名 PHP 工程師專家,超過 5 億使用者。Facebook 的做法是,由資深工程師組成的一個小團隊被分配到一個特別的任務。其中之一就是設計一個編譯器,能夠將 Facebook 的 PHP 代碼轉換成運行更快的 C++ 代碼。另外一個任務則是由電腦語言專家完成,他們要讓 Facebook 的程式員保持 PHP 風格文化,但是編寫更可靠的代碼。
於是 PHP 的一個分支版本 Hack 應運而生,這種語言是帶有可選的類型系統的 PHP。也就是說,你既可以用老式的方法快速編寫 PHP 代碼,或者選擇讓類型系統檢查你的代碼正確度。Facebook 希望他們的程式員用自己熟悉的語言繼續快速推進,但是不想讓他們像之前那樣打破東西。(去年紮克伯格宣布了一個新的工程師口號:“快速推進,穩定架構”。)
當創業公司終於解決了營收問題而“變成熟”之後,他們可以聰明地利用程式設計語言的威力來操縱企業組織的文化。曾經在 Google 供職 7 年的程式語言設計者羅桑 (Guido van Rossum) 認為,一旦軟體公司發展到一定的體積,解決混亂局面的唯一方式,就是使用一種要求程式員在一線做更多工作的語言。“感覺上就好像你被拖慢了一樣,因為你要把每件事說三次。”這也是為什麼許多創業公司在更換語言之前希望能等越久越好。你會失去一些最初幫你起步的牛逼駭客,也會失去小團隊突擊新功能的可能性。但是一種更精確的語言會協助公司的其他人瞭解彼此的代碼,獲得產品穩定性,這也是公司每天運作所必須的。
軟體創業公司能夠做到這一點調整,或許能夠協助解釋為什麼他們如此強大。電腦不端擴張的觸及領域也是如此。這些軟體公司同樣具有獨特的能力,重新構建自我。隨著變化和發展,它們能夠做的不僅僅是組織機構調整,因為它們基於代碼設計,所以能夠實現更加巨大的變化。它們能夠重編自身,它們的文化,以及它們思考的方式。
Facebook為什麼使用PHP程式設計語言?