2012年4月9日 星期一

七大前景看好的程式設計語言

想做企業應用開發的程式人員,如果不學習Java、不學c#或PHP等主流程式設計語言,那將是愚蠢的事情。但像Ruby和Erlang那種過去主要針對特定領域的程式設計語言,如今也已成為企業應用的開發語言。



在企業級程式設計語言領域,主流語言總是博大精深。程式碼主要由少數幾種主流程式設計語言來撰寫,一些場合用Java,另外一些場合用c#或PHP;有時,在像遊戲程式設計這樣追求高性能的任務中,重量級程式設計人員會動用C++或其他通用程式設計語言,所有應用程式都通過SQL語言與資料庫打交道。想做企業應用開發的程式人員,如果不學習上述的程式設計語言,那將是愚蠢的事情;然而令人驚奇的是,有一些原本屬於特定領域專用的程式語言,現也正在企業應用領域異軍突起。

除了那幾門主流語言之外,針對日益增長的通用性問題,目前有好幾種程式語言也開始提供解決方案─甚至連持續雄霸一方市場的老式專用程式語言也是如此。這些語言都提供自動排版程式碼等拼寫功能,以免讓程式設計師被括弧、大括弧等重重嵌套給搞糊塗。

儘管以下七種特用的開發語言可提供在主流開發語言不能直接找到的特性,但其中有很多語言卻還是得依賴於主流語言才能存在。如其中一些語言就得運行在Java虛擬機器上,以便於充分利用Java團隊的資源;而當微軟設計C#語言的時候,它就很明確地是以營造跨語言虛擬機器運行環境為目標,這些細節雖有助於部署,但對程式師而言似乎幫助不大。

不管怎麼說,這七種程式設計語言目前正在企業應用中快速地嶄露頭角,現在也許該是考察它們優勢的時候了!

Python
喜歡使用Python的主要是兩種人:那些痛恨括弧的人和科學家。第一類人幫助創立了這種更容易閱讀、類似Perl的新語言,但又避免了C語言系列那種到處充斥著前後配對的括弧…等問題,造成程式碼不易閱讀的毛病。在飛速發展了幾年後,這項解決方案已經足夠完善,以至於能成為Google應用開發引擎首選的開發語言。格式清晰的Python具有在雲端運算環境中擴展所需要的那種結構,而這正是企業級計算所面臨的最大挑戰。


至於Python會在科研實驗室中普及的原因,則有點難以解釋,因為它並不像Stephen Wolfram專為數學家所開發的Mathematica軟體,Python並未提供任何可明確滿足科學家需要的資料結構和元素。Python之父Guido von Rossum認為,Python之所以在實驗室受到歡迎,可能是因為「科學家在解釋實驗結果時,經常需要即興進行,所以他們會被能讓他們很快地進行工作,並且馬上就能看到結果的動態語言所吸引。」。


當然,Python還擁有大量科學家可能需要的函式庫,如NumPy和SciPy就是其中兩個最知名,透過開放原始碼專案方式而衍生出,專為科學計算而設計的函式庫案例。


像製藥公司那樣的科學技術產業,並不是唯一把Python用於研究的企業。如今很多華爾街的金融公司都很倚重數學分析,也經常聘請大學裡那些習慣使用Python程式設計的科學家。Python在華爾街如此受歡迎,以致於有人甚至建議在債券的招股章程中,必須包含一個用於指定投資人如何得到回報的Python演算法。

Ruby
也許有人會爭辯說Python和Ruby算不上是僅限於特定用途的「小眾」語言,但事實上,若從企業的角度來看,它們仍然是很有應用發展潛力的工具。這也就是說,Ruby─或更確切地說是RoR(Ruby與Rails框架的組合,Ruby on Rails),在建立系統原型方面越來越流行,它是隨著Web2.0的爆發而進入企業應用開發領域,而其中有不少網站一開始都是以Ruby起家。如以提供線上應用軟體,並曾被美國科技雜誌《Wired》評選為「2008年10大最值得關注的創業公司」─37signals.com 即是真正使用Ruby部署其程式碼。


Ruby成功的秘訣,在於其「慣例優先原則 Convention over Configuration (CoC)」的理念。舉例來說,當我們在命名一個foo的變數時,資料庫的相應欄位也會同時自動命名為foo。因此,RoR會是建立系統原型的絕好工具,它讓你只需在一個地方輸入foo,其餘的自動資料表格網頁建立、讀取、更新和刪除(CRUD)的處理工作(Scraffloding),RoR則自動接手進行。


