《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

前言

一開始了解到這種理論是因為低多邊形厭氧菌老師寫的關於《Cybertext》的讀書筆記中介紹了這一理論。我之前雖有學習過編程,也淺淺的了解過一些索緒爾和拉康的符號學。但還是第一次聽到以符號學理論來理解計算機本質的方法。之後找來了這本由 Peter Bogh Andersen 寫的《A Theory of Computer Semiotics》的電子版,決定學習一下也寫一篇讀書筆記。

我才疏學淺,難免會有學術性錯誤。歡迎各位補充和改正。

《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

計算機和符號學

我們從名字應該不難看出,計算機符號學是一個典型的A學科與B學科的交叉學科(這種交叉學科看起來更像A × B而非A + B)。那麼在思考這個學科是什麼之前,我認為有必要先說符號學和計算機科學到底是什麼。

首先是符號學,這門學科在我看過《符號學 : 原理與推演》里將其比喻為「文科中的數學」。在本書中一言以蔽之: 符號學是研究符號(sign)及其在社會中生活的科學。符號本身可以是任何東西(語言、圖片、文學、動態圖片、戲劇、身體語言等),它對人來說承載著不同的意義。將它比喻為「文科中的數學」其原因就在於符號學可以作為很多學科的理論基礎,例如語言學與符號學的發展就密不可分,神學家用羔羊、蛇、十字架等作為象徵來解讀聖經,藝術家和藝術評論家經常用符號學來解讀藝術作品,精神分析中拉康使用符號學作為理論基礎,社會學家用它解讀人們的生產和消費。值得一提的是,符號學並不是一門統一的「科學」,不同派系的符號學百家爭鳴。重點在於人以符號作為把握意義的方式來研究。

什麼是計算機科學也是個很有意思的話題,在《SICP》公開課(電腦程式的構造和解釋)中,計算機科學被認為是一個極其糟糕的名字。因為本質上來說,計算機科學既非「科學」也不是真的關於「計算機」的。而且,幾何學(Geometry)一開始命名是關於丈量土地的,而我們都知道現代幾何學已經遠遠超出了這個范圍。

《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

計算機科學比起科學更像是一門藝術或者是工程,甚至更像「魔法」,我們所寫的程式語言就像咒語(Spell),命令計算機中的「小精靈」達成我們的目的。計算機科學並不在於研究物質世界的客觀規律而在於有效且高效的達成我們的目的。

計算機科學也並非「計算機」有關,就像物理學中並不只有粒子加速器,幾何學並不只有使用測量儀器。從歷史角度來說,Computer這個單詞一開始甚至指代的並不是機器而是一種職業:專門從事計算工作的人。而我們都知道今天的計算機已經遠超了數學運算能做的事,我們可以用它創造藝術可以用它交流想法。

所以計算機科學,不如說是一門關於關於「過程」和「控制」的學問,這種過程有時候被稱為算法,使用數據來達成我們不同的目的,有的時候我們甚至沒有任何目的,比如康威生命遊戲,我們只是想看看規則帶來的結果。

計算機符號學的重點既是將計算機科學看為一種生產和操縱符號(這麼想的話就更接近神秘學意義上的魔法了)。計算機不光可以處理已有的符號,它還可以通過操作產生新的符號。計算機科學中,結果是嚴格受到數理邏輯為基礎的規則所影響的,但是作為人來說如何認知這些被生產出的符號始終是非規則性的。這幾年經常有用機器學習製造的奇怪圖片,它對計算機而言只是處理「圖像」這一符號的結果,但在人看來計算機創造了「克味兒十足」難以言喻的東西。

《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

符號的雙重生活

需要說明的是,符號學並不能用來審視計算機科學和計算機的方方面面。它無法說明計算機到底是如何生產和操縱這些符號的,只有人可以用符號把握同時可以被計算和處理的符號才能被討論,也就是所謂的「雙重生活」。

符號並不是一個對象所有的特徵,相反,它是解讀這為它賦予的含義。例如我們已經會把黑雲解讀為下雨的符號,黑煙看成是著火的符號等等。文字、聲音、圖片被人們用以承載意義,而不是它本身就是意義(即能指和所指)。所以對於不同的人來說,同一符號所象徵的符號可以完全不同。一個汽車可以同時是代步工具也可以是一種生活方式。

