计算思维中的抽象是一种怎样的抽象

2023-10-08 03:29陈凯上海市位育中学
中国信息技术教育 2023年19期
关键词:大象计算机情境

陈凯 上海市位育中学

在头脑中想象有两头大象正缓慢而又庄严地走过,这似乎并不是什么特别困难的事情,然后,集中注意力,把内心的目光聚焦在大象的腿上,假设将大象迈出任意一侧的腿的动作视作1步,并幻想这样的场景,当一头大象迈出3步的时候,另一头大象恰好迈出4步,虽然步数不同,但它们经过的距离是一致的。

要精准地构想出上述场景,的确是有较大困难的,很多人甚至很难想象一头大象具体行走时腿的动作变化。相信随便观看一段大象行走的视频,都远胜于下面的文字解释,但这里还是尽量解释一下:大象先迈出某一侧后腿,当这一侧后腿看上去即将要踩到同一侧的前腿时—当然这并不会发生,前腿往前迈出,相隔很短的时间,这一侧后腿才着地,也就是说,在某一时刻,大象一侧的两条腿是腾空的,接着,这一侧前腿着地,以上称为1步,然后,就是换另一侧腿按同样动作前进。虽然花费了不少文字来描述,但总是不可能由这些文字精准地还原出大象行走的过程,语言文字的抽象难以完整地反映整个客观事实,只是提供了一些关键性特征的描述。

这里有一道简单的数学题:设有两只大象A和B,A大象迈出3步的距离与另一只B大象迈出4步的距离均为t,且走过t距离路程所消耗的时间也是一致的,问A大象迈出第n步时,B大象迈出了多少步?考虑A大象每一步的距离是t/3,n步的距离就是n*t/3,B大象每一步的距离是t/4,则可以看出B大象迈的步数是(n*t/3)/(t/4),公式可以进一步简化为n*(4/3),计算结果自然有可能存在小数,只要取整即可。在做数学题时,不用去考虑大象本身,也不用考虑大象行走的具体过程,这种提取出事物中数量关系并建立数学语言的表征的方法,显然就是一种数学上的抽象。这里的问题是,假设某人编写了一段程序,由用户输入变量值n,程序自动计算后得出并打印结果,这个过程中有没有体现出计算思维的抽象?

关于数学抽象,《普通高中数学课程标准(2017年版2020年修订)》指出:“数学是研究数量关系和空间形式的一门科学。数学源于对现实世界的抽象,基于抽象结构,通过符号运算、形式推理、模型构建等,理解和表达现实世界中事物的本质、关系和规律……数学抽象是指通过对数量关系与空间形式的抽象……获得数学概念和规则,提出数学命题和模型,形成数学方法与思想,认识数学结构与体系。”[1]我们可以从中很清晰地看出数学学科中抽象的对象、抽象的目标以及作为抽象结果的表征符号。除了数学,其他学科的方法中也涉及抽象,虽然说不同学科中“抽象”的含义本身是相同的,但抽象的对象和目标是不同的。以物理学科为例,关于物理学科的抽象,是“从物理学视角对客观事物的本质属性、内在规律及相互关系的认识方式,是基于经验事实建构物理模型的抽象概括过程”[2],“理想化模型来源于实际的事物,是将实际事物的某些物理性质或物理性质的变化在一定条件下理想化而得到的抽象”[3]。可以看出,虽然说数学和物理的抽象都面向现实世界,但数学关心的是数量关系和空间形式,数学模型可以超越现实、独立于真实的物理现实而存在(不妨想象一个物理现实与当前世界完全不同的异世界的数学定律是否和当前世界一致)。大卫·吕埃勒(David Ruelle)说:“数学自身构成一个有意义的、自然的结构。”[4]戈丁(LarsGarding)说:“为了理解周围的世界,人们总是把自己的观察及思想组织成概念的体系,我们把这些概念体系称为模型,数学模型在逻辑上是首尾一贯的……数学的对象显然是抽象的观念,逻辑是最后判断正误的标准。”[5]而物理学关心的是对自然界的最合理描述,也就是尼尔斯·玻尔(Niels Bohr)所说的“我们能对自然说些什么”。

●谈论计算思维的抽象需要锚定情境

