《說文解字》與程式設計
2021-05-23 14:14
周永恒
閱讀(0)
評論(0)
編輯
收藏
《說文解字》,簡稱《說文》,是由東漢經學家、文字學家許慎編著的國文工具書著作,是世界上很早的字典之一。
本文探讨了《說文解字》和程式設計的關系,是一篇技術随想,希望挖掘出兩者的共通之處,可以互薦互惠,更好的了解程式設計。
說文解字
《說文解字》,簡稱《說文》,是由東漢經學家、文字學家許慎編著的國文工具書著作。《說文解字》是中國最早的系統分析漢字字形和考究字源的國文辭書,也是世界上很早的字典之一。
以上是百度百科的解釋,前段時間刷知乎,看到了W雨辰的一篇介紹漢字造字法(指事,象形,形聲,會意,轉注,假借)的文章,其介紹簡單有趣,深入淺出,讀完之後深感漢字造字與程式設計、尤其是面向對象設計有共同之處,寫一篇文章記錄下思路,感興趣的朋友可以過來探讨下。
說文解字的格式
打開詞典網,搜尋“老”字,彈出來的是這樣的:
其格式是這樣的:某字,一張字圖,X也,從XX
比如:
化:教行也。從匕從人,匕亦聲。
型:鑄器之法也。從土刑聲。
改:更也。從攴己。
一般來說,包括四個元素:字,圖,也,從。(可能還有聲)
解字
深入解字,挑一個“改”字來細究下:
改:更也。從攴己。
改字的解釋精簡意赅:攴,觀其形狀,是一根小樹枝的意思。攴己,就是用小樹枝抽自己,為什麼要用小樹枝抽自己?是因為自己欠抽嗎?
——因為[更也]。
換成面向對象的語言:
class 更 {}
class 攴
{
public 更 Do(object o);
}
class 改 : 攴 {}
var o = new 改();
var result = o.Do(new 己())
從攴,從就是繼承的意思。從支己,就是繼承(攴)并調用函數傳參(己)的意思。
這裡有歧義的地方是“更也”,這個“更”不能僅僅做傳回值處理,其更多的是表達了一種差量中繼資料(diff merge's metadata),這個差量中繼資料展現出了目的性:
——鞭策自己是為了更新,這是“改”的本義。
繼續往下展開:
class B {}
class C {}
class A :B
{
public C do()
}
翻譯成說文解字:
A,C也,從B。
又如:
class B {}
class C {}
class D {}
class A :B
{
public C do()
{
this.RaiseEvent(new D());
}
}
翻譯成說文解字:
A,C也,從B,D聲。
順着這個解法,說文解字中有一系列精彩的發揮:
比如前面提到的“老”字:從人毛匕,拆開來看:從人、毛、匕(hua=化),按照知乎上w雨辰的解釋:就是人的毛的化的意思,人的毛可看做頭發,頭發變化了!就是變白了!變白了就是老了!
這樣就通過人——毛——匕的鍊條将“老”的意思解釋清楚,這個令讀者使用“意會”的方式get到字的方法,按照許老的說法:叫做《說文解字》。
換成面向對象的語言:
class 人
{
public object 毛 { get; set; }
}
var ren = new 人();
ren.毛 = 匕;
以程式的角度來看,毛是人的一個屬性,匕是毛的目前狀态值。相當于
{人,毛,匕} => 老
這種把多級的資訊集壓縮到一個平面上,使其變成一個字,這是漢字的一個造字原理。其展開方式來自于讀者的意會:造字時将立體壓縮成平面,了解時在讀者腦子中将平面還原成立體。
象形,指事,形聲,會意,轉注,假借
說文解字提出了六大模式(設計原則):象形,指事,形聲,會意,轉注,假借,其統稱為六書。
用面向對象的語言尋找下對應關系:
一、象形:是最基礎的一種構造,抽象出對象。
object o = new object();
二、指事:指事。用來特指,好比電影中的特寫鏡頭,特指出來令人一看即明。比如“本”是由“木”+“一”構成,這個“一”代表了樹木的根部,用一點(橫)指出來,提醒讀者意會這裡是“本”
在對象内部用“點”式指出某種變化,類似:
o.RaiseEvent();
三、形聲:把兩個或多個對象放在一起來衍生,
“形”:定義了邊界,定義了對象在環境中的外在。
“聲”,類似波,指對象對外能發出的功能。
Class A;
Class B
{
A a;
public void Do { a.do()}
}
按照漢字的解釋,一個對象調用另一個對象的方法,就是借助此一對象讓另一對象發出“聲音”。漢字在這裡的解釋有些意思,聲音無孔不入,一個對象的方法調用,會對系統内的所有對象産生影響,但這種影響從表面難以看出,因對象的表現是用形(彡=光照)來界定的。
好比,一個人聽了一句話,雖然表面上不動聲色,可内心早已波瀾洶湧。
四、會意:使用多重繼承,将兩個意象并列放在一起,令人意會。比如“信”是會意,把“人”和“言”放在一起,令人意會(……人和言放在一起是什麼意思……信的意思嗎?),意會出來的那個意思就差不多了。
Class A;
Class B;
Class C:A,B
相比于程式設計極力避開多繼承,避開菱形繼承,漢字系統就是建立在多繼承的基礎之上,程式設計中is-a是主體,has-a是優選;漢字系統中has-a是主體,is-a是優選。
五、轉注:類似多态,又像函數調用鍊。老,從人毛匕——“人”,調用“毛”,再調用“匕”,這種調用更像是一種連接配接,如何把“人”、“毛”、“匕”用合理性的方式連接配接起來,讓功能本義不變,邊界旋轉,尋找一種可以從一個字注入到下一個字的方法。
class A
{
private B b;
public void Do()
[
b.Do();
}
}
class B
{
private C c;
public void Do()
[
c.Do();
}
}
六、假借:
按照wu雨辰的解釋:
比如“美”是指味道鮮美,但是人長得漂亮怎麼形容呢?比如把人和美放在一起,那就把美假借為了“美麗”的意思了,跟“美”的本義“美味”意思不同,但是有沒有必要再為了這層意思再造一個字形呢?其實沒必要的,把“美”的字形拿過來假借一下,大家自然就明白什麼意思了,“美”每變一個情景,就多一種假借,而且這個假借還讓你看起來不動聲色,後來才有了一字多義。
假借有種類型推斷(匿名類型)的味道,将字還原到本義(将class還原成data、甚至還原成中繼資料metadata),再将其适配到其他字(類型)。
struct Data {}
class A
{
public Data ToDTO();
}
class B
{
public static B FromDTO(Data data);
}
A a = new A();
var data = a.ToDTO();
var b = B.FromDTO(data);
象形,指事,形聲,會意,轉注,假借,這六種設計方式叫做六書。
六書:一曰指事。指事者,視而可識,察而見意。上下是也。二曰象形,象形者,畫成其物,随體诘诎,日月是也。三日形聲。形聲者,以事為名,取譬相成,江河是也。四日會意。會意者,比類合誼,以見指撝,武信是也,五日轉注。轉注者,建類一首,同意相受,考老是也。六日假借。假借者,本無其字,依聲托事,令長是也。”
模型
總結一下:字=中繼資料(形)+職責(音)+實作(義)
其模型猜想如下圖:
漢字是一種象形文字,其和拼音文字相比,保留了中繼資料(圖)。當漢字無法了解(無法溝通)之時,可以還原到圖上來了解,相比于拼音文字,它提供了一種回溯(Recompile)的可能性。
使用者随時可以瓦解一個字,來獲得其原始“意圖”。類似将玩具拆除後重新組裝,這種重組的過程會極大增強人的了解。同理,這個瓦解字以擷取智慧的過程,稱之為《說文解字》。
這種編碼中附帶元資訊的方式,在程式中叫做注釋,在溝通裡稱為意圖,在設計上看成背景,它通常與主資訊呈現一種分離态。而在漢字系統中,形音義“三位一體”,隻有一個字的形音義确定之後,它才會長久存在下去。
舉個例子: 需求——它由需和求兩個字組成。
需字:
求字
需字的圖畫:天在下雨,人被淋濕。
求字的圖畫:一隻伸長的手。
需和求兩個字組成詞語(需求),其意象發生了交會,了解需求,即可以從詞義入手(查詞典),也可以回到中繼資料,直接從圖上入手(說文解字):
需求從圖上來看,出現了三個元素:雨、人、手。
分别取反義:
1. 天不下雨,不叫需求。
2. 人沒被淋濕,不叫需求。
3. 沒伸出手,不叫需求。
将中繼資料解釋(編譯):
1. 市場環境沒發生變化,不叫需求——(雨)。
2. 客戶沒傷到切身利益,不叫需求——(人)。
3. 客戶沒主動要求,不叫需求——(手)。
将此解釋再次抽象:
1. 天時不對,不叫需求。
2. 地利不對,不叫需求。
3. 人和不對,不叫需求。
這是一種看圖說話,是一種通過中繼資料了解,每個漢字都對應一張圖,任何可以用漢字描述的概念(比如封裝、繼承、多态),都可以越過詞義,直接從字圖(中繼資料)釋義,相對于詞義,其字義往往攜帶了更精髓的最初的元資訊。
如:
封裝:封=圭+寸(圭,諸侯的玉圭,代表責任;寸,恭恭敬敬手持,代表守責任)
裝=衣+壯(衣,上身穿的叫衣,下身穿的叫裳;壯,大也)
封裝要滿足四個元素(圭、寸、衣、壯),看圖說話,封裝兩字有這樣的啟示:
1. 要有責任。
2. 要守責任。
3. 封裝隻封上半身,要“下半身失蹤”,如同并蒂蓮一樣,要有通過下半身(更底層存在)互通(交流變化)的可能性。
4. 有聚合性,其聚合性呈放大趨勢。
相比于拼音文字,象形文字更大的保留了其中繼資料性,提供了一種重構的更大的可能性。
漢字系統
漢字的系統設計非常靈活,一個字既可以充當另一個字的基類,又可以充當另一個的方法、甚至可以是另一個字的中繼資料,其合理性來自于群體認證:
一個字(對象)不是合理才能應用,而是因為應用才産生合理。
漢字的意會方式是一種中繼資料交流方式,意會的過程是一個先編譯後執行的過程。如果把兩個人比做兩台電腦,在它們的網絡通信中,不使用RPC調用,不使用Restful方法,而是在傳輸中直接傳送中繼資料,接收方得到中繼資料,在其本地進行(無厘頭)編譯,以一種本地熱重載(建立類型、JIT編譯、解釋執行)的方式完成溝通。
意會是一種“大資料”編譯。
這種中繼資料通信方式可以充分的解耦,其有很高的擴充性,其本地編譯的效果取決于“常識”、“經驗”、“情感”,像是一種“大資料”編譯,其注重的是不要喪失“不确定性”,不确定性是确定性的背景,它為确定性提供了生命力以及演化的可能性,它使得概念向本義收斂與邊界擴張兩個次元變化。
總結
本文讨論了《說文解字》與程式設計的關系,但牽強附會的地方很多,為了尋找對應關系,很多地方都是(無厘頭)編譯——開局一張圖,内容全靠編。
但偉大系統總有共通之處。
作為流傳了幾千年、上萬年的文字系統,其内部有很深的智慧存在。程式設計,有很多地方可以向漢字系統學習。抛磚引玉,希望兩者能夠借鑒、互通、融合——希望風吹來的地方,都能有陽光晃耀。
作者:周永恒
出處:http://www.cnblogs.com/Zhouyongh
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
- 分類 技術随想
-
标簽 中繼資料
, 說文解字
, 程式設計
, 大資料編譯