计算机器构造中的意象、物象和置象

作者: 陈凯

计算机器构造中的意象、物象和置象0

摘要:在海德格尔技术哲学视域下,计算机的算法可视为一种“集置”,算法涉及的指令流程、数据结构、程序语法等可能成为技术实现中先行摆置的存料,当人们针对特定现实问题构建一种可供自动化的计算机器运行的抽象描述的时候,因思维被集聚于物或虚拟物的特定规则体系中,便有可能被限制了创造的自由。本文提出,在算法教学中呈现出在自由的意象转换为具体的计算过程的抽象描述的过程中,存在着一种与原初的意象有所区别又尽可能在已有物象的基础上达成对原初意象的拟象的行为,提出可以借鉴海德格尔所说的对技术和物“泰然让之”的方法,来去除人对计算之物自身的遮蔽。

关键词:集置;枚举算法;鸡兔同笼

中图分类号:G434 文献标识码:A  论文编号:1674-2117(2023)23-0017-05

博尔赫斯在小说《特隆,乌克巴尔,奥比斯·特蒂乌斯》中,提到了某个虚拟世界叫作特隆,在这个世界中,语言没有名词,为了指称某个本该由名词指称的对象,就需要由动词或形容词的堆砌来让人产生相应的联想。例如,那里不说月亮,只说圆暗之上的空明,或者空灵柔和的橘黄,或者是任何其他合理的补充。正因为如此,对客观某物的指称就变得相当模糊且变幻莫测。小说内容中的诡异之处在于,“特隆”原本是纯粹虚构的产物——这里需要先认为读者会假设小说中的人物生活在真实世界中,但随着小说中人们对“特隆”了解的增加,它却开始逐渐和现实世界相融合。由于博尔赫斯晦涩的文风,读者在阅读过程中很难注意到现实和虚幻之间的明确界限,于是就让读者也真切地体验到了某种固定概念的消解。博尔赫斯的这个短篇故事常被归于讽刺小说而非幻想小说之列,它所讽刺的是人自身的思维的局限——“人类以自己的智慧创造了繁荣、和谐、有序的世界,想象不到另外存在着的与之不同的生活方式和思维习惯”。[1]这个小说给予笔者的启发是,人们沉浸在现代科技创造的世界中,因为周边的一切是如此自然而然,同时又被惯用的概念名词所束缚,反而难以将技术实现过程中特有的思维方式显现出来。

譬如,对于信息技术教师所熟知的,也是作为较基础的算法内容而教授的枚举算法,在教学中不妨考虑这样的问题:假设枚举算法的目标是在一系列数据中寻找并显示可被匹配的数据,那么,在思考流程图应当如何绘制或者代码应当如何编写时,思维就已经受到了枚举算法特有的工作流程、流程图规范、程序代码语法、特定数据结构等固有规则的限制。无论对于教师还是学生,“枚举”本身大概率是一个已被默认接受的概念,而不是一个有待被研究的问题——虽然有时在课堂里教师和学生们都可能假装自己并不知道问题的解决思路。设想一下,某教师为了讲授枚举算法而创设了某个情境——找出能够开门的所有钥匙也好,在被查询字符串中匹配特定字符串也好,列出所有低于某个价格的商品也好,总之诸如此类,笔者绝不相信中学阶段的学生还需要在教师的启发下去发现“可以用枚举”来解决问题这件事,学生们至多要在“枚举”定义的严谨性方面做一些额外的工作。再考虑这样的一种教学方案:教师告诉学生们枚举的定义,也告诉学生们变量和列表的用法、循环结构以及相关程序语句的用法,然后希望学生们通过自主探索的方式去构造出一个枚举算法,虽然有成功达成目的的学生,但不排除有学生会感觉不知所措,究其原因,并不是因为“枚举”是一种新的思维方法,而是“用变量作为一个列表中各个值的索引”等特有的思想方法,是学生们仅仅经历有限的算法学习后很难自主产生出来的,这就需要教师深刻地考虑算法教学中思维培养的途径。本文试着给出一种方法:为了使学生能够体验创造过程中的关键思维方式,需要首先将技术创造物自身给破除掉。

