華爾街企業(yè)使用什么編程語言?答案可能出乎意料
譯文【51CTO獨家譯文】華爾街一家公司發(fā)現(xiàn)計算領域的成功并不一定必須依靠傳統(tǒng)企業(yè)Java來實現(xiàn),他們利用Caml這款名不見經(jīng)傳的編程語言在代碼簡潔性與可讀性之間找到了完美的平衡點。
貿(mào)易企業(yè)Jane Street表示,Caml為其帶來一系列強大的工具,足以創(chuàng)建出速度出色且不存在運行錯誤的大型程序。
“在常規(guī)工作當中,很大一部分屬于案例分析任務。讓自己的程序正確運作實在不是件容易的事情,而且能從系統(tǒng)中獲得的任何一款足以解決錯誤的工具都彌足珍貴,”Jane Street公司技術部門負責人Yaron Minsky在本周五于紐約舉辦的QCon開發(fā)者大會上指出。
是一家專門處理貿(mào)易相關事務的企業(yè),也是目前世界上規(guī)模最大的Caml與OCaml(Caml的面向對象版本)用戶。
Jane Street公司的全部交易與輔助類系統(tǒng)都在使用Caml,當然底層系統(tǒng)接口仍在使用部分C代碼、分析電子表格則由Visual Basic腳本支持。總而言之,Caml代碼在每個工作日會為Jane Street處理總值約200億美元的交易活動。
該公司目前擁有約六十位程序員,他們要么在求學階段已經(jīng)對Caml有所了解、要么依靠出色的學習能力在培訓中快速掌握了這門編程語言。除了這些專業(yè)技術人員,公司里還有約九十名非程序員會在日常工作中跟Caml打交道。
Jane Street使用Caml幾乎可以說是一種偶然,Minsky指出。Caml是一種機器學習函數(shù)編程語言,這類語言被廣泛應用在各大高校的編程專業(yè)教學當中,但在學術界以外始終未能獲得普遍認可及實際成功。
Minsky十年前尚未從學校畢業(yè)時就已經(jīng)開始了自己在Jane Street的工作。由于對Caml語言非常熟悉,他為公司創(chuàng)建出一大批實驗方案,其中很多后來還被整合進生產(chǎn)環(huán)境。如此優(yōu)異的表現(xiàn)讓他在拿到分布式系統(tǒng)博士學位的同時也順利獲得Jane Street公司的聘書。
當時,Jane Street公司“對貿(mào)易層面的重視程度遠高于技術層面,”Minsky回憶道。電子表格中充斥著大量VB代碼,但這種處理方式顯然無法跟上該公司的規(guī)模拓展節(jié)奏。更重要的是,當時還沒有一套專門的系統(tǒng)能夠承擔變更管理工作,因此所有用戶計算機上的代碼也就無法得到更新。
隨著Jane Street公司的貿(mào)易業(yè)務逐步邁入計算機時代,Minsky部署的Caml方案開始成為公司的核心系統(tǒng)。
Jane Street同樣也關注過大多數(shù)貿(mào)易企業(yè)所使用的Java語言,但企業(yè)級Java程序在構建過程中需要涉及大量動態(tài)面向對象方法,這讓該公司感到其內(nèi)容難以理解并據(jù)此作出思考,Minsky表示。
Minsky指出,該公司的某位分析師非常喜歡查看運行在該系統(tǒng)中的代碼——盡管他根本不是程序員。他只需坐下來認真閱讀這些代碼內(nèi)容,就能了解到其執(zhí)行目的與背后的含義。Caml代碼的確非常易于理解,只要在相關語法方面做做功課、任何人都能掌握其中的內(nèi)容。
Caml還具備一系列天然優(yōu)勢。它是一款函數(shù)編程語言,因此能夠很好地支持程序中的函數(shù)計算。
“大家可以創(chuàng)建一個函數(shù),將其傳遞給另一個函數(shù),然后再讓該函數(shù)返回一組函數(shù),”Minsky表示。在Caml語言中,函數(shù)屬于“類值,能夠像其它項目一樣進行任意傳遞。”相比之下,大部分其它編程語言都不允許開發(fā)者將函數(shù)像值那樣或者以手動方式對其加以傳遞。
此外,數(shù)據(jù)值在函數(shù)編程語言當中是不可變的。這意味著程序的運作并非源自“數(shù)據(jù)結構中的單元變化實現(xiàn),而是依靠表達式求值來完成,”Minsky解釋道。
Caml是一套靜態(tài)類型系統(tǒng),這意味著其中具備一系列規(guī)則、用于指導系統(tǒng)處理每一種數(shù)據(jù)類型。一般來說,在靜態(tài)類型語言中進行漏洞定位在難度上要遠低于JavaScript或者Python等動態(tài)類型系統(tǒng)。這種特性大大加快了計算任務的速度,因為程序清楚接下來需要處理哪種類型的數(shù)據(jù)。
“關于這種編程風格,我已經(jīng)積累下豐富而且深刻的開發(fā)經(jīng)驗。在這里,大家可以利用類型系統(tǒng)幫助自己掌握變化所帶來的影響,”Minksy指出。“誠然,每一種語言都可能編寫出糟糕的代碼,但只要大家知道自己在做什么,就完全能夠利用這種類型系統(tǒng)作為設計方案中的一部分、進而極大改善程序開發(fā)成果的正確性。”
雖然很少有人會把Caml開發(fā)經(jīng)驗寫進自己的應聘簡歷,但尋找在這方面頗具心得的程序員其實并不困難,Minsky表示。那些了解Caml或者說對函數(shù)編程較為熟悉的開發(fā)人員對于這種編程模式往往充滿熱情。
Minsky在第一次幫助公司招聘程序員時,就是直接通過Caml郵件列表發(fā)出通知并最終從回復者中選定了三名新員工。
當然,該公司也招聘過不少對Caml一竅不通的程序員。理由很簡單,只要這些應聘者有能力通過培訓掌握這門語言,是否已有經(jīng)驗并不是大問題——事實了證明這樣的判斷完全正確。
隨著時間的推移,該公司已經(jīng)利用Caml構建起眾多開發(fā)成果。除了其核心貿(mào)易系統(tǒng)之外,還包括一套并發(fā)庫、一套復雜的訂閱及發(fā)布系統(tǒng)以及一系列系統(tǒng)自動化工具。
總體而言,Jane Street公司擁有“大量依靠小型團隊就能維護的系統(tǒng)方案,”Minsky解釋道。
使用這種知名度不高的語言當然也存在一些弊端,Minsky強調稱。其中最嚴重的一點在于缺乏適當?shù)默F(xiàn)成工具。最讓Minsky苦惱的就是沒有先進編輯工具——例如autocomplete——以及廣受用戶歡迎的主流IDE(即集成開發(fā)環(huán)境)可供選擇。
為了解決這些問題,該公司已經(jīng)開發(fā)出諸多自有工具并選擇了開源機制。Jane Street公司還積極為一家名為OCamlPro的公司以及劍橋大學Caml實驗室提供資助,鼓勵他們打造商用Caml支持方案。
“我們盡自己所能,努力推動該語言的健康發(fā)展。我們自己編寫出的300萬行代碼已經(jīng)成為公司運營的重要基礎,而以Caml語言為核心建立起來的技術社區(qū)也成為我們的重要技術依托,”Minsky指出。“如果大家依靠小眾技術起家并獲得了成功,就必須準備好為其后續(xù)發(fā)展買單。”