終極遺產程式碼

想像有一個龐大的軟體專案正在運行。它已經執行了138億年,有著兆級的連結組件,而原始程式設計師卻無處可尋。沒有文件說明,沒有 README 檔案,也沒有註解的程式碼。這就是我們的宇宙。我們用一生試圖理解它如何運作,預測它會做什麼,並理清其複雜性。
現在,如果有一本古老的書籍,經常被視為神祕的占卜書,實際上卻是另一回事呢?如果它是一份這個宏偉宇宙軟體的高階系統設計文件呢?這就是易經,或稱「周易」。本文主張,我們作為程式設計師和系統思考者,可以透過物件導向程式設計(OOP)的原則來解碼其核心邏輯。我們可以重新思考易經,不是魔法,而是一個智慧的現實模型。
由 0 與 1 組成的系統
易經的核心建立在二進位基礎之上,這比現代計算早了數千年。系統使用兩種主要的線條類型:實線,陽(⚊),以及斷線,陰(⚋)。以我們的角度來看,映射是直接且簡單的:陽為 1(主動、創造、開啟位元),陰為 0(被動、接納、關閉位元)。這是基礎的易經二元碼,是建構複雜系統的簡潔而強大起點。
我們的程式設計探索
我們這裡的目標不是占卜,而是逆向工程。我們將展開一場探索之旅,將易經的64卦——其主要的象徵結構——對映為「通用類別」與「物件」系統。透過這樣做,我們希望建立一個理解變化模式的新邏輯架構,成為程式設計師解讀存在物件模型的指南。
核心邏輯
在將易經對應到物件導向之前,我們首先必須了解其基本結構。系統的美在於其擴展性,從簡單的二元選擇建構出複雜的描述模型。這是一堂關於組合如何擴展的精彩示範。
基本的「位元」
整個系統始於二元對立,是普遍定義彼此的相反概念。
-
陽 (⚊)代表主動、創造與起始力量。在我們的模型中,是1。 -
陰 (⚋)代表被動、接納與滋養力量。在我們的模型中,是0。
這些是宇宙機器的基本位元。易經中描述的每一個複雜狀態,都是這兩個簡單值的組合。
建構「位元組」
從這些單一位元,系統創造其首個有意義的資料結構:三畫卦(trigrams)。三畫卦是由三條線堆疊而成,或視作3位元的數值。有三個位置,每個位置可以是陰或陽,因此有 2³ 即 8 種獨特組合。這八個三畫卦代表自然與家庭的基本類型——現實的主要組成元素。
| 三畫卦 | 符號 | 二進位 | 意義 |
|---|---|---|---|
| 乾 (Qián) | ☰ | 111 | 創造 |
| 兌 (Duì) | ☱ | 110 | 喜悅 |
| 離 (Lí) | ☲ | 101 | 附著 |
| 震 (Zhèn) | ☳ | 100 | 喚醒 |
| 巽 (Xùn) | ☴ | 011 | 溫和 |
| 坎 (Kǎn) | ☵ | 010 | 險陷 |
| 艮 (Gèn) | ☶ | 001 | 靜止 |
| 坤 (Kūn) | ☷ | 000 | 柔順 |
完整的「暫存器」
為了建立更詳盡且具描述性的系統,易經將兩個三畫卦結合,前後重疊,形成一個六畫的形象,稱為六十四卦(hexagram)。這是一個6位元系統,任何程式設計師都知道,6位元可產生 2⁶,即64個獨特組合。這64個六十四卦構成易經核心,代表完整的典型情境、過程和變化狀態集合。
這並非現代將二進位強行套用於古代文本。這個連結既歷史悠久也極為深刻。1703年,偉大數學家與哲學家萊布尼茲(Gottfried Wilhelm Leibniz),現代二進位算術之父,發表了《二進位算術說明》一文。他曾與在中國的法國耶穌會士若望博韋特(Joachim Bouvet)通信,博韋特寄給他64卦的排列。萊布尼茲驚嘆於見到一套完整、秩序井然的二進位系統早已存在。這古老的易經二進位碼直接驗證了他的理論,證明計算原理早就編織於遠比我們所建造的機器更古老的模式中。
宏偉的比較
確立了二進位基礎後,我們現在可以應用核心比較:宇宙作為一個物件導向系統。在OOP中,我們透過定義 類別(事物的藍圖)來建模世界,再用它來創建 物件(這些事物的具體實例)。這些物件擁有 屬性(資料)和 方法(行為)。這種方法提供了一個強大的視角來審視易經。
道作為命名空間
在程式設計中,命名空間是一個容器,用來群組相關程式碼並防止命名衝突。把 道(或無極,未顯化的潛能狀態)想像成最終極的頂層命名空間。它是抽象的、靜態的類別,所有現實皆由它而來。它包含所有類別和物件的潛能,卻不是一個可被實例化的物件。它是宇宙的 System 函式庫,是一切運行時的無聲背景。
六十四卦作為「類別」
這裡我們達到獨特觀點的核心。64個六十四卦不只是64個靜態符號代表64種情境。它們是 類別定義。每一卦是特定類型典型過程或情境能量的藍圖,定義與該類型相關的屬性及潛在行為。
例如,第一卦,☰☰(乾),是 創造 類別。它的定義概述純粹、無限擴張的起始力量。它是起始、突破與領導的類別。相較之下,第四十八卦,☵☴(井),可視為 基礎設施 類別。它定義了穩定、不變並賦予生命的資源,服務於群體。其屬性涵蓋深度、可靠性與維護。
情境作為「物件」
若卦是類別,那麼任何現實情境即為 物件——這些類別的具體實例。我們所面對的挑戰、管理的專案,或處理的人際關係,都是從64個通用藍圖中創建的物件。
當你創業啟動時,可以這樣創建一個 創造 類別的物件:
my_startup_launch = new Creative();
如果你的團隊正經歷溝通不良及士氣低落的困難階段,該情境可以是 險陷 類別(第29卦,☵☵)的實例:
current_team_dynamic = new Abysmal(Water);