枚举算法的意象

思维空间中初始的想象应当是不受拘束的,如果让人用头脑想象出一种和计算机枚举类似的动画,可能会产生出怎样的场景?例如,在一个黑暗的背景中,有一个不断闪烁的光球,这个光球代表着正在进行枚举的计算机。周围散布着许多小点,代表着被枚举的具有各种不同特征的元素,如可以将小点分别设置为多种形状。光球不断闪烁,每次闪烁都会选择一个小点,然后将其吸收进光球中。随着时间的推移,光球会吸收越来越多的小点,直到找到一个合适的特征匹配对象。当光球找到与目标匹配的组合时,可以显示出光球与目标的合成过程,并显示光球的“满足”状态,如将其表现为一个更加明亮、更大的光球。光球吸取小球可以是完全随机的,也可以根据某种规则,如按距离从近到远来吸取。

上面的例子其实是人工智能给出的,笔者自己的想象是:一个到处游走的机器人在广场上四散的快递盒子中寻找自己主人的盒子,不过看上去似乎还是光球的方案更有艺术气息。但无论怎样,这一类想象和算法的初学者看到的利用枚举算法匹配某个发生变化的变量值,或匹配列表中各个元素值的意象差距甚远。这里将某种不受预设规则约束的计算过程的想象称为“意象”。

不同的意象提供了不同的解决问题的可能性,如为了给不同大小的圆盘排序,可以有多种不同的方法:一种方法是逐个选出最小的圆盘并在另一列依次进行摆放;一种是将圆盘摆成一行后再根据两个圆盘的大小决定是否要交换次序,这也是冒泡排序的思想方法;一种是将圆盘对准圆心的位置层叠起来并施加魔法使其变得透明(注意意象是不受约束的),于是瞬间排序就完成了。当然,还有其他很多种方法。

枚举算法的物象

如果要将头脑中的计算过程的意象用具体的物来实现,计算就会受到限制。当用流程图表达出一个枚举算法时,这个算法其实就已经被流程图以及所使用的数据结构(普通的变量或列表都是比较简单的数据结构)限制了。然而问题是,人们甚至很难发现限制的存在,其中很重要的原因是,“现代技术已经成为存在者生存的框架,人们在按照技术的先在框架生活……人无法游离在技术的‘集置’之外”。[2]这里的“集置(Ge-stell)”是海德格尔创设的名词,他这样说:“集置意味着那种摆置的聚集者,这种摆置摆置着人,也即促逼着人……集置咄咄逼人地把人拉扯到被认为是唯一的解蔽方式的订置之中。”[3]海德格尔的话并不容易理解,但其中的一层含义是,受益于现代技术的人,其思维方式也被现代技术限制,如当人们谈到算法时,联想到的大概率是流程图或伪代码,可以认为是受到了现代技术的摆置。

现在来看常用于枚举算法教学的“鸡兔同笼”问题,35只动物在脚总数为94的情况下,兔和鸡各有多少,解决问题的程序代码可能如下页图1所示。现在试着对程序代码用语言文字来描述工作过程:兔子的只数由0逐次增1直到35只,对于每种情况,匹配兔子脚和鸡脚总和为94的情况,并将匹配成功的兔子和鸡的数量显示出来。但实际上,上述描述仅就人的自由意象而言是存在一个多余的,那就是“兔子的只数由0逐次增1直到35只”的“逐次”,这种“逐次”只对于特定的这种(虽然也是目前大部分的)程序语言来说是必要的,对于人来说,完全可以用“对于鸡和兔子共35只的所有情况”来进行描述,对于某种具有并行计算能力的装置(如DNA计算机)来说,它的确是不需要按“逐次”的方式来运作的。因此,图1所示的鸡兔同笼的算法是依赖于某种运行这种算法的基础环境的,这里称这种基础环境为物象,物象的“物”既可能是一种实质的物,也可能是一种虚拟物,如变量和列表就是虚拟物。

