2013 年 3 月,在紐約所舉辦的 Structure : Data :: Guru Paneled 專家座談會議上,請來目前產業界的領導廠商,暢談他們在實務上所遭遇到的問題,以及對資訊科學未來發展趨勢的看法。本篇文章中提及幾個在座談會議上備受關注的程式語言,提供給已經在寫程式、想要學習寫程式,以及對此議題有興趣的讀者參考。

程式開發人員總是著迷於最新與可能產生典範移轉的技術與工具。無論是程式語言、編譯器/直譯器,以及平台的發展,都期望它們好還要更好,而且,不只是要能應用,最好還能自己開發出 Killer Application(殺手應用)的產品或服務。

然而,程式開發的工具總是隨著消費者的喜好與創新技術的演變,導致受歡迎的情況總是上上下下。例如,這星期的調查結果可能是 Scala 位居暢銷排行榜榜首位置,下星期就異主為 Go 語言成為榜首。

  • MapReduce 軟體架構與 Sawzall 語言用來處理大數據處理

為了解決大數據(Big Data)資料處理問題,Google 提出了 MapReduce 軟體架構,將資料處理過程分成兩個可以並行化處理的階段:Map 和 Reduce。

Map 是把大資料拆成有規律的小資料(規律,是指把資料以 key-value 格式備用);而  Reduce 是彙整,也就是彙整統計所有相同的 key 出現的次數。但是,使用 MapReduce 撰寫程式不同於過去的方式,因為資料來源多且複雜,使得重複性的基本操作普遍存在,為了避免這些問題,Google 提出了 Sawzall 語言。

Sawzall 屬於腳本語言(Script Language),主要用於對大規模分散式資料進行處理。另一個常被拿來與其比較的是 Yahoo 所推出的 Pig 語言。

Quantcast 的總監 Silvius Rus 讚揚 Sawzall,是宣告式語言(Declarative Language)與程序性語言(Procedural languages)之間的橋樑。

Metamarkets 的執行長 Michael Driscoll 是會議的主持人,接著解釋為什麼 Silvius Rus 所言是重要的。他提出,宣告式語言(Declarative Language),是由一群宣告所組成。宣告是一種符號邏輯,是一些推理的事實或規則,而不是指定敘述或控制流程,主要目的是推論(Inference),屬於人工智慧的高階語言。程式設計師只要描述 「做什麼(What to do)」,而不需要告訴電腦要「怎麼做(How to do)」。

程序性語言(Procedural languages),是由一連串順序性的敘述所組成,主要概念是透過指定運算改變變數的狀態以完成所要執行的工作。由於程式設計師必須用敘述描述問題的解決步驟,所以,聽起來很像在做數學題目。

Sawzall 在宣告式語言(Declarative Language)與程序性語言(Procedural languages)之間做了很好的調適,它是一個功能很好,且具有影響力的程式語言,而且它在 MapReduce 平臺上運行的很順暢。

  • Kafka 和 Storm 是訊息處理利器

Kafka 是一個用於截取與管理資料流(Data Stream)的即時框架(Real-Time Framework),也就是訊息發佈與訂閱的分散式管理系統。像 Twitter 和 Square 就是用 Kafka 來做日誌檔的管理,以便即時監控與處理事件的發生。

Storm 則是用於處理這些訊息資料流的框架,它與 Kafka 之間的關係,就像是 Hadoop 分散式系統與 MapReduce 之間的關係,也就是 Kafka 用來儲存訊息,Storm 則用來處理這些訊息,但是,Kafka 和 Storm 的速度即時多了。”

  • Clojure 是應用在 JVM 上的程式語言

Clojure 是一種函數式語言(Functional Language),是由函數呼叫指令所形成的運算式所組成。Clojure 語言是 Lisp 語言家族中的成員,而 Lisp 語言最早是在 20 世紀 50 年代末,由麻省理工學院(MIT)為了研究人工智慧而開發的。Clojure 和其他 Lisp 家族語言的不同是,它可以執行在 JVM(Java Virtual Machine,用來執行 Java bytecode 的虛擬機器)上,因此可以直接使用 Java  函式庫。

(資料來源:Gigaom;圖片來源:mutednarayan, CC Licensed)