以計算機的角度來說,信息被看作成數據結構的方式來存儲,譬如一張預訂座位系統的表格。對於人來說分析這些信息便可以產生意義:哪些座位是空餘的,我是否要以此來預定等等。之所以要討論計算機符號學正是因為計算機的這種特性,也是我們沒有討論「汽車符號學」的原因。(說不定真有)

計算機符號建模

先說明一下這部分會有一些程式語言,並不是很復雜但是可以選擇性跳過。

反過來來說,理解符號學也可以更好地幫助我們設計和理解計算機系統和程式語言。例如程式語言中的「面向對象編程」概念。我們抽象的「類」概念具有一系列屬性和方法作為某種集合,我們操作的這些類、方法和屬性隱含了我們表述其行為的方式。舉書中的一個關於雇員的類的例子來說:

這個對象的變量和方法很容易被理解為:一個雇員有一個名字,住在一個地址,交了多少多少稅,這些信息組成了我們對雇員的描述和象徵,這個對象還要包含一個方法來展示自己的這些信息,比如:

這個方法里調用的”Print”方法名指代的類似現實中的列印,表示它的功能是把後面的數據顯示在螢幕上,在程式語言中往往大量涉及這種對已有方法的調用,通過組合這種已有方法,我們得到了一個復合的新方法。代表我是一個雇員的信息就在這個類被用不同的屬性和方法區分好了,在「生產」一個雇員時,只需要填入不同的信息一個雇員就「產生」了。對於計算機科學來說,這段代碼所代表的是一種抽象的數理結構,對雇員來說,這些東西象徵的是它區分於其他雇員所必須的信息。

在計算機科學中,一個棧代表的數據結構是僅能在表尾插入或刪除的線性表結構,我們很容易就能聯想到能對應上這種方式的東西。而超市里的排隊顯然是不能用這種結構來表示的。(你能想像一個時後到先得的隊伍麼)

《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

符號學所研究的意義不光不同人理解同一個符號不同,相同人在不同場合理解同一符號也會發生改變。在同一家公司中,「客戶」這個詞可以指「從公司訂購貨物的實體」,也可以指「交付貨物的地方」。理解不同含義也就是我們經常說的理解含義要結合上下文,這一點無論是一段文學還是一段代碼都是如此。讓一個再老練的程式設計師不看上下文去看自己以前的代碼都未必能理解其含義。正是由於這種特點,大部分現代程式語言的目標之一都是降低人們理解起來的難度(反過來的例子也有: 《A=B》:用糟糕程式語言來編程的優秀編程遊戲)。如果信息能夠幫助我們減少復雜性,我們必須能夠將其與情境的選擇聯系起來;否則它就不會對我們的決定產生影響。因此,理解一個新的符號需要把它與環境中現有的符號系統聯系起來。

我們人類和計算機標志一個東西的方式也大相逕庭。在視頻網站中,一個專用編號可以直接指向一個視頻,例如BV1E44y1N7QL,但人類是沒法這麼記憶的。人類只能記住它的標題或者投稿人或者圖像聲音片段,甚至可能是下面的某個評論。對於計算機中一個不唯一的編碼會引發bug,對人日常來說一個含糊不清的單詞或發聲可以引發理解錯誤(也可以變成諧音梗)。因為程式語言自身實現的問題,計算機語言也會人類本能理解存在大量差異的後果(程式語言中俗稱的坑),比如我最喜歡的Javascript笑話:

雖然一個數字和一個真值相加對人來說沒有任何意義,但因為Javascript實現方式的問題,這種「強行計算」可以實際給出你一個結果,像極了宇宙的終極答案是42。正是因為一段極其復雜難以理解的代碼無法被人理解,現代軟體工程中極度強調軟體的可讀性和與他人交流的重要性。

索緒爾VS皮爾斯

正如前文說的,符號學並不是一種理論框架統一的「科學」。相反,符號學有著種種理論框架。索緒爾和皮爾斯兩人都被認為是符號學的重要奠基人,然而他們的學術理論並不相同。皮爾斯不同於索緒爾關於所指和能指的二元符號模型。皮爾斯的三元符號模型為再現體、對象和解釋項。這里我就不展開敘述了,感興趣的朋友可以看B站UP PAPooSe製作的介紹視頻: 符號學入門(6):皮爾斯三元模型。這本書認為,兩種符號學在計算機符號學中都是有作用的,雖然皮爾斯的符號學被很多人認為很難用來分析和設計計算機模型。作者將兩者的差異認為根本性在於歐洲與美國的思維差異所導致。