再给出另一种思考角度:假设一个流程图是可以自动运行的,那么必然存在一个读取并执行流程图中指令并按流程图正确跳转的装置——虽然说这个装置本身并不显示在流程图中,于是就可以将这个执行装置和流程图的整体视作某种虚拟物来加以研究,可以发现,执行装置每次都只会出现在流程图的某一个区域,并严格按带箭头的线条路径行动,同时,它通常只在同一张流程图中运动(这也使得用流程图在表达递归时,较难反映出函数调用过程的“流”向)。这就是流程图作为一种“物”的特性。假设执行装置可以同时出现在流程的多个地方,那么如图2所示的解决鸡兔同笼问题的代码就可以用来在局部模拟出这种“同时性”,#1、#2、#3三句语句的次序是完全可以颠倒的。也就是说,可以创设一种算法,它能同时执行两句、三句乃至所有的指令(这种设想通过改造底层硬件是可以实现的),且都不会影响算法运行的效果。

对数据结构的使用也是如此,列表就是一种虚拟物,它的最大的特点是可以通过索引值读写元素。想象一下,如果列表的这种能力被剥夺,而人们永远只能在列表的首部进行操作,那么算法就会发生相应的变化(列表的行为会变得类似堆栈);如果人们能在列表的首部和尾部进行操作,那么算法又会发生相应的变化(列表的行为会变得类似队列)。使用索引值来枚举列表中每个元素的方法,只是在当前具有固有特性的列表物象基础上的方法,当人们习惯这种方法时,就会依赖这种方法,人们面对的是现代技术所营造的一种静态的图像,于是只能做小的改动而难以实现根本性的创新。因此,被剥夺了部分原有功能的物的集合,可能成为思维培养的环境。例如,教师不应当直接抛给学生列表或堆栈的概念,而应该将列表的特性破解掉,在新的物象的基础上让学生自主地去发现那种暂时没有获得特定名词称号的列表或堆栈。

枚举算法的置象

鸡兔同笼问题的解决有很多种方法,枚举的方法对仅有纸笔工具的人而言是一种很笨的方法,但重复性的工作对于计算机来说却是适合的。不过,仅仅因为这样的理由,就认为用枚举算法解决了鸡兔同笼问题能体现计算思维的运用是不可取的,这样的观点还是有待深入辨析的。例如,用Python的For循环来解决鸡兔同笼问题,就仿佛是将日常语言描述转换成了高级语言代码,For语句和If语句之间的逻辑关系,即便脱离算法环境也一样是适用的。也就是说,算法实现的描述基本上和头脑中的意象一致,不需要更多考虑机器自身也就是物的行为;如果不允许使用For而只能使用While语句,就需要小心地设定控制循环的变量的变化以及判断,需要思考的细节有所增加;如果不允许使用While而不得不使用goto语句,那么循环本身也不再具有一个标准的结构了,就需要更多考虑如何通过指令的跳转来实现一个循环。在这里,有一种直观的感受,工具越原始,解决问题需要的思维量也越多,这是因为人们不仅仅使用技术工具,还要对技术工具赋形。