关于数学或物理学的抽象,对于抽象的对象、目标以及作为抽象结果的表征符号,各家观点还是比较清晰和一致的。那么,计算思维的抽象到底有怎样的独特性?周以真教授倡导的培养计算思维的课程的一项目标是“像计算机科学家那样思考”,她认为“计算思维是利用计算机科学的基本概念,进行的问题解决、系统设计、人类行为理解等一系列涵盖计算机科学之广度的思维活动……像计算机科学家一样思考不仅仅意味着能够为计算机编程,它需要在多个抽象层次上进行思考”。[6]董荣胜认为“计算思维的重点在于计算机科学中的不同抽象层次的‘自动有效进行’”。[7]这些说法提示了抽象具有层次性,同时也存在让人困惑的地方,如数学问题的解决也往往需要在多个或不同的抽象层次上进行思考,所以说仅仅看“在多个抽象层次上进行思考”这一点,未必体现计算思维的特点。这里需要弄清楚的问题是,所谓的抽象层次到底是什么层次,抽象层次间的关系又可能是怎样的。

卢西亚诺·弗洛里迪(Luciano Floridi)给出过一个简单却值得深思的例子:“你询问一辆二手车的价格,得到的回复是5000,那么你是否能知道车的价格呢?”在不同语境下,是否能成功判断价格的情况有所不同,原因是数字后没有单位,在某些特定的语境下,数字的单位作为不必要的细节被舍弃掉了。而在更复杂的情况下,就需要在数字后加上单位,比如英镑,于是抽象的层次就发生了变化。[8]卢西亚诺·弗洛里迪认为,数字加上单位后到达了“正确的抽象层次”(笔者认为不加单位也不能视为错误的抽象层次,而是一种更加抽象的抽象),这个层次锚定了一个基于规则的、易于执行和控制的情境。这个例子的启发是,当谈论计算思维的抽象是什么的时候,需要问其锚定的是什么样的情境。

●大象漫步问题解决中的抽象

回到先前的问题,问当A大象迈出第n步时,B大象迈出了多少步?假设直接将原始的数学公式转换为Python程序代码来解决大象漫步的步数问题,程序因变量t未被赋值而无法运行,如图1所示。

图1

显然,变量t的值是多少,丝毫也不影响计算结果,但既然表达式中有t,计算机就会追问t到底是什么。为了解决这个问题,有两个办法,比较常见的是在列出表达式时就将t约掉,但这样其实就是人工地进行了公式的变换。另一个不太常见的办法是,随便给t赋一个值(只要不是零),程序就能正常运行了,如图2所示。这个例子其实显现出计算机科学中的一种抽象所对应的情境是如何使自动化过程能行。

图2

所以,从大象漫步问题的提出到数学公式的列出,这个过程主要体现数学上的抽象,而编写成可执行的程序语言,是对数学抽象层次上的又一次抽象。然而问题是,由于高级语言与日常及数学语言过于接近,所以当数学的表征符号和计算机的表征符号具有相当程度的相似性时,反而难以显著地体现出计算思维抽象的特点。来看这样的表述:“计算思维就是将所研究的问题抽象表示为形式化、程序化和机械化的对象,成为可以用于机器做批处理的对象,这种抽象也就是计算思维的精髓。”[9]将数学表达式转化为程序语言表达式,虽说的确也算是将问题抽象成为可以用于机器做批处理的对象,但这个过程中所做的主要是数学表征符号向程序语言表征符号的变换,那个机械化的对象本身是在场的,除此以外,我们在许多情况下还需要考虑那个机械化对象本身并不在场且等待着将要被构建成为具有实施批处理能力的机械(或虚拟的机械)的状况。这里试着举一个更容易理解的例子,借助枚举算法编写程序解决一个可以用枚举法来解决的问题,与综合运用循环结构、分支结构、变量等构建出一个枚举算法的程序来解决一个可以用枚举法来解决的问题,这两者抽象的对象和目标是不同的。

