歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux業界 >> “最好的語言” PHP 如何造就Facebook?

“最好的語言” PHP 如何造就Facebook?

日期:2017/2/27 17:30:52   编辑:Linux業界

編程語言會塑造這門語言使用者的思維方式,這有助於解釋科技創業公司的運行方式,以及它們能重新發明自己的原因。

當日本計算機科學家松本行弘決定創造 Ruby 時,他正在追逐 Samuel R. Delany 於 1966 年創作的科幻小說《巴別 17 語》(Babel-17)中的一個想法。這部小說的核心是一種與書名同名的人工語言,可以讓所有說這種語言的人的思想升級。小說裡的主角曾說過:“巴別 17 語是一門非常精確的分析語言,幾乎能確保讓你掌握任何情況的技術細節。”松本行弘想要通過 Ruby 實現同樣的事:重新改造並提高程序員的思維方式。


PHP與Facebook

這聽起來很宏偉,但松本行弘的想法並不少見。軟件開發者們傾向於認為,編程語言能改變使用者思考問題的方式,甚至會改變使用者想要去解決的問題。這也是他們擴大公司、產品以及同事人數的方法:“你用什麼語言?”

這能幫助外部人士理解已經變得極其強大和有價值的軟件公司,以及充斥我們生活的產品和服務。哪怕是這些公司最內部的決定,比如用 Ruby 或 PHP 或 C 打造了某個新產品,這個決定都能一下子影響到所有人。如果你想知道 Facebook 給人以現在這種印象和工作方式的原因,以及 Facebook 能為/對我們做什麼,你就需要了解 PHP,這門馬克·扎克伯格創建 Facebook 所使用的語言。

PHP 可能是最不受程序員尊重的編程語言。一篇目前已經成為權威的博文在描述 PHP 的缺陷時稱, PHP 是“支離破碎的糟糕設計”,願意使用 PHP 的人都被視為外行。知名編程問答網站 Stack Overflow 聯合創始人 Jeff Atwood 表 示道:“那些聰明的工程師們加入 Facebook,卻在 Windows XP 上編寫 PHP 代碼,這已然成迷。說他們是黑客簡直是在侮辱黑客這個詞。”在不到 10 分鐘的談話裡,Atwood 稱 PHP 是“拖沓的怪物”,“瘟疫”和一間住戶必須愛上鬼的鬼屋。

大多數成功的編程語言都有全局哲學或系列指導原則,以便將編程語言的詞匯表和語法組織成一個合乎邏輯的整體。PHP 則不然。PHP 的創造者 Rasmus Lerdorf 坦承,PHP 是他胡亂拼湊而成。他在 2003 年的一次采訪中說道:“我不知道該如何阻止它。我根本不知道該怎麼編寫一門編程語言,在我覺得需要時,就往裡面加東西。”

程序員們最喜歡舉的一個例子是 PHP 的 mysql_escape_string 函數,這個函數可以在惡意輸入查詢進入數據庫之前將它排除掉。當這個功能被發現有問題時,出現了一個名為 mysql_real_escape_string 的新函數,但原來的那個函數並沒有得到替換。結果就像是飛機駕駛艙裡有兩個很像的按鈕靠在一起:一個按鈕可以放下起落架,另一個按鈕則可以安全地放下起落 架。這根本不合常理,是制造災難的溫床。

然而,盡管對 PHP 的輕視普遍存在,但很多網站都是用 PHP 創建的。根據一項估計,有 39% 的網站使用了 PHP 語言。 Facebook、維基百科、WordPress 都是 PHP 項目。這是因為盡管 PHP 有很多缺陷,但它卻很容易用在項目的起步階段。PHP 是“personal home page”(個人主頁)的縮寫。用戶可以很方便地使用 PHP 向靜態 HTML 頁面中添加日期、用戶名等動態內容。PHP 極大地縮小了修改網站和編寫網絡應用之間的差距,你不必成為專家。

運營維基百科的維基媒體基金會首席軟件工程師 Ori Livneh 表示,這種一路走來的特性對維基百科的成功至關重要。他告訴我:“我一直都討厭 PHP。”由於對 PHP 的依賴,維基百科飽受大規模設計缺陷的困擾。但 PHP 可以讓非軟件工程師為維基百科貢獻新功能。埃及古物學的維基百科條目可以顯示象形文字就得益於此。

你不可能用 PHP 做出來谷歌,因為谷歌需要進行精心設計,讓搜索可以快速高效地進行。谷歌使用了更精確和強大的語言,比如 Java 和 C++。相反,Facebook 由眾多小試驗組成,是一個由按鈕、消息流和試圖引起你關注的元素組成的大雜燴。PHP 天生是用來快速開發出功能的。

幾乎可以想象,在 Facebook 誕生的那個命運之日,扎克伯格在他的哈佛宿捨裡肯定是想盡可能地省事,好讓網站上線。網絡變化的太快,用戶如此善變,你能抓住機會的唯一方法就是成為第一 個,而無論做出了什麼東西。扎克伯格完工了。人們能用 Facebook。扎克伯格當時想的不是漂亮的代碼;他在想的是他的朋友們要登錄“Thefacebook”看美女照片。

如今 Facebook 的市值超過 2000 億美元,“完成比完美重要”、“快速行動,打破成規”的標語遍布在 Facebook 辦公室的牆上。這些直率的消息是為了讓員工們與 Facebook 的“黑客”文化保持一致。但這些都是 PHP 的價值觀。快速行動和打破成規就是 PHP 的精髓,任何“說”這一語言的人都會不可避免地這麼想。也可以說,PHP 創造並維系了 Facebook 的文化。