我們親身體驗過在除錯生產環境關鍵問題時的情境。該系統是由多個微服務組成的複雜網絡,一個錯誤從它們不可預測的交互中浮現。情況看似混亂且無法解決。用這個視角觀看,它成為第45卦,☱☷(萃)的實例——「聚集」。這改變了我們的觀點。它不再是單純的混亂,而是一個複雜元素的集合。將它視為 Gathering 類別的物件,使我們停止當它是隨機混亂,而改為尋找關鍵的「王」,即其他元素聚集的中心。結果直接引導我們找出一個隱藏的競態條件,這才是問題的真正根源。
剖析「六十四卦」類別
為了讓我們的 OOP 比較更有說服力,我們必須展示六十四卦內部組件與類別組件的明確對應。六十四卦的結構並非隨機,而是精心設計的資料結構。
屬性即特性
類別擁有定義其狀態的屬性。六十四卦的六條線即為其 屬性。它們在所有意義上是一組六個布林屬性,定義了該被創建物件的具體狀態。
我們可以這樣模型化 Hexagram 類別的屬性:
class Hexagram {
line_1: boolean; // 0 代表陰, 1 代表陽
line_2: boolean;
line_3: boolean;
line_4: boolean;
line_5: boolean;
line_6: boolean;
}
這六個 true/false(或 1/0)值的特定組合決定了物件所屬的 64 個類別之一。例如,擁有屬性 [1, 1, 1, 1, 1, 1] 的物件是 Creative(乾卦)類的實例。擁有 [0, 0, 0, 0, 0, 0] 的物件是 Receptive(坤卦)類別的實例。
作為變爻的方法
這或許是整個比喻中最有力的部分。易經不是一套靜態系統;其名稱意指「變化之書」。這種變動透過「變爻」的概念來編碼。當一個卦象生成時,一條或多條爻可以被標記為「變爻」,意味著它們正處於張力狀態,即將轉變為相反狀態。
在我們的物件導向模型中,變爻是一個 method。這是一個改變物件狀態的函式。當你針對一個有變爻的情況(物件)操作時,本質上就是呼叫方法:hexagram_instance.transform(line_position)。
此方法執行後會引起狀態改變:該條爻的布林值被反轉。這會改變物件的六個屬性集合,代表物件從原始類別被「重新鑄造」到新的類別。原卦象代表當前情況,而變卦則代表未來潛能或變化方向。這優雅地模擬了現實過程導向的本質。
繼承與組合
良好的軟體設計傾向於組合勝過繼承。複雜的物件應該由較簡單、可重用的元件組成。易經的結構恰巧遵循此原則。一個 Hexagram 類別不是一個單一實體,而是由兩個 Trigram 物件組成。
class Hexagram {
lower_trigram: Trigram;
upper_trigram: Trigram;
}
這 64 個複雜類別是由 8 個較簡單、可重用的元件調色盤組成。卦象的意義來自其兩個組成三爻卦之間的互動──內外、下上兩個層面。這與我們使用簡單可重用的網頁元件構建複雜用戶界面,或用模組化函式庫打造複雜應用程式的原理相同。
讓我們撰寫些「宇宙程式碼」吧
為使這整個比喻具體化,以下簡單勾勒一個概念驗證的實作範例。這將討論從純理論轉為具體模型,任何程式設計師都能理解甚至擴充。以下偽程式碼使用類似 Python 的風格撰寫以便清晰說明。
類別定義
首先,我們定義基礎的 Hexagram 類別。它將保存爻線,從預設字典(未顯示)查找名稱,並知道如何轉換自身。
# 一個簡化的類 Python 範例
HEXAGRAM_NAMES = { "111111": "Creative", "000000": "Receptive", ... }
class Hexagram:
def __init__(self, lines: list[int]):
# lines 是六條由 0 或 1 組成的清單
if len(lines) != 6 or not all(line in [0, 1] for line in lines):
raise ValueError("一個卦象必須有六條 0 或 1 組成的爻線。")
self.lines = lines
# 從二進位字串查找名稱
binary_string = "".join(map(str, reversed(self.lines))) # 易經爻線自下而上讀取
self.name = HEXAGRAM_NAMES.get(binary_string, "Unknown")
def __str__(self):
# 印出視覺化表示的方法
visual_lines = ["⚊" if line == 1 else "⚋" for line in reversed(self.lines)]
return f"{self.name}\n" + "\n".join(visual_lines)
「擲銅錢」
接著,我們需要一種方法來建立一個代表目前狀況的物件。這與傳統擲銅錢或蓍草來產生六爻的方式相似。
import random
def generate_lines():
# 一個簡單模擬用來產生六個爻和可能的變動
lines = [random.randint(0, 1) for _ in range(6)]
# 為了簡化,此例假設有一個變動的爻
changing_positions = [random.randint(1, 6)] if random.random() > 0.5 else []
return lines, changing_positions
# 讓我們看看目前的狀況是什麼
current_lines, changes = generate_lines()
my_current_situation = Hexagram(current_lines)
觀察變化
最後,我們可以透過呼叫先前建立物件的 transform 方法來觀察轉變的過程。
print("目前狀況:")
print(my_current_situation)
if changes:
future_potential = my_current_situation.transform(changes)
print(f"\n變動爻位置:{{changes}}")
print("轉變為...")
print("\n未來可能狀況:")
print(future_potential)
else:
print("\n狀況穩定,無變動爻。")
這段簡單的程式碼讓整個系統變得具體。我們定義了類別,建立一個代表當下的物件,並呼叫方法展現物件的下一個狀態。
結論:永恆的模式
從物件導向程式設計的角度來看易經的二進位碼,不只是巧妙的比喻。它是一個運作模型,用來理解這個用以描繪變動本質的複雜動態系統。
一個模型,而非魔法
我們需要釐清:這是一個心智模型,而不是字面上斷言宇宙「運作於 Python」。此模型的價值在於它能將古老且看似神祕的系統,轉化為我們日常使用的系統設計中,邏輯且結構化的語言。它解構易經,展現其為一個深奧的信息設計。
建築師的視野
終究,古代聖賢與現代軟體建築師的探索是一致的:洞察複雜系統背後的底層模式。無論我們是在設計分散式資料庫,或是在人生轉職的過程中,理解系統底層結構是與系統合作而非對抗的關鍵。易經作為一個跨越三千年的不朽見證,提醒我們,對優雅且普遍模式的追尋,是刻印在我們意識深處的共同使命。
0 則留言