編程語(yǔ)言:變革創(chuàng)業(yè)思維的工具
作為Twitter、Hulu和許多當(dāng)代互聯(lián)網(wǎng)服務(wù)的開(kāi)發(fā)語(yǔ)言,Ruby備 受關(guān)注。而當(dāng)日本計(jì)算機(jī)科學(xué)家松本行宏決定設(shè)計(jì)這一語(yǔ)言時(shí),他借鑒了薩莫埃爾·德拉尼(Samuel R. Delany)1966年科幻小說(shuō)《Babel-17》中的概念。這部小說(shuō)的核心是一種名為“Babel-17”的人造語(yǔ)言,能明顯提高使用者的思維水 平。“Babel-17是一種準(zhǔn)確的分析語(yǔ)言,能讓你精通任何技術(shù)。”小說(shuō)主角曾經(jīng)這樣說(shuō)。通過(guò)Ruby,松本行宏希望實(shí)現(xiàn)類似的目標(biāo):變革及優(yōu)化程序員的思維方式。
這一目標(biāo)聽(tīng)起來(lái)非常宏大,但松本行宏的觀點(diǎn)已經(jīng)成為主流。軟件開(kāi)發(fā)者通常都會(huì)相信,編程語(yǔ)言足以扭轉(zhuǎn)他們的思維方式,從而改變解決問(wèn)題的方法,甚至改變他們對(duì)于應(yīng)該去解決哪些問(wèn)題的認(rèn)識(shí)。這也是他們估計(jì)某家公司、某一產(chǎn)品和競(jìng)爭(zhēng)對(duì)手規(guī)模的方式:“你們使用什么語(yǔ)言?”
對(duì)編程語(yǔ)言的審視將有助于外部人士了解,這些軟件公司為何能如此強(qiáng)大,有著如此高的價(jià)值,以及它們的產(chǎn)品和服務(wù)如何融入我們的生活。這些企業(yè)的內(nèi)部決策,即使用什么樣的語(yǔ)言,無(wú)論是Ruby、PHP還是C,將對(duì)我們所有人產(chǎn)生影響。如果你希望知道,為何Facebook看起來(lái)及用上去是當(dāng)前的模樣,以及未來(lái)會(huì)有什么樣的發(fā)展,你需要去了解馬克·扎克伯格(Mark Zuckerberg)使用的編程語(yǔ)言PHP。
在程序員之中,PHP或許是最不受尊重的編程語(yǔ)言。由于存在許多缺陷,知名技術(shù)博客Eevee認(rèn)為,PHP是“糟糕設(shè)計(jì)的一塊碎片”,而愿意使用PHP的開(kāi)發(fā)者很業(yè)余。
編程問(wèn)答網(wǎng)站Stack Overflow聯(lián)合創(chuàng)始人杰夫·艾特伍德(Jeff Atwood)則表示:“聰明的工程人才紛紛前往Facebook,這非常奇怪。他們?cè)赪indows XP環(huán)境中開(kāi)發(fā)PHP代碼。他們是黑客,但這里的‘黑客’是一種貶義。”艾特伍德將PHP稱作“笨拙的巨獸”、“流行病”,以及吸引神秘事件愛(ài)好者的“鬼屋”。
成 功的編程語(yǔ)言有著整體化的哲學(xué),或是一整套邏輯自洽的指導(dǎo)原則,以組織詞匯和語(yǔ)法(即提供給程序員的指令)。但PHP并非如此。這一語(yǔ)言的設(shè)計(jì)者拉斯姆 斯·萊爾多夫(Rasmus Lerdorf)曾經(jīng)承認(rèn),他只是將許多東西混合在一起。“我不知道怎么阻止這一切。”他在2003年接受采訪時(shí)表示,“我完全不知道如何編寫(xiě)一款編程語(yǔ) 言,我只是在這一過(guò)程中不斷加入新的邏輯步驟。”
程序員最喜歡講的一個(gè)例子是PHP函數(shù)“mysql_escape_string”。在將信息發(fā)往數(shù)據(jù)庫(kù)之 前,這一函數(shù)能從中去除惡意輸入請(qǐng)求。(惡意輸入的例子包括網(wǎng)站上表格請(qǐng)求用戶的電子郵件地址,以及黑客植入一段代碼竊取網(wǎng)站用戶的密碼。)在發(fā)現(xiàn)該函數(shù) 的一個(gè)漏洞之后,一個(gè)名為“mysql_real_escape_string”的新版本被創(chuàng)建出來(lái),但老版本并未被替換。因此目前的情況就像是在飛機(jī)駕 駛艙中并排放兩個(gè)功能類似的按鈕:其中一個(gè)按鈕用于放下起落架,而另一個(gè)則用于安全地放下起落架。這不僅違背常理,甚至?xí)馂?zāi)難。
盡管許多人都不喜歡PHP,但PHP仍是很大一部分網(wǎng)站的基礎(chǔ)。一項(xiàng)研究顯示,在當(dāng)前互聯(lián)網(wǎng)的所有域中,基于PHP技術(shù)的部分多達(dá)39%。Facebook、維基百科,以及領(lǐng)先的發(fā)行平臺(tái)WordPress均利用了PHP來(lái)開(kāi)發(fā)。這是由于,盡管存在許多缺陷,但PHP對(duì)入門(mén)者來(lái)說(shuō)幾乎完美。
PHP的名稱最初是“個(gè)人主頁(yè)”的英文縮寫(xiě)。通過(guò)這一語(yǔ)言,程序員可以方便地在靜態(tài)HTML頁(yè)面上添加日期和用戶姓名等動(dòng)態(tài)內(nèi)容。PHP的興起推動(dòng)了從網(wǎng)站開(kāi)發(fā)向網(wǎng)頁(yè)應(yīng)用開(kāi)發(fā)的飛躍,而開(kāi)發(fā)者甚至不必是專業(yè)人士。
維 基媒體基金會(huì)負(fù)責(zé)維基百科項(xiàng)目的首席軟件工程師奧利·利夫尼(Ori Livneh)表示,PHP易于上手的特點(diǎn)正是維基百科成功的關(guān)鍵。不過(guò)他指出:“我一直討厭PHP。”由于對(duì)PHP的依賴,維基百科在用戶規(guī)模擴(kuò)大之后 出現(xiàn)了設(shè)計(jì)漏洞。(正是由于這一原因,在2008年之前,維基百科一直沒(méi)有支持移動(dòng)設(shè)備。而直到2013年,該網(wǎng)站才提供了對(duì)用戶友好的編輯界面。)不 過(guò),基于PHP,一些不熟悉軟件編程的人士也可以開(kāi)發(fā)新功能。例如,利用PHP語(yǔ)言,維基百科在“埃及古物學(xué)”條目上展示了象形文字,并可以在頁(yè)面上實(shí)現(xiàn)音樂(lè)播放。
谷歌無(wú) 法使用PHP語(yǔ)言,因?yàn)楫?dāng)前的谷歌需要非常出色地完成一項(xiàng)工作,即迅速而準(zhǔn)確地進(jìn)行搜索。因此,谷歌搜索引擎采用了更強(qiáng)大的語(yǔ)言,例如Java和C++。 與谷歌相比,F(xiàn)acebook是一個(gè)小規(guī)模實(shí)驗(yàn)的集散地,一個(gè)按鈕、消息流和小發(fā)明的大雜燴。在這種情況下,PHP可以更快地實(shí)現(xiàn)功能。
你 甚至可以想象,哈佛大學(xué)宿舍里的扎克伯格如何在決定性時(shí)刻選擇Facebook的開(kāi)發(fā)方式。他需要以最小的成本使網(wǎng)站上線。網(wǎng)絡(luò)發(fā)展速度很快,用戶的喜好 變幻無(wú)常,把握機(jī)會(huì)的唯一方式就是成為市場(chǎng)的先行者。究竟是做成一盤(pán)大雜燴,還是一份精致的意大利面,這無(wú)關(guān)緊要。他首先需要完成這一網(wǎng)站,讓用戶可以使 用。他考慮的并不是代碼是否優(yōu)美,而是如何讓好友們登上這一名為T(mén)heFacebook的網(wǎng)站,評(píng)價(jià)他們熟悉的女生。
今天,F(xiàn)acebook的市值超過(guò)2000億美元,而該公司辦公室的墻上有這樣的標(biāo)語(yǔ):“完成工作比完美更重要”,以及“快速行動(dòng),打破僵局”。
這些大膽的口號(hào)是為了確保員工符合該公司的“黑客”文化。而這也準(zhǔn)確體現(xiàn)了PHP的價(jià)值。快速行動(dòng),打破僵局,這正是PHP的本質(zhì),代表了PHP程序員思考問(wèn)題的方式。你甚至可以這樣說(shuō):PHP本身創(chuàng)造并維持了Facebook的文化。
秘密武器:更強(qiáng)大的語(yǔ)言
如果你希望找到與PHP截然相反的另一種理念,看看另一個(gè)極端是什么樣,那么金融交易公司Jane Street Capital位于紐約下曼哈頓的總部值得一看。這家有著400名員工的公司目前處理著美國(guó)每日證券交易量的約2%。
當(dāng) 我見(jiàn)到Jane Street Capital技術(shù)主管雅隆·明斯基(Yaron Minsky)時(shí),他正坐在辦公桌旁,旁邊放著一臺(tái)恩尼格瑪密碼機(jī),這是為數(shù)不多仍然現(xiàn)存的二戰(zhàn)時(shí)代裝備之一。我原本以為,這就是他房間中最酷的秘密武 器,但隨后我發(fā)現(xiàn)自己犯了錯(cuò)誤。明斯基談到了一款名為OCaml的編程語(yǔ)言。作為計(jì)算機(jī)科學(xué)博士,明斯基于10年前說(shuō)服自己的老板,使用OCaml重新編 寫(xiě)公司的整個(gè)交易系統(tǒng)。
在此之前,幾乎沒(méi)有人在實(shí)際應(yīng)用中使用過(guò)OCaml。這一語(yǔ)言的設(shè)計(jì)者是法國(guó)一家研究機(jī)構(gòu),而最初目的是為了優(yōu)化能 自動(dòng)證明數(shù)學(xué)定理的計(jì)算機(jī)系統(tǒng)。明斯基在自己的研究生階段接觸到了這一語(yǔ)言。他認(rèn)為,這一語(yǔ)言可以取代Jane Street Capital交易系統(tǒng)中使用的Excel電子表格。
OCaml的最大特點(diǎn)在于“輸入檢查系統(tǒng)”。這類似于微軟Word的語(yǔ)法檢查功能,能 在系統(tǒng)認(rèn)為錯(cuò)誤的代碼下方使用綠色波浪線做出標(biāo)記,隨后禁止這樣的代碼運(yùn)行。利用這一系統(tǒng)開(kāi)發(fā)出的程序有著極強(qiáng)的可靠性,而當(dāng)所開(kāi)發(fā)的軟件每天需要處理 300億美元的交易時(shí),這一點(diǎn)很重要。
明斯基表示,通過(guò)捕捉漏洞,OCaml的輸入檢查系統(tǒng)使Jane Street Capital的程序員可以專注于更高大上的問(wèn)題。
而如果該公司能將OCaml的檢查功能進(jìn)一步內(nèi)化,那么將培養(yǎng)出一種習(xí)慣,使程序員不可能再去思考錯(cuò)誤的想法。
此 外,為了讓輸入檢查工具發(fā)揮功能,程序員需要在代碼中添加復(fù)雜的注釋。這就好比說(shuō),Word的語(yǔ)法檢查工具要求你對(duì)所有句子進(jìn)行標(biāo)注。在輸入受限制的情況 下編寫(xiě)代碼有些麻煩,甚至?xí)钊藛蕷?。而更糟糕的是,與其他編程語(yǔ)言相比,OCaml會(huì)涉及非常抽象的數(shù)學(xué),從而給大部分程序員帶來(lái)困難。
不 過(guò),這一語(yǔ)言的精確性對(duì)某些人來(lái)說(shuō)極具吸引力,同時(shí)也給Jane Street Capital帶來(lái)了不同尋常的招聘優(yōu)勢(shì)。盡管一些軟件開(kāi)發(fā)者不理會(huì)PHP的缺陷而加入Facebook和維基百科,但明斯基表示,OCaml語(yǔ)言以及他 的著作《現(xiàn)實(shí)世界的OCaml》有助于吸引優(yōu)秀的編程人才。吸引力并不僅僅在于語(yǔ)言,也在于使用這一語(yǔ)言的人群。在Jane Street Capital,員工在休息時(shí)間會(huì)去下象棋。這種智力競(jìng)爭(zhēng)的文化似乎與對(duì)OCaml語(yǔ)言的使用密切相關(guān)。
谷歌似乎也試圖憑借自主設(shè)計(jì)的高性能語(yǔ)言Go來(lái)實(shí)現(xiàn)同樣的目的。為了讓網(wǎng)絡(luò)服務(wù)變得更優(yōu)雅、更高效,針對(duì)大型網(wǎng)絡(luò)服務(wù)背后的服務(wù)器開(kāi)發(fā)更先進(jìn)的軟件頗有益處。此外,對(duì)于喜歡新鮮事物、喜歡挑戰(zhàn)困難的程序員來(lái)說(shuō),這也是一種吸引力。
適當(dāng)時(shí)機(jī):發(fā)展壯大之后
2010年底,F(xiàn)acebook曾遭遇過(guò)一場(chǎng)危機(jī)。PHP并不是一種強(qiáng)調(diào)代碼性能的語(yǔ)言,但當(dāng)時(shí)Facebook出現(xiàn)了這方面的需求。Facebook的發(fā)展速度很快,因此如果不作出一些重大改變,那么該公司將會(huì)走向失敗。
徹底改變編程語(yǔ)言并非可選方案之一。Facebook使用PHP編寫(xiě)的代碼已達(dá)到數(shù)百萬(wàn)行,從事這一開(kāi)發(fā)的工程專家已有數(shù)千人,而所形成的產(chǎn)品已積累了數(shù)億用戶。
因此,F(xiàn)acebook的多名高級(jí)工程師成立了一個(gè)小團(tuán)隊(duì)。他們?cè)噲D發(fā)明一種方式,使Facebook正常提供服務(wù),同時(shí)不必放棄自己的“母語(yǔ)”。
整個(gè)解決方案的一部分是開(kāi)發(fā)一款編譯器,將Facebook的PHP代碼翻譯成運(yùn)行速度更快的C++代碼。而另一部分則是計(jì)算機(jī)語(yǔ)言工程領(lǐng)域的一項(xiàng)壯舉:繼續(xù)給Facebook程序員帶來(lái)PHP風(fēng)格的文化,同時(shí)讓他們編寫(xiě)可靠性更高的代碼。
這一“救援小組”為此設(shè)計(jì)了PHP語(yǔ)言的一個(gè)變種,即Hack。 Hack是一種帶可選輸入檢查系統(tǒng)的PHP語(yǔ)言。你既可以像以往一樣,快速編寫(xiě)出代碼混亂的PHP程序,也可以遵循系統(tǒng)要求,通過(guò)添加注釋讓系統(tǒng)來(lái)檢查代 碼的正確性。這一輸入檢查工具完全使用OCaml來(lái)開(kāi)發(fā),而這并非巧合。Facebook希望程序員使用熟悉的語(yǔ)言來(lái)快速編寫(xiě)代碼,但并不希望他們將事情 搞錯(cuò)。(去年,扎克伯格公布了Facebook新的工程口號(hào):“在確?;A(chǔ)設(shè)施穩(wěn)定的情況下快速行動(dòng)。”)
與此同時(shí),Twitter也在進(jìn)行類似的轉(zhuǎn)型。Twitter的開(kāi)發(fā)最初基于Ruby on Rails。這是一款采用Ruby語(yǔ)言開(kāi) 發(fā)的熱門(mén)網(wǎng)絡(luò)編程框架,并借鑒了PHP的很多思想。然而,Twitter隨后也看到了用戶數(shù)的暴漲。如果某一用戶有著數(shù)十萬(wàn)關(guān)注者,那么當(dāng)他發(fā)布消息時(shí), 數(shù)十萬(wàn)用戶的時(shí)間線需要得到相應(yīng)的刷新。以往,一些熱門(mén)Twitter消息常常會(huì)壓垮系統(tǒng),導(dǎo)致Twitter工程師不得不暫停服務(wù),對(duì)問(wèn)題進(jìn)行修復(fù)。 Twitter也因隨之而來(lái)的頻繁宕機(jī)而“名聲昭著”。
Twitter隨后用Scala語(yǔ)言重寫(xiě)了服務(wù)的很大一部分代碼,從而解決了這一問(wèn)題。意料之中地,與OCaml類似,Scala也是一款由學(xué)術(shù)機(jī)構(gòu)設(shè)計(jì)的語(yǔ)言,有著強(qiáng)大的輸入檢查系統(tǒng),強(qiáng)調(diào)代碼的準(zhǔn)確性和性能,并因此犧牲了程序員個(gè)人的編程自由和娛樂(lè)感。
在 找到營(yíng)收模式之后,創(chuàng)業(yè)公司將走向成熟。與此類似,它們也可以利用編程語(yǔ)言的力量來(lái)操縱企業(yè)文化。編程語(yǔ)言設(shè)計(jì)師圭多·范洛塞姆(Guido van Rossum)曾在谷歌供職7年,而目前加入了Dropbox。他表示,當(dāng)軟件公司達(dá)到一定規(guī)模之后,避免混亂的唯一方式是使用對(duì)程序員有更多要求的編程 語(yǔ)言。“你的速度可能會(huì)因此減慢,因?yàn)槟阈枰貜?fù)3次去表述同一件事情。”他表示。
因此,許多創(chuàng)業(yè)公司希望等待盡可能長(zhǎng)的時(shí)間再做出改變。 它們可能會(huì)失去一些起步初期的牛人,同時(shí)也不利于小型團(tuán)隊(duì)迅速開(kāi)發(fā)出新功能。不過(guò),這樣的語(yǔ)言將幫助全公司的程序員相互理解彼此的代碼,帶來(lái)更穩(wěn)定的產(chǎn) 品。如果希望你的產(chǎn)品成為人們?nèi)粘I畹囊徊糠?,那么這樣的穩(wěn)定性必不可少。
視不同情況采取不同策略的能力在一定程度上推動(dòng)軟件創(chuàng)業(yè)公司的發(fā)展。軟件的發(fā)展依賴于計(jì)算機(jī)的普及,而這些公司也有著獨(dú)特的方式去重塑自我。隨著變化和發(fā)展,它們所能做的并不僅僅是調(diào)整組織架構(gòu),還可以做出一些更深層次的改變,即變革自身的文化及思維方式。