考察已有的关于培养计算思维的算法教学案例,缺少对技术工具本身的探索(这当然有可能是因为课时的限制造成的)。一般来说,教师设计的和鸡兔同笼相关的教学活动可能是这样的,首先用列表法来尝试一一给出鸡和兔数量不同的各种情况,然后为了自动实现这种一一列举和匹配的重复性工作,设计循环结构的算法。[4-6]这里需要提出的问题是,列表的步骤何以必然导向给出循环结构算法的步骤?其原因很可能是教师自己熟知的就是这样的循环结构算法,若将循环结构的流程图或程序代码视作物,那么解决方法当然就是在这些物的基础上提出的,因而受益于同时也受限于物的特性。不妨想象一个仅有逻辑判断而无任何数学运算能力的计算物的环境,在其中应该如何解决鸡兔同笼的问题,一种可能的解决方案是用符号串的替换来模拟了数学运算,如图3所示。如果说算法体现出了一种计算机处理过程的“象”,那么这种“象”的形成既来源于思维中自由解决问题的意象,同时又和特定物的能力以及物的能力限制密切相关,在意象和物象双重影响下,计算过程的描述之象与原初的意象有所区别,又尽可能在物象的基础上达成对原初意象的拟象。为了指称这一过程,本文将这种“象”的形成过程和结果称为“置象”,这个词既可以是动词,强调“置”的过程,也可以是名词,强调“置”的结果。“置象”一词的由来虽然有着技术哲学的背景,但独断地创设名词或给予名词以新的含义,往往是不受欢迎的,在这里,其实更希望读者能由名词体会到其中“圆暗之上的空明”。

庄子认为伯乐治马是失败的,因为不遵循马的天性的各种治马方法导致马死者过半。在技术哲学的语境中,可认为伯乐所做的是技术对自然的一种促逼,这种促逼是对自然真理的一种解蔽,但也只是一种解蔽方式。庄子说:“有机械者必有机事,有机事者必有机心。机心存于胸中,则纯白不备,纯白不备,则神生不定;神生不定者,道之所不载也。”此论断出自丈人圃畦的故事,故事中的丈人明明有方便的灌溉工具而不用,并非排斥技术的迂腐,而是为了避免机心存于胸的一种修炼。庄子与海德格尔的思想产生出跨越时空的关联,海德格尔认为在现代技术促逼的解蔽中,本应该具有丰富性和差异性的事物及人自身被订造为无差别的功能性持存物,于是技术既是一种解蔽也同时遮蔽了解决问题的其他通达之路。关于避免技术危险的“诗意的栖居”则是一个过于宏大而难以在这里展开的话题,这里暂且只提海德格尔所说的“泰然让之”的方法,“庄子和海德格尔的论述有一个相似点,即人让物如其所是地存在。这意味着人让物从非自身走向自身。也就是说,‘泰然让之’去除了人对物自身的遮蔽,而遮蔽来源于庄子所谓的‘技’或者海德格尔所谓的‘技术’。在这两种遮蔽中,物要么是作为有用的材料而存在,要么是作为有用的工具而存在,但是其自身的存在隐而不显。‘泰然让之’的去蔽正好显现了物自身的存在,并且给予了物以自由自在”。[7]由此可以联想到,算法因实际功用而导致了其作为物自身的遮蔽,因此在需要让算法作为技术对象进入日常世界的同时,也要让它们保持在日常世界之外,也就是说,有必要在某些时候剥离算法被应用的真实情境而将其保持为一种自身为物的状态,这就是一种“泰然让之”,由此给人的创造自由留出空间。

参考文献:

[1]李若薇.试析《特隆,乌克巴尔,奥尔比斯·特蒂乌斯》[J].外国文学研究,2003(06):151-153.

[2]时盛杰.技术与遮蔽:海德格尔哲学视域下的算法技术[J].新媒体研究,2021,7(11):20-22.

[3]海德格尔.演讲与论文集[M].孙周兴,译.北京:生活·读书·新知三联书店,2005,10:7.

[4]刘琳琳.经典问题培养计算思维的阶段与方法研究[J].福建电脑,2020,36(12):97-99.

[5]刘付燕.面向计算思维培养的跨学段衔接教学实践探索——以“鸡兔同笼”问题解决为例[J].中小学信息技术教育,2022(09):14-16.

[6]仲轶宏.基于问题视角,提升思维素养——以“鸡兔同笼”问题为例[J].中国信息技术教育,2022(19):56-58.

[7]罗双.庄子与海德格尔共论“泰然让之”[J].湖北社会科学,2021(05):107-113.

经典小说推荐

杂志订阅