相關文章

Cf2f324c7c4f84a68bd0f32661de37e1 Ruby語言開發出了Twitter、Hulu以及許多的現代Web網站。其發明者是日本人松本行弘。松本行弘發明Ruby,則是受到了美國作家Samuel R. Delany發表於1966年的一部科幻小說《通天塔-17》的啟發。

想知道語言的威力有多大,可以看看《通天塔-17》這本小說。裡面星際戰爭的一方只需讓另一方學習了一門語言,即讓對方棄明投暗。程式設計語言也具有類似的威力,它賦予了軟體公司重塑自我的能力,它不僅能改變問題的解決方式,甚至還可以改變你的思考方式,決定你該提出什麼樣的問題。這也許是Google、蘋果等推出自家程式語言的原因所在,而初創企業想要成就什麼樣的願景,程式設計語言的選擇很關鍵。

▲松本行弘

松本行弘當初發明Ruby,也希望能夠用一門程式語言,去重組並改進程式師的思考方式。實際上開發者這種群體也傾向於認為,程式設計語言不僅能改變問題的解決方式,甚至也能改變提出什麼樣的問題。

所以,這些人在衡量公司規模、產品好壞或者同事強弱時往往會問一個問題:「你用什麼程式語言?」

這個問題,有助於外界理解軟體公司為什麼會變得如此強大、為什麼會那麼有價值,有助於瞭解那些影響我們日常生活的產品和服務。一項看似與我們無關的最內部的決定,比方說新產品的開發究竟是用Ruby、PHP還是C語言,突然之間卻會影響到我們所有人。

Facebook與PHP

如果你想知道Facebook為什麼會是這個樣子,為什麼這麼運作,接下來又會幹什麼,那就得瞭解一下PHP,馬克‧薩伯格開發Facebook用的語言。

PHP也許是所有程式設計語言當中最不受程式師重視的語言了。程式設計問答網站Stack Overflow的聯合創始人Jeff Atwood用了非常惡毒的語言來形容PHP,稱PHP設計糟糕、東拼西湊,是「步履蹣跚的怪物」、「瘟疫」、「鬼屋」,說在裡面住的人都是喜歡鬼的人,稱用PHP的都是業餘愛好者。

「有人誤以為進入Facebook的都是才華橫溢的工程師,但其實他們是一群用Windows XP寫PHP的人。說他們是駭客,根本是在污辱駭客。」

大多數成功的程式設計語言都有整體哲學或者一套用於組織詞彙語法的原則指南,但是PHP沒有。PHP的創始人Rasmus Lerdorf早在2003年就承認,自己不知道如何寫程式設計語言,只是走一步看一步,想到什麼加什麼。

比方說,防止惡意資料攻擊的PHP函數「mysql_escape_string」被發現存在漏洞之後,其補救措施不是對這個函數進行修補,而是重新開發了一個名為「mysql_real_escape_string」的函數。這就好比是在飛機駕駛艙安裝了兩個類似的按鈕,按下其中一個可以讓飛機放下起落架,而按下另一個則會讓飛機掉下。

雖然很多人都說PHP很爛,但是卻不能阻止它的壯大。據估計全球有39%的網站用PHP編寫,其中就包括了Facebook、Wikipedia、WordPress等。原因在於PHP儘管有缺陷,但是做動態內容上手簡單,不需要專業人士也能弄。

PHP的持續發展對於Wikimedia的成功非常關鍵。由於嚴重依賴PHP,Wikimedia遭遇了大規模的設計缺陷,直到2008年才推出了能適應行動裝置的版本,到2013年才做出對使用者友好的編輯介面。但是PHP讓那些不是軟體工程師的人也能貢獻新功能,Wikimedia之所以能展示古埃及的象形文字、處理散頁樂譜,也正是因為此。

但是Google不能用PHP來開發,因為Google要求搜索要快、精確,需要更加精細和強大的語言,比方說Java或者C++。Facebook與之對比就相當於是小型試驗的集市,加幾個按鈕、feeds或者小玩意來吸引你的注意力。PHP是為了迅速炮製出新功能而生的。

你幾乎可以想像得出在決定命運的那一天裡,馬克‧薩伯格在哈佛大學宿舍裡是如何琢磨著以最快的速度和最小的代價讓Facebook上線的。Web的節奏太快,使用者又太善變了,要想捕捉到這一刻唯有成為第一個。程式寫得再怎麼爛都不要緊,最關鍵是把事情幹完,讓別人用上。

現在的Facebook市值已超過2000億美元,辦公室的牆上貼的都是這樣的東西:「完成好過完美」,「快速行動、打破陳規。」

馬克‧薩伯格希望用這些話讓員工與Facebook的駭客文化保持一致。但其實這些恰恰是PHP的價值觀。快速行動打破陳規實際上正是PHP的精髓,只要是“講”這門語言的人都不可避免要按照這種方式思考。可以說是這門語言本身造就和維繫了Facebook的文化。

 

Jane Street Capital與OCaml