RoR網站主要致力於關聯式資料庫資料的分類。較知名例子有從組合論壇、討論群組和行事曆功能的37signals中,所生成的Basecamp、Backcamp及Campfire等網路應用。RoR可用來處理這些資料庫表的展現格式,以及決定什麼樣的資訊才會被顯示出來。此外,通過Ruby的命名慣例(naming convention)功能,開發人員無需投入大量的重複勞動工作,很容易地便可產出高品質的程式碼模版。


不少企業商用等級(production-grade)的Ruby網站是跑在基於JVM由Java實現的版本JRuby之上,由於JRuby的用戶可得到JVM在處理多執行緒方面的諸多強大好處,這對於有大量使用者需要同時上線併行的企業級部署環境,會有極具價值的助益。


MATLAB
語言原本為數學家求解線性方程組而發明,但由於今日組織需要分析數量越來越龐大的資料,使得企業日益表現出對MATLAB的青睞。許多用於對廣告、歌曲、網頁進行流量分析的較複雜的統計技術,都依賴於類似MATLAB求解的線性規劃演算法的威力。


可以預見的是:MATLAB的使用將隨著網站日誌檔的增長而擴大。對人們來說,要在首頁查看瀏覽列表只是一項簡單的工作,但它背後卻需要統計人員絞盡腦汁從一堆複雜的路徑中進行分析,才有可能得出那個指標。比如說,人們是不是更有可能在週一或週五買衣服?不良品的產生率是否跟生產線有關聯?


出品MATLAB的MathWorks提供了多種白皮書,顯示出工程師如何利用該工具來尋求統計答案。比如Toyota車隊計畫通過分析風洞試驗和其他實驗室試驗來應對北美NASCAR房車賽,而加拿大的生物診斷研究所正在尋求治療燒傷的最佳療法。


也有很多同類開放原始碼專案項目在處理這類工作,包括像是Octave、Scilab、Sage和前面提及的Pytho函式庫─PySci。所有這些工具都有助於人們進行試圖理解和預測客戶行為的複雜統計分析─這對現在的公司來說已經習以為常的工作。

JavaScript
無論如何,JavaScript都不是一門含糊的語言。不管怎麼說,它都可能是這個星球上編譯次數最多的語言,因為只要人們一上網路瀏覽器,就得下載其中的JavaScript腳本並解譯執行。儘管事實如此,甚至還有越來越熱門,基於Ajax的精巧Web應用出現,但JavaScript卻仍很少被認為能用於重量級的應用。


這方面不乏嘗試的先例,如Netscape早在1996年就試圖讓JavaScript成為其伺服器平臺的通用語言,但最終只在瀏覽器中實現。Aptana,這方面的擁護者之一,在Jaxer沒得到市場的接納後便停止了開發。AppJet,一家側重研發的小公司,計劃使用Java所撰寫的JavaScript庫─Rhino來簡化伺服器端的程式設計,則在2009年被Google收購,現在似乎已經轉向別的項目發展。


儘管如此,JavaScript的新應用仍比比皆是。例如,CouchDB便不使用SQL進行查詢,取而代之的是兩個JavaScript函數:Map函數用來選擇,Reduce函數用來把需要的一切打包。而Node.js則是一個稍後出現,更令人鼓舞的伺服器端JavaScript框架,復活了用戶端和伺服器端程式設計兩全其美的古老夢想,這個框架採用Google為瀏覽器開發的V8 JavaScript引擎,以自行決定輸出資料的格式。


在每個人們需要少量腳本(scripting)功能之處,JavaScript找到了新的用武之地。對於大型應用的開發者來說,這是提供用戶創建子應用的最簡單方式之一。我們可以預期,JavaScript繼續在企業應用上發揮作用,特別是一次只需編寫一小塊程式碼的時候。。

R
如今統計分析越來越倚重於「R」,雖然一些純粹主義者仍沿用其原本的名稱─「S」語言,至於Tibco公司所銷售的商業版卻稱為「S-Plus(S+)」。


未來不可能再出現一個S++,因為S+語言本質上可說是附帶統計計算函數和視覺化統計結果的LISP或Scheme語言強化版本。如果老闆想要電腦從數十億行的日誌檔中尋找模式、叢集和預測性變數,R或S是很受歡迎的解決方案。


就像瑞士小刀一樣,R也是編寫處理巨量資料集合(big data set)數值和統計程式的有力工具─如果從其可處理的資料集合量來看,比擬為瑞士軍用砍刀或許更為適合。Tibco的子公司─Spotfire的S+產品高級主管Lou Bajuk-Yorgan說,該軟體有不少使用者主要是將其用於研究商業經營或工程項目如何有效或為什麼失效。另外還有一個例子,則是用該軟體分析天氣模式,以確定安裝風力發電機的最佳地點。