有很多来自基础教育阶段的一线教师对计算思维中抽象作用的看法是相似的(这里暂且将笔者的看法排除在外),如认为“学生根据老师的引导,把问题模型抽象成算法描述,然后形成程序达到自动化”[10]“把具体问题进行抽象,转换成计算机能够识别的符号或对象”。[11]值得一提的是,许憬对数学解题过程中的抽象与运用计算机解题过程中的抽象的区别做了比较详细的分析,关于计算机解题过程中的抽象,认为“在解决问题过程中,我们需要从事物的描述中梳理和抽象出可以控制执行的若干条规则,并且将这些规则转换成计算机可以理解的表达形式”。[12]不过与此形成对照的,是根据文献资料,来自一些大学教师关于计算思维中抽象的作用的讨论,往往集中在对计算机硬件或软件系统的构建上,如“抽象思维的本质是运用分析、判断、推理、比较等方式抽取事物本质或共性的思维。对计算机系统资源的抽象,使用户不必了解下层实现细节……”[13]“计算机系统的运行过程,将动态电子事件组合,用程序设计语言文本化表示,常见的各种形式化程序设计语言都是类似的抽象工具……”[14]“形式化表达有不同的层次……从外向内,从人向计算机,每一层次的形式化表达都可以向内层转换,每一层向内层的转换都需要经历抽象和形式化”。[15]可见,即便都提及计算思维的抽象,锚定的情境往往是不同的,情境之一是将现实问题抽象成以计算机系统可实现的方法,在现有的抽象层次上解决自动化问题,更关心的是计算机系统的能行的问题。情境之二是某个可执行计算的环境本身是需要等待被构建,计算系统本身是其他层次的软硬件系统抽象的结果,抽象层次本身的架构需要经历抽象和形式化的过程,其更关心的是如何使系统能行的问题。例如,一段含有乘法和除法的表达式可以是数学表达式在计算机程序语言环境中抽象的结果,同时,这个语言环境也是更底层更复杂的机器指令抽象的结果。笔者注意到,2010年7月在西安交通大学举办的首届“九校联盟(C9)计算机基础课程研讨会”发文提出,“计算机科学基础理论研究实际上是基于抽象级环境(如图灵机)的问题求解,计算机硬件体系的设计与研究则是一种指令级的问题求解,程序设计是基于语言级的问题求解活动,系统软件设计与应用软件设计则是一种系统级的问题求解……计算思维的本质特征是基于不同层次计算环境的问题求解……是基于计算模型(环境)和约束的问题求解”。[16]这其实就阐述了抽象具有多样性,某些问题的解决涉及抽象级环境本身架构的问题。这对基础教育阶段的计算思维培养的教学设计给出了一条值得关注的线索,不同层次抽象的共同情境是基于计算模型(环境)和约束的问题求解。

●约束问题设立的一种尝试

到目前为止,基础教育阶段的教学案例的资料在提及计算思维的抽象时,所引用的案例绝大部分都属于在现有的抽象层次上解决自动化问题,对抽象级环境本身架构的问题的讨论是相当有限的。为了让教学设计更能体现出计算思维方面的抽象能力的培养,可以从有意设定约束条件,改造抽象级环境入手,之所以是改造而不是直接利用某些知名的抽象级环境如图灵机,是为了便于学生能够借助已有的知识和能力实现相对平滑的迁移。仍然以大象漫步问题为例,给出一个不甚成熟的改造,规定学生在使用程序语言表达式时,不能运用乘法和除法运算,在这样受到限制的环境中,思考如何解决计算大象步数的问题。

解决的方法有很多种,如可以用加法和减法来模拟乘法和除法,如图3代码所示,或者直接用计数的办法对两头大象的步伐进行模拟,上页图4所示的代码给出了模拟大象步伐计数的计算方法,当然,也可以很方便地扩展代码使之成为可以任意设定大象步数的更一般性的解法,前者是对数学运算过程进行模拟,后者是对大象步伐行为本身进行模拟。两种方法都体现出形式化表达向内层转化的特点,被转化的结果可以进一步被封装成为抽象的模块,供高一层次的系统调用。

图3

图4

在现实情况中,基础教育阶段的学生很可能对计算机软硬件系统底层原理的认识不够深入,且较难领会诸多抽象的计算模型的运行原理,在这样的情况下,不仅可以要让学生体验特定抽象层次上的自动化的实现,还可以试着让学生体验在计算模型(环境)受约束的情境下,抽象层次本身架构的实现需要经历的抽象和形式化的过程,这可能是一个值得深入探索的方向。

猜你喜欢
大象计算机情境
不同情境中的水
计算机操作系统
创设情境 以说促写
基于计算机自然语言处理的机器翻译技术应用与简介
信息系统审计中计算机审计的应用
大象无形
认真的大象
护患情境会话
特定情境,感人至深
大象