前往 Aarhus 2011
2011 年 10 月 26 日

goto(以前稱為 JAOO)一直是我最喜歡的會議之一。多年來,他們在維持高水準內容的同時,也結合了有效率且友善的組織能力,做得非常好。因此,儘管我過度參加會議通常會導致會議恐懼症,但當我準備前往前往 Aarhus 的有點複雜的行程時,我仍然感到一絲愉快的期待。
我今年的工作是與 Jez Humble 共同主持了幾場教學課程:關於 持續交付,以及與 Rebecca Parsons 共同主持關於演化式架構。雖然前者已經相當成熟,但演化式架構是我們第一次嘗試這麼做,不過我對成果感到相當滿意。我認為 Rebecca 明年會更廣泛地進行這項教學,非常值得一看。
許多場次都讓我印象深刻。其中一場備受外界關注的是關於 Google Dart 的主題演講,這是一門由 Lars Bak 和 Gilad Bracha 發表的全新語言和虛擬機器。Dart 的主要目的是用來建置瀏覽器內 JavaScript 應用程式。您可以透過編譯成 JavaScript、或透過原始程式碼或編譯後的二進位檔來部署應用程式,並由 Dart 虛擬機器執行。編譯成 JavaScript 可以與目前的瀏覽器進行最大的互操作,但將二進位檔傳送到 Dart VM 可以加快已安裝 Dart VM 的瀏覽器的載入時間。Google 已開放 VM 和語言的原始碼,這應可減少將 Dart 納入瀏覽器的阻力。

Lars Bak 和 Gilad Bracha 介紹了 Dart 程式語言
這門語言是一種保守的物件導向語言,具有類似 C 的語法和單一繼承的物件模型。它最直接的不尋常功能是其類型化方法。它是一種動態類型語言,但您可以在原始程式碼中加入類型。這些類型不會改變編譯器的輸出,但會進行檢查,如果存在類型錯誤,則會產生警告。此外,這些類型可以提供資訊給 IDE,以協助執行智慧型補完等工作。(我很喜歡 Gilad 的名言:「類型檢查器是額葉切除的定理證明器」。)
除了 Keynote 中介紹的內容之外,我尚未深入了解 Dart,但基於這些內容,我喜歡我所看到的。我確信有必要取代 JavaScript。雖然它是一種具備一些強大功能的語言,但它是一種難以使用好的醜陋語言。一位同事最近很好地總結了這一點 - 他參與了一個很好地使用 JavaScript 的專案,但最後後悔沒有使用 CoffeeScript,因為他覺得即使寫得很好的 JavaScript 也不是足夠清楚的程式碼。Dart 看起來更簡潔,而且其部署方法提供了一些明確的優點,可以在使用 Dart VM 的同時,維持與舊瀏覽器的相容性 - 這一點至關重要,因為 JavaScript 在未來許多年的時間裡仍會存在。
另一個預示未來的議程是 Kresten Krab Thorup 關於使用 Riak 在丹麥儲存藥物處方的演講。現有的系統建構在 MySQL 資料庫上,但他們擔心其可擴充性。Riak 的對等式分佈設計為他們提供了一個更好的模型,可以在多個中心執行資料庫。我認為這是一個會持續發展的主題,關聯式資料庫是建構在單一大型伺服器的思維上,但我們越來越看到商品伺服器叢集 - 因此需要重新思考資料儲存。此處方資訊非常適合這種儲存方法,因為資料存取主要是取得病患的完整處方清單 - 這對系統來說是一個自然的 D D D_ Aggregate。
我也發現他們的遷移方法很有趣。此系統自然適合 事件攔截,這讓他們可以使用輸入事件同時填入 MySQL 和 Riak 儲存,測試 Riak 系統是否可以在仍然執行 MySQL 系統的同時處理更新負載。
在過去一年左右的時間裡,很明顯地,DatabaseThaw 正在緩慢但穩定的發展中。越來越多的人開始意識到資料儲存不再是 SQL 資料庫的專利,而是一個需要思考的選擇。沒有一種資料儲存解決方案適合所有情況,因此你必須選擇符合你情況的那一種 - 但回報是一個更簡單,因此更具生產力的程式設計模型和/或更好的橫向擴充性。當客戶會因 NOSQL 選項獲得更好的服務時,與另一群人討論因不適當使用關係技術而受到阻礙,這令人沮喪。
我也追上了 Graham Tackley 和他們在 The Guardian 使用 Mongo 的情況。顯然,Mongo 對他們來說運作得非常好,並且是他們未來工作的有力選擇。我聽到了 Graham 關於他們在新的專案中使用 Scala 的演講,以及他們對這門語言作為從 Java 環境開發的進步步驟的正面經驗。到目前為止,我已經聽過一些這樣的說明,足以讓我感覺 Scala 是在 JVM 平台上開發組織的嚴肅選擇。
我將提到的最後一場會議是 Tudor Girba 關於 Moose 的演講 - 一個用於評估程式碼庫品質的工具。我斷斷續續地聽過 Moose 幾年了。Erik Dörnenburg 在我們擴展在 系統健康檢查 中的工作時談到了它。Tudor 的演講是一場相當精彩的表演,足夠精緻,可以與 Neal Ford 最好的簡報相提並論。
這個工具也很迷人。從一個非常精緻的示範中很難看出使用一個工具有多容易,而 Moose 顯然是一個非常精密的工具(而且這樣的工具通常很難學習)。它讓我印象最深刻的不是它明顯適用於評估程式碼,而是它體現了一種通用工具哲學,這是 Lisp 和 Smalltalk 社群許多思考的核心,但後來卻枯萎了。
此哲學將工具使用者視為預期會親自修改工具內部結構,以符合其需求的人。為達成此目的,此工具不僅開放其原始碼供檢視和修改,也讓使用者可以輕鬆地進行增強,並快速獲得回饋。最常見的範例就是 emacs,它鼓勵使用者將它視為可塑的工具。Moose 以 Smalltalk 編寫,而相同的哲學在 Tudor 的演講中也展現得淋漓盡致,讓你可以快速地透過實作新函數,在幾分鐘內將一流的功能建置到工具中。
這種可塑的工具並沒有廣為流行。它們確實需要使用者熱切地學習如何讓工具發揮真正的效用,但這樣的努力會帶來回報,因為此工具可以真正地根據個人的需求量身打造。