秘密武器

如果你想要尋找 PHP 的反例,金融交易公司 Jane Street Capital 就是最好不過的例子了。這家 400 人的公司號稱處理了全美日股票交易量的 2%。

Jane Street 的技術負責人 Yaron Minsky 十分推崇一門名為 OCaml 的冷門編程語言。10 年前,身為計算機科學博士的 Minsky 說服了 Jane Street Capital 用 OCaml 重寫公司的整個交易系統。在此之前,幾乎沒有人在實際產品中用過 OCaml。OCaml 由一家法國研究機構的學者們開發,旨在改進一個能自動證明數學定理的計算機系統。但 Minsky 認為 OCaml 能取代驅動 Jane Street 交易系統的復雜 Excel 電子表格。

OCaml 的大賣點是其“類型系統”,對於不符合類型的數據,程序不會運行。對於一個在行情好的日子裡每天能交易 300 億美元的程序而言,用類型系統編寫的程序要可靠得多。

Minsky 表示,通過捕獲錯誤,OCaml 的類型系統可以讓 Jane Street 的程序員專注於更大的問題。程序員們會想,他們是否修復了系統捕獲的錯誤,這樣 OCaml 就成了一種讓人不可能思考糟糕想法的新語。

這裡的訣竅是,為了讓類型檢查器奏效,程序員們必須給代碼添加復雜的注釋。編寫對類型進行限制的代碼很討厭,甚至會讓人喪氣。更糟糕的 是,OCaml 需要高深的抽象數學能力。但這種語言的精確性卻牢牢地吸引了一些人,這讓 Jane Street 在緊俏的程序員招聘市場中具備非同尋常的優勢。盡管使用 PHP 作為開發語言,大部分軟件開發者還是會選擇加入 Facebook 和維基百科。但 OCaml 卻能穩定地吸引到高質量的求職者。這種吸引不僅源自語言,還和使用它的人有關。Jane Street 是一家允許員工在休息室裡玩四人國際象棋的公司。這種競爭智慧的文化與花哨編程語言的使用交相輝映。

谷歌似乎打算在 Go 語言上實現類似的效果。Go 是谷歌開發的高性能編程語言,旨在讓互聯網的運作更優雅、更高效,很適合開發驅動大型互聯網服務的高並發軟件。Go 也很吸引對困難的新語言感興趣的程序員。

成長壯大

在 2010 年末時,Facebook 遭遇了一場危機。PHP 並不強調性能,但 Facebook 卻需要性能。Facebook 發展得太快,似乎如果不大改 PHP,Facebook 就會開始衰落。

徹底轉換語言不在考慮之列。Facebook 的 PHP 代碼數超過數百萬行,這些代碼由數千名工程師編寫而成,服務超過 5 億用戶。相反,Facebook 任命了一小隊高級工程師來發明一種方式,讓 Facebook 在不更換編程語言的情況下繼續保持運作。

解決方案之一就是開發一個編譯器,將 Facebook 的 PHP 代碼轉換成運行速度快得多的 C++ 代碼。另一種解決方法是創造一種 PHP 方言,這樣就不會改變 Facebook 的 PHP 文化,又能讓他們寫出更可靠的代碼。

於是 Facebook 開發出了名為 Hack 的 PHP 方言。Hack 是擁有可選類型系統的 PHP。Hack 的類型檢查器完全用 OCaml 編寫也絕非偶然。Facebook 想要自己的程序員繼續用 PHP 快速開發,但不再想要他們像以前一樣打破成規了。

與此同時,Twitter 也經歷了類似轉變。Twitter 最開始采用 Ruby on Rails 框架。但隨後用戶暴增。當有成千上萬粉絲的用戶發布推文時,這些粉絲的時間線就必須立即得到更新。像這樣的大推文經常會擠爆系統,迫使工程師們將網站下 線,以查找問題所在。Twitter 的工程師這麼做了很多次,以至於 Twitter 維護頁面上的“失敗鯨”都出了名。Twitter 用 Scala 語言重寫了大部分服務,從而阻止了情況惡化。和 OCaml 一樣,Scala 也是由學者們開發的,擁有一個強大的類型系統,強調正確性和性能,哪怕是以犧牲程序員在代碼上的自由和愉悅為代價。

就像創業公司的“成熟”是以最終弄清楚了營收來源為標志一樣,公司也能聰明地利用編程語言的威力來操縱組織心理。編程語言設計師 Guido van Rossum 表 示,一旦一家軟件公司達到一定規模,避免混亂的唯一方法就是使用需要程序員預先投入很多的語言。van Rossum 說道:“這種語言會讓你覺得拖慢了速度,因為你必須把一件事說上三次。”這也是許多創業公司盡可能拖延轉換語言的原因。因為轉換語言會失去一些幫助公司起 步的牛人,小團隊也不大可能快速推出新功能。但一門更精確的語言能幫助公司員工理解彼此的代碼,讓公司的產品具備穩定性,從而成為人們日常生活的組成部 分。

軟件公司能進行這類布局也許還能解釋為什麼它們會變得這麼強大。計算機不斷擴展的邊界是原因之一。但這些公司也具備再造自己的特質。隨著它們改變和 壯大,它們將不局限於重繪組織結構圖。因為它們建立在代碼之上,也就能做些更加激烈的事。它們可以改造自己、自己的文化以及思維方式。
譯文:http://linux.cn/article-5216-1.html

Copyright © Linux教程網 All Rights Reserved