語意擴散

2006 年 12 月 14 日

我習慣創造新詞彙來描述我在軟體開發中看到的事物。這是此領域作家間的常見習慣,因為軟體開發仍缺乏許多有用的術語。建立術語時遇到的問題之一是,術語容易在語意擴散的過程中失去其意義,這又是一個我們術語中潛在的新增項目。

語意擴散發生在某個字詞由個人或團體創造時,通常有相當不錯的定義,但之後在更廣泛的社群中傳播時,卻讓定義變得薄弱。這種薄弱化有失去定義的風險,並讓術語失去任何用處。

我寫這篇文章的部分原因是,我看到語意擴散目前非常公開地發生在兩個術語上:「敏捷」和「Web2.0」。這兩個術語都是最近幾年創造的,且都有冗長的定義。(敏捷有敏捷宣言,以及宣言作者撰寫的許多書籍和文章。Web 2.0 有 Tim O'Reilly 撰寫的絕佳定義文章。)然而,這兩個術語在該領域都面臨許多扭曲。我遇到一些人認為敏捷方法表示你不應該做任何規劃,也有人認為 Web 2.0 僅與使用 AJAX 有關。(一個更個人的案例是RefactoringMalapropism,但暫且不談這個。)

語義擴散基本上是傳話遊戲的延續,其中一群與術語創始者不同的人開始討論該術語,卻不注意遵循原始定義。這些人會被另一群人聽見,然後繼續加入自己的扭曲。經過幾次這樣的傳遞,很容易失去術語的許多關鍵含義,除非你提出回到創始者的觀點。具有諷刺意味的是,最容易受到這種影響的是流行術語。當然,這是不可避免的,因為不受歡迎的術語較少人會建立傳話鏈。

語義擴散往往與一個想法的炒作階段相吻合。當一個想法變得有吸引力時,很多人會...嗯...被吸引。許多這些追隨者會討論這個術語並教授它。如果這些人不注意回到源頭,傳話遊戲就開始了。流行的想法也主要通過更容易導致誤解的通訊媒體(例如寫作)傳播。許多追隨者沒有足夠的幸運直接與創始者合作,因此無法直接向他們學習。

與流行性相關的指標是可取性。聽起來不錯的詞可能更容易受到語義擴散的影響。「敏捷」聽起來像是你肯定想要的東西,敏捷的反義詞根本沒有吸引力。誰會想仍然只是網路的 1.0 版?Kent Beck 注意到了這種影響,因此故意選擇極端程式設計作為名稱,因為它本身不那麼令人嚮往:「極端」通常被用作貶義詞。使用一個不那麼令人嚮往的術語可能會減少語義擴散,但我認為它無法完全避免這個問題。畢竟,我們看到語義擴散發生在「物件導向」這個中性術語上。

語義擴散更可能發生在廣泛概念而不是硬技術上。Ruby on Rails 目前炒作很多,但由於它是一個具體的工具,因此它的含義很難被削弱。與敏捷更廣泛的價值觀和原則清單相比,極端程式設計的具體實務清單也可能減少這個問題。

語義擴散是一個痛苦的過程,特別是對於那些發現這些想法有用的人來說。目前我看到這兩個術語都出現絕望的跡象,敏捷世界中的一些人正在討論放棄「敏捷」這個詞。

我對這一切比較樂觀,主要是因為我見過這種情況。曾經有一段時間,幾乎任何軟體工具或方法都被描述為物件導向。但現在,多年過去了,OO 的基本含義已經被相當充分地理解了。我看到同樣的事情發生在模式上。因此,術語確實會恢復其語義完整性,而當前的擴散並不一定意味著術語會失去其含義。我也比較不擔心,因為我預期會發生這種情況,而且我之前也經歷過這個過程。我認為這是想法變得流行的必然結果,儘管它存在問題,但我更喜歡炒作而不是無知。一個最後的安慰想法是,一旦同樣不可避免的反彈到來,我們就可以重新關注原始含義。在我寫這篇文章時,讓我感到安慰的是,我想不出一個完全失去其含義的術語,儘管我確信它發生過。(SOA 不算,因為我認為從一開始就沒有公認的含義。)

無論最終結果如何,我們仍然必須在發生時應對語義擴散。一種選擇是放棄,放棄擴散的術語並選擇一個新的術語。我不喜歡這個選項,因為新術語只會增加混淆,即使你成功了,你最終也會為新術語重複這個過程。因此,我比較喜歡重新闡述當前的術語,並指出那些理解真正含義的人。

進一步的複雜性在於,這些術語也會發生變化。我確信,如果你詢問敏捷宣言的最初十七位作者,他們今天會提出不同的文件。(更不用說該小組並非是當今代表該運動的最佳小組。)同樣,那些被認為是創始人的人有責任指出這一點,既要談論這些想法的演變方式,又要指出在這種演變中發揮積極作用的新人。(我很高興最初的十七位 「讓船航行」 走自己的路。)讓我們不要忘記,在堅持明確的定義和教條主義之間存在微妙的平衡。

所有這些都是艱苦的工作,但值得為一個好的術語而奮鬥——特別是因為你需要的唯一子彈就是文字。

語義反轉

語義擴散的一種常見形式是術語最終表示與其被創造出來所描述的含義相反的含義。例如,「DevOps」變成一個獨立運營團隊的名稱,或者「最小可行產品」被用於 1200 萬美元的首次發布。Holly Cummins 巧妙地創造了「語義反轉」一詞來描述這種令人擔憂的變體。