Erlang
你的伺服器需要同步回應許多獨立的併發訊息嗎?你需要把這些請求分發到不同的CPU或位於世界各地的伺服器上嗎?在實務上,這會是企業運算中最難定義的部份。而Erlang,由Ericsson Computing Laboratory科學家發明的開放原始碼語言,則擅長處理這些任務。

這種語言把較少副作用的傳統函數程式設計與用來編譯生成機器碼的現代虛擬機器結合在一起,其特殊的語言結構會強迫程式師,以易於擴展到多核和多機器上的方式撰寫程式碼。現在不僅有很多用Erlang來開發的Web伺服器和CouchDB,而許多以JavaScript替代SQL語法來開發查詢語句的資料庫,也多半是使用Erlang來撰寫。

CouchDB只是個開端,目前有許多處理「巨量資料」的專案管理者正構建具備強大延展性,並可存儲大量資料的系統。如Hibari,這套來自Gemini行動公司的開放原始碼專案項目,可提供失敗後能自動恢復鍵值對應一致性,並具備相當延展性的儲存叢集。而函數程式設計結構,則能使創建可同時有效處理多個連接的大型應用,變得更為簡單。

Cobol
稱Cobol為小眾語言也許不太公平,因為它畢竟曾經一度是商業應用的主流語言。以在早期大型機上發現了第一個軟體錯誤而聞名的Grace Murray Hoppe於1959年主持創建了這套語言,之後進行了幾百次的改進,這使得今日的Cobol程式師可以使用物件導向擴展、自我修改的程式碼,以及其他許多程式設計的噱頭。


但這些改進並未使Cobol贏得某些圈子的尊重,正如著名的電腦科學家Edsger Dijkstra所言:「使用Cobol等於摧殘心靈,其教學應視為刑事犯罪。」但大型主機廠商並不理會這一點,仍就在繼續發展Cobol。如IBM發佈的Cobol 4.2企業版,但它可以很容易地被編號為147.2甚至是588.3。Cobol程式師喜歡這門程式設計語言類似自然語言的語法,即由名詞和動詞構成從句和主句─一種可令人聯想到Ruby的技術。


儘管很少有學校再給新程式師教授Cobol,但這種語言還是尚未退役,因為有不少公司仍在繼續投資其Cobol應用。根據Dice.com求職網站的一次最近職位搜索顯示,有580份工作提及Cobol,而1,070份提及Ruby。大部分的職位似乎涉及財務(資產管理)和門診掛號統計(醫療資訊化)。雖然這是一些首先採用電腦進行幕後處理的領域,但有些工作仍然得需要人來處理。


運行在JVM或.net運行環境的Cobol版本,使得企業從大型主機移植程式碼到Linux系統成為可能。想使用更便利的IDE整合式開發環境的Cobol程式師,可以搜尋Eclipse的外掛程式─這是一個有獲得新支援的計畫項目。

CUDA extensions
作為可程式化的顯示卡大規模平行作業的函式庫,CUDA extensions並非純技術意義上的語言;本質上它僅是C語言的延伸。不過,一些重量級程式師為了在遊戲中渲染逼真的血液飛濺畫面,開始嘗試大規模平行架構;而另一方面,這些大規模平行運算再編碼迴圈的存在,也意味著程式設計師得重新考慮許多既有的C或C++基本程式設計規則,這些都讓CUDA extensions顯得更有價值。

一般會採用CUDA extensions的場合有機器視覺、大量模擬和巨量統計運算等應用項目。而大規模平行計算所自然造成的許多資料分析問題,則使得GPU運算潛力不容忽視。從Nvidia公司最近的一次研討會上,我們可發現該公司正致力將CUDA的應用範圍延伸到包括計算流體力學、電腦視覺、資料庫和資料探勘、金融和分子動力學等利基市場。從那份長長的名單就足以解釋:為什麼它會讓重量級程式師很感興趣。

「很明顯,GPU的發展已達地球逃逸速度。」(譯註:地球逃逸速度即太空船飛離地球的最小初始速度,又稱第二宇宙速度)。Dan Vivoli 說這句話的意思,是指GPU的應用已經不再局限於3D遊戲等領域,而有了更廣闊的發展空間。Nvidia的高級副總裁Dan Vivoli在Nvidia會議上說,在科學家發表了關於為什麼GPU的平行電腦機制能在這些領域有效的論文後,「現在圖形處理晶片的應用,應該已經遍佈所有科學學科和工業領域。」