皮爾斯符號學在計算機系統設計的嘗試之一是下圖的這種模型。程序文本是一個再現體(R),其對象(O)是執行序列,即機器操作的序列。有兩種不同的解釋項(I),即意向性解釋項和因果性解釋項。這也可以讓我們對計算機符號模型產生一種新的理解。程序文本通常是模糊的,因為它有兩個不同的對象和兩個不同的解釋者。程序的執行是程序文本的一個對象,因為程序文本必須在操作語義學和相應的編譯器的幫助下指定一組執行。

《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

皮爾斯符號學也可以構建出這種模型用以解釋程序文本,執行和用戶的關系:

《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

書中又舉了一個關於行動、(所使用的)工具、(被操作)材料的符號關系:

  • 如果工具不存在,行動就不可能存在(例如,沒有鋸木的工具就不可能鋸木)
  • 如果沒有它們可以轉換的材料,工具就不能存在(如果世界上沒有可以被鋸開的材料,鋸子就不能存在)
  • 反之亦然:我們可以有材料而沒有操縱材料的工具,也可以有工具而不使用它們
  • 具體的材料限制了可能的工具,而單個工具則限定了可以執行的可能的行動
  • 《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

    如果我們使用程式語言和面向對象來確定三者的關系就變成了:

    而對於材料和工具的限制也可以用程式語言表達出來(繼承材料的類)。我們在下面創造了一個名為紙的材料然後確定了操作它的工具是紙之後我們在定義畫畫這個行為:

    組織環境

    符號學依賴於組織環境(類似我前面提到的上下文),所以作者認為計算機系統設計要和這種組織環境聯系起來。作者這里給出了一張Ronald Stamper的信息系統層次理論和他的本體圖(theory of levels of information systems and his ontology charts ),用來描述信息系統的域。

    《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

    對於這個系統有一個具體的例子。比如我們要用程序實現一個EDI(電子數據交換)來實現自動訂購:訂單、購買和支付。需要說明的是里面的幾個屬於: Syntactics(句法學)研究的是符號與符號之間的制約關系, Semantics(語義學)研究的是符號與客觀世界之間的關系, Pragmatics(語用學)研究的是符號與符號闡釋者之間的關系。

    首先是所指(Signifier)層,包括物理世界(Physical world)、經驗主義(Empirics)和句法學(Syntactics)。首先我們要安裝硬體,通過網際網路將其連接起來(物理世界),之後我們要排查傳輸是否可靠,連結是否牢固,硬體能否正常工作等(經驗主義)再然後我們必須在兩台計算機之間確定一個兩台計算機之間的通信協議,也就是說:我們必須設計通信的正式語法(句法學)。

    做到這些後,然後我們來到能指(signified)層,包括語義學(Semantics)、語用學(Pragmatics )和社會世界(Social World)。我們必須就信息的含義達成一致:例如賣或買東西是什麼意思?什麼是客戶?什麼是付款?這些語義問題由通用標準來解決,如EDIFACT(一套商業文件交換的語法規則的結構、互動交流協議)。之後我們要讓買方和賣方的工作流程與新的電子市場匹配(語用學),最後,我們很想知道我們的組織會有什麼變化。隨之而來的變化。例如,更緊密的合作是否會使員工待遇問題和認同感(社會世界)。大家可以帶入一下現實中的電商。

    程序動態

    計算機系統就像電影一樣,時間和變化都是重要特徵。程序執行可以抽象為一系列狀態Σ = 。其中S1包含了輸入值,Sn則是輸出值。 Si,和Si+1的變化由程序文本所改變。

    程序文本可以定義為一個不同狀態的集合(可以是無限集合):{ Σ1… Σi…}。它們的共同特徵是由程序文本描述的,偏差則是由於不同的輸入。一個例子是電影的播放代碼:播放電影直到它結束:執行Idle(),直到state變量和MSMovieRunning變量不同。

    我們如何以符號學對待這段動態過程呢?皮爾斯符號學里,計算機系統的動態被視為邏輯過程。皮爾斯區分了三種邏輯過程分別是演繹、歸納和溯因( deduction, induction, and abduction )。演繹為我們從規則(Rule)和案例(Case)中得出結果(Result),歸納則是我們從情況和結果中提煉規則,溯因則是有一個規則和一個情況,而我們用假設結果是規則的一個情況來解釋它。溯因是一種有條件的猜測,是一種逆向推理。

    《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

    舉個例子:

    演繹:

  • 規則:這個袋子中的豆子都是白色的。
  • 情況:這些豆子來自這個袋子。
  • 結果:這些豆子是白色的
  • 歸納:

  • 情況:這些豆子來自這個袋子。
  • 結果:這些豆子是白色的。
  • 規則:這個袋子中的豆子都是白色的。
  • 溯因:

  • 規則:這個袋子中的豆子都是白色的。
  • 情況:這些豆子是白色的。
  • 結果:這些豆子來自這個袋子。
  • 一部分符號學家認為,符號學本身就是一種邏輯過程。表徵和對象的關聯是基於一種慣例,即一種規則。慣例,也就是一個規則。因此,如果我們知道這個慣例,例如,飛機在英語中可以被稱為「plane」(規則),而如果我們被呈現在詞「plane」(需要解釋的事實),我們就會用歸納法來歸納出說話者心中可能有一架飛機。關鍵是這個猜測可能是錯誤的,它真正的意思是「表面」。我們有時不僅要猜測對象,還要猜測規則,即解釋者。詩歌就屬於這種情況。

    因此,至少對於某些類型的應用來說,皮爾斯符號學包含的概念也可以被專門用來處理計算過程。然而,我們並不清楚是否所有的計算機應用都可以被視為推理系統。盡管標準的邏輯程式語言比(如Prolog)適合於某些目的,但程序性語言和功能語言(如LISP)在其他領域表現得更好,更容易使用。上面電影的例子中,其代碼規定,只要狀態等於MSMovieRunning,就必須執行就必須執行Idle()方法。因為它沒有阻止Idle()方法的執行,如果狀態不等於執行,而且由於其他對象即使狀態不等於MSMovieRunning也可以調用Idle()方法。因此while-loop的條件和執行動作形成了一個判斷,狀態決定行動。語言中我們也有類似的依賴關系,比如我們可以有名詞不說形容詞,但是不能說形容詞不說名詞。

    突變理論

    突變理論(Catastrophe theory)是一種數學理論,用以分析變化過程的間斷和突然轉換:相對於現行的連續的變化。例如細胞的分裂、大橋的崩塌、市場變化、企業倒閉、經濟危機。特點是過程連續但是結果不連續。這一理論意味著系統變化是由連續性和非連續性兩種變化模式來實現的。

    《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

    書中給出了一個突變理論的例子,在下圖中小球代表能指「她」,曲線為X^4(X的四次方)一開始小球落入左邊的最小值,接著我們改變勢能(perturbing the potential),小球雖然還在左邊最低點但是已經達到了臨界值,最後小球落入了右邊改變了狀態。這就是所謂的過程連續但是結果不連續。

    《計算機符號學理論》讀書筆記(一):什麼是計算機、符號學、和計算機符號學

    現在,假設諸如「孩子」和「成人」這樣的名詞位於X軸上,參數變化代表時間的流逝:我的女兒變老了。名詞在X軸上的位置代表主語-謂語句法。那麼這個點的突然跳動就代表了「她是一個孩子」和「她是一個成年人」這兩種意義的區別——我突然意識到我的女兒已經長大了,我必須改變我對她的態度,尤其是必須以不同的方式來描述她。

    諸如這樣子的例子說明,我們可以將某種數學公式與其含義與我們把握的意義相對應甚至計算。

    後記

    這本書由於我對符號學英文術語的不了解,看著還是比較費勁,程序和數學的那部分倒是很好理解。之前特別喜歡機核上看《GEB》和《Cybertext》的讀書筆記,對我來說有種用大白話過一遍大頭書的感覺,不過依舊難以避免因為這本書因為是一本學術討論書而且是符號學比例更重的會讓人有些難以理解。寫到這里其實是序章的部分,後面的部分有生之年繼續寫下去。

    參考&推薦:

    《Cybertext》讀書筆記(二):作品 如何獲得獨立於其創作者的意志 | 機核 GCORES

    集異璧之大成閱讀筆記及雜談(附錄四):語言與符號 | 機核 GCORES

    符號學與Stand Alone Complex | 機核 GCORES

    符號學 – 維基百科

    【CS公開課】電腦程式的構造和解釋(SICP)【中英字幕】【FoOTOo&HITPT&Learning-SICP】_嗶哩嗶哩_bilibili

    wtfjs – a little code blog about that language we love despite giving us so much to hate

    來源:機核