0
本文作者: 不知 | 2015-04-07 10:35 |
編程語(yǔ)言會(huì)塑造這門(mén)語(yǔ)言使用者的思維方式,這有助于解釋科技創(chuàng)業(yè)公司的運(yùn)行方式,以及它們能重新發(fā)明自己的原因。
當(dāng)日本計(jì)算機(jī)科學(xué)家松本行弘決定創(chuàng)造 Ruby 時(shí),他正在追逐 Samuel R. Delany 于 1966 年創(chuàng)作的科幻小說(shuō)《巴別 17 語(yǔ)》(Babel-17)中的一個(gè)想法。這部小說(shuō)的核心是一種與書(shū)名同名的人工語(yǔ)言,可以讓所有說(shuō)這種語(yǔ)言的人的思想升級(jí)。小說(shuō)里的主角曾說(shuō)過(guò):“巴別 17 語(yǔ)是一門(mén)非常精確的分析語(yǔ)言,幾乎能確保讓你掌握任何情況的技術(shù)細(xì)節(jié)?!彼杀拘泻胂胍ㄟ^(guò) Ruby 實(shí)現(xiàn)同樣的事:重新改造并提高程序員的思維方式。
這聽(tīng)起來(lái)很宏偉,但松本行弘的想法并不少見(jiàn)。軟件開(kāi)發(fā)者們傾向于認(rèn)為,編程語(yǔ)言能改變使用者思考問(wèn)題的方式,甚至?xí)淖兪褂谜呦胍ソ鉀Q的問(wèn)題。這也是他們擴(kuò)大公司、產(chǎn)品以及同事人數(shù)的方法:“你用什么語(yǔ)言?”
這能幫助外部人士理解已經(jīng)變得極其強(qiáng)大和有價(jià)值的軟件公司,以及充斥我們生活的產(chǎn)品和服務(wù)。哪怕是這些公司最內(nèi)部的決定,比如用 Ruby 或 PHP 或 C 打造了某個(gè)新產(chǎn)品,這個(gè)決定都能一下子影響到所有人。如果你想知道 Facebook 給人以現(xiàn)在這種印象和工作方式的原因,以及 Facebook 能為/對(duì)我們做什么,你就需要了解 PHP,這門(mén)馬克·扎克伯格創(chuàng)建 Facebook 所使用的語(yǔ)言。
PHP 可能是最不受程序員尊重的編程語(yǔ)言。一篇目前已經(jīng)成為權(quán)威的博文在描述 PHP 的缺陷時(shí)稱(chēng), PHP 是“支離破碎的糟糕設(shè)計(jì)”,愿意使用 PHP 的人都被視為外行。知名編程問(wèn)答網(wǎng)站 Stack Overflow 聯(lián)合創(chuàng)始人 Jeff Atwood 表示道:“那些聰明的工程師們加入 Facebook,卻在 Windows XP 上編寫(xiě) PHP 代碼,這已然成迷。說(shuō)他們是黑客簡(jiǎn)直是在侮辱黑客這個(gè)詞?!痹诓坏?10 分鐘的談話(huà)里,Atwood 稱(chēng) PHP 是“拖沓的怪物”,“瘟疫”和一間住戶(hù)必須愛(ài)上鬼的鬼屋。
大多數(shù)成功的編程語(yǔ)言都有全局哲學(xué)或系列指導(dǎo)原則,以便將編程語(yǔ)言的詞匯表和語(yǔ)法組織成一個(gè)合乎邏輯的整體。PHP 則不然。PHP 的創(chuàng)造者 Rasmus Lerdorf 坦承,PHP 是他胡亂拼湊而成。他在 2003 年的一次采訪(fǎng)中說(shuō)道:“我不知道該如何阻止它。我根本不知道該怎么編寫(xiě)一門(mén)編程語(yǔ)言,在我覺(jué)得需要時(shí),就往里面加?xùn)|西。”
程序員們最喜歡舉的一個(gè)例子是 PHP 的 mysql_escape_string 函數(shù),這個(gè)函數(shù)可以在惡意輸入查詢(xún)進(jìn)入數(shù)據(jù)庫(kù)之前將它排除掉。當(dāng)這個(gè)功能被發(fā)現(xiàn)有問(wèn)題時(shí),出現(xiàn)了一個(gè)名為 mysql_real_escape_string 的新函數(shù),但原來(lái)的那個(gè)函數(shù)并沒(méi)有得到替換。結(jié)果就像是飛機(jī)駕駛艙里有兩個(gè)很像的按鈕靠在一起:一個(gè)按鈕可以放下起落架,另一個(gè)按鈕則可以安全地放下起落架。這根本不合常理,是制造災(zāi)難的溫床。
然而,盡管對(duì) PHP 的輕視普遍存在,但很多網(wǎng)站都是用 PHP 創(chuàng)建的。根據(jù)一項(xiàng)估計(jì),有 39% 的網(wǎng)站使用了 PHP 語(yǔ)言。Facebook、維基百科、WordPress 都是 PHP 項(xiàng)目。這是因?yàn)楸M管 PHP 有很多缺陷,但它卻很容易用在項(xiàng)目的起步階段。PHP 是“personal home page”(個(gè)人主頁(yè))的縮寫(xiě)。用戶(hù)可以很方便地使用 PHP 向靜態(tài) HTML 頁(yè)面中添加日期、用戶(hù)名等動(dòng)態(tài)內(nèi)容。PHP 極大地縮小了修改網(wǎng)站和編寫(xiě)網(wǎng)絡(luò)應(yīng)用之間的差距,你不必成為專(zhuān)家。
運(yùn)營(yíng)維基百科的維基媒體基金會(huì)首席軟件工程師 Ori Livneh 表示,這種一路走來(lái)的特性對(duì)維基百科的成功至關(guān)重要。他告訴我:“我一直都討厭 PHP。”由于對(duì) PHP 的依賴(lài),維基百科飽受大規(guī)模設(shè)計(jì)缺陷的困擾。但 PHP 可以讓非軟件工程師為維基百科貢獻(xiàn)新功能。埃及古物學(xué)的維基百科條目可以顯示象形文字就得益于此。
你不可能用 PHP 做出來(lái)谷歌,因?yàn)楣雀栊枰M(jìn)行精心設(shè)計(jì),讓搜索可以快速高效地進(jìn)行。谷歌使用了更精確和強(qiáng)大的語(yǔ)言,比如 Java 和 C++。相反,F(xiàn)acebook 由眾多小試驗(yàn)組成,是一個(gè)由按鈕、消息流和試圖引起你關(guān)注的元素組成的大雜燴。PHP 天生是用來(lái)快速開(kāi)發(fā)出功能的。
幾乎可以想象,在 Facebook 誕生的那個(gè)命運(yùn)之日,扎克伯格在他的哈佛宿舍里肯定是想盡可能地省事,好讓網(wǎng)站上線(xiàn)。網(wǎng)絡(luò)變化的太快,用戶(hù)如此善變,你能抓住機(jī)會(huì)的唯一方法就是成為第一個(gè),而無(wú)論做出了什么東西。扎克伯格完工了。人們能用 Facebook。扎克伯格當(dāng)時(shí)想的不是漂亮的代碼;他在想的是他的朋友們要登錄“Thefacebook”看美女照片。
如今 Facebook 的市值超過(guò) 2000 億美元,“完成比完美重要”、“快速行動(dòng),打破成規(guī)”的標(biāo)語(yǔ)遍布在 Facebook 辦公室的墻上。這些直率的消息是為了讓員工們與 Facebook 的“黑客”文化保持一致。但這些都是 PHP 的價(jià)值觀(guān)。快速行動(dòng)和打破成規(guī)就是 PHP 的精髓,任何“說(shuō)”這一語(yǔ)言的人都會(huì)不可避免地這么想。也可以說(shuō),PHP 創(chuàng)造并維系了 Facebook 的文化。
如果你想要尋找 PHP 的反例,金融交易公司 Jane Street Capital 就是最好不過(guò)的例子了。這家 400 人的公司號(hào)稱(chēng)處理了全美日股票交易量的 2%。
Jane Street 的技術(shù)負(fù)責(zé)人 Yaron Minsky 十分推崇一門(mén)名為 OCaml 的冷門(mén)編程語(yǔ)言。10 年前,身為計(jì)算機(jī)科學(xué)博士的 Minsky 說(shuō)服了 Jane Street Capital 用 OCaml 重寫(xiě)公司的整個(gè)交易系統(tǒng)。在此之前,幾乎沒(méi)有人在實(shí)際產(chǎn)品中用過(guò) OCaml。OCaml 由一家法國(guó)研究機(jī)構(gòu)的學(xué)者們開(kāi)發(fā),旨在改進(jìn)一個(gè)能自動(dòng)證明數(shù)學(xué)定理的計(jì)算機(jī)系統(tǒng)。但 Minsky 認(rèn)為 OCaml 能取代驅(qū)動(dòng) Jane Street 交易系統(tǒng)的復(fù)雜 Excel 電子表格。
OCaml 的大賣(mài)點(diǎn)是其“類(lèi)型系統(tǒng)”,對(duì)于不符合類(lèi)型的數(shù)據(jù),程序不會(huì)運(yùn)行。對(duì)于一個(gè)在行情好的日子里每天能交易 300 億美元的程序而言,用類(lèi)型系統(tǒng)編寫(xiě)的程序要可靠得多。
Minsky 表示,通過(guò)捕獲錯(cuò)誤,OCaml 的類(lèi)型系統(tǒng)可以讓 Jane Street 的程序員專(zhuān)注于更大的問(wèn)題。程序員們會(huì)想,他們是否修復(fù)了系統(tǒng)捕獲的錯(cuò)誤,這樣 OCaml 就成了一種讓人不可能思考糟糕想法的新語(yǔ)。
這里的訣竅是,為了讓類(lèi)型檢查器奏效,程序員們必須給代碼添加復(fù)雜的注釋。編寫(xiě)對(duì)類(lèi)型進(jìn)行限制的代碼很討厭,甚至?xí)屓藛蕷?。更糟糕的是,OCaml 需要高深的抽象數(shù)學(xué)能力。但這種語(yǔ)言的精確性卻牢牢地吸引了一些人,這讓 Jane Street 在緊俏的程序員招聘市場(chǎng)中具備非同尋常的優(yōu)勢(shì)。盡管使用 PHP 作為開(kāi)發(fā)語(yǔ)言,大部分軟件開(kāi)發(fā)者還是會(huì)選擇加入 Facebook 和維基百科。但 OCaml 卻能穩(wěn)定地吸引到高質(zhì)量的求職者。這種吸引不僅源自語(yǔ)言,還和使用它的人有關(guān)。Jane Street 是一家允許員工在休息室里玩四人國(guó)際象棋的公司。這種競(jìng)爭(zhēng)智慧的文化與花哨編程語(yǔ)言的使用交相輝映。
谷歌似乎打算在 Go 語(yǔ)言上實(shí)現(xiàn)類(lèi)似的效果。Go 是谷歌開(kāi)發(fā)的高性能編程語(yǔ)言,旨在讓互聯(lián)網(wǎng)的運(yùn)作更優(yōu)雅、更高效,很適合開(kāi)發(fā)驅(qū)動(dòng)大型互聯(lián)網(wǎng)服務(wù)的高并發(fā)軟件。Go 也很吸引對(duì)困難的新語(yǔ)言感興趣的程序員。
在 2010 年末時(shí),F(xiàn)acebook 遭遇了一場(chǎng)危機(jī)。PHP 并不強(qiáng)調(diào)性能,但 Facebook 卻需要性能。Facebook 發(fā)展得太快,似乎如果不大改 PHP,F(xiàn)acebook 就會(huì)開(kāi)始衰落。
徹底轉(zhuǎn)換語(yǔ)言不在考慮之列。Facebook 的 PHP 代碼數(shù)超過(guò)數(shù)百萬(wàn)行,這些代碼由數(shù)千名工程師編寫(xiě)而成,服務(wù)超過(guò) 5 億用戶(hù)。相反,F(xiàn)acebook 任命了一小隊(duì)高級(jí)工程師來(lái)發(fā)明一種方式,讓 Facebook 在不更換編程語(yǔ)言的情況下繼續(xù)保持運(yùn)作。
解決方案之一就是開(kāi)發(fā)一個(gè)編譯器,將 Facebook 的 PHP 代碼轉(zhuǎn)換成運(yùn)行速度快得多的 C++ 代碼。另一種解決方法是創(chuàng)造一種 PHP 方言,這樣就不會(huì)改變 Facebook 的 PHP 文化,又能讓他們寫(xiě)出更可靠的代碼。
于是 Facebook 開(kāi)發(fā)出了名為 Hack 的 PHP 方言。Hack 是擁有可選類(lèi)型系統(tǒng)的 PHP。Hack 的類(lèi)型檢查器完全用 OCaml 編寫(xiě)也絕非偶然。Facebook 想要自己的程序員繼續(xù)用 PHP 快速開(kāi)發(fā),但不再想要他們像以前一樣打破成規(guī)了。
與此同時(shí),Twitter 也經(jīng)歷了類(lèi)似轉(zhuǎn)變。Twitter 最開(kāi)始采用 Ruby on Rails 框架。但隨后用戶(hù)暴增。當(dāng)有成千上萬(wàn)粉絲的用戶(hù)發(fā)布推文時(shí),這些粉絲的時(shí)間線(xiàn)就必須立即得到更新。像這樣的大推文經(jīng)常會(huì)擠爆系統(tǒng),迫使工程師們將網(wǎng)站下線(xiàn),以查找問(wèn)題所在。Twitter 的工程師這么做了很多次,以至于 Twitter 維護(hù)頁(yè)面上的“失敗鯨”都出了名。Twitter 用 Scala 語(yǔ)言重寫(xiě)了大部分服務(wù),從而阻止了情況惡化。和 OCaml 一樣,Scala 也是由學(xué)者們開(kāi)發(fā)的,擁有一個(gè)強(qiáng)大的類(lèi)型系統(tǒng),強(qiáng)調(diào)正確性和性能,哪怕是以犧牲程序員在代碼上的自由和愉悅為代價(jià)。
就像創(chuàng)業(yè)公司的“成熟”是以最終弄清楚了營(yíng)收來(lái)源為標(biāo)志一樣,公司也能聰明地利用編程語(yǔ)言的威力來(lái)操縱組織心理。編程語(yǔ)言設(shè)計(jì)師 Guido van Rossum 表示,一旦一家軟件公司達(dá)到一定規(guī)模,避免混亂的唯一方法就是使用需要程序員預(yù)先投入很多的語(yǔ)言。van Rossum 說(shuō)道:“這種語(yǔ)言會(huì)讓你覺(jué)得拖慢了速度,因?yàn)槟惚仨毎岩患抡f(shuō)上三次?!边@也是許多創(chuàng)業(yè)公司盡可能拖延轉(zhuǎn)換語(yǔ)言的原因。因?yàn)檗D(zhuǎn)換語(yǔ)言會(huì)失去一些幫助公司起步的牛人,小團(tuán)隊(duì)也不大可能快速推出新功能。但一門(mén)更精確的語(yǔ)言能幫助公司員工理解彼此的代碼,讓公司的產(chǎn)品具備穩(wěn)定性,從而成為人們?nèi)粘I畹慕M成部分。
軟件公司能進(jìn)行這類(lèi)布局也許還能解釋為什么它們會(huì)變得這么強(qiáng)大。計(jì)算機(jī)不斷擴(kuò)展的邊界是原因之一。但這些公司也具備再造自己的特質(zhì)。隨著它們改變和壯大,它們將不局限于重繪組織結(jié)構(gòu)圖。因?yàn)樗鼈兘⒃诖a之上,也就能做些更加激烈的事。它們可以改造自己、自己的文化以及思維方式。
via mit
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。