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