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