Pattren:樣式、模式或範式

幾天前買了侯捷的《重構-向範式前進(Refactoring to Patterns)》這本中譯書,本書的原作者是 Joshua Kerievsky(約書亞.克里夫斯基),內容就像斗大的標題一樣,即是如何運用 Refactoring(重構)的技術,逐步朝向 Design Pattern(設計樣式)的技術目標推進。其實從 Martin Fowler(馬丁.佛勒)所著的《Refactoring:Improving The Design of Existing Code》這本書(中譯本為《重構--改善既有程式的設計》;譯者為侯捷)裡面就可見端倪,而在克里夫斯基的《Refactoring to Patterns》裡面更把這一點發揚光大。但是,在我這篇文章裡並不談這項技術的內涵,而是要談談「pattern」這個英文字的翻譯。

為什麼要談「pattern」這個字呢?因為令我感到有趣的是這個字的術語共有三種。侯捷習慣採用「範式」,例如《重構-向範式前進(Refactoring to Patterns)》;台灣部分學者和中國大陸普遍的譯法為「模式」,像是葉秉哲的《物件導向設計模式》,或是蔡學鏞翻譯的《深入淺出設計模式》;至於像我個人,或是趙光正等人,像是趙光正的譯作《UML與樣式徹底研究(Applying UML and Patterns)》,或林昆穎吳京子的《敏捷軟體開發:原則、樣式及實務》,就選擇使用「樣式」一詞。

換句話說,在台灣「pattern」這個字可以為「模式」、「範式」或「樣式」,而會有這種現象,主要是譯名不統一,而之所以無法統一,就在於翻譯這個字的每個人想法不同所致。由於我不想評斷每個人想法的優劣,因此,在這裡我僅就我個人的見解,來抒發一下我個人的觀點。