如果要找跟PHP這種自然實驗語言完全相反的例子,沒有地方比下曼哈頓區的金融交易機構Jane Street Capital更合適。這家400人的公司每天處理著美國大約2%的股權交易。

他們用的程式設計語言是OCaml,10年前,公司的技術負責人Yaron Minsky說服了老闆用這門晦澀的語言重寫了公司的整個交易系統。這語言原本由法國的一家研究機構的學者開發,目的是想改進某個用來自動證明數學定理的電腦系統,此前幾乎沒人用這門語言進行過實際工作。但是Minsky在讀研究所時接觸到OCaml之後,認為這門語言可以替代Jane Street 交易系統的那些Excel表格。

OCaml的一大賣點是它的「類型系統」,類型系統跟Word的語法檢查器有點類似,不同的是語法檢查器只是用綠色波浪線標出有問題的文字,而類型系統檢查出錯誤後會阻止系統運行。寫有類型系統程式的可靠性往往要比沒有的高很多,這一點對於一個日交易量高達300億美元的系統來說是非常有用的。

OCaml的類型系統幫忙攔截了bug,Jane Street的程式師就可以專注於更加高級的問題。不過,要想充分獲得類型檢查器的好處,程式師必須給自己的程式碼增加複雜的註解。就好像Word的語法檢查器需要你對所有的句子進行解釋一樣。寫程式碼還要進行類型約束,對程式設計師來說是令人討厭甚至洩氣的事情。更糟的是,OCaml比大部分的程式設計語言的專業要求都要高,需要對數學抽象有很深的理解,這已經超出了大部分開發者的能力範疇。

但是這種語言的嚴格要求,對於某些人來說卻有相對的好處,這反而讓Jane Street在緊張的程式設計師人力市場裡有了一項與眾不同的優勢。OCaml替Jane Street源源不斷地吸引了一批批的高素質人才候選人。那些人被吸引的不僅是因為這門語言,更是因為使用這門語言的人。人以群分,這裡的人想的研究的都是類似的事情。

類似地,Google似乎也打算通過Go語言的推廣使用來達到類似目的。Go是Google開發的一種高性能程式設計語言,目的是要讓Web的處理工作更加優雅和高效。開發此類高風險軟體是有好處的,因為大型Web服務背後的那一大群伺服器的運行,需要這樣的語言。對於喜歡新奇和挑戰的開發者來說Go尤其具有吸引力。

 

成長的煩惱

2010年末,Facebook遭遇了一次危機。PHP本身並不是針對性能優化而開發的,而Facebook網站又發展得太快,若不進行相當徹底的改造網站看起來快要癱掉了。

換語言根本不在考慮的範圍之內。Facebook網站上有著數千專家工程師撰寫的上百萬行PHP代碼,還有超過5億用戶在用它。因此Facebook派遣了一支由資深工程師組成的特種部隊,讓這批人去專攻一個特殊專案,找出讓Facebook不放棄它那帶駭客口音(hacky)母語的情況下維持運轉的辦法。

解決方案其中的一部分是開發出一種編譯器軟體,將Facebook的PHP代碼編譯為更快的C++代碼。而專案的另外一項工作則成為了電腦語言工程的一大壯舉,它使得Facebook的程式師在保持PHP血統文化的同時還可以編寫出更加可靠的代碼。

這支救援分隊發明了一門PHP方言,名字叫做Hack。Hack是帶可選類型系統的PHP,也就是說,你可以還繼續寫原來隨性寫意的PHP,也可以選擇增加注解讓類型系統檢查代碼的正確性。

跟Jane Street一樣,這種類型檢查器完全是用OCaml編寫的,這絕非巧合。Facebook希望自己的程式設計師用感到舒服的母語繼續快速行動(move fast),但是同時不希望他們在這麼做時不得不打破一些東西(break things)。

 

Twitter的難題

與此同時,Twitter也經歷了類似的變革。

Twitter原先是用流行的Web框架Ruby on Rails開發的,而後者則是在Ruby基礎上受PHP啟發做出來的。然後Twitter的用戶開始暴漲。一旦有名人發佈了新的推特,數十萬粉絲的tinemline也必須馬上更新。此輪情況往往會令系統不堪重負,Twitter工程師不得不把網站暫時關閉才能應付。

由於經常幹這種事情,維護頁面的那頭失敗的鯨魚形象都變得臭名昭彰了。後來Twitter用Scala語言替代了公司很大一部分的服務。跟OCaml一樣,Scala也是由學者開發,一樣擁有強大的類型系統,都是以程式師的自由和開發的愜意為代價來確保準確和性能。

跟初創企業最終找到收入來源而走向“成熟”類似,他們同樣也可以借助程式設計語言的力量來操控組織心理。在Google幹過7年、現在Dropbox工作的「程式設計語言設計師」Guido van Rossum說,軟體公司到達一定規模之後要想避免陷入混亂,唯一的辦法是借助預先需要程式師做更多事情的程式設計語言。

「就是那種讓你放慢下來的感覺,因為所有事情你都需要說上三遍。」

