當日本計算機科學家松本行弘決定創造一種名叫 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 的價值觀??焖偻七M打破常規實際上正是 PHP 的本質,任何使用這種語言的人都會這樣思考??赡苣銜f,正是這種編程語言,打造并維系了 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) 認為,一旦軟件公司發展到一定的體積,解決混亂局面的唯一方式,就是使用一種要求程序員在一線做更多工作的語言。“感覺上就好像你被拖慢了一樣,因為你要把每件事說三次。”這也是為什么許多創業公司在更換語言之前希望能等越久越好。你會失去一些最初幫你起步的牛逼黑客,也會失去小團隊突擊新功能的可能性。但是一種更精確的語言會幫助公司的其他人了解彼此的代碼,獲得產品穩定性,這也是公司每天運作所必須的。
軟件創業公司能夠做到這一點調整,或許能夠幫助解釋為什么他們如此強大。計算機不端擴張的觸及領域也是如此。這些軟件公司同樣具有獨特的能力,重新構建自我。隨著變化和發展,它們能夠做的不僅僅是組織機構調整,因為它們基于代碼設計,所以能夠實現更加巨大的變化。它們能夠重編自身,它們的文化,以及它們思考的方式。