軟體「Pattern」(樣式)這個概念,最早要追溯到 1987 年,當時 Ward CunninghamKent Beck 這兩人在一起用 Smalltalk 從事設計使用者介面的作業,過程中他們發現克里斯托佛·亞歷山大(Christopher Alexander)所提倡的建築模式語言(Pattern Language)這個觀念也可以運用在軟體開發,因此提出了軟體樣式的概念,Kent Beck 他們兩人合寫了《Using Pattern Languages for Object-Oriented Programs》(活用物件導向程式的樣式語言)這篇文章(發表於 OOPSLA'87 in Orlando),並發展出五個樣式語言來指導新手。過了不久,Jim Coplien 著手搜集 C++ 語言的慣用法(idioms),把這些習慣用法當成是樣式。而 1990 年在歐洲所舉辦的 OOPSLA 會議,由 Bruce Andreson 主持的研討會裡,Erich GammaRichard Helm 等人開始談論有關樣式的話題。1991 年 Jim Coplien 發表《Advanced C++ Programming Styles and Idioms》(進階 C++ 編程風格和慣用法)這本書,也著手研究有關企業組織方面的樣式(organization pattern)。

在 1993 年之前,像是 Jim Coplien、Doug Lea、Desmond D'Souze、Norm Kerth、 Wolfgang Pree、Erich Gamma、Peter Coad、Bruce Andreson、Ralph Johnson、Ward Cummingham、Ken Auer、Hal Hildebrand 等人不僅積極參與有關樣式會議的討論,也不斷搜尋、研究各種樣式,甚至有些人還把所發現的樣式發表在期刊上。到了1993 年 8 月份,在美國中部科羅拉多州山區度假村(位於落磯山麓),由 Kent BeckGrady Booch 召開第一次有關樣式的正式會議,而上述的主要人物也都參加了這次會議,他們在一起討論如何把亞歷山大(Alexander)的模式觀念與物件導向觀念結合起來。最後,決定以 Gamma 的「設計樣式」研究成果為基礎,並繼續努力研究下去。自此以後,山邊小組(Hillside Group)就這麼成立起來。隔年 8 月 4 日,於美國伊利諾州阿雷頓公園(Allerton Park)這個地方由山邊小組發起第一屆 OO Pattern 世界性會議,稱為「Pattern Languages of Programs」,因為在 1994 年舉辦,所以簡稱為 PLOP'94

1995 年 Erich Gamma 等人(Gof)出版《Design Patterns: Elements of Reusable Object-Oriented Software》這本書(中譯本即是葉秉哲的《物件導向設計模式》),成為 1995 年最搶手的物件導向書籍,從此樣式的議題也越炒越熱,POLP 會議每年在美國舉辦一次,與會人數也越來越多,歐洲和其他各國也陸續召開類似的會議,像歐洲就稱為 EuroPLOP。另外,議題也不限於程式設計,擴展到軟體分析、軟體程序 ... 等範圍。

由於軟體樣式(Pattern)的概念是源於亞歷山大建築模式語言,因此大多數人都會以建築的觀點來討論軟體樣式。儘管蔡學鏞在《Design Pattern 新解》這篇文章裡,認為『

許多人一講到 Design Pattern,就會扯到什麼建築設計,因為他們全都是看四人幫的「Design Patterns」經典本的解釋,沒消化就照單全收。 如果不能用更生活化的方式解釋 Design Pattern,我會懷疑他們是不是真的瞭解 Design Pattern 的真義。
』反對把建築模式軟體設計樣式畫上等號,然而,要解釋我為什麼認為「pattern」這個詞要譯為「樣式」,免不了在後面卻必須談談建築。

當然,要解釋這些字義,需要一些工具,中文方面我使用的是教育部的《重編國語辭典修訂本》,而英文的部分,我使用《線上英漢字典》。首先我們查詢中文裡「模式」、「樣式」、「範式」這三個詞義。「模式」解釋為「標準形式」,相關的用詞有行為模式文化模式奧會模式等等。「樣式」方面的解釋為「樣子、形式」,相關的用詞有複合樣式(一種古代建築形式)。至於「範式」就找不到了,因為在台灣方面這是侯捷的新名詞。從相關用詞來看,模式著重在某種特質或行為在環境中作用的結果,或是社會普遍公認並共同遵守的行為及制度,屬於比較潛移默化的、心理的、非視覺感官方面的。而樣式則不同,著重在視覺上可直接看到、可接觸到、可感受到的。而侯捷的範式,理應可以解釋為可成模範的、可供效法的方式。

接著我們看看「Pattern」字義的解釋,我習慣使用英英而非英漢字典,這樣比較能貼近原始的意思。運用線上英漢字典查到的結果很多(共 10 筆結果),在此我只列舉第 10 筆幾段:「
  1. a perceptual structure; "the composition presents problems for students of musical form"; "a visual pattern must include not only objects but the spaces between them" [syn: {form}, {shape}]
  2. a customary way of operation or behavior; "it is their practice to give annual raises"; "they changed their dietary pattern" [syn: {practice}]
  3. a decorative or artistic work; "the coach had a design on the doors" [syn: {design}, {figure}]
  4. something regarded as a normative example; "the convention of not naming the main character"; "violence is the rule not the exception"; "his formula for impressing visitors" [syn: {convention}, {normal}, {rule}, {formula}]
  5. a model considered worthy of imitation; "the American constitution has provided a pattern for many republics"
  6. something intended as a guide for making something else; "a blueprint for a house"; "a pattern for a skirt" [syn: {blueprint}, {design}]
  7. the path that is prescribed for an airplane that is preparing to land at an airport; "the traffic patterns around O'Hare are very crowded"; "they stayed in the pattern until the fog lifted" [syn: {traffic pattern}, {approach pattern}]
  8. graphical representation (in polar or cartesian coordinates) of the spatial distribution of radiation from an antenna as a function of angle [syn: {radiation pattern}, {radiation diagram}]
」這些解釋大半都偏向於視覺上的,可以看得到的圖形、標誌、藍圖、...等。比較特殊的是第二條釋義「行事的作風(習慣方式)」,第四條釋義「把某種事物視為標準的範例」,還有第五條解釋成「值得仿效的榜樣」。但是無論是行事作風、標準範例、值得仿效的榜樣,基本上還是看得見的。「pattern」與「mode」這個英文字不同,mode 比較貼近中文裡的模式,而 pattern 則比較近似樣式的解釋

至於亞歷山大提出的模式語言是個什麼概念?我們從他在《建築的永恆之道(The Timeless Way of Building)》這本書裡所論述的可見端倪。他說:建築設計就像受精卵逐步分化的發育過程一樣,是由整體往下到細部設計的過程,經由這種「由粗到細」的設計方法,建築物就會產生某種設計的風格與文化。而這些建築設計,是以 Pattern(建築模式)來描述,模式收集了所有代表性的問題與其對應的設計方法,這也是「建築模式語言(A Pattern Language)」這本書所提出的概念。在「往前行去,繼續撒種」(刊於當代藝術風─文建會文化環境年專輯2;2002/12)就提到:「
著名的建築設計理論家亞歷山大(Christopher Alexander),在《建築模式語言》(A Pattern language)一書中,曾將其所倡導的建築模式語言稱為「空間的種子」,他說:我們無法設計花,只能種下種子,而模式語言即是空間的種子。... ...。《建築模式語言》就是本指南,是操作手冊,在 253 個模式語言中,從區域規劃到窗台入口設計,提供了人們對於空間的發問以及科學的解答,每一個模式都是一個假設,而基於假設有若干的解決方式,讓人們透過理解營造體系以及設計模式,重新掌握自己生活環境的語言,著手構思和發展自己的語言,小至個人,大至群體,一旦有了共同的語言,城市的鮮活與特色將自有發展。
」換言之,亞歷山大並不是直接告訴人們怎樣設計自己的空間,而是提供一些問題和解決的若干方法,經由個人對於自己空間和環境(像是地方特色)的感受,依循這些實質的感覺提出問題,接著從建築模式語言裡找到相對的問題,並找到適當的設計方法。這是由於建築型式因地而異,若要融入該環境,不能單純採取某種建築樣式。


有關《建築模式語言》這本書的內容,有人比喻成「建築設計字典」,每個 pattern(建築模式)一開始就有一幅照片,表示該 pattern 的原型實例;接著是提出問題,簡述問題的實質;再來是問題詳細的內容,描述該建築模式的實際經驗,為其可行性提供例證;之後是解決方案,這是建築模式的核心部份,其說明上述問題所需各種空間和活動之間的關係,以及解決的方法;最後又是一幅簡圖,以圖形的方式說明解決方案,並把主要的重點都標示出來。由此看來,pattern(建築模式)提供了建築圖形,作為參考用的標準範例,並給予符合該問題的空間設計仿效之用。

在建築用詞方面,像是哥德式、羅馬式、帕拉迪歐式、羅馬科林斯式、...等,就是所謂的建築樣式(Architectural Style)。注意到其所使用的是 Style 而非 Pattern。由於「Style」的英文意思,比較傾向於說明個人或事物的品味風格,或是當代的潮流,加上一般建築物的風格是視覺上的,所以譯為「樣式」。這麼一來,當亞歷山大提出 Pattern Language 時,為了區分之前的差異,所以把 Pattern 譯為模式。有關這一點,建築界在術語這方面,兩岸三地倒還是蠻一致的。

反觀軟體界卻沒這個問題,因此可以把「pattern」正名為「樣式」。我們無可否認軟體 pattern 的觀念是源自於建築模式語言而來,但是就像蔡學鏞所講的,不要有事沒事就把 Design Pattern 扯上建築設計,因此,也不需和建築界一樣,把 pattern 譯為模式。至於侯捷創了「範式」一詞,有標新立異的功效,正如其所主張術語的「突出性」,避免和建築的用詞混淆在一起。其實,三種譯名各有其優缺點,樣式在於表意性較好,而範式有其突出性,至於模式源自建築用詞,多少具有統一用詞的效果。然而,若要我來選擇,我還是會選擇樣式,畢竟模式是建築的用詞,而範式似乎又太獨樹一格,令人卻步,在加上有「範式轉移(Paradigm shift)」一詞(我一般譯為「典範轉移」),其實還是容易混淆。但以現實環境來說,把 pattern 譯為「模式」似乎佔上風,畢竟有維基百科的推波助瀾,對大眾多少帶來一定的影響力。

留言

Michael Tsai寫道…
投「樣式」一票。

只是,考慮到現實面(哪種譯法用的人多),我大部分還是從善如流,譯為「模式」。好比 agile 之於「靈活」與「敏捷」。
朱子寫道…
其實,我也很佩服侯捷的堅持,目前台灣使用「樣式」和「模式」的人數,還算是五五波,但以長期的趨勢來看,恐怕最後會是「模式」勝出,這是我的看法。

這個網誌中的熱門文章

langue ou langage

似水流年(Year Flowing Like Water)