這就是為什麼許多初創企業盡可能拖延切換語言的原因所在。換上更嚴謹的語言有可能會讓你失去一些企業開始之初就陪伴你的創業元老駭客,迸發出新功能的可能性也會降低。但是這能幫助整個公司更好地理解別人的程式碼,保證產品日常運營必要的穩定性。

軟體初創企業能夠進行這樣的機動甚至可能還解釋了他們為什麼會如此強大。部分原因是由於電腦規模的擴大。但是這些公司也有著獨特的重塑自我的能力。隨著公司的改變與發展,這些公司能做的不僅僅只有重寫畫畫組織結構圖而已。因為他們是用程式碼寫成的,所以可以做一些更加激進的事情:他們可以重新組織自己、再造企業文化,改變思考方式。

新聞來源:MIT TR

 

使用 Facebook 留言

Shinwill
1.  Shinwill (發表於 2015年4月11日 01:30)
第一
幾乎可以確定本文作者根本不懂程式語言

第二
無論用什麼語言
都可以實作出一模一樣的功能
端看工程師的演算法實力而定
高階工程師對於演算法的思維是與語言無關的
不管什麼語言他都能搞得定
因為他的核心是演算法不是語言
這才是他技術強的地方
只有菜鳥工程師或像不懂演算法的本文作者才會拘泥在語言上說嘴
李奕樵
2.  李奕樵 (發表於 2015年4月11日 15:54)
※ 引述《Shinwill》的留言:
> 無論用什麼語言
> 都可以實作出一模一樣的功能
> 端看工程師的演算法實力而定
> 高階工程師對於演算法的思維是與語言無關的
> 不管什麼語言他都能搞得定
> 因為他的核心是演算法不是語言
> 這才是他技術強的地方
> 只有菜鳥工程師或像不懂演算法的本文作者才會拘泥在語言上說嘴

呃,所以你會用組合語言寫網站後端 script 嗎?
我所知道的高強 Hacker 才懶得用笨工具浪費自己的時間,同樣的功能他們寧可用好用一點的語言來開發。因為他們學新語言的速度太快了,語言的強項與弱點都了然於心。對自己好一點,ok?
ulyssesric
3.  ulyssesric (發表於 2015年4月12日 09:55)
※ 引述《Shinwill》的留言:
> 第一
> 幾乎可以確定本文作者根本不懂程式語言
>
> 第二
> 無論用什麼語言
> 都可以實作出一模一樣的功能
> 端看工程師的演算法實力而定
> 高階工程師對於演算法的思維是與語言無關的
> 不管什麼語言他都能搞得定
> 因為他的核心是演算法不是語言
> 這才是他技術強的地方
> 只有菜鳥工程師或像不懂演算法的本文作者才會拘泥在語言上說嘴

電腦界有一句名言:
『現在已經沒人會用 ASCII 編寫 PostScript 了!』

該做什麼工作就要用適當的工具。
程式語言的發展都有目的,
抱著熟悉的程式語言不放,給自己找一大堆理由,
甚至牽拖哲學美學這些虛無縹渺的狗屎,
那是魯蛇工程師最容易犯的毛病。

學習新的程式語言沒那麼困難,
尤其是當你真的『精通』一門程式語言之後。
當你想要做一件複雜的的工作例如橢圓加密演算法,
卻發現在敵營早就已經有開放程式碼函式庫,
這時候你去學習整合不同資源所花的時間精神,
遠比你自己一個零件一個零件自己生產要有效率得多。
對自己好一點,OK?
Shinwill
4.  Shinwill (發表於 2015年4月13日 15:18)
樓上兩位是很有事?

好的工程師本來就不會被不同語言的差異所影響
但並不表示他就不會去挑好用的語言
我只是說他不會被語言所限制造成開發瓶頸這樣而已
只有菜鳥工程師或像不懂演算法的本文作者才會被語言所拘泥
樓上兩位一定要把「不在乎語言特性 = 不會挑好用的語言」劃上等號?

加強閱讀能力對你們來說很困難嗎?
李奕樵
6.  李奕樵 (發表於 2015年4月14日 21:36)
※ 引述《Shinwill》的留言:
> 樓上兩位是很有事?
也不看看是誰先開始毫無根據的謾罵......
又來了。明明是自己的陳述過於簡陋,還想說成是別人刻意誤解。
公道的五樓已經打你臉囉 ╮(╯_╰)╭
> 好的工程師本來就不會被不同語言的差異所影響
> 但並不表示他就不會去挑好用的語言
> 我只是說他不會被語言所限制造成開發瓶頸這樣而已
> 只有菜鳥工程師或像不懂演算法的本文作者才會被語言所拘泥
> 樓上兩位一定要把「不在乎語言特性 = 不會挑好用的語言」劃上等號?
> 加強閱讀能力對你們來說很困難嗎?
反擊好弱,你不知道網路筆戰是戰給第三方看的嗎?究竟是我們閱讀能力有問題,還是你的發言欠缺考慮,回去問你的中學國文老師吧。

發表回應

謹慎發言,尊重彼此。按此展開留言規則