一开始了解到这种理论是因为低多边形厌氧菌老师写的关于《Cybertext》的 读书笔记 中介绍了这一理论。我之前虽有学习过编程,也浅浅的了解过一些索绪尔和拉康的符号学。但还是第一次听到以符号学理论来理解计算机本质的方法。之后找来了这本由 Peter Bogh Andersen 写的《A Theory of Computer Semiotics》的电子版,决定学习一下也写一篇读书笔记。 我才疏学浅,难免会有学术性错误。欢迎各位补充和改正。
我们从名字应该不难看出,计算机符号学是一个典型的A学科与B学科的交叉学科(这种交叉学科看起来更像A × B而非A + B)。那么在思考这个学科是什么之前,我认为有必要先说符号学和计算机科学到底是什么。
首先是符号学,这门学科在我看过《 符号学 : 原理与推演 》里将其比喻为“文科中的数学”。在本书中一言以蔽之: 符号学是研究符号(sign)及其在社会中生活的科学。符号本身可以是任何东西(语言、图片、文学、动态图片、戏剧、身体语言等),它对人来说承载着不同的意义。将它比喻为“文科中的数学”其原因就在于符号学可以作为很多学科的理论基础,例如语言学与符号学的发展就密不可分,神学家用羔羊、蛇、十字架等作为象征来解读圣经,艺术家和艺术评论家经常用符号学来解读艺术作品,精神分析中拉康使用符号学作为理论基础,社会学家用它解读人们的生产和消费。值得一提的是,符号学并不是一门统一的“科学”,不同派系的符号学百家争鸣。重点在于人以符号作为把握意义的方式来研究。 什么是计算机科学也是个很有意思的话题,在《 SICP 》公开课(计算机程序的构造和解释)中,计算机科学被认为是一个极其糟糕的名字。因为本质上来说,计算机科学既非“科学”也不是真的关于“计算机”的。而且,几何学(Geometry)一开始命名是关于丈量土地的,而我们都知道现代几何学已经远远超出了这个范围。 计算机科学比起科学更像是一门艺术或者是工程,甚至更像“魔法”,我们所写的编程语言就像咒语(Spell),命令计算机中的“小精灵”达成我们的目的。计算机科学并不在于研究物质世界的客观规律而在于有效且高效的达成我们的目的。
计算机科学也并非“计算机”有关,就像物理学中并不只有粒子加速器,几何学并不只有使用测量仪器。从历史角度来说,Computer这个单词一开始甚至指代的并不是机器而是一种职业:专门从事计算工作的人。而我们都知道今天的计算机已经远超了数学运算能做的事,我们可以用它创造艺术可以用它交流想法。
所以计算机科学,不如说是一门关于关于“过程”和“控制”的学问,这种过程有时候被称为算法,使用数据来达成我们不同的目的,有的时候我们甚至没有任何目的,比如 康威生命游戏 ,我们只是想看看规则带来的结果。 计算机符号学的重点既是将计算机科学看为一种生产和操纵符号(这么想的话就更接近神秘学意义上的魔法了)。计算机不光可以处理已有的符号,它还可以通过操作产生新的符号。计算机科学中,结果是严格受到数理逻辑为基础的规则所影响的,但是作为人来说如何认知这些被生产出的符号始终是非规则性的。这几年经常有用机器学习制造的奇怪图片,它对计算机而言只是处理“图像”这一符号的结果,但在人看来计算机创造了“克味儿十足”难以言喻的东西。
需要说明的是,符号学并不能用来审视计算机科学和计算机的方方面面。它无法说明计算机到底是如何生产和操纵这些符号的,只有人可以用符号把握同时可以被计算和处理的符号才能被讨论,也就是所谓的“双重生活”。
符号并不是一个对象所有的特征,相反,它是解读这为它赋予的含义。例如我们已经会把黑云解读为下雨的符号,黑烟看成是着火的符号等等。文字、声音、图片被人们用以承载意义,而不是它本身就是意义(即 能指和所指 )。所以对于不同的人来说,同一符号所象征的符号可以完全不同。一个汽车可以同时是代步工具也可以是一种生活方式。 以计算机的角度来说,信息被看作成数据结构的方式来存储,譬如一张预订座位系统的表格。对于人来说分析这些信息便可以产生意义:哪些座位是空余的,我是否要以此来预定等等。之所以要讨论计算机符号学正是因为计算机的这种特性,也是我们没有讨论“汽车符号学”的原因。(说不定真有)
先说明一下这部分会有一些编程语言,并不是很复杂但是可以选择性跳过。
反过来来说,理解符号学也可以更好地帮助我们设计和理解计算机系统和编程语言。例如编程语言中的“面向对象编程”概念。我们抽象的“类”概念具有一系列属性和方法作为某种集合,我们操作的这些类、方法和属性隐含了我们表述其行为的方式。举书中的一个关于雇员的类的例子来说:
class Employee {
string Name, Address;
int WageType, TaxDeduction ;
int Accumulatedlncome;
virtual void Payment(int Amount){....}
}
这个对象的变量和方法很容易被理解为:一个雇员有一个名字,住在一个地址,交了多少多少税,这些信息组成了我们对雇员的描述和象征,这个对象还要包含一个方法来展示自己的这些信息,比如:
virtual void Display(){
Print(Name, 10, 20);
Print(Address, 11, 20);
Print(Accumulatedlncome, 12, 20)
}
这个方法里调用的"Print"方法名指代的类似现实中的打印,表示它的功能是把后面的数据显示在屏幕上,在编程语言中往往大量涉及这种对已有方法的调用,通过组合这种已有方法,我们得到了一个复合的新方法。代表我是一个雇员的信息就在这个类被用不同的属性和方法区分好了,在“生产”一个雇员时,只需要填入不同的信息一个雇员就“产生”了。对于计算机科学来说,这段代码所代表的是一种抽象的数理结构,对雇员来说,这些东西象征的是它区分于其他雇员所必须的信息。
在计算机科学中,一个栈代表的数据结构是仅能在表尾插入或删除的线性表结构,我们很容易就能联想到能对应上这种方式的东西。而超市里的排队显然是不能用这种结构来表示的。(你能想象一个时后到先得的队伍么)
符号学所研究的意义不光不同人理解同一个符号不同,相同人在不同场合理解同一符号也会发生改变。在同一家公司中,“客户”这个词可以指“从公司订购货物的实体”,也可以指“交付货物的地方”。理解不同含义也就是我们经常说的理解含义要结合上下文,这一点无论是一段文学还是一段代码都是如此。让一个再老练的程序员不看上下文去看自己以前的代码都未必能理解其含义。正是由于这种特点,大部分现代编程语言的目标之一都是降低人们理解起来的难度(反过来的例子也有: 《A=B》:用糟糕编程语言来编程的优秀编程游戏 )。如果信息能够帮助我们减少复杂性,我们必须能够将其与情境的选择联系起来;否则它就不会对我们的决定产生影响。因此,理解一个新的符号需要把它与环境中现有的符号系统联系起来。 我们人类和计算机标志一个东西的方式也大相径庭。在视频网站中,一个专用编号可以直接指向一个视频,例如BV1E44y1N7QL,但人类是没法这么记忆的。人类只能记住它的标题或者投稿人或者图像声音片段,甚至可能是下面的某个评论。对于计算机中一个不唯一的编码会引发bug,对人日常来说一个含糊不清的单词或发声可以引发理解错误(也可以变成谐音梗)。因为编程语言自身实现的问题,计算机语言也会人类本能理解存在大量差异的后果(编程语言中俗称的坑),比如我最喜欢的Javascript笑话:
(true + 1)=== 2;
(true + true) === 2;
虽然一个数字和一个真值相加对人来说没有任何意义,但因为Javascript实现方式的问题,这种“强行计算”可以实际给出你一个结果,像极了宇宙的终极答案是42。正是因为一段极其复杂难以理解的代码无法被人理解,现代软件工程中极度强调软件的可读性和与他人交流的重要性。
正如前文说的,符号学并不是一种理论框架统一的“科学”。相反,符号学有着种种理论框架。索绪尔和皮尔斯两人都被认为是符号学的重要奠基人,然而他们的学术理论并不相同。皮尔斯不同于索绪尔关于所指和能指的二元符号模型。皮尔斯的三元符号模型为再现体、对象和解释项。这里我就不展开叙述了,感兴趣的朋友可以看B站UP PAPooSe 制作的介绍视频: 符号学入门(6):皮尔斯三元模型 。这本书认为,两种符号学在计算机符号学中都是有作用的,虽然皮尔斯的符号学被很多人认为很难用来分析和设计计算机模型。作者将两者的差异认为根本性在于欧洲与美国的思维差异所导致。 皮尔斯符号学在计算机系统设计的尝试之一是下图的这种模型。程序文本是一个再现体(R),其对象(O)是执行序列,即机器操作的序列。有两种不同的解释项(I),即意向性解释项和因果性解释项。这也可以让我们对计算机符号模型产生一种新的理解。程序文本通常是模糊的,因为它有两个不同的对象和两个不同的解释者。程序的执行是程序文本的一个对象,因为程序文本必须在操作语义学和相应的编译器的帮助下指定一组执行。
皮尔斯符号学也可以构建出这种模型用以解释程序文本,执行和用户的关系:
书中又举了一个关于行动、(所使用的)工具、(被操作)材料的符号关系:
如果工具不存在,行动就不可能存在(例如,没有锯木的工具就不可能锯木)
如果没有它们可以转换的材料,工具就不能存在(如果世界上没有可以被锯开的材料,锯子就不能存在)
反之亦然:我们可以有材料而没有操纵材料的工具,也可以有工具而不使用它们
具体的材料限制了可能的工具,而单个工具则限定了可以执行的可能的行动
如果我们使用编程语言和面向对象来确定三者的关系就变成了:
class material {
class tool {
virtual void action;
}
}
而对于材料和工具的限制也可以用编程语言表达出来(继承材料的类)。我们在下面创造了一个名为纸的材料然后确定了操作它的工具是纸之后我们在定义画画这个行为:
class paper: material{
class pencil: tool{
virtual void action; // definition of drawing
}
}
class brush: tool {
virtual void action {
// definition of painting }
}
}
符号学依赖于组织环境(类似我前面提到的上下文),所以作者认为计算机系统设计要和这种组织环境联系起来。作者这里给出了一张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>。其中S1包含了输入值,Sn则是输出值。 Si,和Si+1的变化由程序文本所改变。
程序文本可以定义为一个不同状态的集合(可以是无限集合):{ Σ1... Σi...}。它们的共同特征是由程序文本描述的,偏差则是由于不同的输入。一个例子是电影的播放代码:播放电影直到它结束:执行 Idle (),直到 state 变量和 MSMovieRunning 变量不同。
Movie::PlayUntilEnd() {
while (state == MSMovieRunning) Idle();
}
我们如何以符号学对待这段动态过程呢?皮尔斯符号学里,计算机系统的动态被视为逻辑过程。皮尔斯区分了三种逻辑过程分别是演绎、归纳和溯因( 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》的读书笔记,对我来说有种用大白话过一遍大头书的感觉,不过依旧难以避免因为这本书因为是一本学术讨论书而且是符号学比例更重的会让人有些难以理解。写到这里其实是序章的部分,后面的部分有生之年继续写下去。
评论区
共 5 条评论热门最新