想知道語言的威力有多大,可以看看《通天塔 -17(Babel-17)》。裡面星際戰爭的一方只需讓另一方學習了一門語言,即讓對方棄明投暗。編程語言也具有類似的威力,它賦予了軟體公司重塑自我的能力,它不僅能改變問題的解決方式們甚至還可以改變提出什麼樣的問題。
這也許是 Google、蘋果等推出自己語言的原因所在,而初創企業想要成就什麼樣的願景,編程語言的選擇很關鍵。
Ruby 語言幫助開發出了 Twitter、Hulu 以及許多的現代 Web 網站。其發明者是日本人松本行弘。松本行弘發明 Ruby 則是受到了美國作家 Samuel R. Delany 發表於 1966 年的一部科幻小說《通天塔 -17》。
這部小說裡面有一個核心的思想—語言會改變人的思想、影響人的行動。故事裡面講到,星際戰爭的一方發明了一種名為 Babel-17 的語言,敵方的人學了這門語言之後,思想和感覺都會發生改變,從而變成了本方的叛徒。
這本書說明了語言的若干特點,即生活條件塑造了語言形式和意義,但是語言本身也會塑造人的行動。
小說主角對通天塔 -17 的評價是:
Babel-17 是那麼精確的一門分析語言,幾乎可以確保你在技術上應對面臨的任何情況。
松本行弘也希望實現同樣的事情,用一門語言重組並改進程序員的思考方式。
實際上開發者這種群體也傾向於認為,編程語言不僅能改變問題的解決方式,甚至也能改變提出什麼樣的問題。所以這些人衡量公司規模、產品好壞或者同事強弱時往往會問一個問題:
你用什麼語言?
這有助於外界理解軟體公司為什麼會變得如此強大、為什麼會那麼有價值,有助於了解那些影響我們日常生活的產品和服務。一項看似與我們無關的最內部的決定,比方說新產品的開發究竟是用 Ruby、PHP 還是 C 語言,突然之間卻會影響到我們所有人。
所以,如果你想知道 Facebook 為什麼會是這個樣子,為什麼這麼運作,接下來又會幹什麼,那就得了解一下 PHP:馬克用來開發 Facebook 用的語言。
- Facebook 與創造了它的 PHP:看 PHP 是怎樣的一個語言
PHP 也許是所有編程語言當中最不受工程師待見的語言了。
編程問答網站 Stack Overflow 的聯合創始人 Jeff Atwood 用了非常惡毒的語言點評 PHP,稱 PHP 設計糟糕、東拼西湊,是步履蹣跚的怪物、瘟疫、鬼屋,說在裡面住的人都是喜歡鬼的人,稱用 PHP 的都是業餘愛好者。
「有人誤以為進入 Facebook 的都是才華橫溢的工程師,但其實他們是一群用 Windows XP 寫 PHP 的人。說他們是駭客幾乎跟罵人差不多。」
大多數成功的編程語言都有整體哲學,或者一套用於組織詞彙語法的原則指南,但是 PHP 沒有。PHP 的創始人 Rasmus Lerdorf 早在 2003 年就承認,自己不知道如何寫編程語言,只是走一步看一步,想到什麼加什麼。
比方說防止惡意數據攻擊的 PHP 函數「mysql_escape_string」被發現存在漏洞之後,其補救措施不是對這個函數打補丁,而是重新開發了一個名為「mysql_real _escape_string」的函數,這就好比是在飛機駕駛艙安裝了兩個類似的按鈕,按下其中一個可以讓飛機放下起落架,而按下另一個則會讓飛機掉下。
雖然很多人都說 PHP 很爛,但是卻不能阻止它的火紅程度。據估計全球有 39% 的網站用 PHP 編寫,其中就包括了 Facebook、Wikipedia、WordPress 等著名網站。原因在於 PHP 儘管有缺陷,但是做動態內容上手簡單,不需要專業人士也能弄。
- 快速解決問題,PHP 造就了 Facebook 的企業文化
PHP 的持續發展對於 Wikimedia(維基百科)的成功非常關鍵。由於嚴重依賴 PHP,維基百科遭遇了大規模的設計缺陷,並且直到 2008 年才推出了能適應移動設備的版本,到 2013 年才做出對用戶友好的編輯界面。但是 PHP 讓那些不是軟體工程師的人也能貢獻新功能,維基百科之所以能展示古埃及的象形文字、處理散頁樂譜正是因為此。
但是 Google 不能用 PHP 來開發,因為 Google 要求搜索要快要精確,其實現需要更加精細和強大的語言,比方說 Java 或者 C++。Facebook 與之對比就相當於是小型試驗的集市,加幾個按鈕、feeds 或者小玩意來吸引你的注意力。PHP 是為了迅速炮製出新功能而生的。
你幾乎可以想像得出在決定命運的那一天裡,馬克在哈佛大學宿舍裡是如何琢磨著以最快的速度和最小的代價讓 Facebook 上線的。Web 的節奏太快,用戶又太善變了,要想捕捉到這一刻唯有成為第一個。
程序寫得再怎麼爛都不要緊,最關鍵是把事情幹完,讓別人用上。那一刻他滿腦子想的不是如何把代碼寫漂亮,而是讓他的朋友登錄上「The facebook」對認識的姑娘評頭論足一番。
現在的 Facebook 市值已超過 2000 億美元,辦公室的牆上貼的都是這樣的東西:「完成好過完美」、「快速行動、打破陳規。」
馬克希望用這些話讓員工與 Facebook 的「駭客」文化保持一致。但其實這些恰恰是 PHP 的價值觀。快速行動打破陳規實際上正是 PHP 的真髓,只要是「講」這門語言的人都不可避免要按照這種方式思考。可以說是這門語言本身造就和維繫了 Facebook 的文化。
- 秘密武器
如果要找跟 PHP 這種自然實驗語言完全相反的例子,沒有地方比下曼哈頓區的金融交易機構 Jane Street Capital 更合適。這家 400 人的公司每天處理著美國大約 2% 的股權交易。
他們用的編程語言是 OCaml,10 年前,公司的技術負責人 Yaron Minsky 說服了老闆用這門晦澀的語言重寫了公司的整個交易系統。這語言原本由法國的一家研究機構的學者開發,目的是想改進某個用來自動證明數學定理的計算機系統,此前幾乎沒人用這門語言進行過實際工作。但是 Minsky 在讀研究所時接觸到 OCaml 之後,認為這門語言可以替代 Jane Street 交易系統的那些 Excel 表。
OCaml 的一大賣點是它的「類型系統」,類型系統跟 Word 的語法檢查器有點類似,不同的是語法檢查器只是用綠色波浪線標出有問題的文字,而類型系統檢查出錯誤後會阻止系統運行。寫有類型系統的程序的可靠性往往要比沒有的高很多;這一點對於一個日交易量高達 300 億美元的系統來說是非常有用的。
OCaml 的類型系統幫忙攔截了 bug,Jane Street 的程序員就可以專注於更加高級的問題。有人甚至猜測隨著時間轉移這些人是不是已經內化了系統的不斷糾纏,OCaml 變成了某種新語(Newspeak),沒人敢打任何壞主意。
其要點在於,要想充分獲得類型檢查器的好處,工程師必須給自己的代碼增加複雜的註解。就好像 Word 的語法檢查器需要你對所有的句子進行解釋一樣。寫代碼還要進行類型約束是令人討厭甚至洩氣的事情。更糟的是,OCaml 比大部分的編程語言要求都要高,需要對數學抽像有很深的理解,這已經超出了大部分開發者的能力範疇。但是這種語言的嚴格對於某些人來說卻相當於貓薄荷,這反而讓 Jane Street 在緊張的招聘市場裡有了一項與眾不同的優勢。
OCaml 就像貓薄荷一樣替 Jane Street 源源不斷地吸引了一批批的高素質人才候選人。那些人被吸引的不僅是因為這門語言,更是因為使用這門語言的人。人以群分,這裡的人平時玩的都是四人國際象棋。看起來競爭情報的文化與一門奇特語言的使用密切相關。
類似地,Google 似乎也打算通過 Go 語言的推廣使用來達到類似目的。Go 是 Google 開發的一種高性能編程語言,目的是要讓 Web 的處理工作更加優雅和高效。開發此類高風險軟件是有好處的,因為大型 Web 服務背後的那一大群服務器的運行需要這樣的語言。對於喜歡新奇和挑戰的開發者來說 Go 尤其具有吸引力。
- 成長的煩惱,Facebook 怎麼解決 PHP 帶來的混亂?
2010 年末,Facebook 遭遇了一次危機。PHP 本身並不是針對性能優化而開發的,而 Facebook 網站又發展得太快,若不進行相當徹底的改造網站看起來快要癱掉了。
換語言根本不在考慮的範圍之內。Facebook 網站上有著數千專家工程師撰寫的上百萬行 PHP 代碼,還有超過 5 億用戶在使用它。因此 Facebook 派遣了一支由資深工程師組成的特種部隊,讓這批人去攻關一個特殊項目,找出讓 Facebook 不放棄它那帶駭客口音(hacky)母語的情況下維持運轉的辦法。
解決方案其中的一部分是開發出一種編譯器軟件,將 Facebook 的 PHP 代碼編譯為更快的 C++ 代碼。而項目的另外一項工作則成為了計算機語言工程的一大壯舉,它使得 Facebook 的程序員在保持 PHP 血統文化的同時還可以編寫出更加可靠的代碼。
這支救援分隊發明了一門 PHP 方言,名字叫做 Hack。Hack 是帶可選類型傳系統的 PHP,也就是說,你可以還繼續寫原來隨性寫意的 PHP,也可以選擇增加註解讓類型系統檢查代碼的正確性。跟 Jane Street 一樣,這種類型檢查器完全是用 OCaml 編寫的,這絕非巧合。Facebook 希望自己的碼農用感到舒服的母語繼續快速行動(move fast),但是同時不希望他們在這麼做時不得不打破一些東西(break things)。(去年他宣布了新的口號:「穩定結構、快速行動」)
與此同時,Twitter 也經歷了類似的變革。Twitter 原先是用流行的 Web 框架 Ruby on Rails 開發的,而後者則是在 Ruby 基礎上受 PHP 啟發做出來的。然後 Twitter 的用戶開始暴漲。一旦大咖發布了新的推特,數十萬粉絲的 tinemline 也必須馬上更新。此輪情況往往會令系統不堪重負,Twitter 工程師不得不把網站暫時關閉才能應付。
由於經常發生這種事情,維護頁面的那頭失敗的鯨魚形像都變得臭名卓著了。後來 Twitter 用 Scala 語言替代了公司很大一部分的服務實現。不出意料,跟 OCaml 一樣,Scala 也是由學者開發,一樣擁有強大的類型系統,都是以程序員的自由和開發的愜意為代價來確保准確和性能。
跟初創企業最終找到收入來源而走向「成熟」類似,他們同樣也可以藉助編程語言的力量來操控組織心理。在 Google 幹過 7 年、現在 Dropbox 工作的編程語言設計師 Guido van Rossum 說,軟體公司到達一定規模之後要想避免陷入混亂,唯一的辦法是藉助預先需要程序員做更多事情的編程語言。
「就是那種讓你放慢下來的感覺,因為所有事情你都需要說上三遍。」這就是為什麼許多初創企業盡可能拖延切換語言的原因所在。換上更嚴謹的語言有可能會讓你失去一些 NB 的創業元老駭客,迸發出新功能的可能性也會降低。但是這能幫助整個公司更好地理解別人的代碼,保證產品日常運營必要的穩定性。
軟體初創企業能夠進行這樣的機動甚至可能還解釋了他們為什麼會如此強大。部分原因是由於計算機規模的擴大。但是這些公司也有著獨特的重塑自我的能力。隨著公司的改變與發展,這些公司能做的不僅僅只有重寫畫畫組織結構圖而已。因為他們是用代碼書寫成的,所以可以做一些更加激進的事情—他們可以重新組織自己、再造企業文化,改變思考方式。
- 延伸閱讀
(本文轉載自合作夥伴《36Kr》;未經授權,不得轉載)